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 01/17] 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 */ From d5b7e5dbfd95f11f1659b41426f9bee34a909e39 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Thu, 18 Apr 2024 16:59:11 +0200 Subject: [PATCH 02/17] Finish global gui for group config. --- .../cuanvil/gui/config/MainConfigGui.java | 13 ++++---- .../gui/config/global/EnchantConflictGui.java | 2 ++ .../gui/config/global/GroupConfigGui.java | 30 ++++++++++++++----- .../config/list/MappedGuiListConfigGui.java | 5 +++- ...Gui.java => GroupConfigSubSettingGui.java} | 6 ++-- .../cuanvil/command/ReloadExecutor.kt | 8 ++--- .../cuanvil/group/ItemGroupManager.kt | 19 ++++++++---- 7 files changed, 56 insertions(+), 27 deletions(-) rename src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/{ConflictSubSettingGui.java => GroupConfigSubSettingGui.java} (94%) 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 891eb03..61307db 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java @@ -6,6 +6,7 @@ import com.github.stefvanschie.inventoryframework.pane.PatternPane; import com.github.stefvanschie.inventoryframework.pane.util.Pattern; import io.delilaheve.CustomAnvil; import org.bukkit.Material; +import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import xyz.alexcrea.cuanvil.gui.config.global.*; @@ -83,12 +84,14 @@ public class MainConfigGui extends ChestGui { pane.bindItem('4', enchantConflictItem); // Group config items - ItemStack wipItemstack = new ItemStack(Material.BARRIER); - ItemMeta wipMeta = wipItemstack.getItemMeta(); - wipMeta.setDisplayName("\u00A7cWIP"); - wipItemstack.setItemMeta(wipMeta); + ItemStack groupItemstack = new ItemStack(Material.CHEST); - GuiItem groupConfigItem = GuiGlobalItems.goToGuiItem(wipItemstack, GroupConfigGui.INSTANCE); + ItemMeta groupMeta = groupItemstack.getItemMeta(); + groupMeta.setDisplayName("\u00A7aMaterial Groups"); + groupMeta.setLore(Collections.singletonList("\u00A77Click here to open material group menu")); + groupItemstack.setItemMeta(groupMeta); + + GuiItem groupConfigItem = GuiGlobalItems.goToGuiItem(groupItemstack, GroupConfigGui.INSTANCE); pane.bindItem('5', groupConfigItem); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConflictGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConflictGui.java index 499a8e4..5593cf3 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConflictGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConflictGui.java @@ -2,6 +2,7 @@ package xyz.alexcrea.cuanvil.gui.config.global; import com.github.stefvanschie.inventoryframework.gui.GuiItem; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import xyz.alexcrea.cuanvil.config.ConfigHolder; @@ -58,6 +59,7 @@ public class EnchantConflictGui extends MappedGuiListConfigGui { +public class GroupConfigGui extends MappedGuiListConfigGui { public final static GroupConfigGui INSTANCE = new GroupConfigGui(); @@ -30,7 +35,13 @@ public class GroupConfigGui extends MappedGuiListConfigGui Date: Fri, 19 Apr 2024 16:44:44 +0200 Subject: [PATCH 03/17] Progress on group subSetting gui: - Delete group button & gui done. - Select included group button & gui done Some other minor fix. --- .../gui/config/SelectGroupContainer.java | 30 +++ .../gui/config/global/GroupConfigGui.java | 20 +- .../EnchantConflictSubSettingGui.java | 29 +-- .../elements/GroupConfigSubSettingGui.java | 198 ++++++++++++++++-- .../settings/GroupSelectSettingGui.java | 4 +- 5 files changed, 226 insertions(+), 55 deletions(-) diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectGroupContainer.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectGroupContainer.java index a8b2dba..1b640b3 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectGroupContainer.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectGroupContainer.java @@ -1,7 +1,11 @@ package xyz.alexcrea.cuanvil.gui.config; import xyz.alexcrea.cuanvil.group.AbstractMaterialGroup; +import xyz.alexcrea.cuanvil.util.CasedStringUtil; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; import java.util.Set; public interface SelectGroupContainer { @@ -12,4 +16,30 @@ public interface SelectGroupContainer { Set illegalGroups(); + static List getGroupLore(SelectGroupContainer container, String containerType, String groupAction){ + // Prepare group lore + ArrayList groupLore = new ArrayList<>(); + groupLore.add("\u00A77Allow you to select a list of \u00A73Groups \u00A77that this " + containerType + " should " + groupAction); + Set grouos = container.getSelectedGroups(); + if (grouos.isEmpty()) { + groupLore.add("\u00A77There is no "+groupAction+"d groups for this "+containerType+"."); + } else { + groupLore.add("\u00A77List of "+groupAction+"d groups for this "+containerType+":"); + Iterator groupIterator = grouos.iterator(); + + boolean greaterThanMax = grouos.size() > 5; + int maxindex = (greaterThanMax ? 4 : grouos.size()); + for (int i = 0; i < maxindex; i++) { + // format string like "- Melee Weapons" + String formattedName = CasedStringUtil.snakeToUpperSpacedCase(groupIterator.next().getName()); + groupLore.add("\u00A77- \u00A73" + formattedName); + + } + if (greaterThanMax) { + groupLore.add("\u00A77And " + (grouos.size() - 4) + " more..."); + } + } + return groupLore; + } + } 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 index 5d5f89b..f0a2e3d 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/GroupConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/GroupConfigGui.java @@ -18,7 +18,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -public class GroupConfigGui extends MappedGuiListConfigGui { +public class GroupConfigGui extends MappedGuiListConfigGui { public final static GroupConfigGui INSTANCE = new GroupConfigGui(); @@ -31,15 +31,15 @@ public class GroupConfigGui extends MappedGuiListConfigGui getEveryDisplayableInstanceOfGeneric() { - ArrayList includeGroups = new ArrayList<>(); + protected List getEveryDisplayableInstanceOfGeneric() { + ArrayList includeGroups = new ArrayList<>(); for (AbstractMaterialGroup group : ConfigHolder.ITEM_GROUP_HOLDER.getItemGroupsManager().getGroupMap().values()) { if(group instanceof IncludeGroup){ - includeGroups.add(group); + includeGroups.add((IncludeGroup) group); } } return includeGroups; } @Override - protected GroupConfigSubSettingGui newInstanceOfGui(AbstractMaterialGroup group, GuiItem item) { + protected GroupConfigSubSettingGui newInstanceOfGui(IncludeGroup group, GuiItem item) { return new GroupConfigSubSettingGui(this, group, item); } @@ -70,14 +70,14 @@ public class GroupConfigGui extends MappedGuiListConfigGui { event.setCancelled(true); EnchantSelectSettingGui enchantGui = new EnchantSelectSettingGui( @@ -184,27 +180,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl } // Prepare group lore - ArrayList groupLore = new ArrayList<>(); - groupLore.add("\u00A77Allow you to select a list of \u00A73Groups \u00A77that this conflict should include"); - Set grouos = getSelectedGroups(); - if (grouos.isEmpty()) { - groupLore.add("\u00A77There is no excluded groups for this conflict."); - } else { - groupLore.add("\u00A77List of excluded groups for this conflict:"); - Iterator groupIterator = grouos.iterator(); - - boolean greaterThanMax = grouos.size() > 5; - int maxindex = (greaterThanMax ? 4 : grouos.size()); - for (int i = 0; i < maxindex; i++) { - // format string like "- Melee Weapons" - String formattedName = CasedStringUtil.snakeToUpperSpacedCase(groupIterator.next().getName()); - groupLore.add("\u00A77- \u00A73" + formattedName); - - } - if (greaterThanMax) { - groupLore.add("\u00A77And " + (grouos.size() - 4) + " more..."); - } - } + List groupLore = SelectGroupContainer.getGroupLore(this, "conflict", "exclude"); // Configure enchant setting item ItemStack enchantItem = this.enchantSettingItem.getItem(); @@ -288,7 +264,6 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl CustomAnvil.instance.getLogger().log(Level.WARNING, "An error occurred while updating enchants for " + this.enchantConflict, e); } - // Save file configuration to disk if (GuiSharedConstant.TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE) { return ConfigHolder.CONFLICT_HOLDER.saveToDisk(GuiSharedConstant.TEMPORARY_DO_BACKUP_EVERY_SAVE); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java index 4ccf7d8..744c2d4 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java @@ -4,36 +4,37 @@ import com.github.stefvanschie.inventoryframework.gui.GuiItem; 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.ItemFlag; 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.group.*; +import xyz.alexcrea.cuanvil.gui.config.SelectGroupContainer; import xyz.alexcrea.cuanvil.gui.config.ask.ConfirmActionGui; import xyz.alexcrea.cuanvil.gui.config.global.GroupConfigGui; +import xyz.alexcrea.cuanvil.gui.config.settings.GroupSelectSettingGui; 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.util.CasedStringUtil; -import java.util.Collections; +import java.util.*; import java.util.function.Consumer; import java.util.function.Supplier; -public class GroupConfigSubSettingGui extends MappedToListSubSettingGui { +public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implements SelectGroupContainer { private final GroupConfigGui parent; - private final AbstractMaterialGroup group; + private final IncludeGroup group; private final PatternPane pane; public GroupConfigSubSettingGui( @NotNull GroupConfigGui parent, - @NotNull AbstractMaterialGroup group, + @NotNull IncludeGroup group, @NotNull GuiItem item) { super(item, 3, group.getName()); this.parent = parent; @@ -50,6 +51,8 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui { prepareStaticValues(); } + private GuiItem materialSelection; + private GuiItem groupSelection; private void prepareStaticValues() { GuiGlobalItems.addBackItem(this.pane, this.parent); GuiGlobalItems.addBackgroundItem(this.pane); @@ -58,15 +61,31 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui { ItemStack deleteItem = new ItemStack(Material.RED_TERRACOTTA); ItemMeta deleteMeta = deleteItem.getItemMeta(); - deleteMeta.setDisplayName("\u00A74DELETE RECIPE"); + deleteMeta.setDisplayName("\u00A74DELETE GROUP"); deleteMeta.setLore(Collections.singletonList("\u00A7cCaution with this button !")); deleteItem.setItemMeta(deleteMeta); - this.pane.bindItem('D', new GuiItem(deleteItem, GuiGlobalActions.openGuiAction(createDeleteGui()), CustomAnvil.instance)); + this.pane.bindItem('D', new GuiItem(deleteItem, openGuiAndCheckAction(), CustomAnvil.instance)); + // Displayed item will be updated later + this.materialSelection = new GuiItem(new ItemStack(Material.DIAMOND_SWORD), (event) -> { + event.setCancelled(true); + + }, CustomAnvil.instance); + + this.groupSelection = new GuiItem(new ItemStack(Material.CHEST), (event) -> { + event.setCancelled(true); + GroupSelectSettingGui enchantGui = new GroupSelectSettingGui( + "\u00A7e" + CasedStringUtil.snakeToUpperSpacedCase(this.group.toString()) + " \u00A7rGroups", + this, this, 0); + enchantGui.show(event.getWhoClicked()); + }, CustomAnvil.instance); + + this.pane.bindItem('1', this.materialSelection); + this.pane.bindItem('2', this.groupSelection); } - private @NotNull Consumer openGuiAction() { + private @NotNull Consumer openGuiAndCheckAction() { ConfirmActionGui deleteGui = createDeleteGui(); return event -> { event.setCancelled(true); @@ -77,7 +96,8 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui { player.sendMessage(GuiGlobalActions.NO_EDIT_PERM); return; } - // TODO test if group is used & cancel if so + // test if group is used & cancel & warn user if so + if(testAndWarnIfUsed(player)) return; deleteGui.show(player); }; @@ -85,12 +105,22 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui { private @NotNull ConfirmActionGui createDeleteGui() { Supplier deleteSupplier = () -> { + // test if group is used & cancel if so + if(!getUsedLocations(this.group).isEmpty()) return false; + ItemGroupManager manager = ConfigHolder.ITEM_GROUP_HOLDER.getItemGroupsManager(); - // TODO test if group is used & cancel if so - // TODO remove group - Bukkit.broadcastMessage("todo"); + // Remove from manager + manager.getGroupMap().remove(this.group.getName()); + // Remove from parent + this.parent.removeGeneric(this.group); + + // Remove self + cleanAndBeUnusable(); + + // Update config file storage + ConfigHolder.CUSTOM_RECIPE_HOLDER.getConfig().set(this.group.getName(), null); // Save boolean success = true; @@ -107,21 +137,157 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui { ); } + public boolean testAndWarnIfUsed(HumanEntity player){ + List usedLoc = getUsedLocations(this.group); + if(usedLoc.isEmpty()){ + return false; + } + StringBuilder stb = new StringBuilder("\u00A7cCan't delete group " +this.group.getName()+ + "\n\u00A7eUsed by:"); + int maxIndex = usedLoc.size(); + int nbMore = 0; + if(maxIndex > 10){ + nbMore = maxIndex - 9; + maxIndex = 9; + } + for (int i = 0; i < maxIndex; i++) { + stb.append("\n\u00A7r-\u00A7e ").append(usedLoc.get(i)); + } + if(nbMore > 0){ + stb.append("\u00A7cAnd ").append(nbMore).append(" More..."); + } + + player.sendMessage(stb.toString()); + return true; + } + + // return a string containing every instance of where this group is used + public static List getUsedLocations(AbstractMaterialGroup group){ + ArrayList usageList = new ArrayList<>(); + + // Test used by another group + ItemGroupManager groupManager = ConfigHolder.ITEM_GROUP_HOLDER.getItemGroupsManager(); + for (AbstractMaterialGroup otherGroup : groupManager.getGroupMap().values()) { + if(otherGroup.getGroups().contains(group)) { + usageList.add("group " + otherGroup.getName()); + } + } + + // Test if used for conflict + EnchantConflictManager conflictManager = ConfigHolder.CONFLICT_HOLDER.getConflictManager(); + for (EnchantConflictGroup conflict : conflictManager.getConflictList()) { + if(conflict.getCantConflictGroup().getGroups().contains(group)) { + usageList.add("conflict " + conflict); + } + } + + return usageList; + } + @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() { + // Prepare group lore + List groupLore = SelectGroupContainer.getGroupLore(this, "group", "include"); + // Configure enchant setting item + ItemStack matSelectItem = this.materialSelection.getItem(); + ItemMeta matSelectMeta = matSelectItem.getItemMeta(); + + matSelectMeta.setDisplayName("\u00A7aSelect included \u00A7eMaterials \u00A7aSettings"); + matSelectMeta.setLore(Collections.emptyList()); // temporary + matSelectMeta.addItemFlags(ItemFlag.values()); + + matSelectItem.setItemMeta(matSelectMeta); + + this.materialSelection.setItem(matSelectItem); // Just in case + + // Configure enchant setting item + ItemStack groupSelectItem = this.groupSelection.getItem(); + ItemMeta groupSelectMeta = groupSelectItem.getItemMeta(); + + groupSelectMeta.setDisplayName("\u00A7aSelect included \u00A73Groups \u00A7aSettings"); + groupSelectMeta.setLore(groupLore); + + groupSelectItem.setItemMeta(groupSelectMeta); + + this.groupSelection.setItem(groupSelectItem); // Just in case } @Override public void cleanAndBeUnusable() { } + + // ---------------------------- + // SelectGroupContainer methods + // ---------------------------- + + @Override + public Set getSelectedGroups() { + return this.group.getGroups(); + } + + @Override + public boolean setSelectedGroups(Set groups) { + // update group and referencing groups + updateGroup(this.group, groups); + + // Save file configuration to disk + if (GuiSharedConstant.TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE) { + return ConfigHolder.CONFLICT_HOLDER.saveToDisk(GuiSharedConstant.TEMPORARY_DO_BACKUP_EVERY_SAVE); + } + + return true; + } + + private void updateGroup(@NotNull AbstractMaterialGroup group, Set groups){ + // Set live configuration + group.setGroups(groups); + + // Write to file configuration + groups = group.getGroups(); // Maybe some group may have been rejected + String[] groupNames = new String[groups.size()]; + int index = 0; + for (AbstractMaterialGroup otherGroup : groups) { + groupNames[index++] = otherGroup.getName(); + } + + ConfigHolder.ITEM_GROUP_HOLDER.getConfig().set(this.group.getName()+"."+ItemGroupManager.GROUP_LIST_PATH, groupNames); + + // Try to update referencing group. kind of expensive operation in some case. + for (AbstractMaterialGroup otherGroup : ConfigHolder.ITEM_GROUP_HOLDER.getItemGroupsManager().getGroupMap().values()) { + if(otherGroup.getGroups().contains(group)){ + Set groupClone = new HashSet<>(otherGroup.getGroups()); + updateGroup(otherGroup, groupClone); + } + } + + // Update parent & local by extension + if(group instanceof IncludeGroup){ + this.parent.updateValueForGeneric((IncludeGroup) group, true); + } + + // We assume a backup & save call we be done soon after + } + + @Override + public Set illegalGroups() { + Set illegal = new HashSet<>(); + + for (AbstractMaterialGroup otherGroup : ConfigHolder.ITEM_GROUP_HOLDER.getItemGroupsManager().getGroupMap().values()) { + if(otherGroup.isReferencing(this.group)){ + illegal.add(otherGroup); + } + } + illegal.add(this.group); + + return illegal; + } } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/GroupSelectSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/GroupSelectSettingGui.java index 7623ae5..9808a8b 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/GroupSelectSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/GroupSelectSettingGui.java @@ -69,7 +69,7 @@ public class GroupSelectSettingGui extends AbstractSettingGui { Set illegalGroup = this.groupContainer.illegalGroups(); for (AbstractMaterialGroup group : ConfigHolder.ITEM_GROUP_HOLDER.getItemGroupsManager().getGroupMap().values()) { if (illegalGroup.contains(group)) { - return; + continue; } filledEnchant.addItem(getGuiItemFromGroup(group)); } @@ -113,7 +113,7 @@ public class GroupSelectSettingGui extends AbstractSettingGui { meta.removeEnchant(Enchantment.DAMAGE_UNDEAD); meta.setLore(FALSE_LORE); } - meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ENCHANTS); + meta.addItemFlags(ItemFlag.values()); item.setItemMeta(meta); } From 257a3b4696e745c64ae6978e721bbacc9fabd68e Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Tue, 23 Apr 2024 00:02:44 +0200 Subject: [PATCH 04/17] Add custom lore for item setting gui. --- .../elements/CustomRecipeSubSettingGui.java | 12 ++++-- .../gui/config/settings/ItemSettingGui.java | 37 ++++++++++++------- .../cuanvil/gui/util/GuiGlobalItems.java | 1 + 3 files changed, 34 insertions(+), 16 deletions(-) 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 ff1249b..1a9a022 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 @@ -87,15 +87,21 @@ public class CustomRecipeSubSettingGui extends MappedToListSubSettingGui { this.leftItemFactory = ItemSettingGui.itemFactory("\u00A7eRecipe Left \u00A78Item", this, this.anvilRecipe + "." + AnvilCustomRecipe.LEFT_ITEM_CONFIG, ConfigHolder.CUSTOM_RECIPE_HOLDER, - AnvilCustomRecipe.Companion.getDEFAULT_LEFT_ITEM_CONFIG()); + AnvilCustomRecipe.Companion.getDEFAULT_LEFT_ITEM_CONFIG(), + "\u00A77Set the left item of the custom craft", + "\u00A77\u25A0 + \u25A1 = \u25A1"); this.rightItemFactory = ItemSettingGui.itemFactory("\u00A7eRecipe Right \u00A78Item", this, this.anvilRecipe + "." + AnvilCustomRecipe.RIGHT_ITEM_CONFIG, ConfigHolder.CUSTOM_RECIPE_HOLDER, - AnvilCustomRecipe.Companion.getDEFAULT_RIGHT_ITEM_CONFIG()); + AnvilCustomRecipe.Companion.getDEFAULT_RIGHT_ITEM_CONFIG(), + "\u00A77Set the right item of the custom craft", + "\u00A77\u25A1 + \u25A0 = \u25A1"); this.resultItemFactory = ItemSettingGui.itemFactory("\u00A7aRecipe Result \u00A78Item", this, this.anvilRecipe + "." + AnvilCustomRecipe.RESULT_ITEM_CONFIG, ConfigHolder.CUSTOM_RECIPE_HOLDER, - AnvilCustomRecipe.Companion.getDEFAULT_RESULT_ITEM_CONFIG()); + AnvilCustomRecipe.Companion.getDEFAULT_RESULT_ITEM_CONFIG(), + "\u00A77Set the result item of the custom craft", + "\u00A77\u25A1 + \u25A1 = \u25A0"); } private ConfirmActionGui createDeleteGui() { 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 d88452a..47514e1 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 @@ -16,6 +16,7 @@ import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.util.MetricsUtil; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.function.Consumer; @@ -161,20 +162,22 @@ public class ItemSettingGui extends AbstractSettingGui { /** * Create aa item setting factory from setting's parameters. * - * @param title The title of the gui. - * @param parent Parent gui to go back when completed. - * @param configPath Configuration path of this setting. - * @param config Configuration holder of this setting. - * @param defaultVal Default value if not found on the config. + * @param title The title of the gui. + * @param parent Parent gui to go back when completed. + * @param configPath Configuration path of this setting. + * @param config Configuration holder of this setting. + * @param defaultVal Default value if not found on the config. + * @param displayLore Gui display item lore. * @return A factory for an item setting gui. */ public static ItemSettingGui.ItemSettingFactory itemFactory(@NotNull String title, ValueUpdatableGui parent, String configPath, ConfigHolder config, - ItemStack defaultVal) { + ItemStack defaultVal, + String... displayLore) { return new ItemSettingGui.ItemSettingFactory( title, parent, configPath, config, - defaultVal); + defaultVal, displayLore); } /** @@ -185,25 +188,29 @@ public class ItemSettingGui extends AbstractSettingGui { String title; ValueUpdatableGui parent; ItemStack defaultVal; + List displayLore; /** * Constructor for an item setting gui factory. * - * @param title The title of the gui. - * @param parent Parent gui to go back when completed. - * @param configPath Configuration path of this setting. - * @param config Configuration holder of this setting. - * @param defaultVal Default value if not found on the config. + * @param title The title of the gui. + * @param parent Parent gui to go back when completed. + * @param configPath Configuration path of this setting. + * @param config Configuration holder of this setting. + * @param defaultVal Default value if not found on the config. + * @param displayLore Gui display item lore. */ protected ItemSettingFactory( @NotNull String title, ValueUpdatableGui parent, String configPath, ConfigHolder config, - ItemStack defaultVal) { + ItemStack defaultVal, + String... displayLore) { super(configPath, config); this.title = title; this.parent = parent; this.defaultVal = defaultVal; + this.displayLore = Arrays.asList(displayLore); } /** @@ -221,6 +228,10 @@ public class ItemSettingGui extends AbstractSettingGui { return this.config.getConfig().getItemStack(this.configPath, this.defaultVal); } + public List getDisplayLore() { + return displayLore; + } + @Override public AbstractSettingGui create() { // Get current value or default 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 d72a988..f2e0563 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java @@ -288,6 +288,7 @@ public class GuiGlobalItems { } ItemMeta meta = item.getItemMeta(); meta.setDisplayName("\u00A7a" + name); + meta.setLore(factory.getDisplayLore()); item.setItemMeta(meta); From 852304461399d8b431dc250fa91197e02408bae8 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Tue, 23 Apr 2024 01:46:33 +0200 Subject: [PATCH 05/17] Progress on config GUI: - Finished GroupConfigSubSettingGui. - Progress on MaterialSelectSettingGui --- .../cuanvil/gui/config/MainConfigGui.java | 3 +- .../gui/config/SelectGroupContainer.java | 2 +- .../gui/config/SelectMaterialContainer.java | 31 ++- .../gui/config/ask/SelectItemTypeGui.java | 1 - .../gui/config/list/ElementListConfigGui.java | 18 +- .../config/list/MappedGuiListConfigGui.java | 1 + .../config/list/MaterialSelectSettingGui.java | 181 ++++++++++++++++++ .../config/list/UnitRepairElementListGui.java | 1 + .../ElementMappedToListGui.java | 2 +- .../elements/GroupConfigSubSettingGui.java | 129 +++++++++++-- .../elements/MappedToListSubSettingGui.java | 1 - .../gui/config/settings/ItemSettingGui.java | 2 +- .../cuanvil/group/AbstractMaterialGroup.kt | 2 + .../alexcrea/cuanvil/group/ExcludeGroup.kt | 9 + .../alexcrea/cuanvil/group/IncludeGroup.kt | 14 +- 15 files changed, 359 insertions(+), 38 deletions(-) create mode 100644 src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MaterialSelectSettingGui.java rename src/main/java/xyz/alexcrea/cuanvil/gui/config/list/{ => elements}/ElementMappedToListGui.java (84%) 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 61307db..b33ae68 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java @@ -6,7 +6,6 @@ import com.github.stefvanschie.inventoryframework.pane.PatternPane; import com.github.stefvanschie.inventoryframework.pane.util.Pattern; import io.delilaheve.CustomAnvil; import org.bukkit.Material; -import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import xyz.alexcrea.cuanvil.gui.config.global.*; @@ -87,7 +86,7 @@ public class MainConfigGui extends ChestGui { ItemStack groupItemstack = new ItemStack(Material.CHEST); ItemMeta groupMeta = groupItemstack.getItemMeta(); - groupMeta.setDisplayName("\u00A7aMaterial Groups"); + groupMeta.setDisplayName("\u00A7aGroups"); groupMeta.setLore(Collections.singletonList("\u00A77Click here to open material group menu")); groupItemstack.setItemMeta(groupMeta); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectGroupContainer.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectGroupContainer.java index 1b640b3..c8668d0 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectGroupContainer.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectGroupContainer.java @@ -22,7 +22,7 @@ public interface SelectGroupContainer { groupLore.add("\u00A77Allow you to select a list of \u00A73Groups \u00A77that this " + containerType + " should " + groupAction); Set grouos = container.getSelectedGroups(); if (grouos.isEmpty()) { - groupLore.add("\u00A77There is no "+groupAction+"d groups for this "+containerType+"."); + groupLore.add("\u00A77There is no "+groupAction+"d group for this "+containerType+"."); } else { groupLore.add("\u00A77List of "+groupAction+"d groups for this "+containerType+":"); Iterator groupIterator = grouos.iterator(); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectMaterialContainer.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectMaterialContainer.java index bd78db4..8b0e479 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectMaterialContainer.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectMaterialContainer.java @@ -1,8 +1,11 @@ package xyz.alexcrea.cuanvil.gui.config; import org.bukkit.Material; +import xyz.alexcrea.cuanvil.group.AbstractMaterialGroup; +import xyz.alexcrea.cuanvil.gui.config.list.elements.GroupConfigSubSettingGui; +import xyz.alexcrea.cuanvil.util.CasedStringUtil; -import java.util.EnumSet; +import java.util.*; public interface SelectMaterialContainer { @@ -12,4 +15,30 @@ public interface SelectMaterialContainer { EnumSet illegalMaterials(); + static List getMaterialLore(SelectMaterialContainer container, String containerType, String action){ + // Prepare material lore + ArrayList groupLore = new ArrayList<>(); + groupLore.add("\u00A77Allow you to select a list of \u00A7ematerials \u00A77that this " + containerType + " should " + action); + Set materialSet = container.getSelectedMaterials(); + if (materialSet.isEmpty()) { + groupLore.add("\u00A77There is no "+action+"d material for this "+containerType+"."); + } else { + groupLore.add("\u00A77List of "+action+"d materials for this "+containerType+":"); + Iterator materialIterator = materialSet.iterator(); + + boolean greaterThanMax = materialSet.size() > 5; + int maxindex = (greaterThanMax ? 4 : materialSet.size()); + for (int i = 0; i < maxindex; i++) { + // format string like "- Stone Sword" + String formattedName = CasedStringUtil.snakeToUpperSpacedCase(materialIterator.next().name().toLowerCase()); + groupLore.add("\u00A77- \u00A7e" + formattedName); + + } + if (greaterThanMax) { + groupLore.add("\u00A77And " + (materialSet.size() - 4) + " more..."); + } + } + return groupLore; + } + } 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 index 0ca2a38..eb15243 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java @@ -16,7 +16,6 @@ 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 { diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/ElementListConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/ElementListConfigGui.java index cb2ccf5..250bed7 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/ElementListConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/ElementListConfigGui.java @@ -34,7 +34,14 @@ public abstract class ElementListConfigGui< T > extends ValueUpdatableGui { this.namePrefix = title; // Back item panel - Pattern pattern = new Pattern( + Pattern pattern = getBackgroundPattern(); + this.backgroundPane = new PatternPane(0, 0, 9, 6, Pane.Priority.LOW, pattern); + GuiGlobalItems.addBackItem(this.backgroundPane, MainConfigGui.INSTANCE); + + } + + protected Pattern getBackgroundPattern(){ + return new Pattern( GuiSharedConstant.EMPTY_GUI_FULL_LINE, GuiSharedConstant.EMPTY_GUI_FULL_LINE, GuiSharedConstant.EMPTY_GUI_FULL_LINE, @@ -42,12 +49,8 @@ public abstract class ElementListConfigGui< T > extends ValueUpdatableGui { GuiSharedConstant.EMPTY_GUI_FULL_LINE, "B11L1R11C" ); - this.backgroundPane = new PatternPane(0, 0, 9, 6, Pane.Priority.LOW, pattern); - GuiGlobalItems.addBackItem(this.backgroundPane, MainConfigGui.INSTANCE); - } - protected OutlinePane firstPage; protected ArrayList pages; protected HashMap pageMap; @@ -103,7 +106,10 @@ public abstract class ElementListConfigGui< T > extends ValueUpdatableGui { viewer.setItemOnCursor(cursor); }, CustomAnvil.instance); - this.backgroundPane.bindItem('C', prepareCreateNewItem()); + GuiItem createNew = prepareCreateNewItem(); + if(createNew != null){ + this.backgroundPane.bindItem('C', createNew); + } } protected void reloadValues(){ this.firstPage.clear(); 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 4a4baeb..5438600 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 @@ -4,6 +4,7 @@ import com.github.stefvanschie.inventoryframework.gui.GuiItem; import io.delilaheve.CustomAnvil; import org.bukkit.entity.HumanEntity; import org.jetbrains.annotations.NotNull; +import xyz.alexcrea.cuanvil.gui.config.list.elements.ElementMappedToListGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; import java.util.Locale; diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MaterialSelectSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MaterialSelectSettingGui.java new file mode 100644 index 0000000..c7831ec --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MaterialSelectSettingGui.java @@ -0,0 +1,181 @@ +package xyz.alexcrea.cuanvil.gui.config.list; + +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 io.delilaheve.util.ConfigOptions; +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.gui.config.SelectMaterialContainer; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; +import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; +import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import java.util.logging.Level; + +public class MaterialSelectSettingGui extends MappedElementListConfigGui { + + private final SelectMaterialContainer selector; + private final List defaultMaterials; + private final int defaultMaterialHash; + private int nowMaterialHash; + + public MaterialSelectSettingGui( + @NotNull SelectMaterialContainer selector, + @NotNull String title, + @NotNull Gui backGui) { + super(title); + this.selector = selector; + this.defaultMaterials = new ArrayList<>(this.selector.getSelectedMaterials()); + + this.defaultMaterialHash = hashFromMaterialList(this.defaultMaterials); + this.nowMaterialHash = this.defaultMaterialHash; + + init(); + + // Change back item + this.backgroundPane.bindItem('B', GuiGlobalItems.backItem(backGui)); + } + + @Override + protected Pattern getBackgroundPattern(){ + return new Pattern( + GuiSharedConstant.EMPTY_GUI_FULL_LINE, + GuiSharedConstant.EMPTY_GUI_FULL_LINE, + GuiSharedConstant.EMPTY_GUI_FULL_LINE, + GuiSharedConstant.EMPTY_GUI_FULL_LINE, + GuiSharedConstant.EMPTY_GUI_FULL_LINE, + "BT1LAR11S" + ); + } + + private GuiItem saveItem; + private GuiItem noChangeItem; + + @Override + protected void prepareStaticValues() { + super.prepareStaticValues(); + + // Temporary leave item + GuiItem temporaryLeave = GuiGlobalItems.temporaryCloseGuiToSelectItem(Material.YELLOW_TERRACOTTA, this); + this.backgroundPane.bindItem('T', temporaryLeave); + + // Select new mat item + ItemStack selectItem = new ItemStack(Material.LIME_STAINED_GLASS_PANE); + ItemMeta selectMeta = selectItem.getItemMeta(); + + selectMeta.setDisplayName("aaaaaaa"); + + selectItem.setItemMeta(selectMeta); + + this.backgroundPane.bindItem('A', new GuiItem(selectItem, setItemAsCursor(), CustomAnvil.instance)); + + // Save item + this.saveItem = GuiGlobalItems.noChangeItem(); + + this.noChangeItem = GuiGlobalItems.noChangeItem(); + this.backgroundPane.bindItem('S', this.noChangeItem); + + } + + /** + * @return A consumer to update the current setting's value. + */ + protected Consumer setItemAsCursor() { + return event -> { + event.setCancelled(true); + + HumanEntity player = event.getWhoClicked(); + ItemStack cursor = player.getItemOnCursor(); + + if(cursor.getType().isAir()) return; + + Material cursorMat = cursor.getType(); + if(!this.elementGuiMap.containsKey(cursorMat)){ + updateValueForGeneric(cursorMat, true); + this.nowMaterialHash ^= cursorMat.hashCode(); + + testCanSave(); + } + + update(); + }; + } + + @Override + protected ItemStack createItemForGeneric(Material material) { + return new ItemStack(material); //this is temp TODO the function + } + + @Override + protected List getEveryDisplayableInstanceOfGeneric() { + return this.defaultMaterials; + } + + @Override + protected void updateElement(Material generic, GuiItem element) { + if(ConfigOptions.INSTANCE.getDebugLog()){ + CustomAnvil.instance.getLogger().log(Level.INFO, + "Call that should not happen happened...", + new IllegalStateException()); + } + } + + @Override + protected GuiItem newElementRequested(Material generic, GuiItem newItem) { + newItem.setAction(GuiGlobalActions.stayInPlace); //TODO ask to remove the item on click (or instant remove) + return newItem; + } + + @Override + protected GuiItem findItemFromElement(Material generic, GuiItem element) { + return element; + } + + @Override + protected GuiItem findGuiItemForRemoval(Material generic, GuiItem element) { + return element; + } + + private static int hashFromMaterialList(List materialList){ + int defaultMaterialHash = 0; + for (Material material : materialList) { + defaultMaterialHash ^= material.hashCode(); + } + return defaultMaterialHash; + } + + private void testCanSave() { + if(this.defaultMaterialHash == this.nowMaterialHash){ + this.backgroundPane.bindItem('S', this.noChangeItem); + }else{ + this.backgroundPane.bindItem('S', this.saveItem); + } + + } + + + + // Unused functions. + @Override + protected GuiItem prepareCreateNewItem() {// Not used + return null; + } + @Override + protected Consumer prepareCreateItemConsumer(HumanEntity player) {// Not used + return null; + } + + @Override + protected String genericDisplayedName() {// Not Used + return null; + } +} diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/UnitRepairElementListGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/UnitRepairElementListGui.java index fdbc7d8..6ba78b4 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/UnitRepairElementListGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/UnitRepairElementListGui.java @@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.gui.config.ask.SelectItemTypeGui; import xyz.alexcrea.cuanvil.gui.config.global.UnitRepairConfigGui; +import xyz.alexcrea.cuanvil.gui.config.list.elements.ElementMappedToListGui; import xyz.alexcrea.cuanvil.gui.config.settings.DoubleSettingGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/ElementMappedToListGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/ElementMappedToListGui.java similarity index 84% rename from src/main/java/xyz/alexcrea/cuanvil/gui/config/list/ElementMappedToListGui.java rename to src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/ElementMappedToListGui.java index 11dad8d..26bee20 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/ElementMappedToListGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/ElementMappedToListGui.java @@ -1,4 +1,4 @@ -package xyz.alexcrea.cuanvil.gui.config.list; +package xyz.alexcrea.cuanvil.gui.config.list.elements; import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java index 744c2d4..e9499c4 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java @@ -14,8 +14,10 @@ import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.group.*; import xyz.alexcrea.cuanvil.gui.config.SelectGroupContainer; +import xyz.alexcrea.cuanvil.gui.config.SelectMaterialContainer; import xyz.alexcrea.cuanvil.gui.config.ask.ConfirmActionGui; import xyz.alexcrea.cuanvil.gui.config.global.GroupConfigGui; +import xyz.alexcrea.cuanvil.gui.config.list.MaterialSelectSettingGui; import xyz.alexcrea.cuanvil.gui.config.settings.GroupSelectSettingGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; @@ -26,7 +28,7 @@ import java.util.*; import java.util.function.Consumer; import java.util.function.Supplier; -public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implements SelectGroupContainer { +public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implements SelectGroupContainer, SelectMaterialContainer { private final GroupConfigGui parent; private final IncludeGroup group; @@ -36,7 +38,8 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen @NotNull GroupConfigGui parent, @NotNull IncludeGroup group, @NotNull GuiItem item) { - super(item, 3, group.getName()); + super(item, 3, + CasedStringUtil.snakeToUpperSpacedCase(group.getName()) + " Config"); this.parent = parent; this.group = group; @@ -71,12 +74,17 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen this.materialSelection = new GuiItem(new ItemStack(Material.DIAMOND_SWORD), (event) -> { event.setCancelled(true); + MaterialSelectSettingGui selectGui = new MaterialSelectSettingGui(this, + CasedStringUtil.snakeToUpperSpacedCase(group.getName()) + " Materials" + , this); + selectGui.show(event.getWhoClicked()); + }, CustomAnvil.instance); this.groupSelection = new GuiItem(new ItemStack(Material.CHEST), (event) -> { event.setCancelled(true); GroupSelectSettingGui enchantGui = new GroupSelectSettingGui( - "\u00A7e" + CasedStringUtil.snakeToUpperSpacedCase(this.group.toString()) + " \u00A7rGroups", + CasedStringUtil.snakeToUpperSpacedCase(this.group.getName()) + " Groups", this, this, 0); enchantGui.show(event.getWhoClicked()); }, CustomAnvil.instance); @@ -193,15 +201,18 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen @Override public void updateLocal() { + // Prepare material lore + List matLore = SelectMaterialContainer.getMaterialLore(this, "group", "include"); + // Prepare group lore List groupLore = SelectGroupContainer.getGroupLore(this, "group", "include"); - // Configure enchant setting item + // Configure included material setting item ItemStack matSelectItem = this.materialSelection.getItem(); ItemMeta matSelectMeta = matSelectItem.getItemMeta(); matSelectMeta.setDisplayName("\u00A7aSelect included \u00A7eMaterials \u00A7aSettings"); - matSelectMeta.setLore(Collections.emptyList()); // temporary + matSelectMeta.setLore(matLore); matSelectMeta.addItemFlags(ItemFlag.values()); matSelectItem.setItemMeta(matSelectMeta); @@ -226,7 +237,7 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen } // ---------------------------- - // SelectGroupContainer methods + // SelectGroupContainer related methods // ---------------------------- @Override @@ -259,22 +270,12 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen groupNames[index++] = otherGroup.getName(); } - ConfigHolder.ITEM_GROUP_HOLDER.getConfig().set(this.group.getName()+"."+ItemGroupManager.GROUP_LIST_PATH, groupNames); + ConfigHolder.ITEM_GROUP_HOLDER.getConfig().set(group.getName()+"."+ItemGroupManager.GROUP_LIST_PATH, groupNames); // Try to update referencing group. kind of expensive operation in some case. - for (AbstractMaterialGroup otherGroup : ConfigHolder.ITEM_GROUP_HOLDER.getItemGroupsManager().getGroupMap().values()) { - if(otherGroup.getGroups().contains(group)){ - Set groupClone = new HashSet<>(otherGroup.getGroups()); - updateGroup(otherGroup, groupClone); - } - } + updateDirectReferencingGroups(group); - // Update parent & local by extension - if(group instanceof IncludeGroup){ - this.parent.updateValueForGeneric((IncludeGroup) group, true); - } - - // We assume a backup & save call we be done soon after + // We assume a backup & save call will be done soon after } @Override @@ -290,4 +291,94 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen return illegal; } + + // ---------------------------- + // End of SelectGroupContainer related methods + // SelectGroupContainer related methods + // ---------------------------- + + @Override + public EnumSet getSelectedMaterials() { + return this.group.getNonGroupInheritedMaterials(); + } + + @Override + public boolean setSelectedMaterials(EnumSet materials) { + this.group.setNonGroupInheritedMaterials(materials); + + // Write to file configuration + String[] groupNames = new String[materials.size()]; + int index = 0; + for (Material otherGroup : materials) { + groupNames[index++] = otherGroup.name().toLowerCase(); + } + + ConfigHolder.ITEM_GROUP_HOLDER.getConfig().set(this.group.getName()+"."+ItemGroupManager.MATERIAL_LIST_PATH, groupNames); + + // update referencing groups + updateDirectReferencingGroups(this.group); + + // Save file configuration to disk + if (GuiSharedConstant.TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE) { + return ConfigHolder.CONFLICT_HOLDER.saveToDisk(GuiSharedConstant.TEMPORARY_DO_BACKUP_EVERY_SAVE); + } + return true; + } + + @Override + public EnumSet illegalMaterials() { + return EnumSet.noneOf(Material.class); + } + + // ---------------------------- + // End of SelectGroupContainer related methods + // ---------------------------- + + private void updateDirectReferencingGroups(AbstractMaterialGroup referenceTo){ + Collection everyStoredGroups = ConfigHolder.ITEM_GROUP_HOLDER.getItemGroupsManager().getGroupMap().values(); + List everyConflicts = ConfigHolder.CONFLICT_HOLDER.getConflictManager().getConflictList(); + + HashSet toUpdate = new HashSet<>(); + HashSet updateFuture = new HashSet<>(); + HashSet conflictGroupPlanned = new HashSet<>(); + + updateFuture.add(referenceTo); + while (!updateFuture.isEmpty()){ + HashSet temp = updateFuture; + updateFuture = toUpdate; + updateFuture.clear(); + toUpdate = temp; + + for (AbstractMaterialGroup testGroup : toUpdate) { + // Update other stored group + for (AbstractMaterialGroup otherGroup : everyStoredGroups) { + if(otherGroup.getGroups().contains(testGroup)){ + otherGroup.updateMaterials(); + toUpdate.add(otherGroup); + } + } + + // plan update for conflict groups + for (EnchantConflictGroup everyConflict : everyConflicts) { + AbstractMaterialGroup conflictGroup = everyConflict.getCantConflictGroup(); + if(conflictGroup.getGroups().contains(testGroup)){ + conflictGroupPlanned.add(conflictGroup); + } + } + + // Update parent & local by extension + if(testGroup instanceof IncludeGroup){ + this.parent.updateValueForGeneric((IncludeGroup) testGroup, false); + } + } + } + this.parent.update(); + + // Update conflict group + for (AbstractMaterialGroup conflictGroup : conflictGroupPlanned) { + conflictGroup.updateMaterials(); + } + + } + } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/MappedToListSubSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/MappedToListSubSettingGui.java index 08b4a2f..68273bc 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/MappedToListSubSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/MappedToListSubSettingGui.java @@ -5,7 +5,6 @@ import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import io.delilaheve.CustomAnvil; import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; -import xyz.alexcrea.cuanvil.gui.config.list.ElementMappedToListGui; public abstract class MappedToListSubSettingGui extends ValueUpdatableGui implements ElementMappedToListGui { 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 47514e1..6aadd95 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 @@ -123,7 +123,7 @@ public class ItemSettingGui extends AbstractSettingGui { /** * @return A consumer to update the current setting's value. */ - protected Consumer setItemAsCursor() { //TODO redo consumer + protected Consumer setItemAsCursor() { return event -> { event.setCancelled(true); diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/AbstractMaterialGroup.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/AbstractMaterialGroup.kt index f67e0c9..289f058 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/group/AbstractMaterialGroup.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/AbstractMaterialGroup.kt @@ -92,4 +92,6 @@ abstract class AbstractMaterialGroup(private val name: String) { return Material.PAPER } + abstract fun updateMaterials() + } \ No newline at end of file diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/ExcludeGroup.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/ExcludeGroup.kt index 609f0f5..247cb83 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/group/ExcludeGroup.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/ExcludeGroup.kt @@ -47,6 +47,15 @@ class ExcludeGroup(name: String) : AbstractMaterialGroup(name) { return includedGroup } + override fun updateMaterials() { + groupItems.clear() + groupItems.addAll(includedMaterial) + + includedGroup.forEach { group -> + groupItems.addAll(group.getMaterials()) + } + } + override fun getMaterials(): EnumSet { return groupItems } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/IncludeGroup.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/IncludeGroup.kt index 33354f1..968ceb1 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/group/IncludeGroup.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/IncludeGroup.kt @@ -45,7 +45,15 @@ class IncludeGroup(name: String) : AbstractMaterialGroup(name) { override fun setNonGroupInheritedMaterials(materials: EnumSet) { super.setNonGroupInheritedMaterials(materials) - // Update group items + + updateMaterials() + } + + override fun getGroups(): MutableSet { + return includedGroup + } + + override fun updateMaterials() { groupItems.clear() groupItems.addAll(includedMaterial) @@ -54,10 +62,6 @@ class IncludeGroup(name: String) : AbstractMaterialGroup(name) { } } - override fun getGroups(): MutableSet { - return includedGroup - } - override fun getMaterials(): EnumSet { return groupItems } From d622511e3c81f648dc2ead8b98a6f4a423e7065c Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Wed, 24 Apr 2024 18:28:52 +0200 Subject: [PATCH 06/17] Fix Custom recipe config GUI not being reloaded on reload config command. --- src/main/kotlin/xyz/alexcrea/cuanvil/command/ReloadExecutor.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/command/ReloadExecutor.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/command/ReloadExecutor.kt index 5119a47..841773f 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/command/ReloadExecutor.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/command/ReloadExecutor.kt @@ -43,6 +43,7 @@ class ReloadExecutor : CommandExecutor { EnchantConflictGui.INSTANCE.reloadValues() GroupConfigGui.INSTANCE.reloadValues() UnitRepairConfigGui.INSTANCE.reloadValues() + CustomRecipeConfigGui.INSTANCE.reloadValues() // & update metric MetricsUtil.testIfConfigIsDefault() From ebe3708eca7e9dbe3f31dfb21d7cbb7d4284b087 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Thu, 25 Apr 2024 22:27:50 +0200 Subject: [PATCH 07/17] Finished the MaterialSelectSettingGui. --- .../gui/config/ask/ConfirmActionGui.java | 16 +- .../config/list/MaterialSelectSettingGui.java | 181 ----------- .../elements/GroupConfigSubSettingGui.java | 9 +- .../settings/MaterialSelectSettingGui.java | 304 ++++++++++++++++++ .../cuanvil/gui/util/GuiGlobalItems.java | 4 +- .../cuanvil/gui/util/GuiSharedConstant.java | 9 +- 6 files changed, 332 insertions(+), 191 deletions(-) delete mode 100644 src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MaterialSelectSettingGui.java create mode 100644 src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/ConfirmActionGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/ConfirmActionGui.java index 5b962ed..d306ff1 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/ConfirmActionGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/ConfirmActionGui.java @@ -19,11 +19,14 @@ import java.util.logging.Level; public class ConfirmActionGui extends AbstractAskGui { public ConfirmActionGui(@NotNull String title, String actionDescription, - Gui backOnCancel, Gui backOnConfirm, Supplier onConfirm) { + Gui backOnCancel, Gui backOnConfirm, Supplier onConfirm, + boolean permanent) { super(3, title, backOnCancel); // Save item - this.pane.bindItem('S', new GuiItem(GuiSharedConstant.CONFIRM_ITEM, event -> { + this.pane.bindItem('S', new GuiItem( + (permanent ? GuiSharedConstant.CONFIRM_PERMANENT_ITEM : GuiSharedConstant.CONFIRM_ITEM), + event -> { event.setCancelled(true); HumanEntity player = event.getWhoClicked(); @@ -53,12 +56,19 @@ public class ConfirmActionGui extends AbstractAskGui { ItemMeta infoMeta = infoItem.getItemMeta(); infoMeta.setDisplayName("\u00A7eAre you sure ?"); - infoMeta.setLore(Arrays.asList(actionDescription.split("\n"))); + if(actionDescription != null){ + infoMeta.setLore(Arrays.asList(actionDescription.split("\n"))); + } infoItem.setItemMeta(infoMeta); pane.bindItem('I', new GuiItem(infoItem, GuiGlobalActions.stayInPlace, CustomAnvil.instance)); } + public ConfirmActionGui(@NotNull String title, String actionDescription, + Gui backOnCancel, Gui backOnConfirm, Supplier onConfirm){ + this(title, actionDescription, backOnCancel, backOnConfirm, onConfirm, true); + } + @Override protected Pattern getGuiPattern() { diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MaterialSelectSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MaterialSelectSettingGui.java deleted file mode 100644 index c7831ec..0000000 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MaterialSelectSettingGui.java +++ /dev/null @@ -1,181 +0,0 @@ -package xyz.alexcrea.cuanvil.gui.config.list; - -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 io.delilaheve.util.ConfigOptions; -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.gui.config.SelectMaterialContainer; -import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; -import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; -import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; -import java.util.logging.Level; - -public class MaterialSelectSettingGui extends MappedElementListConfigGui { - - private final SelectMaterialContainer selector; - private final List defaultMaterials; - private final int defaultMaterialHash; - private int nowMaterialHash; - - public MaterialSelectSettingGui( - @NotNull SelectMaterialContainer selector, - @NotNull String title, - @NotNull Gui backGui) { - super(title); - this.selector = selector; - this.defaultMaterials = new ArrayList<>(this.selector.getSelectedMaterials()); - - this.defaultMaterialHash = hashFromMaterialList(this.defaultMaterials); - this.nowMaterialHash = this.defaultMaterialHash; - - init(); - - // Change back item - this.backgroundPane.bindItem('B', GuiGlobalItems.backItem(backGui)); - } - - @Override - protected Pattern getBackgroundPattern(){ - return new Pattern( - GuiSharedConstant.EMPTY_GUI_FULL_LINE, - GuiSharedConstant.EMPTY_GUI_FULL_LINE, - GuiSharedConstant.EMPTY_GUI_FULL_LINE, - GuiSharedConstant.EMPTY_GUI_FULL_LINE, - GuiSharedConstant.EMPTY_GUI_FULL_LINE, - "BT1LAR11S" - ); - } - - private GuiItem saveItem; - private GuiItem noChangeItem; - - @Override - protected void prepareStaticValues() { - super.prepareStaticValues(); - - // Temporary leave item - GuiItem temporaryLeave = GuiGlobalItems.temporaryCloseGuiToSelectItem(Material.YELLOW_TERRACOTTA, this); - this.backgroundPane.bindItem('T', temporaryLeave); - - // Select new mat item - ItemStack selectItem = new ItemStack(Material.LIME_STAINED_GLASS_PANE); - ItemMeta selectMeta = selectItem.getItemMeta(); - - selectMeta.setDisplayName("aaaaaaa"); - - selectItem.setItemMeta(selectMeta); - - this.backgroundPane.bindItem('A', new GuiItem(selectItem, setItemAsCursor(), CustomAnvil.instance)); - - // Save item - this.saveItem = GuiGlobalItems.noChangeItem(); - - this.noChangeItem = GuiGlobalItems.noChangeItem(); - this.backgroundPane.bindItem('S', this.noChangeItem); - - } - - /** - * @return A consumer to update the current setting's value. - */ - protected Consumer setItemAsCursor() { - return event -> { - event.setCancelled(true); - - HumanEntity player = event.getWhoClicked(); - ItemStack cursor = player.getItemOnCursor(); - - if(cursor.getType().isAir()) return; - - Material cursorMat = cursor.getType(); - if(!this.elementGuiMap.containsKey(cursorMat)){ - updateValueForGeneric(cursorMat, true); - this.nowMaterialHash ^= cursorMat.hashCode(); - - testCanSave(); - } - - update(); - }; - } - - @Override - protected ItemStack createItemForGeneric(Material material) { - return new ItemStack(material); //this is temp TODO the function - } - - @Override - protected List getEveryDisplayableInstanceOfGeneric() { - return this.defaultMaterials; - } - - @Override - protected void updateElement(Material generic, GuiItem element) { - if(ConfigOptions.INSTANCE.getDebugLog()){ - CustomAnvil.instance.getLogger().log(Level.INFO, - "Call that should not happen happened...", - new IllegalStateException()); - } - } - - @Override - protected GuiItem newElementRequested(Material generic, GuiItem newItem) { - newItem.setAction(GuiGlobalActions.stayInPlace); //TODO ask to remove the item on click (or instant remove) - return newItem; - } - - @Override - protected GuiItem findItemFromElement(Material generic, GuiItem element) { - return element; - } - - @Override - protected GuiItem findGuiItemForRemoval(Material generic, GuiItem element) { - return element; - } - - private static int hashFromMaterialList(List materialList){ - int defaultMaterialHash = 0; - for (Material material : materialList) { - defaultMaterialHash ^= material.hashCode(); - } - return defaultMaterialHash; - } - - private void testCanSave() { - if(this.defaultMaterialHash == this.nowMaterialHash){ - this.backgroundPane.bindItem('S', this.noChangeItem); - }else{ - this.backgroundPane.bindItem('S', this.saveItem); - } - - } - - - - // Unused functions. - @Override - protected GuiItem prepareCreateNewItem() {// Not used - return null; - } - @Override - protected Consumer prepareCreateItemConsumer(HumanEntity player) {// Not used - return null; - } - - @Override - protected String genericDisplayedName() {// Not Used - return null; - } -} diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java index e9499c4..8f1d905 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java @@ -17,8 +17,8 @@ import xyz.alexcrea.cuanvil.gui.config.SelectGroupContainer; import xyz.alexcrea.cuanvil.gui.config.SelectMaterialContainer; import xyz.alexcrea.cuanvil.gui.config.ask.ConfirmActionGui; import xyz.alexcrea.cuanvil.gui.config.global.GroupConfigGui; -import xyz.alexcrea.cuanvil.gui.config.list.MaterialSelectSettingGui; import xyz.alexcrea.cuanvil.gui.config.settings.GroupSelectSettingGui; +import xyz.alexcrea.cuanvil.gui.config.settings.MaterialSelectSettingGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; @@ -233,7 +233,7 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen @Override public void cleanAndBeUnusable() { - + //TODO } // ---------------------------- @@ -294,6 +294,7 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen // ---------------------------- // End of SelectGroupContainer related methods + // ---------------------------- // SelectGroupContainer related methods // ---------------------------- @@ -320,14 +321,14 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen // Save file configuration to disk if (GuiSharedConstant.TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE) { - return ConfigHolder.CONFLICT_HOLDER.saveToDisk(GuiSharedConstant.TEMPORARY_DO_BACKUP_EVERY_SAVE); + return ConfigHolder.ITEM_GROUP_HOLDER.saveToDisk(GuiSharedConstant.TEMPORARY_DO_BACKUP_EVERY_SAVE); } return true; } @Override public EnumSet illegalMaterials() { - return EnumSet.noneOf(Material.class); + return EnumSet.of(Material.AIR); } // ---------------------------- diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java new file mode 100644 index 0000000..5419b62 --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java @@ -0,0 +1,304 @@ +package xyz.alexcrea.cuanvil.gui.config.settings; + +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.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; +import xyz.alexcrea.cuanvil.gui.config.SelectMaterialContainer; +import xyz.alexcrea.cuanvil.gui.config.ask.ConfirmActionGui; +import xyz.alexcrea.cuanvil.gui.config.list.MappedElementListConfigGui; +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.util.CasedStringUtil; + +import java.util.*; +import java.util.function.Consumer; + +public class MaterialSelectSettingGui extends MappedElementListConfigGui { + + private final SelectMaterialContainer selector; + private final Gui backGui; + private boolean instantRemove; + + private final List defaultMaterials; + private final EnumSet illegalMaterials; + private final int defaultMaterialHash; + private int nowMaterialHash; + + public MaterialSelectSettingGui( + @NotNull SelectMaterialContainer selector, + @NotNull String title, + @NotNull Gui backGui) { + super(title); + this.selector = selector; + this.backGui = backGui; + this.instantRemove = false; + + this.defaultMaterials = new ArrayList<>(this.selector.getSelectedMaterials()); + this.illegalMaterials = this.selector.illegalMaterials(); + + this.defaultMaterialHash = hashFromMaterialList(this.defaultMaterials); + this.nowMaterialHash = this.defaultMaterialHash; + + init(); + + // Change back item + this.backgroundPane.bindItem('B', GuiGlobalItems.backItem(backGui)); + } + + @Override + protected Pattern getBackgroundPattern(){ + return new Pattern( + GuiSharedConstant.EMPTY_GUI_FULL_LINE, + GuiSharedConstant.EMPTY_GUI_FULL_LINE, + GuiSharedConstant.EMPTY_GUI_FULL_LINE, + GuiSharedConstant.EMPTY_GUI_FULL_LINE, + GuiSharedConstant.EMPTY_GUI_FULL_LINE, + "BT1LAR1IS" + ); + } + + private GuiItem saveItem; + private GuiItem noChangeItem; + + private GuiItem instantRemoveOn; + private GuiItem instantRemoveOff; + + @Override + protected void prepareStaticValues() { + super.prepareStaticValues(); + + // Temporary leave item + GuiItem temporaryLeave = GuiGlobalItems.temporaryCloseGuiToSelectItem(Material.YELLOW_TERRACOTTA, this); + this.backgroundPane.bindItem('T', temporaryLeave); + + // Select new mat item + ItemStack selectItem = new ItemStack(Material.BLUE_STAINED_GLASS_PANE); + ItemMeta selectMeta = selectItem.getItemMeta(); + + selectMeta.setDisplayName("\u00A7aAdd Item"); + selectMeta.setLore(Arrays.asList( + "\u00A77Click here with an item to add", + "\u00A77it's Material to the list.")); + + selectItem.setItemMeta(selectMeta); + + this.backgroundPane.bindItem('A', new GuiItem(selectItem, setItemAsCursor(), CustomAnvil.instance)); + + // Save item + this.saveItem = prepareSaveItem(); + + this.noChangeItem = GuiGlobalItems.noChangeItem(); + this.backgroundPane.bindItem('S', this.noChangeItem); + + // Instant Remove On item + ItemStack instantRemoveOnItem = new ItemStack(Material.LIME_STAINED_GLASS_PANE); + ItemMeta instantRemoveOnMeta = instantRemoveOnItem.getItemMeta(); + + instantRemoveOnMeta.setDisplayName("\u00A7eInstant remove is \u00A7aEnabled \u00A7e!"); + instantRemoveOnMeta.setLore( + Collections.singletonList("\u00A77Click here to disable the instant remove")); + + instantRemoveOnItem.setItemMeta(instantRemoveOnMeta); + + // Instant Remove Off item + ItemStack instantRemoveOffItem = new ItemStack(Material.RED_STAINED_GLASS_PANE); + ItemMeta instantRemoveOffMeta = instantRemoveOffItem.getItemMeta(); + + instantRemoveOffMeta.setDisplayName("\u00A7eInstant remove is \u00A7cDisabled \u00A7e!"); + instantRemoveOffMeta.setLore( + Collections.singletonList("\u00A77Click here to enable the instant remove")); + + instantRemoveOffItem.setItemMeta(instantRemoveOffMeta); + + // Instant Remove gui items + this.instantRemoveOn = new GuiItem(instantRemoveOnItem, (event -> { + this.instantRemove = false; + this.backgroundPane.bindItem('I', this.instantRemoveOff); + update(); + }), CustomAnvil.instance); + + this.instantRemoveOff = new GuiItem(instantRemoveOffItem, (event -> { + this.instantRemove = true; + this.backgroundPane.bindItem('I', this.instantRemoveOn); + update(); + }), CustomAnvil.instance); + + this.backgroundPane.bindItem('I', this.instantRemoveOff); + } + + private GuiItem prepareSaveItem() { + ItemStack saveItemStack = new ItemStack(GuiGlobalItems.DEFAULT_SAVE_ITEM); + ItemMeta saveMeta = saveItemStack.getItemMeta(); + + saveMeta.setDisplayName("\u00A7aSave"); + + saveItemStack.setItemMeta(saveMeta); + + return new GuiItem(saveItemStack, event -> { + event.setCancelled(true); + + HumanEntity player = event.getWhoClicked(); + // Do not allow to save configuration if player do not have edit configuration permission + if (!player.hasPermission(CustomAnvil.editConfigPermission)) { + player.closeInventory(); + player.sendMessage(GuiGlobalActions.NO_EDIT_PERM); + return; + } + if(!testCanSave()) return; + + + // Save setting + EnumSet result = EnumSet.noneOf(Material.class); + result.addAll(this.elementGuiMap.keySet()); + + if(!this.selector.setSelectedMaterials(result)){ + player.sendMessage("\u00A7cSomething went wrong while saving the change of value."); + } + + // Return to parent + this.backGui.show(player); + + }, CustomAnvil.instance); + } + + /** + * @return A consumer to update the current setting's value. + */ + protected Consumer setItemAsCursor() { + return event -> { + event.setCancelled(true); + + HumanEntity player = event.getWhoClicked(); + ItemStack cursor = player.getItemOnCursor(); + + // Test if cursor material allowed + Material cursorMat = cursor.getType(); + if(cursorMat.isAir()) return; + if(this.illegalMaterials.contains(cursorMat)) return; + + // Update gui only if item did not exist before. + if(!this.elementGuiMap.containsKey(cursorMat)){ + updateValueForGeneric(cursorMat, true); + this.nowMaterialHash ^= cursorMat.hashCode(); + + setSaveItem(); + update(); + } + }; + } + + @Override + protected ItemStack createItemForGeneric(Material material) { + ItemStack item = new ItemStack(material); + ItemMeta meta = item.getItemMeta(); + + if(meta == null) return item; + meta.setDisplayName("\u00A7f" + CasedStringUtil.snakeToUpperSpacedCase(material.name())); + meta.setLore(Collections.singletonList("\u00A77Click here to remove this material from the list")); + meta.addItemFlags(ItemFlag.values()); + + item.setItemMeta(meta); + + return item; + } + + @Override + protected List getEveryDisplayableInstanceOfGeneric() { + return this.defaultMaterials; + } + + @Override + protected void updateElement(Material material, GuiItem element) { + // Nothing happen here I think + } + + @Override + protected GuiItem newElementRequested(Material material, GuiItem newItem) { + newItem.setAction(event -> { + if(this.instantRemove){ + removeMaterial(material); + }else { + String materialName = CasedStringUtil.snakeToUpperSpacedCase(material.name().toLowerCase()); + + // Create and show confirm remove gui. + ConfirmActionGui confirmGui = new ConfirmActionGui( + "Remove " + materialName, + "\u00A77Confirm Remove " + materialName.toLowerCase() + " from this list.", + this, this, + () -> { + removeMaterial(material); + return true; + }, false + ); + confirmGui.show(event.getWhoClicked()); + + } + }); + return newItem; + } + + private void removeMaterial(Material material) { + if(this.elementGuiMap.containsKey(material)){ + this.nowMaterialHash ^= material.hashCode(); + setSaveItem(); + removeGeneric(material); + } + + } + + @Override + protected GuiItem findItemFromElement(Material generic, GuiItem element) { + return element; + } + + @Override + protected GuiItem findGuiItemForRemoval(Material generic, GuiItem element) { + return element; + } + + private static int hashFromMaterialList(List materialList){ + int defaultMaterialHash = 0; + for (Material material : materialList) { + defaultMaterialHash ^= material.hashCode(); + } + return defaultMaterialHash; + } + + private void setSaveItem() { + if(!testCanSave()){ + this.backgroundPane.bindItem('S', this.noChangeItem); + }else{ + this.backgroundPane.bindItem('S', this.saveItem); + } + + } + + private boolean testCanSave() { + return this.defaultMaterialHash != this.nowMaterialHash; + } + + + // Unused functions. + @Override + protected GuiItem prepareCreateNewItem() {// Not used + return null; + } + @Override + protected Consumer prepareCreateItemConsumer(HumanEntity player) {// Not used + return null; + } + + @Override + protected String genericDisplayedName() {// Not Used + return null; + } +} 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 f2e0563..d7fa41f 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java @@ -117,8 +117,8 @@ public class GuiGlobalItems { addBackgroundItem(target, DEFAULT_BACKGROUND_MAT); } - private static final Material DEFAULT_SAVE_ITEM = Material.LIME_DYE; - private static final Material DEFAULT_NO_CHANGE_ITEM = Material.GRAY_DYE; + public static final Material DEFAULT_SAVE_ITEM = Material.LIME_DYE; + public static final Material DEFAULT_NO_CHANGE_ITEM = Material.GRAY_DYE; /** * Create a new save setting GuiItem. 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 0ad90a6..a2fa352 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiSharedConstant.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiSharedConstant.java @@ -55,6 +55,7 @@ public class GuiSharedConstant { public static final ItemStack CANCEL_ITEM; public static final ItemStack CONFIRM_ITEM; + public static final ItemStack CONFIRM_PERMANENT_ITEM; static { CANCEL_ITEM = new ItemStack(Material.RED_TERRACOTTA); @@ -66,9 +67,15 @@ public class GuiSharedConstant { CONFIRM_ITEM = new ItemStack(Material.GREEN_TERRACOTTA); meta = CONFIRM_ITEM.getItemMeta(); meta.setDisplayName("\u00A7aConfirm"); + meta.setLore(Collections.singletonList("\u00A77Confirm current action.")); + CONFIRM_ITEM.setItemMeta(meta); + + CONFIRM_PERMANENT_ITEM = new ItemStack(Material.GREEN_TERRACOTTA); + meta = CONFIRM_PERMANENT_ITEM.getItemMeta(); + meta.setDisplayName("\u00A7aConfirm"); meta.setLore(Arrays.asList("\u00A77Confirm current action.", "\u00A74Cation: This action can't be canceled.")); - CONFIRM_ITEM.setItemMeta(meta); + CONFIRM_PERMANENT_ITEM.setItemMeta(meta); } From a4204263e99b9a22be1de6e20cd0f0d055e10e93 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Thu, 25 Apr 2024 22:44:49 +0200 Subject: [PATCH 08/17] Make GroupConfigSubSettingGui unusabled when asked. --- .../elements/GroupConfigSubSettingGui.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java index 8f1d905..29d412b 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java @@ -33,6 +33,7 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen private final GroupConfigGui parent; private final IncludeGroup group; private final PatternPane pane; + private boolean usable = true; public GroupConfigSubSettingGui( @NotNull GroupConfigGui parent, @@ -194,6 +195,7 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen @Override public void updateGuiValues() { + if(!this.usable) return; // Parent should call updateLocal with this call this.parent.updateValueForGeneric(this.group, true); @@ -201,6 +203,7 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen @Override public void updateLocal() { + if(!this.usable) return; // Prepare material lore List matLore = SelectMaterialContainer.getMaterialLore(this, "group", "include"); @@ -233,7 +236,20 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen @Override public void cleanAndBeUnusable() { - //TODO + this.usable = false; + this.pane.bindItem('1', GuiGlobalItems.backgroundItem()); + this.pane.bindItem('2', GuiGlobalItems.backgroundItem()); + this.pane.bindItem('D', GuiGlobalItems.backgroundItem()); + + } + + @Override + public void show(@NotNull HumanEntity player) { + if(!this.usable) { + this.parent.show(player); + return; + } + super.show(player); } // ---------------------------- From 87a96cbbc2fceb2df12623e415aff8cd37029150 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Fri, 26 Apr 2024 16:37:51 +0200 Subject: [PATCH 09/17] Moved item creator to factory. --- .../gui/config/global/BasicConfigGui.java | 14 +- .../config/global/EnchantLimitConfigGui.java | 3 +- .../elements/CustomRecipeSubSettingGui.java | 10 +- .../EnchantConflictSubSettingGui.java | 2 +- .../gui/config/settings/BoolSettingsGui.java | 42 ++++++ .../gui/config/settings/IntSettingsGui.java | 37 +++++ .../gui/config/settings/ItemSettingGui.java | 37 +++++ .../cuanvil/gui/util/GuiGlobalItems.java | 133 ------------------ 8 files changed, 130 insertions(+), 148 deletions(-) diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java index 684e90f..f91cb57 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java @@ -128,36 +128,36 @@ public class BasicConfigGui extends ValueUpdatableGui { @Override public void updateGuiValues() { // limit repair item - GuiItem limitRepairItem = GuiGlobalItems.boolSettingGuiItem(this.limitRepairFactory); + GuiItem limitRepairItem = this.limitRepairFactory.getItem(); pane.bindItem('1', limitRepairItem); // rename cost item GuiItem limitRepairValueItem; if (this.limitRepairFactory.getConfiguredValue()) { - limitRepairValueItem = GuiGlobalItems.intSettingGuiItem(this.repairCostFactory, Material.EXPERIENCE_BOTTLE); + limitRepairValueItem = this.repairCostFactory.getItem(Material.EXPERIENCE_BOTTLE); } else { limitRepairValueItem = this.notNeededLimitValueItem; } pane.bindItem('2', limitRepairValueItem); // remove repair limit item - GuiItem removeRepairLimitItem = GuiGlobalItems.boolSettingGuiItem(this.removeRepairLimit); + GuiItem removeRepairLimitItem = this.removeRepairLimit.getItem(); pane.bindItem('3', removeRepairLimitItem); // item repair cost - GuiItem itemRepairCostItem = GuiGlobalItems.intSettingGuiItem(this.itemRepairCost, Material.ANVIL); + GuiItem itemRepairCostItem = this.itemRepairCost.getItem(Material.ANVIL); pane.bindItem('4', itemRepairCostItem); // unit repair cost - GuiItem unitRepairCostItem = GuiGlobalItems.intSettingGuiItem(this.unitRepairCost, Material.DIAMOND); + GuiItem unitRepairCostItem = this.unitRepairCost.getItem(Material.DIAMOND); pane.bindItem('5', unitRepairCostItem); // item rename cost - GuiItem itemRenameCost = GuiGlobalItems.intSettingGuiItem(this.itemRenameCost, Material.NAME_TAG); + GuiItem itemRenameCost = this.itemRenameCost.getItem(Material.NAME_TAG); pane.bindItem('6', itemRenameCost); // sacrifice illegal enchant cost - GuiItem illegalCostItem = GuiGlobalItems.intSettingGuiItem(this.sacrificeIllegalEnchantCost, Material.ENCHANTED_BOOK); + GuiItem illegalCostItem = this.sacrificeIllegalEnchantCost.getItem(Material.ENCHANTED_BOOK); pane.bindItem('7', illegalCostItem); update(); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java index 999f2a7..64c3b68 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java @@ -5,7 +5,6 @@ import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui; -import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.util.CasedStringUtil; import java.util.Locale; @@ -44,7 +43,7 @@ public class EnchantLimitConfigGui extends AbstractEnchantConfigGui Date: Sun, 28 Apr 2024 19:39:11 +0200 Subject: [PATCH 10/17] Allow to append lore for setting gui's item. --- .../gui/config/global/BasicConfigGui.java | 20 ++++-- .../config/global/EnchantCostConfigGui.java | 4 +- .../config/global/EnchantLimitConfigGui.java | 4 +- .../config/list/UnitRepairElementListGui.java | 1 + .../elements/CustomRecipeSubSettingGui.java | 1 + .../EnchantConflictSubSettingGui.java | 1 + .../config/settings/AbstractSettingGui.java | 6 +- .../gui/config/settings/BoolSettingsGui.java | 46 ++++++++----- .../gui/config/settings/DoubleSettingGui.java | 27 ++++++-- .../settings/EnchantCostSettingsGui.java | 14 +++- .../gui/config/settings/IntSettingsGui.java | 66 ++++++++++++------- .../gui/config/settings/ItemSettingGui.java | 19 ++++-- .../cuanvil/gui/util/GuiGlobalItems.java | 23 +++++-- 13 files changed, 159 insertions(+), 73 deletions(-) diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java index f91cb57..85c4c1d 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java @@ -79,7 +79,9 @@ public class BasicConfigGui extends ValueUpdatableGui { // rename cost item IntRange range = ConfigOptions.REPAIR_LIMIT_RANGE; this.repairCostFactory = IntSettingsGui.intFactory("\u00A78Repair Cost Limit", this, - ConfigOptions.LIMIT_REPAIR_VALUE, ConfigHolder.DEFAULT_CONFIG, range.getFirst(), range.getLast(), + ConfigOptions.LIMIT_REPAIR_VALUE, ConfigHolder.DEFAULT_CONFIG, + null, + range.getFirst(), range.getLast(), ConfigOptions.DEFAULT_LIMIT_REPAIR_VALUE, 1, 5, 10); @@ -99,27 +101,35 @@ public class BasicConfigGui extends ValueUpdatableGui { // item repair cost range = ConfigOptions.REPAIR_COST_RANGE; this.itemRepairCost = IntSettingsGui.intFactory("\u00A78Item Repair Cost", this, - ConfigOptions.ITEM_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, range.getFirst(), range.getLast(), + ConfigOptions.ITEM_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, + null, + range.getFirst(), range.getLast(), ConfigOptions.DEFAULT_ITEM_REPAIR_COST, 1, 5, 10, 50, 100); // unit repair cost this.unitRepairCost = IntSettingsGui.intFactory("\u00A78Unit Repair Cost", this, - ConfigOptions.UNIT_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, range.getFirst(), range.getLast(), + ConfigOptions.UNIT_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, + null, + range.getFirst(), range.getLast(), ConfigOptions.DEFAULT_UNIT_REPAIR_COST, 1, 5, 10, 50, 100); // item rename cost range = ConfigOptions.ITEM_RENAME_COST_RANGE; this.itemRenameCost = IntSettingsGui.intFactory("\u00A78Rename Cost", this, - ConfigOptions.ITEM_RENAME_COST, ConfigHolder.DEFAULT_CONFIG, range.getFirst(), range.getLast(), + ConfigOptions.ITEM_RENAME_COST, ConfigHolder.DEFAULT_CONFIG, + null, + range.getFirst(), range.getLast(), ConfigOptions.DEFAULT_ITEM_RENAME_COST, 1, 5, 10, 50, 100); // sacrifice illegal enchant cost range = ConfigOptions.SACRIFICE_ILLEGAL_COST_RANGE; this.sacrificeIllegalEnchantCost = IntSettingsGui.intFactory("\u00A78Sacrifice Illegal Enchant Cost", this, - ConfigOptions.SACRIFICE_ILLEGAL_COST, ConfigHolder.DEFAULT_CONFIG, range.getFirst(), range.getLast(), + ConfigOptions.SACRIFICE_ILLEGAL_COST, ConfigHolder.DEFAULT_CONFIG, + null, + range.getFirst(), range.getLast(), ConfigOptions.DEFAULT_SACRIFICE_ILLEGAL_COST, 1, 5, 10, 50, 100); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantCostConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantCostConfigGui.java index 2a1937b..91f304c 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantCostConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantCostConfigGui.java @@ -49,7 +49,9 @@ public class EnchantCostConfigGui extends AbstractEnchantConfigGui displayLore; + /** * Constructor for a boolean setting gui factory. * - * @param title The title of the gui. - * @param parent Parent gui to go back when completed. - * @param configPath Configuration path of this setting. - * @param config Configuration holder of this setting. - * @param defaultVal Default value if not found on the config. + * @param title The title of the gui. + * @param parent Parent gui to go back when completed. + * @param configPath Configuration path of this setting. + * @param config Configuration holder of this setting. + * @param defaultVal Default value if not found on the config. + * @param displayLore Gui display item lore. */ protected BoolSettingFactory( - @NotNull String title, ValueUpdatableGui parent, - String configPath, ConfigHolder config, - boolean defaultVal) { + @NotNull String title, @NotNull ValueUpdatableGui parent, + @NotNull String configPath, @NotNull ConfigHolder config, + boolean defaultVal, String... displayLore) { super(configPath, config); this.title = title; this.parent = parent; this.defaultVal = defaultVal; + this.displayLore = Arrays.asList(displayLore); } /** @@ -233,7 +243,7 @@ public class BoolSettingsGui extends AbstractSettingGui { } itemName.append(name); - return GuiGlobalItems.createGuiItemFromProperties(this, itemMat, itemName, value); + return GuiGlobalItems.createGuiItemFromProperties(this, itemMat, itemName, value, this.displayLore); } /** diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java index 772f473..404aef1 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java @@ -10,6 +10,7 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; @@ -338,6 +339,7 @@ public class DoubleSettingGui extends AbstractSettingGui { * @param parent Parent gui to go back when completed. * @param configPath Configuration path of this setting. * @param config Configuration holder of this setting. + * @param displayLore Gui display item lore. * @param scale The scale of the decimal. * @param asPercentage If we should display the value as a %. * @param nullOnZero Set the value as null (deleting it) when equal to 0 @@ -350,13 +352,16 @@ public class DoubleSettingGui extends AbstractSettingGui { * If step only contain 1 value, no step item should be displayed. * @return A factory for a double setting gui. */ - public static DoubleSettingFactory doubleFactory(@NotNull String title, ValueUpdatableGui parent, - String configPath, ConfigHolder config, + @NotNull + public static DoubleSettingFactory doubleFactory(@NotNull String title, @NotNull ValueUpdatableGui parent, + @NotNull String configPath, @NotNull ConfigHolder config, + @Nullable List displayLore, int scale, boolean asPercentage, boolean nullOnZero, double min, double max, double defaultVal, double... steps) { return new DoubleSettingFactory( title, parent, configPath, config, + displayLore, scale, asPercentage, nullOnZero, min, max, defaultVal, steps); } @@ -367,6 +372,7 @@ public class DoubleSettingGui extends AbstractSettingGui { public static class DoubleSettingFactory extends SettingGuiFactory { @NotNull String title; + @NotNull ValueUpdatableGui parent; int scale; @@ -377,6 +383,9 @@ public class DoubleSettingGui extends AbstractSettingGui { BigDecimal defaultVal; BigDecimal[] steps; + @NotNull + List displayLore; + /** * Constructor for a double setting gui factory. * @@ -384,6 +393,7 @@ public class DoubleSettingGui extends AbstractSettingGui { * @param parent Parent gui to go back when completed. * @param configPath Configuration path of this setting. * @param config Configuration holder of this setting. + * @param displayLore Gui display item lore. * @param scale The scale of the decimal. * @param asPercentage If we should display the value as a %. * @param nullOnZero Set the value as null (deleting it) when equal to 0 @@ -396,8 +406,9 @@ public class DoubleSettingGui extends AbstractSettingGui { * If step only contain 1 value, no step item should be displayed. */ protected DoubleSettingFactory( - @NotNull String title, ValueUpdatableGui parent, - String configPath, ConfigHolder config, + @NotNull String title, @NotNull ValueUpdatableGui parent, + @NotNull String configPath, @NotNull ConfigHolder config, + @Nullable List displayLore, int scale, boolean asPercentage, boolean nullOnZero, double min, double max, double defaultVal, double... steps) { super(configPath, config); @@ -414,6 +425,12 @@ public class DoubleSettingGui extends AbstractSettingGui { for (int i = 0; i < steps.length; i++) { this.steps[i] = BigDecimal.valueOf(steps[i]).setScale(scale, RoundingMode.HALF_UP); } + + if(displayLore == null){ + this.displayLore = Collections.emptyList(); + }else { + this.displayLore = displayLore; + } } /** @@ -449,7 +466,7 @@ public class DoubleSettingGui extends AbstractSettingGui { BigDecimal value = getConfiguredValue(); StringBuilder itemName = new StringBuilder("\u00A7a").append(name); - return GuiGlobalItems.createGuiItemFromProperties(this, itemMat, itemName, displayValue(value, this.asPercentage)); + return GuiGlobalItems.createGuiItemFromProperties(this, itemMat, itemName, displayValue(value, this.asPercentage), this.displayLore); } public GuiItem getItem(Material itemMat){ diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java index c38b047..a593512 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java @@ -10,6 +10,7 @@ import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; @@ -18,6 +19,7 @@ import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.util.MetricsUtil; import java.util.Arrays; +import java.util.List; import java.util.function.Consumer; /** @@ -228,6 +230,7 @@ public class EnchantCostSettingsGui extends IntSettingsGui { * @param parent Parent gui to go back when completed. * @param configPath Configuration path of this setting. * @param config Configuration holder of this setting. + * @param displayLore Gui display item lore. * @param min Minimum value of this setting. * @param max Maximum value of this setting. * @param defaultItemVal Default item value if not found on the config. @@ -239,13 +242,15 @@ public class EnchantCostSettingsGui extends IntSettingsGui { * @return A factory for an enchant cost setting gui. */ public static EnchantCostSettingFactory enchantCostFactory( - @NotNull String title, ValueUpdatableGui parent, - String configPath, ConfigHolder config, + @NotNull String title, @NotNull ValueUpdatableGui parent, + @NotNull String configPath, @NotNull ConfigHolder config, + @Nullable List displayLore, int min, int max, int defaultItemVal, int defaultBookVal, int... steps) { return new EnchantCostSettingFactory( title, parent, configPath, config, + displayLore, min, max, defaultItemVal, defaultBookVal, steps); } @@ -263,6 +268,7 @@ public class EnchantCostSettingsGui extends IntSettingsGui { * @param parent Parent gui to go back when completed. * @param configPath Configuration path of this setting. * @param config Configuration holder of this setting. + * @param displayLore Gui display item lore. * @param min Minimum value of this setting. * @param max Maximum value of this setting. * @param defaultItemVal Default item value if not found on the config. @@ -274,12 +280,14 @@ public class EnchantCostSettingsGui extends IntSettingsGui { */ protected EnchantCostSettingFactory( @NotNull String title, ValueUpdatableGui parent, - String configPath, ConfigHolder config, + @NotNull String configPath, @NotNull ConfigHolder config, + @Nullable List displayLore, int min, int max, int defaultItemVal, int defaultBookVal, int... steps) { super(title, parent, configPath, config, + displayLore, min, max, defaultItemVal, steps); this.defaultBookVal = defaultBookVal; } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java index f19ea0f..dbd1d72 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java @@ -9,6 +9,7 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; @@ -267,25 +268,28 @@ public class IntSettingsGui extends AbstractSettingGui { /** * Create an int setting factory from setting's parameters. * - * @param title The title of the gui. - * @param parent Parent gui to go back when completed. - * @param configPath Configuration path of this setting. - * @param config Configuration holder of this setting. - * @param min Minimum value of this setting. - * @param max Maximum value of this setting. - * @param defaultVal Default value if not found on the config. - * @param steps List of step the value can increment/decrement. - * List's size should be between 1 (included) and 5 (included). - * it is visually preferable to have an odd number of step. - * If step only contain 1 value, no step item should be displayed. + * @param title The title of the gui. + * @param parent Parent gui to go back when completed. + * @param configPath Configuration path of this setting. + * @param config Configuration holder of this setting. + * @param displayLore Gui display item lore. + * @param min Minimum value of this setting. + * @param max Maximum value of this setting. + * @param defaultVal Default value if not found on the config. + * @param steps List of step the value can increment/decrement. + * List's size should be between 1 (included) and 5 (included). + * it is visually preferable to have an odd number of step. + * If step only contain 1 value, no step item should be displayed. * @return A factory for an int setting gui. */ public static IntSettingFactory intFactory(@NotNull String title, ValueUpdatableGui parent, String configPath, ConfigHolder config, + @Nullable List displayLore, int min, int max, int defaultVal, int... steps) { return new IntSettingFactory( title, parent, configPath, config, + displayLore, min, max, defaultVal, steps); } @@ -295,30 +299,36 @@ public class IntSettingsGui extends AbstractSettingGui { public static class IntSettingFactory extends SettingGuiFactory { @NotNull String title; + @NotNull ValueUpdatableGui parent; int min; int max; int defaultVal; int[] steps; + @NotNull + List displayLore; + /** * Constructor for an int setting gui factory. * - * @param title The title of the gui. - * @param parent Parent gui to go back when completed. - * @param configPath Configuration path of this setting. - * @param config Configuration holder of this setting. - * @param min Minimum value of this setting. - * @param max Maximum value of this setting. - * @param defaultVal Default value if not found on the config. - * @param steps List of step the value can increment/decrement. - * List's size should be between 1 (included) and 5 (included). - * it is visually preferable to have an odd number of step. - * If step only contain 1 value, no step item should be displayed. + * @param title The title of the gui. + * @param parent Parent gui to go back when completed. + * @param configPath Configuration path of this setting. + * @param config Configuration holder of this setting. + * @param displayLore Gui display item lore. + * @param min Minimum value of this setting. + * @param max Maximum value of this setting. + * @param defaultVal Default value if not found on the config. + * @param steps List of step the value can increment/decrement. + * List's size should be between 1 (included) and 5 (included). + * it is visually preferable to have an odd number of step. + * If step only contain 1 value, no step item should be displayed. */ protected IntSettingFactory( - @NotNull String title, ValueUpdatableGui parent, - String configPath, ConfigHolder config, + @NotNull String title, @NotNull ValueUpdatableGui parent, + @NotNull String configPath, @NotNull ConfigHolder config, + @Nullable List displayLore, int min, int max, int defaultVal, int... steps) { super(configPath, config); this.title = title; @@ -327,6 +337,12 @@ public class IntSettingsGui extends AbstractSettingGui { this.max = max; this.defaultVal = defaultVal; this.steps = steps; + + if(displayLore == null){ + this.displayLore = Collections.emptyList(); + }else { + this.displayLore = displayLore; + } } /** @@ -369,7 +385,7 @@ public class IntSettingsGui extends AbstractSettingGui { int value = getConfiguredValue(); StringBuilder itemName = new StringBuilder("\u00A7a").append(name); - return GuiGlobalItems.createGuiItemFromProperties(this, itemMat, itemName, value); + return GuiGlobalItems.createGuiItemFromProperties(this, itemMat, itemName, value, this.displayLore); } /** 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 d6e5552..b208a14 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 @@ -10,6 +10,7 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; @@ -171,9 +172,9 @@ public class ItemSettingGui extends AbstractSettingGui { * @param displayLore Gui display item lore. * @return A factory for an item setting gui. */ - public static ItemSettingGui.ItemSettingFactory itemFactory(@NotNull String title, ValueUpdatableGui parent, - String configPath, ConfigHolder config, - ItemStack defaultVal, + public static ItemSettingGui.ItemSettingFactory itemFactory(@NotNull String title, @NotNull ValueUpdatableGui parent, + @NotNull String configPath, @NotNull ConfigHolder config, + @Nullable ItemStack defaultVal, String... displayLore) { return new ItemSettingGui.ItemSettingFactory( title, parent, @@ -187,8 +188,11 @@ public class ItemSettingGui extends AbstractSettingGui { public static class ItemSettingFactory extends SettingGuiFactory { @NotNull String title; + @NotNull ValueUpdatableGui parent; + @Nullable ItemStack defaultVal; + @NotNull List displayLore; /** @@ -202,9 +206,9 @@ public class ItemSettingGui extends AbstractSettingGui { * @param displayLore Gui display item lore. */ protected ItemSettingFactory( - @NotNull String title, ValueUpdatableGui parent, - String configPath, ConfigHolder config, - ItemStack defaultVal, + @NotNull String title, @NotNull ValueUpdatableGui parent, + @NotNull String configPath, @NotNull ConfigHolder config, + @Nullable ItemStack defaultVal, String... displayLore) { super(configPath, config); this.title = title; @@ -229,8 +233,9 @@ public class ItemSettingGui extends AbstractSettingGui { return this.config.getConfig().getItemStack(this.configPath, this.defaultVal); } + @NotNull public List getDisplayLore() { - return displayLore; + return this.displayLore; } @Override 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 42b9e3f..1491975 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java @@ -13,7 +13,9 @@ import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.config.settings.AbstractSettingGui; +import java.util.ArrayList; import java.util.Collections; +import java.util.List; /** * A utility class to store function that create generic GUI item. @@ -180,25 +182,32 @@ public class GuiGlobalItems { /** * Create an arbitrary GuiItem from a unique setting and item's property. * - * @param factory The setting's GUI factory. - * @param itemMat Displayed material of the item. - * @param itemName Name of the item. - * @param value Value of the setting when the item is created. - * Will not update automatically, if the setting's value change, the item need to be created again. + * @param factory The setting's GUI factory. + * @param itemMat Displayed material of the item. + * @param itemName Name of the item. + * @param value Value of the setting when the item is created. + * Will not update automatically, if the setting's value change, the item need to be created again. + * @param displayLore Gui display item lore. * @return A formatted GuiItem that will create and open a GUI for the setting. */ public static GuiItem createGuiItemFromProperties( @NotNull AbstractSettingGui.SettingGuiFactory factory, @NotNull Material itemMat, @NotNull StringBuilder itemName, - @NotNull Object value + @NotNull Object value, + @NotNull List displayLore ) { + // Prepare lore + ArrayList lore = new ArrayList<>(); + lore.add(SETTING_ITEM_LORE_PREFIX + value); + lore.addAll(displayLore); + // Create & initialise item ItemStack item = new ItemStack(itemMat); ItemMeta itemMeta = item.getItemMeta(); itemMeta.setDisplayName(itemName.toString()); - itemMeta.setLore(Collections.singletonList(SETTING_ITEM_LORE_PREFIX + value)); + itemMeta.setLore(lore); itemMeta.addItemFlags(ItemFlag.values()); item.setItemMeta(itemMeta); From 3ff6505adf9408b9a7825b0f262bf6adfc64e231 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Sun, 28 Apr 2024 19:58:36 +0200 Subject: [PATCH 11/17] Suppressed most fixable warning. --- .../cuanvil/gui/config/MainConfigGui.java | 22 ++++++++++++++----- .../gui/config/SelectMaterialContainer.java | 2 -- .../gui/config/global/BasicConfigGui.java | 1 + .../config/global/CustomRecipeConfigGui.java | 5 +++-- .../gui/config/global/EnchantConflictGui.java | 1 + .../config/global/EnchantCostConfigGui.java | 1 + .../gui/config/global/GroupConfigGui.java | 1 + .../config/global/UnitRepairConfigGui.java | 2 ++ .../list/MappedElementListConfigGui.java | 1 + .../config/list/SettingGuiListConfigGui.java | 1 + .../elements/CustomRecipeSubSettingGui.java | 5 +++-- .../EnchantConflictSubSettingGui.java | 3 +++ .../gui/config/settings/BoolSettingsGui.java | 3 +++ .../gui/config/settings/DoubleSettingGui.java | 7 ++++++ .../settings/EnchantCostSettingsGui.java | 12 +++++++++- .../gui/config/settings/IntSettingsGui.java | 8 +++++++ .../gui/config/settings/ItemSettingGui.java | 4 ++++ .../settings/MaterialSelectSettingGui.java | 12 ++++++---- .../cuanvil/gui/util/GuiGlobalItems.java | 10 +++++++++ .../cuanvil/gui/util/GuiSharedConstant.java | 6 +++++ .../cuanvil/group/EnchantConflictManager.kt | 4 ++-- .../cuanvil/recipe/AnvilCustomRecipe.kt | 10 ++++----- 22 files changed, 97 insertions(+), 24 deletions(-) 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 b33ae68..691c9c2 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java @@ -41,6 +41,7 @@ public class MainConfigGui extends ChestGui { // Basic config item ItemStack basicConfigItemstack = new ItemStack(Material.COMMAND_BLOCK); ItemMeta basicConfigMeta = basicConfigItemstack.getItemMeta(); + assert basicConfigMeta != null; basicConfigMeta.setDisplayName("\u00A7aBasic Config Menu"); basicConfigMeta.setLore(Collections.singletonList("\u00A77Click here to open basic config menu")); @@ -52,6 +53,7 @@ public class MainConfigGui extends ChestGui { // enchant level limit item ItemStack enchantLimitItemstack = new ItemStack(Material.ENCHANTED_BOOK); ItemMeta enchantLimitMeta = enchantLimitItemstack.getItemMeta(); + assert enchantLimitMeta != null; enchantLimitMeta.setDisplayName("\u00A7aEnchantment Level Limit"); enchantLimitMeta.setLore(Collections.singletonList("\u00A77Click here to open enchantment level limit menu")); @@ -63,6 +65,7 @@ public class MainConfigGui extends ChestGui { // enchant cost item ItemStack enchantCostItemstack = new ItemStack(Material.EXPERIENCE_BOTTLE); ItemMeta enchantCostMeta = enchantCostItemstack.getItemMeta(); + assert enchantCostMeta != null; enchantCostMeta.setDisplayName("\u00A7aEnchantment Cost"); enchantCostMeta.setLore(Collections.singletonList("\u00A77Click here to open enchantment costs menu")); @@ -72,20 +75,22 @@ public class MainConfigGui extends ChestGui { pane.bindItem('3', enchantCostItem); // Enchantment Conflicts item - ItemStack EnchantConflictItemstack = new ItemStack(Material.OAK_FENCE); - ItemMeta enchantConflictMeta = EnchantConflictItemstack.getItemMeta(); + ItemStack enchantConflictItemstack = new ItemStack(Material.OAK_FENCE); + ItemMeta enchantConflictMeta = enchantConflictItemstack.getItemMeta(); + assert enchantConflictMeta != null; enchantConflictMeta.setDisplayName("\u00A7aEnchantment Conflict"); enchantConflictMeta.setLore(Collections.singletonList("\u00A77Click here to open enchantment conflict menu")); - EnchantConflictItemstack.setItemMeta(enchantConflictMeta); + enchantConflictItemstack.setItemMeta(enchantConflictMeta); - GuiItem enchantConflictItem = GuiGlobalItems.goToGuiItem(EnchantConflictItemstack, EnchantConflictGui.INSTANCE); + GuiItem enchantConflictItem = GuiGlobalItems.goToGuiItem(enchantConflictItemstack, EnchantConflictGui.INSTANCE); pane.bindItem('4', enchantConflictItem); // Group config items ItemStack groupItemstack = new ItemStack(Material.CHEST); - ItemMeta groupMeta = groupItemstack.getItemMeta(); + assert groupMeta != null; + groupMeta.setDisplayName("\u00A7aGroups"); groupMeta.setLore(Collections.singletonList("\u00A77Click here to open material group menu")); groupItemstack.setItemMeta(groupMeta); @@ -97,6 +102,7 @@ public class MainConfigGui extends ChestGui { // Unit repair item ItemStack unirRepairItemstack = new ItemStack(Material.DIAMOND); ItemMeta unitRepairMeta = unirRepairItemstack.getItemMeta(); + assert unitRepairMeta != null; unitRepairMeta.setDisplayName("\u00A7aUnit Repair"); unitRepairMeta.setLore(Collections.singletonList("\u00A77Click here to open anvil unit repair menu")); @@ -107,7 +113,8 @@ public class MainConfigGui extends ChestGui { // Custom recipe item ItemStack customRecipeItemstack = new ItemStack(Material.CRAFTING_TABLE); - ItemMeta customRecipeMeta = EnchantConflictItemstack.getItemMeta(); + ItemMeta customRecipeMeta = customRecipeItemstack.getItemMeta(); + assert customRecipeMeta != null; customRecipeMeta.setDisplayName("\u00A7aCustom recipes"); customRecipeMeta.setLore(Collections.singletonList("\u00A77Click here to open anvil custom recipe menu")); @@ -119,6 +126,8 @@ public class MainConfigGui extends ChestGui { // quit item ItemStack quitItemstack = new ItemStack(Material.BARRIER); ItemMeta quitMeta = quitItemstack.getItemMeta(); + assert quitMeta != null; + quitMeta.setDisplayName("\u00A7cQuit"); quitItemstack.setItemMeta(quitMeta); @@ -131,6 +140,7 @@ public class MainConfigGui extends ChestGui { // create & bind "info" item ItemStack infoItemstack = new ItemStack(Material.PAPER); ItemMeta infoMeta = infoItemstack.getItemMeta(); + assert infoMeta != null; infoMeta.setDisplayName("\u00A7eThis is a alpha version of the gui !"); infoMeta.setLore(Collections.singletonList("\u00A77If you have feedback or idea you can send them to the dev !")); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectMaterialContainer.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectMaterialContainer.java index 8b0e479..397030e 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectMaterialContainer.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectMaterialContainer.java @@ -1,8 +1,6 @@ package xyz.alexcrea.cuanvil.gui.config; import org.bukkit.Material; -import xyz.alexcrea.cuanvil.group.AbstractMaterialGroup; -import xyz.alexcrea.cuanvil.gui.config.list.elements.GroupConfigSubSettingGui; import xyz.alexcrea.cuanvil.util.CasedStringUtil; import java.util.*; diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java index 85c4c1d..0ad288e 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java @@ -88,6 +88,7 @@ public class BasicConfigGui extends ValueUpdatableGui { // rename cost not needed ItemStack item = new ItemStack(Material.BARRIER); ItemMeta meta = item.getItemMeta(); + assert meta != null; meta.setDisplayName("\u00A7cRepair Cost Value"); meta.setLore(Collections.singletonList("\u00A77Please, enable repair cost limit for this variable to be editable.")); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/CustomRecipeConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/CustomRecipeConfigGui.java index 6aeb596..d0c0ec2 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/CustomRecipeConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/CustomRecipeConfigGui.java @@ -41,6 +41,7 @@ public class CustomRecipeConfigGui extends MappedGuiListConfigGui extends ElementListConf // Create new conflict item ItemStack createItem = new ItemStack(Material.PAPER); ItemMeta createMeta = createItem.getItemMeta(); + assert createMeta != null; createMeta.setDisplayName("\u00A7aCreate new "+genericDisplayedName()); createMeta.setLore(Arrays.asList( diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/SettingGuiListConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/SettingGuiListConfigGui.java index 328743c..231cf67 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/SettingGuiListConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/SettingGuiListConfigGui.java @@ -27,6 +27,7 @@ public abstract class SettingGuiListConfigGui< T, S extends AbstractSettingGui.S protected GuiItem prepareCreateNewItem() { ItemStack createItem = new ItemStack(Material.PAPER); ItemMeta createMeta = createItem.getItemMeta(); + assert createMeta != null; createMeta.setDisplayName(createItemName()); createMeta.setLore(getCreateItemLore()); 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 51d7cc5..0b3d07d 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 @@ -66,6 +66,7 @@ public class CustomRecipeSubSettingGui extends MappedToListSubSettingGui { // Delete item ItemStack deleteItem = new ItemStack(Material.RED_TERRACOTTA); ItemMeta deleteMeta = deleteItem.getItemMeta(); + assert deleteMeta != null; deleteMeta.setDisplayName("\u00A74DELETE RECIPE"); deleteMeta.setLore(Collections.singletonList("\u00A7cCaution with this button !")); @@ -78,12 +79,12 @@ public class CustomRecipeSubSettingGui extends MappedToListSubSettingGui { IntRange costRange = AnvilCustomRecipe.Companion.getXP_COST_CONFIG_RANGE(); this.exactCountFactory = BoolSettingsGui.boolFactory("\u00A78Exact count ?", this, this.anvilRecipe + "." + AnvilCustomRecipe.EXACT_COUNT_CONFIG, ConfigHolder.CUSTOM_RECIPE_HOLDER, - AnvilCustomRecipe.Companion.getDEFAULT_EXACT_COUNT_CONFIG()); + AnvilCustomRecipe.DEFAULT_EXACT_COUNT_CONFIG); this.xpCostFactory = IntSettingsGui.intFactory("\u00A78Recipe Xp Cost", this, this.anvilRecipe +"."+AnvilCustomRecipe.XP_COST_CONFIG, ConfigHolder.CUSTOM_RECIPE_HOLDER, null, - costRange.getFirst(), costRange.getLast(), AnvilCustomRecipe.Companion.getDEFAULT_XP_COST_CONFIG(), 1, 5, 10); + costRange.getFirst(), costRange.getLast(), AnvilCustomRecipe.DEFAULT_XP_COST_CONFIG, 1, 5, 10); this.leftItemFactory = ItemSettingGui.itemFactory("\u00A7eRecipe Left \u00A78Item", this, 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 37fb42c..277ce76 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 @@ -70,6 +70,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl // Delete item ItemStack deleteItem = new ItemStack(Material.RED_TERRACOTTA); ItemMeta deleteMeta = deleteItem.getItemMeta(); + assert deleteMeta != null; deleteMeta.setDisplayName("\u00A74DELETE CONFLICT"); deleteMeta.setLore(Collections.singletonList("\u00A7cCaution with this button !")); @@ -186,6 +187,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl // Configure enchant setting item ItemStack enchantItem = this.enchantSettingItem.getItem(); ItemMeta enchantMeta = enchantItem.getItemMeta(); + assert enchantMeta != null; enchantMeta.setDisplayName("\u00A7aSelect included \u00A75Enchantments \u00A7aSettings"); enchantMeta.setLore(enchantLore); @@ -197,6 +199,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl // Configure group setting item ItemStack groupItem = this.groupSettingItem.getItem(); ItemMeta groupMeta = groupItem.getItemMeta(); + assert groupMeta != null; groupMeta.setDisplayName("\u00A7aSelect excluded \u00A73Groups \u00A7aSettings"); groupMeta.setLore(groupLore); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java index e571bc2..fa31306 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java @@ -64,6 +64,7 @@ public class BoolSettingsGui extends AbstractSettingGui { protected void prepareReturnToDefault() { ItemStack item = new ItemStack(Material.COMMAND_BLOCK); ItemMeta meta = item.getItemMeta(); + assert meta != null; meta.setDisplayName("\u00A7eReset to default value"); meta.setLore(Collections.singletonList("\u00A77Default value is: " + holder.defaultVal)); @@ -95,6 +96,8 @@ public class BoolSettingsGui extends AbstractSettingGui { ItemStack valueItemStack = new ItemStack(displayedMat); ItemMeta valueMeta = valueItemStack.getItemMeta(); + assert valueMeta != null; + valueMeta.setDisplayName(displayedName); valueMeta.setLore(AbstractSettingGui.CLICK_LORE); valueItemStack.setItemMeta(valueMeta); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java index 404aef1..b3043b2 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java @@ -65,6 +65,7 @@ public class DoubleSettingGui extends AbstractSettingGui { private static final ItemStack DELETE_ITEM_STACK = new ItemStack(Material.RED_TERRACOTTA); static { ItemMeta meta = DELETE_ITEM_STACK.getItemMeta(); + assert meta != null; meta.setDisplayName("\u00A7cDisable item being repaired ?"); meta.setLore(Arrays.asList("\u00A77Confirm disabling unit repair for this item..", @@ -117,6 +118,7 @@ public class DoubleSettingGui extends AbstractSettingGui { protected void prepareReturnToDefault() { ItemStack item = new ItemStack(Material.COMMAND_BLOCK); ItemMeta meta = item.getItemMeta(); + assert meta != null; meta.setDisplayName("\u00A7eReset to default value"); meta.setLore(Collections.singletonList("\u00A77Default value is " + displayValue(holder.defaultVal))); @@ -161,6 +163,8 @@ public class DoubleSettingGui extends AbstractSettingGui { // "result" display ItemStack resultPaper = new ItemStack(Material.PAPER); ItemMeta resultMeta = resultPaper.getItemMeta(); + assert resultMeta != null; + resultMeta.setDisplayName("\u00A7eValue: " + displayValue(now)); resultPaper.setItemMeta(resultMeta); GuiItem resultItem = new GuiItem(resultPaper, GuiGlobalActions.stayInPlace, CustomAnvil.instance); @@ -181,6 +185,8 @@ public class DoubleSettingGui extends AbstractSettingGui { private GuiItem getSetValueItem(Material mat, BigDecimal planned, String numberPrefix){ ItemStack item = new ItemStack(mat); ItemMeta meta = item.getItemMeta(); + assert meta != null; + meta.setDisplayName("\u00A7e" + displayValue(now) + " -> " + displayValue(planned) + " \u00A7r(" + numberPrefix + (displayValue(planned.subtract(now).abs()) + "\u00A7r)")); meta.setLore(AbstractSettingGui.CLICK_LORE); @@ -274,6 +280,7 @@ public class DoubleSettingGui extends AbstractSettingGui { // Create item stack then gui item ItemStack item = new ItemStack(stepMat); ItemMeta meta = item.getItemMeta(); + assert meta != null; meta.setDisplayName(stepName.toString()); meta.setLore(stepLore); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java index a593512..25855ce 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java @@ -80,6 +80,7 @@ public class EnchantCostSettingsGui extends IntSettingsGui { // book display ItemStack bookItemstack = new ItemStack(Material.BOOK); ItemMeta bookMeta = bookItemstack.getItemMeta(); + assert bookMeta != null; bookMeta.setDisplayName("\u00A7aCost of an Enchantment by Book"); bookMeta.setLore(Arrays.asList( @@ -90,8 +91,9 @@ public class EnchantCostSettingsGui extends IntSettingsGui { // sword display ItemStack swordItemstack = new ItemStack(Material.WOODEN_SWORD); ItemMeta swordMeta = swordItemstack.getItemMeta(); - swordMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + assert swordMeta != null; + swordMeta.addItemFlags(ItemFlag.values()); swordMeta.setDisplayName("\u00A7aCost of an Enchantment by Item"); swordMeta.setLore(Arrays.asList( "\u00A77Cost per result item level of an sacrifice enchantment", @@ -107,6 +109,7 @@ public class EnchantCostSettingsGui extends IntSettingsGui { protected void prepareReturnToDefault() { ItemStack item = new ItemStack(Material.COMMAND_BLOCK); ItemMeta meta = item.getItemMeta(); + assert meta != null; // assume holder is an instance of EnchantCostSettingFactory EnchantCostSettingFactory holder = (EnchantCostSettingFactory) this.holder; @@ -141,6 +144,8 @@ public class EnchantCostSettingsGui extends IntSettingsGui { int planned = Math.max(holder.min, nowBook - step); ItemStack item = new ItemStack(Material.RED_TERRACOTTA); ItemMeta meta = item.getItemMeta(); + assert meta != null; + meta.setDisplayName("\u00A7e" + nowBook + " -> " + planned + " \u00A7r(\u00A7c-" + (nowBook - planned) + "\u00A7r)"); meta.setLore(AbstractSettingGui.CLICK_LORE); item.setItemMeta(meta); @@ -157,6 +162,8 @@ public class EnchantCostSettingsGui extends IntSettingsGui { int planned = Math.min(holder.max, nowBook + step); ItemStack item = new ItemStack(Material.GREEN_TERRACOTTA); ItemMeta meta = item.getItemMeta(); + assert meta != null; + meta.setDisplayName("\u00A7e" + nowBook + " -> " + planned + " \u00A7r(\u00A7a+" + (planned - nowBook) + "\u00A7r)"); meta.setLore(AbstractSettingGui.CLICK_LORE); item.setItemMeta(meta); @@ -170,8 +177,11 @@ public class EnchantCostSettingsGui extends IntSettingsGui { // "result" display ItemStack resultPaper = new ItemStack(Material.PAPER); ItemMeta resultMeta = resultPaper.getItemMeta(); + assert resultMeta != null; + resultMeta.setDisplayName("\u00A7eValue: " + nowBook); resultPaper.setItemMeta(resultMeta); + GuiItem resultItem = new GuiItem(resultPaper, GuiGlobalActions.stayInPlace, CustomAnvil.instance); pane.bindItem('V', resultItem); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java index dbd1d72..68b610e 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java @@ -69,6 +69,7 @@ public class IntSettingsGui extends AbstractSettingGui { protected void prepareReturnToDefault() { ItemStack item = new ItemStack(Material.COMMAND_BLOCK); ItemMeta meta = item.getItemMeta(); + assert meta != null; meta.setDisplayName("\u00A7eReset to default value"); meta.setLore(Collections.singletonList("\u00A77Default value is: " + holder.defaultVal)); @@ -94,6 +95,8 @@ public class IntSettingsGui extends AbstractSettingGui { int planned = Math.max(holder.min, now - step); ItemStack item = new ItemStack(Material.RED_TERRACOTTA); ItemMeta meta = item.getItemMeta(); + assert meta != null; + meta.setDisplayName("\u00A7e" + now + " -> " + planned + " \u00A7r(\u00A7c-" + (now - planned) + "\u00A7r)"); meta.setLore(AbstractSettingGui.CLICK_LORE); item.setItemMeta(meta); @@ -111,6 +114,8 @@ public class IntSettingsGui extends AbstractSettingGui { int planned = Math.min(holder.max, now + step); ItemStack item = new ItemStack(Material.GREEN_TERRACOTTA); ItemMeta meta = item.getItemMeta(); + assert meta != null; + meta.setDisplayName("\u00A7e" + now + " -> " + planned + " \u00A7r(\u00A7a+" + (planned - now) + "\u00A7r)"); meta.setLore(AbstractSettingGui.CLICK_LORE); item.setItemMeta(meta); @@ -124,6 +129,8 @@ public class IntSettingsGui extends AbstractSettingGui { // "result" display ItemStack resultPaper = new ItemStack(Material.PAPER); ItemMeta resultMeta = resultPaper.getItemMeta(); + assert resultMeta != null; + resultMeta.setDisplayName("\u00A7eValue: " + now); resultPaper.setItemMeta(resultMeta); GuiItem resultItem = new GuiItem(resultPaper, GuiGlobalActions.stayInPlace, CustomAnvil.instance); @@ -227,6 +234,7 @@ public class IntSettingsGui extends AbstractSettingGui { // Create item stack then gui item ItemStack item = new ItemStack(stepMat); ItemMeta meta = item.getItemMeta(); + assert meta != null; meta.setDisplayName(stepName.toString()); meta.setLore(stepLore); 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 b208a14..0825769 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 @@ -74,6 +74,7 @@ public class ItemSettingGui extends AbstractSettingGui { protected void prepareReturnToDefault() { ItemStack item = new ItemStack(Material.COMMAND_BLOCK); ItemMeta meta = item.getItemMeta(); + assert meta != null; meta.setDisplayName("\u00A7eReset to default value"); meta.setLore(Collections.singletonList("\u00A77Default value is: " + holder.defaultVal)); @@ -101,6 +102,7 @@ public class ItemSettingGui extends AbstractSettingGui { }else{ displayedItem = new ItemStack(Material.BARRIER); ItemMeta valueMeta = displayedItem.getItemMeta(); + assert valueMeta != null; valueMeta.setDisplayName("\u00A74NO ITEM SET"); valueMeta.setLore(CLICK_LORE); @@ -262,6 +264,8 @@ public class ItemSettingGui extends AbstractSettingGui { item = item.clone(); } ItemMeta meta = item.getItemMeta(); + assert meta != null; + meta.setDisplayName("\u00A7a" + name); meta.setLore(getDisplayLore()); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java index 5419b62..d0bcbd6 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java @@ -83,6 +83,7 @@ public class MaterialSelectSettingGui extends MappedElementListConfigGui Date: Mon, 29 Apr 2024 02:31:55 +0200 Subject: [PATCH 12/17] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 30cd067..c4c0a2e 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ or [on GitHub](https://github.com/alexcrea/CustomAnvil/releases/latest) - Custom items of unit repairs (repair damaged with unit of "material", for example the repair of diamond sword by diamonds) - Custom XP cost for every aspect of the anvil - Permissions to bypass level limit or enchantment restriction. -- Gui to configure the plugin in game (in alpha: can only edit 6/7 configs. next versions will focus on this feature) +- Gui to configure the plugin in game --- ### Permissions: ```yml @@ -54,7 +54,7 @@ Default configuration can be found on following links: - [custom_recipes.yml](https://github.com/alexcrea/CustomAnvil/blob/master/src/main/resources/custom_recipes.yml) --- ### Known issue: -- Custom recipe config GUI is not reloaded on reload config command. (this should not impact a lot of admin, Custom recipe config should be edited manually only in rare occasion) +There is non known issue, if you find one please report the issue. ### Planned: - Finish the config gui From 4b504994427428116b46240a322147614d212d8a Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Tue, 30 Apr 2024 19:00:02 +0200 Subject: [PATCH 13/17] Add config description lore for basic config gui. --- .../gui/config/global/BasicConfigGui.java | 51 +++++++++++++++---- src/main/resources/config.yml | 27 +++++----- 2 files changed, 54 insertions(+), 24 deletions(-) diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java index 0ad288e..9100997 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java @@ -18,6 +18,7 @@ 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; /** @@ -74,36 +75,52 @@ public class BasicConfigGui extends ValueUpdatableGui { protected void prepareValues() { // limit repair item this.limitRepairFactory = BoolSettingsGui.boolFactory("\u00A78Limit Repair Cost ?", this, - ConfigOptions.LIMIT_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, ConfigOptions.DEFAULT_LIMIT_REPAIR); + ConfigOptions.LIMIT_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, ConfigOptions.DEFAULT_LIMIT_REPAIR, + "", + "\u00A77Whether all anvil actions cost should be capped.", + "\u00A77If true, all anvil repairs will max out at the value of \u00A7aLimit Repair Value\u00A77."); - // rename cost item + // repair cost item IntRange range = ConfigOptions.REPAIR_LIMIT_RANGE; this.repairCostFactory = IntSettingsGui.intFactory("\u00A78Repair Cost Limit", this, ConfigOptions.LIMIT_REPAIR_VALUE, ConfigHolder.DEFAULT_CONFIG, - null, + Arrays.asList( + "", + "\u00A77Value to limit repair costs to when \u00A7aLimit Repair Value\u00A77 is true.", + "\u00A77Valid values include \u00A7e1 \u00A77to \u00A7e39\u00A77: " + + "vanilla would display \u00A7e40+\u00A77 as \u00A7ctoo expensive\u00A77." + ), range.getFirst(), range.getLast(), ConfigOptions.DEFAULT_LIMIT_REPAIR_VALUE, 1, 5, 10); - // rename cost not needed + // repair cost not needed ItemStack item = new ItemStack(Material.BARRIER); ItemMeta meta = item.getItemMeta(); assert meta != null; - meta.setDisplayName("\u00A7cRepair Cost Value"); - meta.setLore(Collections.singletonList("\u00A77Please, enable repair cost limit for this variable to be editable.")); + meta.setDisplayName("\u00A7cLimit Repair Value"); + meta.setLore(Collections.singletonList("\u00A77This config need \u00A7cLimit Repair Cost\u00A77 enabled.")); item.setItemMeta(meta); this.notNeededLimitValueItem = new GuiItem(item, GuiGlobalActions.stayInPlace, CustomAnvil.instance); // remove repair limit item this.removeRepairLimit = BoolSettingsGui.boolFactory("\u00A78Remove Repair Limit ?", this, - ConfigOptions.REMOVE_REPAIR_LIMIT, ConfigHolder.DEFAULT_CONFIG, ConfigOptions.DEFAULT_REMOVE_LIMIT); + ConfigOptions.REMOVE_REPAIR_LIMIT, ConfigHolder.DEFAULT_CONFIG, ConfigOptions.DEFAULT_REMOVE_LIMIT, + "", + "\u00A77Whether the anvil's repair limit should be removed entirely.", + "\u00A77The anvil will still visually display \u00A7ctoo expensive\u00A77.", + "\u00A77However the action will be completable."); // item repair cost range = ConfigOptions.REPAIR_COST_RANGE; this.itemRepairCost = IntSettingsGui.intFactory("\u00A78Item Repair Cost", this, ConfigOptions.ITEM_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, - null, + Arrays.asList( + "", + "\u00A77XP Level amount added to the anvil when the item", + "\u00A77is repaired by another item of the same type." + ), range.getFirst(), range.getLast(), ConfigOptions.DEFAULT_ITEM_REPAIR_COST, 1, 5, 10, 50, 100); @@ -111,7 +128,12 @@ public class BasicConfigGui extends ValueUpdatableGui { // unit repair cost this.unitRepairCost = IntSettingsGui.intFactory("\u00A78Unit Repair Cost", this, ConfigOptions.UNIT_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, - null, + Arrays.asList( + "", + "\u00A77XP Level amount added to the anvil when the item is repaired by an \u00A7eunit\u00A77.", + "\u00A77For example: a Diamond on a Diamond Sword.", + "\u00A77What's considered unit for what can be edited on the unit repair configuration." + ), range.getFirst(), range.getLast(), ConfigOptions.DEFAULT_UNIT_REPAIR_COST, 1, 5, 10, 50, 100); @@ -120,7 +142,10 @@ public class BasicConfigGui extends ValueUpdatableGui { range = ConfigOptions.ITEM_RENAME_COST_RANGE; this.itemRenameCost = IntSettingsGui.intFactory("\u00A78Rename Cost", this, ConfigOptions.ITEM_RENAME_COST, ConfigHolder.DEFAULT_CONFIG, - null, + Arrays.asList( + "", + "\u00A77XP Level amount added to the anvil when the item is renamed." + ), range.getFirst(), range.getLast(), ConfigOptions.DEFAULT_ITEM_RENAME_COST, 1, 5, 10, 50, 100); @@ -129,7 +154,11 @@ public class BasicConfigGui extends ValueUpdatableGui { range = ConfigOptions.SACRIFICE_ILLEGAL_COST_RANGE; this.sacrificeIllegalEnchantCost = IntSettingsGui.intFactory("\u00A78Sacrifice Illegal Enchant Cost", this, ConfigOptions.SACRIFICE_ILLEGAL_COST, ConfigHolder.DEFAULT_CONFIG, - null, + Arrays.asList( + "", + "\u00A77XP Level amount added to the anvil when a sacrifice enchantment", + "\u00A77conflict With one of the left item enchantment" + ), range.getFirst(), range.getLast(), ConfigOptions.DEFAULT_SACRIFICE_ILLEGAL_COST, 1, 5, 10, 50, 100); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 7e2435c..98784be 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,11 +1,11 @@ -# Whether all anvil actions should be capped +# Whether all anvil actions cost should be capped # # If true, all anvil repairs will max out at the value of limit_repair_value limit_repair_cost: false # Value to limit repair costs to when limit_repair_cost is true # -# Valid range of 1 - 39 (vanilla will consider 40+ as "too expensive") +# Valid values include 1 to 39 (vanilla will consider 40+ as "too expensive") limit_repair_value: 39 # Whether the anvil's repair limit should be removed entirely @@ -13,31 +13,32 @@ limit_repair_value: 39 # The anvil will still visually display "too expensive" however the action will be completable remove_repair_limit: false -# Value added to the anvil when the item is repaired by another item of the same type +# XP Level amount added to the anvil when the item is repaired by another item of the same type # -# Valid range of 0 - 255 +# Valid values include 0 to 255 item_repair_cost: 2 -# Value added to the anvil when the item is repaired by an "unit" -# For example, a diamond on a diamond sword +# XP Level amount added to the anvil when the item is repaired by an "unit" +# For example: a Diamond on a Diamond Sword +# What's considered unit for what can be edited on the unit repair configuration. # -# Valid range of 0 - 255 +# Valid values include 0 to 255 unit_repair_cost: 1 -# Value added to the anvil when the item is renamed +# XP Level amount added to the anvil when the item is renamed # -# Valid range of 0 - 255 +# Valid values include 0 to 255 item_rename_cost: 1 -# Value added to the anvil when a sacrifice enchantment conflict -# with one of the left item enchantment +# XP Level amount added to the anvil when a sacrifice enchantment +# conflict with one of the left item enchantment # -# Valid range of 0 - 255 +# Valid values include 0 to 255 sacrifice_illegal_enchant_cost: 1 # Default limit to apply to any enchants missing from override_limits # -# Valid range of 1 - 255 +# Valid values include 1 to 255 default_limit: 5 # Override limits for specific enchants From 24ebb19e11eb0d7a10998151c031addca6a78df7 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Tue, 30 Apr 2024 20:31:04 +0200 Subject: [PATCH 14/17] Made Config gui prettier and with description lore. --- .../gui/config/global/BasicConfigGui.java | 7 ---- .../gui/config/global/EnchantConflictGui.java | 4 +-- .../config/global/EnchantCostConfigGui.java | 6 ++-- .../gui/config/global/GroupConfigGui.java | 2 +- .../config/settings/AbstractSettingGui.java | 5 +-- .../gui/config/settings/BoolSettingsGui.java | 35 ++++++++++++++----- .../gui/config/settings/DoubleSettingGui.java | 22 +++++++++--- .../settings/EnchantCostSettingsGui.java | 27 ++++++++------ .../gui/config/settings/IntSettingsGui.java | 19 ++++++---- .../gui/config/settings/ItemSettingGui.java | 2 ++ .../cuanvil/gui/util/GuiGlobalItems.java | 10 ++++-- 11 files changed, 88 insertions(+), 51 deletions(-) diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java index 9100997..2e9bdd2 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java @@ -76,7 +76,6 @@ public class BasicConfigGui extends ValueUpdatableGui { // limit repair item this.limitRepairFactory = BoolSettingsGui.boolFactory("\u00A78Limit Repair Cost ?", this, ConfigOptions.LIMIT_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, ConfigOptions.DEFAULT_LIMIT_REPAIR, - "", "\u00A77Whether all anvil actions cost should be capped.", "\u00A77If true, all anvil repairs will max out at the value of \u00A7aLimit Repair Value\u00A77."); @@ -85,7 +84,6 @@ public class BasicConfigGui extends ValueUpdatableGui { this.repairCostFactory = IntSettingsGui.intFactory("\u00A78Repair Cost Limit", this, ConfigOptions.LIMIT_REPAIR_VALUE, ConfigHolder.DEFAULT_CONFIG, Arrays.asList( - "", "\u00A77Value to limit repair costs to when \u00A7aLimit Repair Value\u00A77 is true.", "\u00A77Valid values include \u00A7e1 \u00A77to \u00A7e39\u00A77: " + "vanilla would display \u00A7e40+\u00A77 as \u00A7ctoo expensive\u00A77." @@ -107,7 +105,6 @@ public class BasicConfigGui extends ValueUpdatableGui { // remove repair limit item this.removeRepairLimit = BoolSettingsGui.boolFactory("\u00A78Remove Repair Limit ?", this, ConfigOptions.REMOVE_REPAIR_LIMIT, ConfigHolder.DEFAULT_CONFIG, ConfigOptions.DEFAULT_REMOVE_LIMIT, - "", "\u00A77Whether the anvil's repair limit should be removed entirely.", "\u00A77The anvil will still visually display \u00A7ctoo expensive\u00A77.", "\u00A77However the action will be completable."); @@ -117,7 +114,6 @@ public class BasicConfigGui extends ValueUpdatableGui { this.itemRepairCost = IntSettingsGui.intFactory("\u00A78Item Repair Cost", this, ConfigOptions.ITEM_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, Arrays.asList( - "", "\u00A77XP Level amount added to the anvil when the item", "\u00A77is repaired by another item of the same type." ), @@ -129,7 +125,6 @@ public class BasicConfigGui extends ValueUpdatableGui { this.unitRepairCost = IntSettingsGui.intFactory("\u00A78Unit Repair Cost", this, ConfigOptions.UNIT_REPAIR_COST, ConfigHolder.DEFAULT_CONFIG, Arrays.asList( - "", "\u00A77XP Level amount added to the anvil when the item is repaired by an \u00A7eunit\u00A77.", "\u00A77For example: a Diamond on a Diamond Sword.", "\u00A77What's considered unit for what can be edited on the unit repair configuration." @@ -143,7 +138,6 @@ public class BasicConfigGui extends ValueUpdatableGui { this.itemRenameCost = IntSettingsGui.intFactory("\u00A78Rename Cost", this, ConfigOptions.ITEM_RENAME_COST, ConfigHolder.DEFAULT_CONFIG, Arrays.asList( - "", "\u00A77XP Level amount added to the anvil when the item is renamed." ), range.getFirst(), range.getLast(), @@ -155,7 +149,6 @@ public class BasicConfigGui extends ValueUpdatableGui { this.sacrificeIllegalEnchantCost = IntSettingsGui.intFactory("\u00A78Sacrifice Illegal Enchant Cost", this, ConfigOptions.SACRIFICE_ILLEGAL_COST, ConfigHolder.DEFAULT_CONFIG, Arrays.asList( - "", "\u00A77XP Level amount added to the anvil when a sacrifice enchantment", "\u00A77conflict With one of the left item enchantment" ), diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConflictGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConflictGui.java index ce6265e..06b9bc8 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConflictGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConflictGui.java @@ -63,8 +63,8 @@ public class EnchantConflictGui extends MappedGuiListConfigGui CLICK_LORE = Collections.singletonList("\u00A77Click Here to change the value"); + protected final static String CLICK_LORE = "\u00A77Click Here to change the value"; private PatternPane pane; diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java index fa31306..38c3c09 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java @@ -16,6 +16,7 @@ import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.MetricsUtil; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -62,12 +63,21 @@ public class BoolSettingsGui extends AbstractSettingGui { * Prepare "return to default value" gui item. */ protected void prepareReturnToDefault() { + // Prepare default Value text + String defaultValueLore; + if(holder.defaultVal){ + defaultValueLore = "\u00A7aYes \u00A77Is the default value"; + }else{ + defaultValueLore = "\u00A7cNo \u00A77Is the default value"; + } + + // Create reset to default item ItemStack item = new ItemStack(Material.COMMAND_BLOCK); ItemMeta meta = item.getItemMeta(); assert meta != null; meta.setDisplayName("\u00A7eReset to default value"); - meta.setLore(Collections.singletonList("\u00A77Default value is: " + holder.defaultVal)); + meta.setLore(Collections.singletonList(defaultValueLore)); item.setItemMeta(meta); returnToDefault = new GuiItem(item, event -> { event.setCancelled(true); @@ -87,19 +97,27 @@ public class BoolSettingsGui extends AbstractSettingGui { String displayedName; Material displayedMat; if (now) { - displayedName = "\u00A7aTrue"; + displayedName = "\u00A7aYes"; displayedMat = Material.GREEN_TERRACOTTA; } else { - displayedName = "\u00A7cFalse"; + displayedName = "\u00A7cNo"; displayedMat = Material.RED_TERRACOTTA; } + // create & set Value item + ArrayList valueLore = new ArrayList<>(); + if(!holder.displayLore.isEmpty()){ + valueLore.addAll(holder.displayLore); + valueLore.add(""); + } + valueLore.add(AbstractSettingGui.CLICK_LORE); + ItemStack valueItemStack = new ItemStack(displayedMat); ItemMeta valueMeta = valueItemStack.getItemMeta(); assert valueMeta != null; valueMeta.setDisplayName(displayedName); - valueMeta.setLore(AbstractSettingGui.CLICK_LORE); + valueMeta.setLore(valueLore); valueItemStack.setItemMeta(valueMeta); GuiItem resultItem = new GuiItem(valueItemStack, inverseNowConsumer(), CustomAnvil.instance); @@ -236,17 +254,18 @@ public class BoolSettingsGui extends AbstractSettingGui { boolean value = getConfiguredValue(); Material itemMat; - StringBuilder itemName = new StringBuilder("\u00A7"); + StringBuilder itemName = new StringBuilder("\u00A7e"); + String finalValue; if (value) { itemMat = Material.GREEN_TERRACOTTA; - itemName.append("a"); + finalValue = "\u00A7aYes"; } else { itemMat = Material.RED_TERRACOTTA; - itemName.append("c"); + finalValue = "\u00A7cNo"; } itemName.append(name); - return GuiGlobalItems.createGuiItemFromProperties(this, itemMat, itemName, value, this.displayLore); + return GuiGlobalItems.createGuiItemFromProperties(this, itemMat, itemName, finalValue, this.displayLore, false); } /** diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java index b3043b2..1e32fea 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java @@ -21,6 +21,7 @@ import xyz.alexcrea.cuanvil.util.MetricsUtil; import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -165,7 +166,7 @@ public class DoubleSettingGui extends AbstractSettingGui { ItemMeta resultMeta = resultPaper.getItemMeta(); assert resultMeta != null; - resultMeta.setDisplayName("\u00A7eValue: " + displayValue(now)); + resultMeta.setDisplayName("\u00A7fValue: \u00A7e" + displayValue(now)); resultPaper.setItemMeta(resultMeta); GuiItem resultItem = new GuiItem(resultPaper, GuiGlobalActions.stayInPlace, CustomAnvil.instance); @@ -183,13 +184,22 @@ public class DoubleSettingGui extends AbstractSettingGui { } private GuiItem getSetValueItem(Material mat, BigDecimal planned, String numberPrefix){ + // Create set item lore + ArrayList setLoreItem = new ArrayList<>(); + if(!holder.displayLore.isEmpty()){ + setLoreItem.addAll(holder.displayLore); + setLoreItem.add(""); + } + setLoreItem.add(AbstractSettingGui.CLICK_LORE); + + // Create & return set value item ItemStack item = new ItemStack(mat); ItemMeta meta = item.getItemMeta(); assert meta != null; - meta.setDisplayName("\u00A7e" + displayValue(now) + " -> " + displayValue(planned) + meta.setDisplayName("\u00A7e" + displayValue(now) + " \u00A7f-> \u00A7e" + displayValue(planned) + " \u00A7r(" + numberPrefix + (displayValue(planned.subtract(now).abs()) + "\u00A7r)")); - meta.setLore(AbstractSettingGui.CLICK_LORE); + meta.setLore(setLoreItem); item.setItemMeta(meta); return new GuiItem(item, updateNowConsumer(planned), CustomAnvil.instance); @@ -275,7 +285,7 @@ public class DoubleSettingGui extends AbstractSettingGui { stepLore = Collections.singletonList("\u00A77Click here to change the value by " + displayValue(stepValue)); clickEvent = updateStepValue(stepValue); } - stepName.append("Step of ").append(displayValue(stepValue)); + stepName.append("Step of \u00A7e").append(displayValue(stepValue)); // Create item stack then gui item ItemStack item = new ItemStack(stepMat); @@ -473,7 +483,9 @@ public class DoubleSettingGui extends AbstractSettingGui { BigDecimal value = getConfiguredValue(); StringBuilder itemName = new StringBuilder("\u00A7a").append(name); - return GuiGlobalItems.createGuiItemFromProperties(this, itemMat, itemName, displayValue(value, this.asPercentage), this.displayLore); + return GuiGlobalItems.createGuiItemFromProperties(this, itemMat, itemName, + "\u00A7e" + displayValue(value, this.asPercentage), + this.displayLore, true); } public GuiItem getItem(Material itemMat){ diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java index 25855ce..606bf81 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java @@ -19,6 +19,7 @@ import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.util.MetricsUtil; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.function.Consumer; @@ -146,8 +147,8 @@ public class EnchantCostSettingsGui extends IntSettingsGui { ItemMeta meta = item.getItemMeta(); assert meta != null; - meta.setDisplayName("\u00A7e" + nowBook + " -> " + planned + " \u00A7r(\u00A7c-" + (nowBook - planned) + "\u00A7r)"); - meta.setLore(AbstractSettingGui.CLICK_LORE); + meta.setDisplayName("\u00A7e" + nowBook + " \u00A7f-> \u00A7e" + planned + " \u00A7r(\u00A7c-" + (nowBook - planned) + "\u00A7r)"); + meta.setLore(Collections.singletonList(AbstractSettingGui.CLICK_LORE)); item.setItemMeta(meta); minusItem = new GuiItem(item, updateNowBookConsumer(planned), CustomAnvil.instance); @@ -164,8 +165,8 @@ public class EnchantCostSettingsGui extends IntSettingsGui { ItemMeta meta = item.getItemMeta(); assert meta != null; - meta.setDisplayName("\u00A7e" + nowBook + " -> " + planned + " \u00A7r(\u00A7a+" + (planned - nowBook) + "\u00A7r)"); - meta.setLore(AbstractSettingGui.CLICK_LORE); + meta.setDisplayName("\u00A7e" + nowBook + " \u00A7f-> \u00A7e" + planned + " \u00A7r(\u00A7a+" + (planned - nowBook) + "\u00A7r)"); + meta.setLore(Collections.singletonList(AbstractSettingGui.CLICK_LORE)); item.setItemMeta(meta); plusItem = new GuiItem(item, updateNowBookConsumer(planned), CustomAnvil.instance); @@ -174,15 +175,19 @@ public class EnchantCostSettingsGui extends IntSettingsGui { } pane.bindItem('P', plusItem); - // "result" display - ItemStack resultPaper = new ItemStack(Material.PAPER); - ItemMeta resultMeta = resultPaper.getItemMeta(); - assert resultMeta != null; + // now value display + ItemStack nowPaper = new ItemStack(Material.PAPER); + ItemMeta nowMeta = nowPaper.getItemMeta(); + assert nowMeta != null; - resultMeta.setDisplayName("\u00A7eValue: " + nowBook); - resultPaper.setItemMeta(resultMeta); + nowMeta.setDisplayName("\u00A7fValue: \u00A7e" + nowBook); + if(!holder.displayLore.isEmpty()){ + nowMeta.setLore(holder.displayLore); + } - GuiItem resultItem = new GuiItem(resultPaper, GuiGlobalActions.stayInPlace, CustomAnvil.instance); + nowPaper.setItemMeta(nowMeta); + + GuiItem resultItem = new GuiItem(nowPaper, GuiGlobalActions.stayInPlace, CustomAnvil.instance); pane.bindItem('V', resultItem); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java index 68b610e..b62b94c 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java @@ -97,8 +97,8 @@ public class IntSettingsGui extends AbstractSettingGui { ItemMeta meta = item.getItemMeta(); assert meta != null; - meta.setDisplayName("\u00A7e" + now + " -> " + planned + " \u00A7r(\u00A7c-" + (now - planned) + "\u00A7r)"); - meta.setLore(AbstractSettingGui.CLICK_LORE); + meta.setDisplayName("\u00A7e" + now + " \u00A7f-> \u00A7e" + planned + " \u00A7r(\u00A7c-" + (now - planned) + "\u00A7r)"); + meta.setLore(Collections.singletonList(AbstractSettingGui.CLICK_LORE)); item.setItemMeta(meta); minusItem = new GuiItem(item, updateNowConsumer(planned), CustomAnvil.instance); @@ -116,8 +116,8 @@ public class IntSettingsGui extends AbstractSettingGui { ItemMeta meta = item.getItemMeta(); assert meta != null; - meta.setDisplayName("\u00A7e" + now + " -> " + planned + " \u00A7r(\u00A7a+" + (planned - now) + "\u00A7r)"); - meta.setLore(AbstractSettingGui.CLICK_LORE); + meta.setDisplayName("\u00A7e" + now + " \u00A7f-> \u00A7e" + planned + " \u00A7r(\u00A7a+" + (planned - now) + "\u00A7r)"); + meta.setLore(Collections.singletonList(AbstractSettingGui.CLICK_LORE)); item.setItemMeta(meta); plusItem = new GuiItem(item, updateNowConsumer(planned), CustomAnvil.instance); @@ -131,8 +131,11 @@ public class IntSettingsGui extends AbstractSettingGui { ItemMeta resultMeta = resultPaper.getItemMeta(); assert resultMeta != null; - resultMeta.setDisplayName("\u00A7eValue: " + now); + resultMeta.setDisplayName("\u00A7fValue: \u00A7e" + now); + resultMeta.setLore(holder.displayLore); + resultPaper.setItemMeta(resultMeta); + GuiItem resultItem = new GuiItem(resultPaper, GuiGlobalActions.stayInPlace, CustomAnvil.instance); pane.bindItem('v', resultItem); @@ -229,7 +232,7 @@ public class IntSettingsGui extends AbstractSettingGui { stepLore = Collections.singletonList("\u00A77Click here to change the value by " + stepValue); clickEvent = updateStepValue(stepValue); } - stepName.append("Step of: ").append(stepValue); + stepName.append("Step of: \u00A7e").append(stepValue); // Create item stack then gui item ItemStack item = new ItemStack(stepMat); @@ -393,7 +396,9 @@ public class IntSettingsGui extends AbstractSettingGui { int value = getConfiguredValue(); StringBuilder itemName = new StringBuilder("\u00A7a").append(name); - return GuiGlobalItems.createGuiItemFromProperties(this, itemMat, itemName, value, this.displayLore); + return GuiGlobalItems.createGuiItemFromProperties(this, itemMat, itemName, + "\u00A7e" + value, + this.displayLore, true); } /** 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 0825769..90f5943 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 @@ -7,6 +7,7 @@ import io.delilaheve.CustomAnvil; import org.bukkit.Material; import org.bukkit.entity.HumanEntity; import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; @@ -268,6 +269,7 @@ public class ItemSettingGui extends AbstractSettingGui { meta.setDisplayName("\u00A7a" + name); meta.setLore(getDisplayLore()); + meta.addItemFlags(ItemFlag.values()); item.setItemMeta(meta); 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 ed41bc1..828eb90 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java @@ -203,12 +203,16 @@ public class GuiGlobalItems { @NotNull Material itemMat, @NotNull StringBuilder itemName, @NotNull Object value, - @NotNull List displayLore + @NotNull List displayLore, + boolean displayValuePrefix ) { // Prepare lore ArrayList lore = new ArrayList<>(); - lore.add(SETTING_ITEM_LORE_PREFIX + value); - lore.addAll(displayLore); + lore.add((displayValuePrefix ? SETTING_ITEM_LORE_PREFIX : "") + value); + if(!displayLore.isEmpty()){ + lore.add(""); + lore.addAll(displayLore); + } // Create & initialise item ItemStack item = new ItemStack(itemMat); From af29fd666bd5af58f9d64cda655521ae04f82c0b Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Mon, 6 May 2024 22:37:33 +0200 Subject: [PATCH 15/17] Add description text to some values. --- .../config/global/EnchantCostConfigGui.java | 22 ++++++++++--- .../config/global/EnchantLimitConfigGui.java | 5 ++- .../config/list/UnitRepairElementListGui.java | 31 +++++++++++-------- .../EnchantConflictSubSettingGui.java | 11 ++++--- .../gui/config/settings/DoubleSettingGui.java | 2 +- .../settings/EnchantCostSettingsGui.java | 7 +++-- .../gui/config/settings/IntSettingsGui.java | 2 +- .../gui/config/settings/ItemSettingGui.java | 2 +- .../settings/MaterialSelectSettingGui.java | 2 +- 9 files changed, 56 insertions(+), 28 deletions(-) diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantCostConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantCostConfigGui.java index dd27fac..1e85c90 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantCostConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantCostConfigGui.java @@ -12,7 +12,9 @@ import xyz.alexcrea.cuanvil.gui.config.settings.EnchantCostSettingsGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.util.CasedStringUtil; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.Locale; /** @@ -50,7 +52,10 @@ public class EnchantCostConfigGui extends AbstractEnchantConfigGui lore = new ArrayList<>(); + lore.add("\u00A77Item Cost: \u00A7e" + itemCost); + lore.add("\u00A77Book Cost: \u00A7e" + bookCost); + + List displayLore = factory.getDisplayLore(); + if(!displayLore.isEmpty()){ + lore.add(""); + lore.addAll(displayLore); + } + // Edit name and lore itemMeta.setDisplayName(itemName); - itemMeta.setLore(Arrays.asList( - "\u00A77Item Cost: \u00A7e" + itemCost, - "\u00A77Book Cost: \u00A7e" + bookCost)); + itemMeta.setLore(lore); item.setItemMeta(itemMeta); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java index 00522d2..36f3450 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java @@ -7,6 +7,7 @@ import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui; import xyz.alexcrea.cuanvil.util.CasedStringUtil; +import java.util.Collections; import java.util.Locale; /** @@ -37,7 +38,9 @@ public class EnchantLimitConfigGui extends AbstractEnchantConfigGui implements ElementMappedToListGui { private final GuiItem parentItem; - private final Material material; + private final Material parentMaterial; private final UnitRepairConfigGui parentGui; private final String materialName; private boolean shouldWork = true; - public UnitRepairElementListGui(@NotNull Material material, + public UnitRepairElementListGui(@NotNull Material parentMaterial, @NotNull UnitRepairConfigGui parentGui, @NotNull GuiItem parentItem) { - super("\u00A7e" + CasedStringUtil.snakeToUpperSpacedCase(material.name().toLowerCase()) + " \u00A7rUnit repair"); + super("\u00A7e" + CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.name().toLowerCase()) + " \u00A7rUnit repair"); this.parentItem = parentItem; - this.material = material; + this.parentMaterial = parentMaterial; this.parentGui = parentGui; - this.materialName = CasedStringUtil.snakeToUpperSpacedCase(material.name().toLowerCase()); + this.materialName = CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.name().toLowerCase()); GuiGlobalItems.addBackItem(this.backgroundPane, parentGui); } @@ -75,7 +75,7 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui { event.setCancelled(true); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java index 606bf81..50df43b 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java @@ -117,8 +117,8 @@ public class EnchantCostSettingsGui extends IntSettingsGui { meta.setDisplayName("\u00A7eReset to default value"); meta.setLore(Arrays.asList( - "\u00A77Default item value is: " + holder.defaultVal, - "\u00A77Default book value is: " + holder.defaultBookVal)); + "\u00A77Default item value is: \u00A7e" + holder.defaultVal, + "\u00A77Default book value is: \u00A7e" + holder.defaultBookVal)); item.setItemMeta(meta); returnToDefault = new GuiItem(item, event -> { event.setCancelled(true); @@ -330,6 +330,9 @@ public class EnchantCostSettingsGui extends IntSettingsGui { return new EnchantCostSettingsGui(this, nowItem); } + public List getDisplayLore() { + return this.displayLore; + } } } \ No newline at end of file diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java index b62b94c..13ba4f6 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java @@ -72,7 +72,7 @@ public class IntSettingsGui extends AbstractSettingGui { assert meta != null; meta.setDisplayName("\u00A7eReset to default value"); - meta.setLore(Collections.singletonList("\u00A77Default value is: " + holder.defaultVal)); + meta.setLore(Collections.singletonList("\u00A77Default value is \u00A7e" + holder.defaultVal)); item.setItemMeta(meta); returnToDefault = new GuiItem(item, event -> { event.setCancelled(true); 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 90f5943..8d7cfdf 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 @@ -78,7 +78,7 @@ public class ItemSettingGui extends AbstractSettingGui { assert meta != null; meta.setDisplayName("\u00A7eReset to default value"); - meta.setLore(Collections.singletonList("\u00A77Default value is: " + holder.defaultVal)); + meta.setLore(Collections.singletonList("\u00A77Default value is \u00A7e" + holder.defaultVal)); item.setItemMeta(meta); returnToDefault = new GuiItem(item, event -> { event.setCancelled(true); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java index d0bcbd6..9309bda 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java @@ -206,7 +206,7 @@ public class MaterialSelectSettingGui extends MappedElementListConfigGui Date: Mon, 6 May 2024 22:42:31 +0200 Subject: [PATCH 16/17] Version up and config gui finished. --- build.gradle.kts | 2 +- .../alexcrea/cuanvil/gui/config/MainConfigGui.java | 14 +------------- src/main/resources/plugin.yml | 2 +- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7fa9457..06420e2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } group = "xyz.alexcrea" -version = "1.4.3a" +version = "1.4.4" repositories { mavenCentral() 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 691c9c2..5046bb7 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java @@ -29,7 +29,7 @@ public class MainConfigGui extends ChestGui { private void init() { Pattern pattern = new Pattern( - "I00000000", + "000000000", "012304567", "Q00000000" ); @@ -137,18 +137,6 @@ public class MainConfigGui extends ChestGui { }, CustomAnvil.instance); pane.bindItem('Q', quitItem); - // create & bind "info" item - ItemStack infoItemstack = new ItemStack(Material.PAPER); - ItemMeta infoMeta = infoItemstack.getItemMeta(); - assert infoMeta != null; - - infoMeta.setDisplayName("\u00A7eThis is a alpha version of the gui !"); - infoMeta.setLore(Collections.singletonList("\u00A77If you have feedback or idea you can send them to the dev !")); - infoItemstack.setItemMeta(infoMeta); - - GuiItem infoItem = new GuiItem(infoItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance); - pane.bindItem('I', infoItem); - } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index f7e12fa..53c5951 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ main: io.delilaheve.CustomAnvil name: CustomAnvil prefix: "Custom Anvil" -version: 1.4.3a +version: 1.4.4 description: Allow to customise anvil mechanics api-version: 1.18 load: POSTWORLD From 6699082ab6f11bc4948df482b6b14134ec715663 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Mon, 6 May 2024 22:46:58 +0200 Subject: [PATCH 17/17] edit README.md. the config gui is finished. --- README.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/README.md b/README.md index c4c0a2e..f48852e 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,7 @@ It is expected to work on 1.18 to 1.20.5 minecraft servers running spigot or pap **Custom Anvil** was previously named **Unsafe Enchants+**. It was renamed because it now affects every anvil aspect and not only unsafe enchants -**Custom Anvil** is based on [Unsafe Enchants](https://github.com/DelilahEve/UnsafeEnchants) by DelilahEve. You can find it on -[GitHub](https://github.com/DelilahEve/UnsafeEnchants/releases/latest), -[Spigot](https://www.spigotmc.org/resources/unsafe-enchants.104708/) or -[CurseForge](https://www.curseforge.com/minecraft/bukkit-plugins/unsafe-enchants/files/all) +**Custom Anvil** is based on [Unsafe Enchants](https://github.com/DelilahEve/UnsafeEnchants) by DelilahEve. ### Download Locations: @@ -57,7 +54,6 @@ Default configuration can be found on following links: There is non known issue, if you find one please report the issue. ### Planned: -- Finish the config gui - Semi manual config update on pluign or minecraft update - Check unknow registered enchantment & warn - Warn admin on unsuported minecraft version