From 2c6349735b193491b44da24ff80a0e500aa50c40 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Thu, 18 Apr 2024 02:20:46 +0200 Subject: [PATCH] Start of the group config guis. --- .../cuanvil/gui/config/MainConfigGui.java | 6 +- .../gui/config/global/GroupConfigGui.java | 67 +++++++++ .../config/list/MappedGuiListConfigGui.java | 1 + .../list/elements/ConflictSubSettingGui.java | 129 ++++++++++++++++++ .../cuanvil/gui/util/GuiGlobalActions.java | 2 +- .../cuanvil/group/AbstractMaterialGroup.kt | 4 + 6 files changed, 205 insertions(+), 4 deletions(-) create mode 100644 src/main/java/xyz/alexcrea/cuanvil/gui/config/global/GroupConfigGui.java create mode 100644 src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/ConflictSubSettingGui.java diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java index 5be5529..891eb03 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java @@ -82,15 +82,15 @@ public class MainConfigGui extends ChestGui { GuiItem enchantConflictItem = GuiGlobalItems.goToGuiItem(EnchantConflictItemstack, EnchantConflictGui.INSTANCE); pane.bindItem('4', enchantConflictItem); - // WIP configuration items + // Group config items ItemStack wipItemstack = new ItemStack(Material.BARRIER); ItemMeta wipMeta = wipItemstack.getItemMeta(); wipMeta.setDisplayName("\u00A7cWIP"); wipItemstack.setItemMeta(wipMeta); - GuiItem wip = new GuiItem(wipItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance); + GuiItem groupConfigItem = GuiGlobalItems.goToGuiItem(wipItemstack, GroupConfigGui.INSTANCE); - pane.bindItem('5', wip); + pane.bindItem('5', groupConfigItem); // Unit repair item ItemStack unirRepairItemstack = new ItemStack(Material.DIAMOND); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/GroupConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/GroupConfigGui.java new file mode 100644 index 0000000..da854d0 --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/GroupConfigGui.java @@ -0,0 +1,67 @@ +package xyz.alexcrea.cuanvil.gui.config.global; + +import com.github.stefvanschie.inventoryframework.gui.GuiItem; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import xyz.alexcrea.cuanvil.config.ConfigHolder; +import xyz.alexcrea.cuanvil.group.AbstractMaterialGroup; +import xyz.alexcrea.cuanvil.group.IncludeGroup; +import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui; +import xyz.alexcrea.cuanvil.gui.config.list.elements.ConflictSubSettingGui; + +import java.util.ArrayList; +import java.util.List; + +public class GroupConfigGui extends MappedGuiListConfigGui { + + public final static GroupConfigGui INSTANCE = new GroupConfigGui(); + + static { + INSTANCE.init(); + } + + public GroupConfigGui() { + super("Group Config"); + } + + @Override + protected ItemStack createItemForGeneric(AbstractMaterialGroup group) { + ItemStack item = new ItemStack(group.getRepresentativeMaterial()); + ItemMeta meta = item.getItemMeta(); + + meta.setDisplayName(group.getName()); + + item.setItemMeta(meta); + return item; + } + + @Override + protected List getEveryDisplayableInstanceOfGeneric() { + ArrayList includeGroups = new ArrayList<>(); + + for (AbstractMaterialGroup group : ConfigHolder.ITEM_GROUP_HOLDER.getItemGroupsManager().getGroupMap().values()) { + if(group instanceof IncludeGroup){ + includeGroups.add(group); + } + } + return includeGroups; + } + + @Override + protected ConflictSubSettingGui newInstanceOfGui(AbstractMaterialGroup group, GuiItem item) { + return new ConflictSubSettingGui(this, group, item); + } + + @Override + protected String genericDisplayedName() { + return "material group"; + } + + @Override + protected AbstractMaterialGroup createAndSaveNewEmptyGeneric(String name) { + + return null; + } + +} diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java index 8b81fff..b183571 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java @@ -81,6 +81,7 @@ public abstract class MappedGuiListConfigGui< T, S extends ElementMappedToListGu } T generic = createAndSaveNewEmptyGeneric(message); + if(generic == null) return;// we don't know what to do updateValueForGeneric(generic, true); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/ConflictSubSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/ConflictSubSettingGui.java new file mode 100644 index 0000000..9b423ff --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/ConflictSubSettingGui.java @@ -0,0 +1,129 @@ +package xyz.alexcrea.cuanvil.gui.config.list.elements; + +import com.github.stefvanschie.inventoryframework.gui.GuiItem; +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.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.HumanEntity; +import org.bukkit.event.inventory.InventoryClickEvent; +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.group.AbstractMaterialGroup; +import xyz.alexcrea.cuanvil.group.ItemGroupManager; +import xyz.alexcrea.cuanvil.gui.config.ask.ConfirmActionGui; +import xyz.alexcrea.cuanvil.gui.config.global.GroupConfigGui; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; +import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; +import xyz.alexcrea.cuanvil.recipe.CustomAnvilRecipeManager; +import xyz.alexcrea.cuanvil.util.CasedStringUtil; + +import java.util.Collections; +import java.util.function.Consumer; +import java.util.function.Supplier; + +public class ConflictSubSettingGui extends MappedToListSubSettingGui { + + private final GroupConfigGui parent; + private final AbstractMaterialGroup group; + private final PatternPane pane; + + public ConflictSubSettingGui( + @NotNull GroupConfigGui parent, + @NotNull AbstractMaterialGroup group, + @NotNull GuiItem item) { + super(item, 3, group.getName()); + this.parent = parent; + this.group = group; + + Pattern pattern = new Pattern( + GuiSharedConstant.EMPTY_GUI_FULL_LINE, + "00102000D", + "B00000000" + ); + this.pane = new PatternPane(0, 0, 9, 3, pattern); + addPane(this.pane); + + prepareStaticValues(); + } + + private void prepareStaticValues() { + GuiGlobalItems.addBackItem(this.pane, this.parent); + GuiGlobalItems.addBackgroundItem(this.pane); + + // Delete item + ItemStack deleteItem = new ItemStack(Material.RED_TERRACOTTA); + ItemMeta deleteMeta = deleteItem.getItemMeta(); + + deleteMeta.setDisplayName("\u00A74DELETE RECIPE"); + deleteMeta.setLore(Collections.singletonList("\u00A7cCaution with this button !")); + + deleteItem.setItemMeta(deleteMeta); + this.pane.bindItem('D', new GuiItem(deleteItem, GuiGlobalActions.openGuiAction(createDeleteGui()), CustomAnvil.instance)); + + } + + private @NotNull Consumer openGuiAction() { + ConfirmActionGui deleteGui = createDeleteGui(); + return event -> { + event.setCancelled(true); + HumanEntity player = event.getWhoClicked(); + // Do not allow to open inventory if player do not have edit configuration permission + if (!player.hasPermission(CustomAnvil.editConfigPermission)) { + player.closeInventory(); + player.sendMessage(GuiGlobalActions.NO_EDIT_PERM); + return; + } + // TODO test if group is used & cancel if so + + deleteGui.show(player); + }; + } + + private @NotNull ConfirmActionGui createDeleteGui() { + Supplier deleteSupplier = () -> { + ItemGroupManager manager = ConfigHolder.ITEM_GROUP_HOLDER.getItemGroupsManager(); + // TODO test if group is used & cancel if so + + // TODO remove group + Bukkit.broadcastMessage("todo"); + + + // Save + boolean success = true; + if (GuiSharedConstant.TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE) { + success = ConfigHolder.CONFLICT_HOLDER.saveToDisk(GuiSharedConstant.TEMPORARY_DO_BACKUP_EVERY_SAVE); + } + + return success; + }; + + return new ConfirmActionGui("\u00A7cDelete \u00A7e" + CasedStringUtil.snakeToUpperSpacedCase(this.group.toString()) + "\u00A7c?", + "\u00A77Confirm that you want to delete this group.", + this, this.parent, deleteSupplier + ); + } + + @Override + public void updateGuiValues() { + // TODO update value from config to conflict + + // Parent should call updateLocal with this call + this.parent.updateValueForGeneric(this.group, true); + } + + @Override + public void updateLocal() { + + } + + @Override + public void cleanAndBeUnusable() { + + } +} diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalActions.java b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalActions.java index e8c8334..6be8d83 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalActions.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalActions.java @@ -97,6 +97,7 @@ public class GuiGlobalActions { */ public static @NotNull Consumer openGuiAction(@NotNull Gui goal) { return event -> { + event.setCancelled(true); HumanEntity player = event.getWhoClicked(); // Do not allow to open inventory if player do not have edit configuration permission if (!player.hasPermission(CustomAnvil.editConfigPermission)) { @@ -104,7 +105,6 @@ public class GuiGlobalActions { player.sendMessage(NO_EDIT_PERM); return; } - event.setCancelled(true); goal.show(player); }; } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/AbstractMaterialGroup.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/AbstractMaterialGroup.kt index f13b039..f67e0c9 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/group/AbstractMaterialGroup.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/AbstractMaterialGroup.kt @@ -60,6 +60,10 @@ abstract class AbstractMaterialGroup(private val name: String) { return name } + override fun toString(): String { + return name + } + /** * Update the contained groups of this group */