From 050c40bd2a683a7df82eac899b21de35f63265a0 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Wed, 10 Apr 2024 17:39:47 +0200 Subject: [PATCH] Add select item gui & moved confirm gui. --- .../gui/config/ask/AbstractAskGui.java | 42 ++++++++ .../config/{ => ask}/ConfirmActionGui.java | 52 +++------- .../gui/config/ask/SelectItemTypeGui.java | 99 +++++++++++++++++++ .../elements/CustomRecipeSubSettingGui.java | 2 +- .../EnchantConflictSubSettingGui.java | 2 +- .../gui/config/settings/ItemSettingGui.java | 25 +---- .../cuanvil/gui/util/GuiGlobalItems.java | 26 +++++ .../cuanvil/gui/util/GuiSharedConstant.java | 22 +++++ 8 files changed, 208 insertions(+), 62 deletions(-) create mode 100644 src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/AbstractAskGui.java rename src/main/java/xyz/alexcrea/cuanvil/gui/config/{ => ask}/ConfirmActionGui.java (58%) create mode 100644 src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/AbstractAskGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/AbstractAskGui.java new file mode 100644 index 0000000..66dd936 --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/AbstractAskGui.java @@ -0,0 +1,42 @@ +package xyz.alexcrea.cuanvil.gui.config.ask; + +import com.github.stefvanschie.inventoryframework.gui.GuiItem; +import com.github.stefvanschie.inventoryframework.gui.type.ChestGui; +import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; +import com.github.stefvanschie.inventoryframework.pane.PatternPane; +import com.github.stefvanschie.inventoryframework.pane.util.Pattern; +import io.delilaheve.CustomAnvil; +import org.jetbrains.annotations.NotNull; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; +import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; + +public abstract class AbstractAskGui extends ChestGui { + + protected PatternPane pane; + AbstractAskGui(int rows, @NotNull String name, + Gui backOnCancel){ + super(rows, name, CustomAnvil.instance); + + Pattern pattern = getGuiPattern(); + this.pane = new PatternPane(0, 0, pattern.getLength(), pattern.getHeight(), pattern); + addPane(this.pane); + + this.pane.bindItem('0', GuiGlobalItems.backgroundItem()); + this.pane.bindItem('B', new GuiItem(GuiSharedConstant.CANCEL_ITEM, GuiGlobalActions.openGuiAction(backOnCancel), CustomAnvil.instance)); + + } + + /** + * Used to get the gui pattern. + * Reserved character are: + * + * + * @return The gui's pattern. + */ + protected abstract Pattern getGuiPattern(); + +} diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ConfirmActionGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/ConfirmActionGui.java similarity index 58% rename from src/main/java/xyz/alexcrea/cuanvil/gui/config/ConfirmActionGui.java rename to src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/ConfirmActionGui.java index 96f08c9..5b962ed 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ConfirmActionGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/ConfirmActionGui.java @@ -1,9 +1,7 @@ -package xyz.alexcrea.cuanvil.gui.config; +package xyz.alexcrea.cuanvil.gui.config.ask; import com.github.stefvanschie.inventoryframework.gui.GuiItem; -import com.github.stefvanschie.inventoryframework.gui.type.ChestGui; import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; -import com.github.stefvanschie.inventoryframework.pane.PatternPane; import com.github.stefvanschie.inventoryframework.pane.util.Pattern; import io.delilaheve.CustomAnvil; import org.bukkit.Material; @@ -12,50 +10,20 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; -import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import java.util.Arrays; -import java.util.Collections; import java.util.function.Supplier; import java.util.logging.Level; -public class ConfirmActionGui extends ChestGui { - - private static final ItemStack CANCEL_ITEM; - private static final ItemStack CONFIRM_ITEM; - - static { - CANCEL_ITEM = new ItemStack(Material.RED_TERRACOTTA); - ItemMeta meta = CANCEL_ITEM.getItemMeta(); - meta.setDisplayName("\u00A7cCancel"); - meta.setLore(Collections.singletonList("\u00A77Cancel current action and return to previous menu.")); - CANCEL_ITEM.setItemMeta(meta); - - CONFIRM_ITEM = new ItemStack(Material.GREEN_TERRACOTTA); - meta = CONFIRM_ITEM.getItemMeta(); - meta.setDisplayName("\u00A7aConfirm"); - meta.setLore(Arrays.asList("\u00A77Confirm current action.", - "\u00A74Cation: This action can't be canceled.")); - CONFIRM_ITEM.setItemMeta(meta); - } +public class ConfirmActionGui extends AbstractAskGui { public ConfirmActionGui(@NotNull String title, String actionDescription, Gui backOnCancel, Gui backOnConfirm, Supplier onConfirm) { - super(3, title, CustomAnvil.instance); + super(3, title, backOnCancel); - Pattern pattern = new Pattern( - GuiSharedConstant.EMPTY_GUI_FULL_LINE, - "00B0I0S00", - GuiSharedConstant.EMPTY_GUI_FULL_LINE - ); - PatternPane pane = new PatternPane(0, 0, pattern.getLength(), pattern.getHeight(), pattern); - addPane(pane); - - pane.bindItem('0', GuiGlobalItems.backgroundItem()); - - pane.bindItem('B', new GuiItem(CANCEL_ITEM, GuiGlobalActions.openGuiAction(backOnCancel), CustomAnvil.instance)); - pane.bindItem('S', new GuiItem(CONFIRM_ITEM, event -> { + // Save item + this.pane.bindItem('S', new GuiItem(GuiSharedConstant.CONFIRM_ITEM, event -> { event.setCancelled(true); HumanEntity player = event.getWhoClicked(); @@ -80,6 +48,7 @@ public class ConfirmActionGui extends ChestGui { }, CustomAnvil.instance)); + // Info item ItemStack infoItem = new ItemStack(Material.PAPER); ItemMeta infoMeta = infoItem.getItemMeta(); @@ -91,4 +60,13 @@ public class ConfirmActionGui extends ChestGui { pane.bindItem('I', new GuiItem(infoItem, GuiGlobalActions.stayInPlace, CustomAnvil.instance)); } + @Override + protected Pattern getGuiPattern() { + return new Pattern( + GuiSharedConstant.EMPTY_GUI_FULL_LINE, + "00B0I0S00", + GuiSharedConstant.EMPTY_GUI_FULL_LINE + ); + } + } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java new file mode 100644 index 0000000..0ca2a38 --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java @@ -0,0 +1,99 @@ +package xyz.alexcrea.cuanvil.gui.config.ask; + +import com.github.stefvanschie.inventoryframework.gui.GuiItem; +import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; +import com.github.stefvanschie.inventoryframework.pane.util.Pattern; +import io.delilaheve.CustomAnvil; +import org.bukkit.Material; +import org.bukkit.entity.HumanEntity; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; +import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; + +import java.util.Arrays; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +public class SelectItemTypeGui extends AbstractAskGui { + + private ItemStack selectedItem; + public SelectItemTypeGui(@NotNull String title, + @NotNull String actionDescription, + @NotNull Gui backOnCancel, + @NotNull BiConsumer onSave, + boolean materialOnly) { + super(3, title, backOnCancel); + this.selectedItem = null; + + // Save item + GuiItem confirmItem = new GuiItem(GuiSharedConstant.CONFIRM_ITEM, event -> { + event.setCancelled(true); + HumanEntity player = event.getWhoClicked(); + + if (!player.hasPermission(CustomAnvil.editConfigPermission)) { + player.closeInventory(); + player.sendMessage(GuiGlobalActions.NO_EDIT_PERM); + return; + } + + onSave.accept(this.selectedItem, player); + + }, CustomAnvil.instance); + this.pane.bindItem('S', GuiGlobalItems.backgroundItem()); + + // Select item + ItemStack selectItem = setDisplayMeta(new ItemStack(Material.BARRIER), actionDescription); + + AtomicReference selectGuiItem = new AtomicReference<>(); + selectGuiItem.set(new GuiItem(selectItem, event -> { + event.setCancelled(true); + + ItemStack cursor = event.getWhoClicked().getItemOnCursor(); + if(cursor.getType().isAir()) return; + + ItemStack finalItem; + if(materialOnly){ + finalItem = setDisplayMeta(new ItemStack(cursor.getType()), actionDescription); + }else{ + finalItem = cursor.clone(); + } + this.selectedItem = finalItem.clone(); + + selectGuiItem.get().setItem(finalItem); + this.pane.bindItem('S', confirmItem); + + update(); + }, CustomAnvil.instance)); + + this.pane.bindItem('V', selectGuiItem.get()); + + // Temporary leave item + GuiItem temporaryLeave = GuiGlobalItems.temporaryCloseGuiToSelectItem(Material.YELLOW_TERRACOTTA, this); + + this.pane.bindItem('s', temporaryLeave); + + } + + private ItemStack setDisplayMeta(ItemStack item, String actionDescription){ + ItemMeta meta = item.getItemMeta(); + + meta.setDisplayName("\u00A7ePlace an item here"); + meta.setLore(Arrays.asList(actionDescription.split("\n"))); + + item.setItemMeta(meta); + return item; + } + + @Override + protected Pattern getGuiPattern() { + return new Pattern( + GuiSharedConstant.EMPTY_GUI_FULL_LINE, + "0000V000s", + "B0000000S" + ); + } +} diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/CustomRecipeSubSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/CustomRecipeSubSettingGui.java index 80bd84a..ff1249b 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/CustomRecipeSubSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/CustomRecipeSubSettingGui.java @@ -11,7 +11,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.config.ConfigHolder; -import xyz.alexcrea.cuanvil.gui.config.ConfirmActionGui; +import xyz.alexcrea.cuanvil.gui.config.ask.ConfirmActionGui; import xyz.alexcrea.cuanvil.gui.config.global.CustomRecipeConfigGui; import xyz.alexcrea.cuanvil.gui.config.settings.BoolSettingsGui; import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui; diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/EnchantConflictSubSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/EnchantConflictSubSettingGui.java index 9f239ab..9a64977 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/EnchantConflictSubSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/EnchantConflictSubSettingGui.java @@ -14,9 +14,9 @@ import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.group.AbstractMaterialGroup; import xyz.alexcrea.cuanvil.group.EnchantConflictGroup; import xyz.alexcrea.cuanvil.group.EnchantConflictManager; -import xyz.alexcrea.cuanvil.gui.config.ConfirmActionGui; import xyz.alexcrea.cuanvil.gui.config.SelectEnchantmentContainer; import xyz.alexcrea.cuanvil.gui.config.SelectGroupContainer; +import xyz.alexcrea.cuanvil.gui.config.ask.ConfirmActionGui; import xyz.alexcrea.cuanvil.gui.config.global.EnchantConflictGui; import xyz.alexcrea.cuanvil.gui.config.settings.EnchantSelectSettingGui; import xyz.alexcrea.cuanvil.gui.config.settings.GroupSelectSettingGui; diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/ItemSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/ItemSettingGui.java index 8f44e5e..d88452a 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/ItemSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/ItemSettingGui.java @@ -58,29 +58,8 @@ public class ItemSettingGui extends AbstractSettingGui { public void prepareStaticItems(){ prepareReturnToDefault(); - ItemStack item = new ItemStack(Material.YELLOW_TERRACOTTA); - ItemMeta meta = item.getItemMeta(); - - meta.setDisplayName("\u00A7eTemporary close this menu"); - meta.setLore(Collections.singletonList("\u00A77Allow you to chose other item then return here.")); - item.setItemMeta(meta); - GuiItem guiItem = new GuiItem(item, event -> { - event.setCancelled(true); - - HumanEntity player = event.getWhoClicked(); - - CustomAnvil.Companion.getChatListener().setListenedCallback(player, (message) ->{ - - if(message == null) return; - show(player); - - }); - - player.sendMessage("\u00A7eWrite something in chat to return to the item config menu."); - player.closeInventory(); - }, CustomAnvil.instance); - - getPane().bindItem('s', guiItem); + GuiItem temporaryLeave = GuiGlobalItems.temporaryCloseGuiToSelectItem(Material.YELLOW_TERRACOTTA, this); + getPane().bindItem('s', temporaryLeave); } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java index f8b4656..89ed6b6 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java @@ -5,6 +5,7 @@ import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import com.github.stefvanschie.inventoryframework.pane.PatternPane; import io.delilaheve.CustomAnvil; import org.bukkit.Material; +import org.bukkit.entity.HumanEntity; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; @@ -350,4 +351,29 @@ public class GuiGlobalItems { return path.substring(indexOfDot + 1); } + public static GuiItem temporaryCloseGuiToSelectItem(Material itemMaterial, Gui openBack){ + ItemStack item = new ItemStack(itemMaterial); + ItemMeta meta = item.getItemMeta(); + + meta.setDisplayName("\u00A7eTemporary close this menu"); + meta.setLore(Collections.singletonList("\u00A77Allow you to chose other item then return here.")); + item.setItemMeta(meta); + + return new GuiItem(item, event -> { + event.setCancelled(true); + + HumanEntity player = event.getWhoClicked(); + + CustomAnvil.Companion.getChatListener().setListenedCallback(player, (message) ->{ + + if(message == null) return; + openBack.show(player); + + }); + + player.sendMessage("\u00A7eWrite something in chat to return to the item config menu."); + player.closeInventory(); + }, CustomAnvil.instance); + } + } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiSharedConstant.java b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiSharedConstant.java index 731b775..0ad90a6 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiSharedConstant.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiSharedConstant.java @@ -6,9 +6,12 @@ import com.github.stefvanschie.inventoryframework.pane.PatternPane; import com.github.stefvanschie.inventoryframework.pane.util.Pattern; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import xyz.alexcrea.cuanvil.gui.config.MainConfigGui; import java.util.Arrays; +import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -50,4 +53,23 @@ public class GuiSharedConstant { } + public static final ItemStack CANCEL_ITEM; + public static final ItemStack CONFIRM_ITEM; + + static { + CANCEL_ITEM = new ItemStack(Material.RED_TERRACOTTA); + ItemMeta meta = CANCEL_ITEM.getItemMeta(); + meta.setDisplayName("\u00A7cCancel"); + meta.setLore(Collections.singletonList("\u00A77Cancel current action and return to previous menu.")); + CANCEL_ITEM.setItemMeta(meta); + + CONFIRM_ITEM = new ItemStack(Material.GREEN_TERRACOTTA); + meta = CONFIRM_ITEM.getItemMeta(); + meta.setDisplayName("\u00A7aConfirm"); + meta.setLore(Arrays.asList("\u00A77Confirm current action.", + "\u00A74Cation: This action can't be canceled.")); + CONFIRM_ITEM.setItemMeta(meta); + } + + }