diff --git a/build.gradle.kts b/build.gradle.kts
index d266835..424b927 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -5,7 +5,7 @@ plugins {
}
group = "xyz.ineanto"
-version = "1.2.0"
+version = "1.3.0"
val invuiVersion: String = "1.44"
diff --git a/src/main/java/xyz/ineanto/nicko/gui/items/favorites/FavoriteAppearanceEntryItem.java b/src/main/java/xyz/ineanto/nicko/gui/items/favorites/FavoriteAppearanceEntryItem.java
index 78da1da..de10ba0 100644
--- a/src/main/java/xyz/ineanto/nicko/gui/items/favorites/FavoriteAppearanceEntryItem.java
+++ b/src/main/java/xyz/ineanto/nicko/gui/items/favorites/FavoriteAppearanceEntryItem.java
@@ -2,45 +2,78 @@ package xyz.ineanto.nicko.gui.items.favorites;
import org.bukkit.Material;
import org.bukkit.entity.Player;
+import org.bukkit.event.inventory.ClickType;
import xyz.ineanto.nicko.Nicko;
+import xyz.ineanto.nicko.appearance.ActionResult;
import xyz.ineanto.nicko.appearance.Appearance;
import xyz.ineanto.nicko.appearance.AppearanceManager;
import xyz.ineanto.nicko.gui.items.ItemDefaults;
import xyz.ineanto.nicko.language.LanguageKey;
import xyz.ineanto.nicko.language.PlayerLanguage;
+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;
-import xyz.xenondevs.invui.util.MojangApiUtils;
-
-import java.io.IOException;
+import xyz.xenondevs.invui.item.impl.SuppliedItem;
public class FavoriteAppearanceEntryItem {
+ private final PlayerDataStore dataStore = Nicko.getInstance().getDataStore();
+
private final AppearanceManager appearanceManager;
private final PlayerLanguage playerLanguage;
private final Appearance appearance;
+ private final Player player;
public FavoriteAppearanceEntryItem(Player player, Appearance appearance) {
+ this.player = player;
this.appearanceManager = new AppearanceManager(player);
this.playerLanguage = new PlayerLanguage(player);
this.appearance = appearance;
}
public AsyncItem get() {
- // TODO (Ineanto, 26/06/2025): handle click
- final ItemBuilder temporaryItemBuilder = new ItemBuilder(Material.PAINTING);
- return new AsyncItem(playerLanguage.translateItem(temporaryItemBuilder, LanguageKey.GUI.LOADING),
- () -> {
+ // what the f is this entanglement of suppliers
+ return new AsyncItem(playerLanguage.translateItem(new ItemBuilder(Material.PAINTING), LanguageKey.GUI.LOADING),
+ () -> new SuppliedItem(() -> {
try {
// TODO (Ineanto, 08/06/2025): set a default skin if the entry contains only a name
final String name = (appearance.name() == null ? "N/A" : appearance.name());
final String skin = (appearance.skin() == null ? "N/A" : appearance.skin());
final SkullBuilder skull = new SkullBuilder(skin);
return playerLanguage.translateItem(skull, LanguageKey.GUI.Favorites.ENTRY, name, skin);
- } catch (MojangApiUtils.MojangApiException | IOException e) {
+ } catch (Exception e) {
Nicko.getInstance().getLogger().warning("Unable to get Head texture for specified UUID (" + appearance.skin() + ")! (GUI/Favorites/Entry)");
return ItemDefaults.getErrorSkullItem(playerLanguage, LanguageKey.GUI.Favorites.ENTRY, "N/A", "N/A");
}
- });
+ }, (click) -> {
+ System.out.println("there's a click folks!");
+ final ClickType clickType = click.getClickType();
+
+ if (clickType.isLeftClick() || clickType.isRightClick()) {
+ click.getEvent().getView().close();
+ final NickoProfile profile = dataStore.getData(player.getUniqueId()).orElse(NickoProfile.EMPTY_PROFILE);
+
+ profile.setName(appearance.name());
+ profile.setSkin(appearance.skin());
+ dataStore.updateCache(player.getUniqueId(), profile);
+
+ final ActionResult result = appearanceManager.update(true);
+ if (!result.isError()) {
+ player.sendMessage(playerLanguage.translateWithWhoosh(LanguageKey.Event.Appearance.Set.OK));
+ return true;
+ } else {
+ player.sendMessage(playerLanguage.translateWithOops(
+ LanguageKey.Event.Appearance.Set.ERROR,
+ result.getErrorKey()
+ )
+ );
+ appearanceManager.reset();
+ return false;
+ }
+ }
+ return false;
+ }).getItemProvider()
+ );
}
}
diff --git a/src/main/resources/en.yml b/src/main/resources/en.yml
index afa9439..90d5469 100644
--- a/src/main/resources/en.yml
+++ b/src/main/resources/en.yml
@@ -169,7 +169,7 @@ gui:
- "Clicking on any disguise as this mode is"
- "active will remove it from your favorites."
entry:
- name: "Favorite"
+ name: "Favorite"
lore:
- - "Name: {0}"
- - "Skin: {1}"
\ No newline at end of file
+ - "Name: {0}"
+ - "Skin: {1}"
\ No newline at end of file
diff --git a/src/main/resources/fr.yml b/src/main/resources/fr.yml
index 02c7310..4e077e5 100644
--- a/src/main/resources/fr.yml
+++ b/src/main/resources/fr.yml
@@ -171,7 +171,7 @@ gui:
- "Cliquer sur un déguisement lorsque le mode est"
- "actif le supprimera de vos favoris."
entry:
- name: "Favori"
+ name: "Favori"
lore:
- - "Nom: {0}"
- - "Skin: {1}"
\ No newline at end of file
+ - "Nom: {0}"
+ - "Skin: {1}"
\ No newline at end of file