diff --git a/pom.xml b/pom.xml index 51f50e4..3ad828b 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ xyz.ineanto nicko - 1.0.3-RC1 + 1.0.4-RC1 Nicko diff --git a/src/main/java/xyz/ineanto/nicko/event/PlayerQuitListener.java b/src/main/java/xyz/ineanto/nicko/event/PlayerQuitListener.java index 8c5647d..c0c232f 100644 --- a/src/main/java/xyz/ineanto/nicko/event/PlayerQuitListener.java +++ b/src/main/java/xyz/ineanto/nicko/event/PlayerQuitListener.java @@ -1,11 +1,11 @@ package xyz.ineanto.nicko.event; -import xyz.ineanto.nicko.NickoBukkit; -import xyz.ineanto.nicko.appearance.ActionResult; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerQuitEvent; +import xyz.ineanto.nicko.NickoBukkit; +import xyz.ineanto.nicko.appearance.ActionResult; public class PlayerQuitListener implements Listener { @EventHandler diff --git a/src/main/java/xyz/ineanto/nicko/gui/PlayerCheckGUI.java b/src/main/java/xyz/ineanto/nicko/gui/PlayerCheckGUI.java index 4775213..f59616d 100644 --- a/src/main/java/xyz/ineanto/nicko/gui/PlayerCheckGUI.java +++ b/src/main/java/xyz/ineanto/nicko/gui/PlayerCheckGUI.java @@ -29,7 +29,7 @@ public class PlayerCheckGUI { final List items = Bukkit.getOnlinePlayers().stream() .map(Entity::getUniqueId) - .map(uuid -> new PlayerInformationItem(i18n, uuid)) + .map(uuid -> new PlayerInformationItem(i18n, Bukkit.getPlayer(uuid))) .collect(Collectors.toList()); final AdminGUI parent = new AdminGUI(player); 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 429fa1b..a3abfa6 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 @@ -1,14 +1,19 @@ package xyz.ineanto.nicko.gui.items.admin.check; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; import xyz.ineanto.nicko.NickoBukkit; +import xyz.ineanto.nicko.appearance.AppearanceManager; +import xyz.ineanto.nicko.gui.ChoiceGUI; +import xyz.ineanto.nicko.gui.PlayerCheckGUI; import xyz.ineanto.nicko.gui.items.ItemDefaults; +import xyz.ineanto.nicko.gui.items.common.choice.ChoiceCallback; import xyz.ineanto.nicko.i18n.I18N; import xyz.ineanto.nicko.i18n.I18NDict; import xyz.ineanto.nicko.profile.NickoProfile; -import xyz.ineanto.nicko.storage.PlayerDataStore; import xyz.xenondevs.invui.item.builder.ItemBuilder; import xyz.xenondevs.invui.item.builder.SkullBuilder; import xyz.xenondevs.invui.item.impl.AsyncItem; @@ -17,35 +22,61 @@ import xyz.xenondevs.invui.util.MojangApiUtils; import java.io.IOException; import java.util.Optional; -import java.util.UUID; public class PlayerInformationItem extends AsyncItem { - public PlayerInformationItem(I18N i18n, UUID uuid) { + private final Player target; + private final NickoProfile profile; + + public PlayerInformationItem(I18N i18n, Player target) { super(new SuppliedItem(() -> { final ItemBuilder builder = new ItemBuilder(Material.PAINTING); return i18n.translateItem(builder, I18NDict.GUI.LOADING); }, (click -> true)).getItemProvider(), () -> { - final Player player = Bukkit.getPlayer(uuid); try { - final SkullBuilder skull = new SkullBuilder(uuid); - final PlayerDataStore dataStore = NickoBukkit.getInstance().getDataStore(); - final Optional optionalProfile = dataStore.getData(uuid); + final SkullBuilder skull = new SkullBuilder(target.getUniqueId()); + final Optional optionalProfile = NickoBukkit.getInstance().getDataStore().getData(target.getUniqueId()); if (optionalProfile.isPresent()) { final NickoProfile profile = optionalProfile.get(); return i18n.translateItem(skull, I18NDict.GUI.Admin.CHECK, - player.getName(), + target.getName(), (profile.hasData() ? "§a✔" : "§c❌"), (profile.getName() == null ? "§7N/A" : profile.getName()), (profile.getSkin() == null ? "§7N/A" : profile.getSkin())); } } catch (MojangApiUtils.MojangApiException | IOException e) { - NickoBukkit.getInstance().getLogger().severe("Unable to get head for specified UUID ( " + uuid + ")! (GUI/PlayerCheck)"); + NickoBukkit.getInstance().getLogger().severe("Unable to get head for specified UUID ( " + target.getUniqueId() + ")! (GUI/PlayerCheck)"); } return ItemDefaults.getErrorSkullItem(i18n, I18NDict.GUI.Admin.CHECK, - "§4???", "§cN/A", "§cN/A", "§cN/A" + "§c§l?!?", "§cN/A", "§cN/A", "§cN/A" ); }); + this.target = target; + this.profile = NickoBukkit.getInstance().getDataStore().getData(target.getUniqueId()).orElse(NickoProfile.EMPTY_PROFILE); } + + @Override + public void handleClick(@NotNull ClickType click, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (click.isLeftClick() || click.isRightClick()) { + if (profile.hasData()) { + event.getView().close(); + new ChoiceGUI(player, new ChoiceCallback() { + @Override + public void onConfirm() { + final AppearanceManager appearanceManager = new AppearanceManager(target); + appearanceManager.reset(); + final I18N i18n = new I18N(player); + player.sendMessage(i18n.translate(I18NDict.Event.Admin.Check.REMOVE_SKIN, target.getName())); + } + + @Override + public void onCancel() { + new PlayerCheckGUI(player).open(); + } + }).open(); + } + } + } + } diff --git a/src/main/java/xyz/ineanto/nicko/i18n/I18NDict.java b/src/main/java/xyz/ineanto/nicko/i18n/I18NDict.java index d80c9ff..2bf7676 100644 --- a/src/main/java/xyz/ineanto/nicko/i18n/I18NDict.java +++ b/src/main/java/xyz/ineanto/nicko/i18n/I18NDict.java @@ -28,6 +28,12 @@ public class I18NDict { public static final String INVALIDATE_ENTRY = CACHE_KEY + "invalidate_entry"; } + + public static class Check { + private static final String CHECK_KEY = ADMIN_KEY + "check."; + + public static final String REMOVE_SKIN = CHECK_KEY + "remove_skin"; + } } public static class Settings { diff --git a/src/main/resources/en.yml b/src/main/resources/en.yml index 1951936..84e6d82 100644 --- a/src/main/resources/en.yml +++ b/src/main/resources/en.yml @@ -26,6 +26,8 @@ event: cache: invalidate_cache: "§fComplete cache invalidated." invalidate_entry: "§6{0} §fhas been invalidated." + check: + remove_skin: "§fSkin removed from player." gui: title: @@ -33,7 +35,7 @@ gui: settings: "Nicko > Settings" admin: "Nicko > Administration" check: "Nicko > Admin... > Check" - confirm: "... > Invalidate > Confirm" + confirm: "... > Confirm action" cache: "Nicko > Admin... > Cache" invalidate_skin: "... > Cache > Invalidate" @@ -101,6 +103,8 @@ gui: - "§cNicked: §a{1}" - "§cName: §6{2}" - "§cSkin: §6{3}" + - " " + - "§7§oClick to remove skin!" cache: statistics: name: "Statistics" diff --git a/src/main/resources/fr.yml b/src/main/resources/fr.yml index f154e54..02783c6 100644 --- a/src/main/resources/fr.yml +++ b/src/main/resources/fr.yml @@ -26,6 +26,8 @@ event: cache: invalidate_cache: "§fCache complet invalidé." invalidate_entry: "§6{0} §fa été invalidé." + check: + remove_skin: "§fSkin retiré du joueur." gui: title: @@ -33,7 +35,7 @@ gui: settings: "Nicko > Paramètres" admin: "Nicko > Administration" check: "Nicko > Admin... > Vérification" - confirm: "... > Invalider > Confirmer" + confirm: "... > Confirmer l'action" cache: "Nicko > Admin... > Cache" invalidate_skin: "... > Cache > Invalider" @@ -96,6 +98,8 @@ gui: - "§cDéguisé: §a{1}" - "§cNom: §6{2}" - "§cSkin: §6{3}" + - " " + - "§7§oCliquez pour retirer le skin!" cache: statistics: name: "Statistiques"