From ea3fa9b52ecb1526e3f5a96f99befc82e9b585c3 Mon Sep 17 00:00:00 2001 From: ineanto Date: Wed, 20 Nov 2024 20:22:47 +0100 Subject: [PATCH] feat: removed deadlock from reset/update, updated items/translations --- .../xyz/ineanto/nicko/anvil/AnvilManager.java | 10 ++++++---- .../nicko/appearance/AppearanceManager.java | 20 ++++++++++++------- .../gui/items/admin/cache/CacheEntryItem.java | 4 +++- .../admin/cache/InvalidateCacheItem.java | 2 ++ .../admin/check/PlayerInformationItem.java | 4 +++- .../gui/items/appearance/ChangeSkinItem.java | 6 +++++- .../nicko/gui/items/home/AdminAccessItem.java | 2 +- .../nicko/gui/items/home/RandomSkinItem.java | 8 ++++---- .../nicko/gui/items/home/ResetItem.java | 2 +- .../nicko/packet/InternalPacketSender.java | 2 +- src/main/resources/en.yml | 2 +- src/main/resources/fr.yml | 2 +- 12 files changed, 41 insertions(+), 23 deletions(-) diff --git a/src/main/java/xyz/ineanto/nicko/anvil/AnvilManager.java b/src/main/java/xyz/ineanto/nicko/anvil/AnvilManager.java index db7a7cd..7e6fc26 100644 --- a/src/main/java/xyz/ineanto/nicko/anvil/AnvilManager.java +++ b/src/main/java/xyz/ineanto/nicko/anvil/AnvilManager.java @@ -4,6 +4,7 @@ import net.kyori.adventure.text.Component; import net.wesjd.anvilgui.AnvilGUI; import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -11,8 +12,8 @@ import xyz.ineanto.nicko.Nicko; import xyz.ineanto.nicko.appearance.ActionResult; import xyz.ineanto.nicko.appearance.AppearanceManager; import xyz.ineanto.nicko.event.custom.PlayerDisguiseEvent; -import xyz.ineanto.nicko.language.PlayerLanguage; import xyz.ineanto.nicko.language.LanguageKey; +import xyz.ineanto.nicko.language.PlayerLanguage; import xyz.ineanto.nicko.mojang.MojangUtils; import xyz.ineanto.nicko.profile.NickoProfile; import xyz.ineanto.nicko.storage.PlayerDataStore; @@ -116,14 +117,15 @@ public class AnvilManager { final ActionResult actionResult = appearanceManager.update(skinChange, false); if (!actionResult.isError()) { - player.sendMessage(playerLanguage.translate(LanguageKey.Event.Appearance.Set.OK, true)); + player.sendMessage(playerLanguage.translateWithWhoosh(LanguageKey.Event.Appearance.Set.OK)); + player.playSound(player, Sound.BLOCK_WOODEN_BUTTON_CLICK_ON, 1, 1f); } else { player.sendMessage( - playerLanguage.translate( + playerLanguage.translateWithOops( LanguageKey.Event.Appearance.Set.ERROR, - true, playerLanguage.translate(actionResult.getErrorKey(), false) )); + player.playSound(player, Sound.BLOCK_ANVIL_PLACE, 0.5f, 1f); } return Collections.singletonList(AnvilGUI.ResponseAction.close()); } diff --git a/src/main/java/xyz/ineanto/nicko/appearance/AppearanceManager.java b/src/main/java/xyz/ineanto/nicko/appearance/AppearanceManager.java index c959219..465ccf7 100644 --- a/src/main/java/xyz/ineanto/nicko/appearance/AppearanceManager.java +++ b/src/main/java/xyz/ineanto/nicko/appearance/AppearanceManager.java @@ -24,7 +24,7 @@ public class AppearanceManager { this.packetSender = new InternalPacketSender(player, getNickoProfile()); } - public ActionResult reset() { + public ActionResult reset(boolean apply) { final NickoProfile profile = getNickoProfile(); final String defaultName = nameStore.getStoredName(player); @@ -32,13 +32,17 @@ public class AppearanceManager { profile.setSkin(defaultName); dataStore.getCache().cache(player.getUniqueId(), profile); - final ActionResult result = update(true, true); + if (apply) { + final ActionResult result = update(true, true); - profile.setName(null); - profile.setSkin(null); - dataStore.getCache().cache(player.getUniqueId(), profile); + profile.setName(null); + profile.setSkin(null); + dataStore.getCache().cache(player.getUniqueId(), profile); - return result; + return result; + } + + return ActionResult.ok(); } public ActionResult update(boolean skinChange, boolean reset) { @@ -47,7 +51,9 @@ public class AppearanceManager { final ActionResult result = packetSender.sendGameProfileUpdate(displayName, skinChange, reset); - if (result.isError()) { reset(); } + if (result.isError()) { + return reset(false); + } packetSender.sendEntityMetadataUpdate(); packetSender.sendTabListUpdate(displayName); diff --git a/src/main/java/xyz/ineanto/nicko/gui/items/admin/cache/CacheEntryItem.java b/src/main/java/xyz/ineanto/nicko/gui/items/admin/cache/CacheEntryItem.java index cdf7c90..e7207d2 100644 --- a/src/main/java/xyz/ineanto/nicko/gui/items/admin/cache/CacheEntryItem.java +++ b/src/main/java/xyz/ineanto/nicko/gui/items/admin/cache/CacheEntryItem.java @@ -2,6 +2,7 @@ package xyz.ineanto.nicko.gui.items.admin.cache; import net.kyori.adventure.text.Component; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; @@ -55,7 +56,8 @@ public class CacheEntryItem extends AsyncItem { @Override public void onConfirm() { final PlayerLanguage playerLanguage = new PlayerLanguage(player); - player.sendMessage(playerLanguage.translateWithWhoosh(LanguageKey.Event.Admin.Cache.INVALIDATE_ENTRY, name)); + player.sendMessage(playerLanguage.translate(LanguageKey.Event.Admin.Cache.INVALIDATE_ENTRY, true, name)); + player.playSound(player, Sound.BLOCK_WOODEN_BUTTON_CLICK_ON, 1, 1f); mojangAPI.eraseFromCache(uuid); } diff --git a/src/main/java/xyz/ineanto/nicko/gui/items/admin/cache/InvalidateCacheItem.java b/src/main/java/xyz/ineanto/nicko/gui/items/admin/cache/InvalidateCacheItem.java index 55ffbf9..be4a0ac 100644 --- a/src/main/java/xyz/ineanto/nicko/gui/items/admin/cache/InvalidateCacheItem.java +++ b/src/main/java/xyz/ineanto/nicko/gui/items/admin/cache/InvalidateCacheItem.java @@ -1,6 +1,7 @@ package xyz.ineanto.nicko.gui.items.admin.cache; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import xyz.ineanto.nicko.Nicko; @@ -28,6 +29,7 @@ public class InvalidateCacheItem { final Player player = click.getPlayer(); final PlayerLanguage playerLanguage = new PlayerLanguage(player); player.sendMessage(playerLanguage.translateWithWhoosh(LanguageKey.Event.Admin.Cache.INVALIDATE_CACHE)); + player.playSound(player, Sound.BLOCK_WOODEN_BUTTON_CLICK_ON, 1, 1f); Nicko.getInstance().getMojangAPI().getSkinCache().invalidateAll(); return true; } diff --git a/src/main/java/xyz/ineanto/nicko/gui/items/admin/check/PlayerInformationItem.java b/src/main/java/xyz/ineanto/nicko/gui/items/admin/check/PlayerInformationItem.java index a439944..ff0a506 100644 --- a/src/main/java/xyz/ineanto/nicko/gui/items/admin/check/PlayerInformationItem.java +++ b/src/main/java/xyz/ineanto/nicko/gui/items/admin/check/PlayerInformationItem.java @@ -2,6 +2,7 @@ package xyz.ineanto.nicko.gui.items.admin.check; import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; @@ -77,7 +78,8 @@ public class PlayerInformationItem extends AsyncItem { @Override public void onConfirm() { final AppearanceManager appearanceManager = new AppearanceManager(target); - appearanceManager.reset(); + appearanceManager.reset(true); + player.playSound(player, Sound.ENTITY_VILLAGER_TRADE, 1, 1f); player.sendMessage(playerLanguage.translate(LanguageKey.Event.Admin.Check.REMOVE_SKIN, true, target.getName())); } diff --git a/src/main/java/xyz/ineanto/nicko/gui/items/appearance/ChangeSkinItem.java b/src/main/java/xyz/ineanto/nicko/gui/items/appearance/ChangeSkinItem.java index e334b7f..8753fff 100644 --- a/src/main/java/xyz/ineanto/nicko/gui/items/appearance/ChangeSkinItem.java +++ b/src/main/java/xyz/ineanto/nicko/gui/items/appearance/ChangeSkinItem.java @@ -3,9 +3,11 @@ package xyz.ineanto.nicko.gui.items.appearance; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; +import xyz.ineanto.nicko.Nicko; import xyz.ineanto.nicko.anvil.AnvilManager; import xyz.ineanto.nicko.language.LanguageKey; import xyz.ineanto.nicko.language.PlayerLanguage; +import xyz.ineanto.nicko.storage.name.PlayerNameStore; import xyz.xenondevs.invui.item.builder.AbstractItemBuilder; import xyz.xenondevs.invui.item.builder.ItemBuilder; import xyz.xenondevs.invui.item.builder.SkullBuilder; @@ -16,10 +18,12 @@ import java.io.IOException; public class ChangeSkinItem { private final PlayerLanguage playerLanguage; + private final PlayerNameStore playerNameStore; private final Player player; public ChangeSkinItem(Player player) { this.playerLanguage = new PlayerLanguage(player); + this.playerNameStore = Nicko.getInstance().getNameStore(); this.player = player; } @@ -28,7 +32,7 @@ public class ChangeSkinItem { AbstractItemBuilder builder; try { - builder = new SkullBuilder(player.getName()); + builder = new SkullBuilder(playerNameStore.getStoredName(player)); } catch (MojangApiUtils.MojangApiException | IOException e) { builder = new ItemBuilder(Material.PLAYER_HEAD); } diff --git a/src/main/java/xyz/ineanto/nicko/gui/items/home/AdminAccessItem.java b/src/main/java/xyz/ineanto/nicko/gui/items/home/AdminAccessItem.java index 107db6f..3510058 100644 --- a/src/main/java/xyz/ineanto/nicko/gui/items/home/AdminAccessItem.java +++ b/src/main/java/xyz/ineanto/nicko/gui/items/home/AdminAccessItem.java @@ -18,7 +18,7 @@ public class AdminAccessItem { public SuppliedItem get() { return new SuppliedItem(() -> { - final ItemBuilder builder = new ItemBuilder(Material.SCAFFOLDING); + final ItemBuilder builder = new ItemBuilder(Material.COMMAND_BLOCK); return playerLanguage.translateItem(builder, LanguageKey.GUI.Home.ADMIN); }, click -> { final ClickType clickType = click.getClickType(); diff --git a/src/main/java/xyz/ineanto/nicko/gui/items/home/RandomSkinItem.java b/src/main/java/xyz/ineanto/nicko/gui/items/home/RandomSkinItem.java index 9753c3c..d15cee5 100644 --- a/src/main/java/xyz/ineanto/nicko/gui/items/home/RandomSkinItem.java +++ b/src/main/java/xyz/ineanto/nicko/gui/items/home/RandomSkinItem.java @@ -25,7 +25,7 @@ public class RandomSkinItem { public SuppliedItem get() { return new SuppliedItem(() -> { - final ItemBuilder builder = new ItemBuilder(Material.SPAWNER); + final ItemBuilder builder = new ItemBuilder(Material.WIND_CHARGE); return playerLanguage.translateItem(builder, LanguageKey.GUI.Home.RANDOM_SKIN); }, (event) -> { final Player player = event.getPlayer(); @@ -42,14 +42,14 @@ public class RandomSkinItem { final AppearanceManager appearanceManager = new AppearanceManager(player); final ActionResult result = appearanceManager.update(true, false); if (!result.isError()) { - player.sendMessage(playerLanguage.translate(LanguageKey.Event.Appearance.Set.OK, true)); + player.sendMessage(playerLanguage.translateWithWhoosh(LanguageKey.Event.Appearance.Set.OK)); } else { - player.sendMessage(playerLanguage.translate( + player.sendMessage(playerLanguage.translateWithOops( LanguageKey.Event.Appearance.Set.ERROR, - true, playerLanguage.translate(result.getErrorKey(), false) ) ); + appearanceManager.reset(false); } }); return true; diff --git a/src/main/java/xyz/ineanto/nicko/gui/items/home/ResetItem.java b/src/main/java/xyz/ineanto/nicko/gui/items/home/ResetItem.java index 2e8fb1c..2903caf 100644 --- a/src/main/java/xyz/ineanto/nicko/gui/items/home/ResetItem.java +++ b/src/main/java/xyz/ineanto/nicko/gui/items/home/ResetItem.java @@ -36,7 +36,7 @@ public class ResetItem { } final AppearanceManager appearanceManager = new AppearanceManager(player); - if (!appearanceManager.reset().isError()) { + if (!appearanceManager.reset(true).isError()) { player.sendMessage(playerLanguage.translateWithWhoosh(LanguageKey.Event.Appearance.Remove.OK)); } else { player.sendMessage(playerLanguage.translateWithOops(LanguageKey.Event.Appearance.Remove.ERROR)); diff --git a/src/main/java/xyz/ineanto/nicko/packet/InternalPacketSender.java b/src/main/java/xyz/ineanto/nicko/packet/InternalPacketSender.java index 6af2f67..5626bab 100644 --- a/src/main/java/xyz/ineanto/nicko/packet/InternalPacketSender.java +++ b/src/main/java/xyz/ineanto/nicko/packet/InternalPacketSender.java @@ -73,7 +73,7 @@ public class InternalPacketSender implements PacketSender { @Override public ActionResult sendGameProfileUpdate(String name, boolean skinChange, boolean reset) { - final GameProfile gameProfile = ((CraftPlayer) player).getProfile(); + final GameProfile gameProfile = new GameProfile(player.getUniqueId(), name); // TODO (Ineanto, 31/10/2024): Could this be refactored to get rid of the boolean? if (skinChange) { diff --git a/src/main/resources/en.yml b/src/main/resources/en.yml index a31e7b4..887ebce 100644 --- a/src/main/resources/en.yml +++ b/src/main/resources/en.yml @@ -94,7 +94,7 @@ gui: change_both: name: "Change both" random_skin: - name: "Get a random appearance!" + name: "I feel lucky!" reset: name: "Reset appearance" lore: diff --git a/src/main/resources/fr.yml b/src/main/resources/fr.yml index a17c532..eb92b7b 100644 --- a/src/main/resources/fr.yml +++ b/src/main/resources/fr.yml @@ -95,7 +95,7 @@ gui: change_both: name: "Changer les deux" random_skin: - name: "Obtenir une apparence aléatoire !" + name: "Je me sens chanceux !" reset: name: "Réinitialiser l'apparence" lore: