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: