feat: removed deadlock from reset/update, updated items/translations

This commit is contained in:
ineanto 2024-11-20 20:22:47 +01:00
parent a1919caa2a
commit ea3fa9b52e
Signed by: ineanto
GPG key ID: E511F9CAA2F9CE84
12 changed files with 41 additions and 23 deletions

View file

@ -4,6 +4,7 @@ import net.kyori.adventure.text.Component;
import net.wesjd.anvilgui.AnvilGUI; import net.wesjd.anvilgui.AnvilGUI;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; 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.ActionResult;
import xyz.ineanto.nicko.appearance.AppearanceManager; import xyz.ineanto.nicko.appearance.AppearanceManager;
import xyz.ineanto.nicko.event.custom.PlayerDisguiseEvent; import xyz.ineanto.nicko.event.custom.PlayerDisguiseEvent;
import xyz.ineanto.nicko.language.PlayerLanguage;
import xyz.ineanto.nicko.language.LanguageKey; import xyz.ineanto.nicko.language.LanguageKey;
import xyz.ineanto.nicko.language.PlayerLanguage;
import xyz.ineanto.nicko.mojang.MojangUtils; import xyz.ineanto.nicko.mojang.MojangUtils;
import xyz.ineanto.nicko.profile.NickoProfile; import xyz.ineanto.nicko.profile.NickoProfile;
import xyz.ineanto.nicko.storage.PlayerDataStore; import xyz.ineanto.nicko.storage.PlayerDataStore;
@ -116,14 +117,15 @@ public class AnvilManager {
final ActionResult actionResult = appearanceManager.update(skinChange, false); final ActionResult actionResult = appearanceManager.update(skinChange, false);
if (!actionResult.isError()) { 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 { } else {
player.sendMessage( player.sendMessage(
playerLanguage.translate( playerLanguage.translateWithOops(
LanguageKey.Event.Appearance.Set.ERROR, LanguageKey.Event.Appearance.Set.ERROR,
true,
playerLanguage.translate(actionResult.getErrorKey(), false) playerLanguage.translate(actionResult.getErrorKey(), false)
)); ));
player.playSound(player, Sound.BLOCK_ANVIL_PLACE, 0.5f, 1f);
} }
return Collections.singletonList(AnvilGUI.ResponseAction.close()); return Collections.singletonList(AnvilGUI.ResponseAction.close());
} }

View file

@ -24,7 +24,7 @@ public class AppearanceManager {
this.packetSender = new InternalPacketSender(player, getNickoProfile()); this.packetSender = new InternalPacketSender(player, getNickoProfile());
} }
public ActionResult reset() { public ActionResult reset(boolean apply) {
final NickoProfile profile = getNickoProfile(); final NickoProfile profile = getNickoProfile();
final String defaultName = nameStore.getStoredName(player); final String defaultName = nameStore.getStoredName(player);
@ -32,13 +32,17 @@ public class AppearanceManager {
profile.setSkin(defaultName); profile.setSkin(defaultName);
dataStore.getCache().cache(player.getUniqueId(), profile); dataStore.getCache().cache(player.getUniqueId(), profile);
final ActionResult result = update(true, true); if (apply) {
final ActionResult result = update(true, true);
profile.setName(null); profile.setName(null);
profile.setSkin(null); profile.setSkin(null);
dataStore.getCache().cache(player.getUniqueId(), profile); dataStore.getCache().cache(player.getUniqueId(), profile);
return result; return result;
}
return ActionResult.ok();
} }
public ActionResult update(boolean skinChange, boolean reset) { public ActionResult update(boolean skinChange, boolean reset) {
@ -47,7 +51,9 @@ public class AppearanceManager {
final ActionResult result = packetSender.sendGameProfileUpdate(displayName, skinChange, reset); final ActionResult result = packetSender.sendGameProfileUpdate(displayName, skinChange, reset);
if (result.isError()) { reset(); } if (result.isError()) {
return reset(false);
}
packetSender.sendEntityMetadataUpdate(); packetSender.sendEntityMetadataUpdate();
packetSender.sendTabListUpdate(displayName); packetSender.sendTabListUpdate(displayName);

View file

@ -2,6 +2,7 @@ package xyz.ineanto.nicko.gui.items.admin.cache;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
@ -55,7 +56,8 @@ public class CacheEntryItem extends AsyncItem {
@Override @Override
public void onConfirm() { public void onConfirm() {
final PlayerLanguage playerLanguage = new PlayerLanguage(player); 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); mojangAPI.eraseFromCache(uuid);
} }

View file

@ -1,6 +1,7 @@
package xyz.ineanto.nicko.gui.items.admin.cache; package xyz.ineanto.nicko.gui.items.admin.cache;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
import xyz.ineanto.nicko.Nicko; import xyz.ineanto.nicko.Nicko;
@ -28,6 +29,7 @@ public class InvalidateCacheItem {
final Player player = click.getPlayer(); final Player player = click.getPlayer();
final PlayerLanguage playerLanguage = new PlayerLanguage(player); final PlayerLanguage playerLanguage = new PlayerLanguage(player);
player.sendMessage(playerLanguage.translateWithWhoosh(LanguageKey.Event.Admin.Cache.INVALIDATE_CACHE)); 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(); Nicko.getInstance().getMojangAPI().getSkinCache().invalidateAll();
return true; return true;
} }

View file

@ -2,6 +2,7 @@ package xyz.ineanto.nicko.gui.items.admin.check;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
@ -77,7 +78,8 @@ public class PlayerInformationItem extends AsyncItem {
@Override @Override
public void onConfirm() { public void onConfirm() {
final AppearanceManager appearanceManager = new AppearanceManager(target); 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())); player.sendMessage(playerLanguage.translate(LanguageKey.Event.Admin.Check.REMOVE_SKIN, true, target.getName()));
} }

View file

@ -3,9 +3,11 @@ package xyz.ineanto.nicko.gui.items.appearance;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
import xyz.ineanto.nicko.Nicko;
import xyz.ineanto.nicko.anvil.AnvilManager; import xyz.ineanto.nicko.anvil.AnvilManager;
import xyz.ineanto.nicko.language.LanguageKey; import xyz.ineanto.nicko.language.LanguageKey;
import xyz.ineanto.nicko.language.PlayerLanguage; 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.AbstractItemBuilder;
import xyz.xenondevs.invui.item.builder.ItemBuilder; import xyz.xenondevs.invui.item.builder.ItemBuilder;
import xyz.xenondevs.invui.item.builder.SkullBuilder; import xyz.xenondevs.invui.item.builder.SkullBuilder;
@ -16,10 +18,12 @@ import java.io.IOException;
public class ChangeSkinItem { public class ChangeSkinItem {
private final PlayerLanguage playerLanguage; private final PlayerLanguage playerLanguage;
private final PlayerNameStore playerNameStore;
private final Player player; private final Player player;
public ChangeSkinItem(Player player) { public ChangeSkinItem(Player player) {
this.playerLanguage = new PlayerLanguage(player); this.playerLanguage = new PlayerLanguage(player);
this.playerNameStore = Nicko.getInstance().getNameStore();
this.player = player; this.player = player;
} }
@ -28,7 +32,7 @@ public class ChangeSkinItem {
AbstractItemBuilder<?> builder; AbstractItemBuilder<?> builder;
try { try {
builder = new SkullBuilder(player.getName()); builder = new SkullBuilder(playerNameStore.getStoredName(player));
} catch (MojangApiUtils.MojangApiException | IOException e) { } catch (MojangApiUtils.MojangApiException | IOException e) {
builder = new ItemBuilder(Material.PLAYER_HEAD); builder = new ItemBuilder(Material.PLAYER_HEAD);
} }

View file

@ -18,7 +18,7 @@ public class AdminAccessItem {
public SuppliedItem get() { public SuppliedItem get() {
return new SuppliedItem(() -> { 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); return playerLanguage.translateItem(builder, LanguageKey.GUI.Home.ADMIN);
}, click -> { }, click -> {
final ClickType clickType = click.getClickType(); final ClickType clickType = click.getClickType();

View file

@ -25,7 +25,7 @@ public class RandomSkinItem {
public SuppliedItem get() { public SuppliedItem get() {
return new SuppliedItem(() -> { 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); return playerLanguage.translateItem(builder, LanguageKey.GUI.Home.RANDOM_SKIN);
}, (event) -> { }, (event) -> {
final Player player = event.getPlayer(); final Player player = event.getPlayer();
@ -42,14 +42,14 @@ public class RandomSkinItem {
final AppearanceManager appearanceManager = new AppearanceManager(player); final AppearanceManager appearanceManager = new AppearanceManager(player);
final ActionResult result = appearanceManager.update(true, false); final ActionResult result = appearanceManager.update(true, false);
if (!result.isError()) { if (!result.isError()) {
player.sendMessage(playerLanguage.translate(LanguageKey.Event.Appearance.Set.OK, true)); player.sendMessage(playerLanguage.translateWithWhoosh(LanguageKey.Event.Appearance.Set.OK));
} else { } else {
player.sendMessage(playerLanguage.translate( player.sendMessage(playerLanguage.translateWithOops(
LanguageKey.Event.Appearance.Set.ERROR, LanguageKey.Event.Appearance.Set.ERROR,
true,
playerLanguage.translate(result.getErrorKey(), false) playerLanguage.translate(result.getErrorKey(), false)
) )
); );
appearanceManager.reset(false);
} }
}); });
return true; return true;

View file

@ -36,7 +36,7 @@ public class ResetItem {
} }
final AppearanceManager appearanceManager = new AppearanceManager(player); final AppearanceManager appearanceManager = new AppearanceManager(player);
if (!appearanceManager.reset().isError()) { if (!appearanceManager.reset(true).isError()) {
player.sendMessage(playerLanguage.translateWithWhoosh(LanguageKey.Event.Appearance.Remove.OK)); player.sendMessage(playerLanguage.translateWithWhoosh(LanguageKey.Event.Appearance.Remove.OK));
} else { } else {
player.sendMessage(playerLanguage.translateWithOops(LanguageKey.Event.Appearance.Remove.ERROR)); player.sendMessage(playerLanguage.translateWithOops(LanguageKey.Event.Appearance.Remove.ERROR));

View file

@ -73,7 +73,7 @@ public class InternalPacketSender implements PacketSender {
@Override @Override
public ActionResult sendGameProfileUpdate(String name, boolean skinChange, boolean reset) { 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? // TODO (Ineanto, 31/10/2024): Could this be refactored to get rid of the boolean?
if (skinChange) { if (skinChange) {

View file

@ -94,7 +94,7 @@ gui:
change_both: change_both:
name: "Change <gold>both</gold>" name: "Change <gold>both</gold>"
random_skin: random_skin:
name: "<rainbow>Get a random appearance!</rainbow>" name: "<bold>I feel <gold>lucky!</gold></bold>"
reset: reset:
name: "Reset appearance" name: "Reset appearance"
lore: lore:

View file

@ -95,7 +95,7 @@ gui:
change_both: change_both:
name: "Changer les <gold>deux</gold>" name: "Changer les <gold>deux</gold>"
random_skin: random_skin:
name: "<rainbow>Obtenir une apparence aléatoire !</rainbow>" name: "<bold>Je me sens <gold>chanceux !</gold></bold>"
reset: reset:
name: "Réinitialiser l'apparence" name: "Réinitialiser l'apparence"
lore: lore: