feat: updated favorite item

This commit is contained in:
ineanto 2025-06-27 09:53:54 +02:00
parent 03d66b1c69
commit 37e42fb169
Signed by: ineanto
GPG key ID: E511F9CAA2F9CE84
6 changed files with 30 additions and 40 deletions

1
.idea/gradle.xml generated
View file

@ -10,6 +10,7 @@
<option value="$PROJECT_DIR$" /> <option value="$PROJECT_DIR$" />
</set> </set>
</option> </option>
<option name="resolveExternalAnnotations" value="true" />
</GradleProjectSettings> </GradleProjectSettings>
</option> </option>
<option name="parallelModelFetch" value="true" /> <option name="parallelModelFetch" value="true" />

View file

@ -47,7 +47,7 @@ public class FavoritesGUI {
items = Collections.emptyList(); items = Collections.emptyList();
} else { } else {
items = favorites.stream() items = favorites.stream()
.map((appearance) -> new FavoriteAppearanceEntryItem(playerLanguage, appearance)) .map((appearance) -> new FavoriteAppearanceEntryItem(player, appearance).get())
.collect(Collectors.toList()); .collect(Collectors.toList());
} }

View file

@ -1,68 +1,46 @@
package xyz.ineanto.nicko.gui.items.favorites; package xyz.ineanto.nicko.gui.items.favorites;
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.InventoryClickEvent;
import org.jetbrains.annotations.NotNull;
import xyz.ineanto.nicko.Nicko; import xyz.ineanto.nicko.Nicko;
import xyz.ineanto.nicko.appearance.Appearance; import xyz.ineanto.nicko.appearance.Appearance;
import xyz.ineanto.nicko.gui.ChoiceGUI; import xyz.ineanto.nicko.appearance.AppearanceManager;
import xyz.ineanto.nicko.gui.InvalidateSkinGUI;
import xyz.ineanto.nicko.gui.items.ItemDefaults; import xyz.ineanto.nicko.gui.items.ItemDefaults;
import xyz.ineanto.nicko.gui.items.common.choice.ChoiceCallback;
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.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;
import xyz.xenondevs.invui.item.impl.AsyncItem; import xyz.xenondevs.invui.item.impl.AsyncItem;
import xyz.xenondevs.invui.item.impl.SuppliedItem;
import xyz.xenondevs.invui.util.MojangApiUtils; import xyz.xenondevs.invui.util.MojangApiUtils;
import java.io.IOException; import java.io.IOException;
public class FavoriteAppearanceEntryItem extends AsyncItem { public class FavoriteAppearanceEntryItem {
private final AppearanceManager appearanceManager;
private final PlayerLanguage playerLanguage; private final PlayerLanguage playerLanguage;
private final Appearance appearance; private final Appearance appearance;
public FavoriteAppearanceEntryItem(PlayerLanguage playerLanguage, Appearance appearance) { public FavoriteAppearanceEntryItem(Player player, Appearance appearance) {
super(new SuppliedItem(() -> { this.appearanceManager = new AppearanceManager(player);
final ItemBuilder builder = new ItemBuilder(Material.PAINTING); this.playerLanguage = new PlayerLanguage(player);
return playerLanguage.translateItem(builder, LanguageKey.GUI.LOADING); this.appearance = appearance;
}, (_ -> true)).getItemProvider(), }
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),
() -> { () -> {
try { try {
// TODO (Ineanto, 08/06/2025): set a default skin if the entry contains only a name // 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 name = (appearance.name() == null ? "N/A" : appearance.name());
final String skin = (appearance.skin() == null ? "N/A" : appearance.skin()); final String skin = (appearance.skin() == null ? "N/A" : appearance.skin());
final SkullBuilder skull = new SkullBuilder(skin); final SkullBuilder skull = new SkullBuilder(skin);
return playerLanguage.translateItem(skull, LanguageKey.GUI.Admin.Cache.ENTRY, name); return playerLanguage.translateItem(skull, LanguageKey.GUI.Favorites.ENTRY, name, skin);
} catch (MojangApiUtils.MojangApiException | IOException e) { } catch (MojangApiUtils.MojangApiException | IOException e) {
Nicko.getInstance().getLogger().warning("Unable to get Head texture for specified UUID (" + appearance.skin() + ")! (GUI/Favorites/Entry)"); Nicko.getInstance().getLogger().warning("Unable to get Head texture for specified UUID (" + appearance.skin() + ")! (GUI/Favorites/Entry)");
return ItemDefaults.getErrorSkullItem(playerLanguage, LanguageKey.GUI.Admin.Cache.ENTRY, "..."); return ItemDefaults.getErrorSkullItem(playerLanguage, LanguageKey.GUI.Favorites.ENTRY, "N/A", "N/A");
} }
}); });
this.playerLanguage = playerLanguage;
this.appearance = appearance;
}
@Override
public void handleClick(@NotNull ClickType click, @NotNull Player player, @NotNull InventoryClickEvent event) {
if (click.isLeftClick() || click.isRightClick()) {
event.getView().close();
new ChoiceGUI(player, new ChoiceCallback() {
@Override
public void onConfirm() {
player.sendMessage(playerLanguage.translate(LanguageKey.Event.Admin.Cache.INVALIDATE_ENTRY, true, appearance.name()));
player.playSound(player.getLocation(), Sound.BLOCK_WOODEN_BUTTON_CLICK_ON, 1, 1f);
}
@Override
public void onCancel() {
new InvalidateSkinGUI(player).open();
}
}).open();
}
} }
} }

View file

@ -148,6 +148,7 @@ public class LanguageKey {
public static final String ADD = FAVORITES_KEY + "add"; public static final String ADD = FAVORITES_KEY + "add";
public static final String REMOVE = FAVORITES_KEY + "remove"; public static final String REMOVE = FAVORITES_KEY + "remove";
public static final String ENTRY = FAVORITES_KEY + "entry";
} }
} }
} }

View file

@ -167,4 +167,9 @@ gui:
name: "Toggle deletion mode" name: "Toggle deletion mode"
lore: lore:
- "<grey>Clicking on any disguise as this mode is</grey>" - "<grey>Clicking on any disguise as this mode is</grey>"
- "<grey>active will remove it from your favorites.</grey>" - "<grey>active will remove it from your favorites.</grey>"
entry:
name: "Favorite"
lore:
- "<gray>Name:</gray> <green>{0}</green>"
- "<gray>Skin:</gray> <green>{1}</green>"

View file

@ -169,4 +169,9 @@ gui:
name: "Activer la suppression" name: "Activer la suppression"
lore: lore:
- "<grey>Cliquer sur un déguisement lorsque le mode est</grey>" - "<grey>Cliquer sur un déguisement lorsque le mode est</grey>"
- "<grey>actif le supprimera de vos favoris.</grey>" - "<grey>actif le supprimera de vos favoris.</grey>"
entry:
name: "Favori"
lore:
- "<gray>Nom:</gray> <green>{0}</green>"
- "<gray>Skin:</gray> <green>{1}</green>"