From b85325fde5b366775fd8ecea5980ba6f9b918138 Mon Sep 17 00:00:00 2001 From: ineanto Date: Sun, 8 Jun 2025 13:13:47 +0200 Subject: [PATCH] feat(gui/favorites): remove/add items --- .../xyz/ineanto/nicko/gui/FavoritesGUI.java | 7 +++ .../gui/items/favorites/FavoriteAddItem.java | 60 +++++++++++++++++++ .../items/favorites/FavoriteRemoveItem.java | 55 +++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 src/main/java/xyz/ineanto/nicko/gui/items/favorites/FavoriteAddItem.java create mode 100644 src/main/java/xyz/ineanto/nicko/gui/items/favorites/FavoriteRemoveItem.java diff --git a/src/main/java/xyz/ineanto/nicko/gui/FavoritesGUI.java b/src/main/java/xyz/ineanto/nicko/gui/FavoritesGUI.java index 3856de4..94363a5 100644 --- a/src/main/java/xyz/ineanto/nicko/gui/FavoritesGUI.java +++ b/src/main/java/xyz/ineanto/nicko/gui/FavoritesGUI.java @@ -6,7 +6,9 @@ import xyz.ineanto.nicko.appearance.Appearance; import xyz.ineanto.nicko.gui.items.common.GoBackItem; import xyz.ineanto.nicko.gui.items.common.ScrollDownItem; import xyz.ineanto.nicko.gui.items.common.ScrollUpItem; +import xyz.ineanto.nicko.gui.items.favorites.FavoriteAddItem; import xyz.ineanto.nicko.gui.items.favorites.FavoriteAppearanceEntryItem; +import xyz.ineanto.nicko.gui.items.favorites.FavoriteRemoveItem; import xyz.ineanto.nicko.language.LanguageKey; import xyz.ineanto.nicko.language.PlayerLanguage; import xyz.ineanto.nicko.profile.NickoProfile; @@ -34,6 +36,9 @@ public class FavoritesGUI { final ScrollUpItem scrollUpItem = new ScrollUpItem(playerLanguage); final ScrollDownItem scrollDownItem = new ScrollDownItem(playerLanguage); + final FavoriteAddItem favoriteAddItem = new FavoriteAddItem(playerLanguage); + final FavoriteRemoveItem favoriteRemoveItem = new FavoriteRemoveItem(playerLanguage); + final NickoProfile profile = Nicko.getInstance().getDataStore().getData(player.getUniqueId()).orElse(NickoProfile.EMPTY_PROFILE); final List favorites = profile.getFavorites(); List items; @@ -58,6 +63,8 @@ public class FavoritesGUI { guiItemBuilder.addIngredient('U', scrollUpItem); guiItemBuilder.addIngredient('D', scrollDownItem); guiItemBuilder.addIngredient('B', backItem.get(parent.getGUI(), parent.getTitle())); + guiItemBuilder.addIngredient('A', favoriteAddItem.get()); + guiItemBuilder.addIngredient('R', favoriteRemoveItem.get()); guiItemBuilder.setContent(items); }); this.player = player; diff --git a/src/main/java/xyz/ineanto/nicko/gui/items/favorites/FavoriteAddItem.java b/src/main/java/xyz/ineanto/nicko/gui/items/favorites/FavoriteAddItem.java new file mode 100644 index 0000000..e16129e --- /dev/null +++ b/src/main/java/xyz/ineanto/nicko/gui/items/favorites/FavoriteAddItem.java @@ -0,0 +1,60 @@ +package xyz.ineanto.nicko.gui.items.favorites; + +import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.TooltipDisplay; +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.block.banner.Pattern; +import org.bukkit.block.banner.PatternType; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BannerMeta; +import xyz.ineanto.nicko.language.LanguageKey; +import xyz.ineanto.nicko.language.PlayerLanguage; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.SuppliedItem; + +public class FavoriteAddItem { + private final PlayerLanguage playerLanguage; + + public FavoriteAddItem(PlayerLanguage playerLanguage) { + this.playerLanguage = playerLanguage; + } + + public SuppliedItem get() { + return new SuppliedItem(() -> { + final ItemStack banner = new ItemStack(Material.GREEN_BANNER); + final BannerMeta bannerMeta = (BannerMeta) banner.getItemMeta(); + + // Plus sign + bannerMeta.addPattern(new Pattern(DyeColor.WHITE, PatternType.STRIPE_MIDDLE)); + bannerMeta.addPattern(new Pattern(DyeColor.WHITE, PatternType.STRIPE_CENTER)); + + // Remove excess on the borders + bannerMeta.addPattern(new Pattern(DyeColor.GREEN, PatternType.BORDER)); + bannerMeta.addPattern(new Pattern(DyeColor.GREEN, PatternType.CURLY_BORDER)); + bannerMeta.addPattern(new Pattern(DyeColor.GREEN, PatternType.STRIPE_TOP)); + bannerMeta.addPattern(new Pattern(DyeColor.GREEN, PatternType.STRIPE_BOTTOM)); + + banner.setItemMeta(bannerMeta); + + banner.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); + banner.setData(DataComponentTypes.TOOLTIP_DISPLAY, TooltipDisplay + .tooltipDisplay() + .addHiddenComponents(DataComponentTypes.BANNER_PATTERNS) + .build() + ); + + final ItemBuilder builder = new ItemBuilder(banner); + return playerLanguage.translateItem(builder, LanguageKey.GUI.Home.FAVORITES); + }, click -> { + final ClickType clickType = click.getClickType(); + if (clickType.isLeftClick() || clickType.isRightClick()) { + click.getEvent().getView().close(); + return true; + } + return false; + }); + } +} diff --git a/src/main/java/xyz/ineanto/nicko/gui/items/favorites/FavoriteRemoveItem.java b/src/main/java/xyz/ineanto/nicko/gui/items/favorites/FavoriteRemoveItem.java new file mode 100644 index 0000000..123533e --- /dev/null +++ b/src/main/java/xyz/ineanto/nicko/gui/items/favorites/FavoriteRemoveItem.java @@ -0,0 +1,55 @@ +package xyz.ineanto.nicko.gui.items.favorites; + +import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.TooltipDisplay; +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.block.banner.Pattern; +import org.bukkit.block.banner.PatternType; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BannerMeta; +import xyz.ineanto.nicko.language.LanguageKey; +import xyz.ineanto.nicko.language.PlayerLanguage; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.SuppliedItem; + +public class FavoriteRemoveItem { + private final PlayerLanguage playerLanguage; + + public FavoriteRemoveItem(PlayerLanguage playerLanguage) { + this.playerLanguage = playerLanguage; + } + + public SuppliedItem get() { + return new SuppliedItem(() -> { + final ItemStack banner = new ItemStack(Material.RED_BANNER); + final BannerMeta bannerMeta = (BannerMeta) banner.getItemMeta(); + + // Minus sign + bannerMeta.addPattern(new Pattern(DyeColor.WHITE, PatternType.STRIPE_MIDDLE)); + + // Remove excess + bannerMeta.addPattern(new Pattern(DyeColor.RED, PatternType.BORDER)); + banner.setItemMeta(bannerMeta); + + banner.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); + banner.setData(DataComponentTypes.TOOLTIP_DISPLAY, TooltipDisplay + .tooltipDisplay() + .addHiddenComponents(DataComponentTypes.BANNER_PATTERNS) + .build() + ); + + final ItemBuilder builder = new ItemBuilder(banner); + return playerLanguage.translateItem(builder, LanguageKey.GUI.Home.FAVORITES); + }, click -> { + final ClickType clickType = click.getClickType(); + if (clickType.isLeftClick() || clickType.isRightClick()) { + click.getEvent().getView().close(); + return true; + } + return false; + }); + } +}