diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/ItemConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/ItemConfigGui.java index e2144413..3bc19d5f 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/ItemConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/ItemConfigGui.java @@ -2,7 +2,6 @@ package xyz.alexcrea.cuanvil.gui.config.global; import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.type.ChestGui; -import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import com.github.stefvanschie.inventoryframework.pane.PatternPane; import com.github.stefvanschie.inventoryframework.pane.util.Pattern; import io.delilaheve.CustomAnvil; @@ -119,4 +118,16 @@ public class ItemConfigGui extends ChestGui { return groupConfigGui; } + /*private UnitRepairConfigGui getUnitRepairConfigGui(NamespacedKey material) { + if (unitRepairConfigGui == null) { + unitRepairConfigGui = new UnitRepairConfigGui(this); + unitRepairConfigGui.setFilter(otherMat -> + group.contain(material) //TODO check material & what inside + ); + unitRepairConfigGui.init(); + } + + return unitRepairConfigGui; + }*/ + } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/UnitRepairConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/UnitRepairConfigGui.java index c3e8bcb0..cc4a981f 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/UnitRepairConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/UnitRepairConfigGui.java @@ -1,9 +1,10 @@ package xyz.alexcrea.cuanvil.gui.config.global; import com.github.stefvanschie.inventoryframework.gui.GuiItem; +import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import io.delilaheve.CustomAnvil; import org.bukkit.Material; -import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; @@ -13,24 +14,25 @@ import xyz.alexcrea.cuanvil.gui.config.ask.SelectItemTypeGui; import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.list.UnitRepairElementListGui; import xyz.alexcrea.cuanvil.util.CasedStringUtil; +import xyz.alexcrea.cuanvil.util.MaterialUtil; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.HashSet; public class UnitRepairConfigGui extends - MappedGuiListConfigGui> { + MappedGuiListConfigGui> { private static UnitRepairConfigGui INSTANCE; @Nullable - public static UnitRepairConfigGui getCurrentInstance(){ + public static UnitRepairConfigGui getCurrentInstance() { return INSTANCE; } @NotNull - public static UnitRepairConfigGui getInstance(){ - if(INSTANCE == null) INSTANCE = new UnitRepairConfigGui(); + public static UnitRepairConfigGui getInstance() { + if (INSTANCE == null) INSTANCE = new UnitRepairConfigGui(); return INSTANCE; } @@ -41,8 +43,12 @@ public class UnitRepairConfigGui extends init(); } + public UnitRepairConfigGui(Gui parent) { + super("Unit Repair Config", parent); + } + @Override - protected LazyElement newInstanceOfGui(Material material, GuiItem item) { + protected LazyElement newInstanceOfGui(NamespacedKey material, GuiItem item) { return new LazyElement<>(item, () -> { UnitRepairElementListGui element = new UnitRepairElementListGui(material, this); element.init(); @@ -51,23 +57,34 @@ public class UnitRepairConfigGui extends } @Override - protected ItemStack createItemForGeneric(Material material) { - ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(material.name().toLowerCase()); - String materialName = CasedStringUtil.snakeToUpperSpacedCase(material.name().toLowerCase()); + protected ItemStack createItemForGeneric(@NotNull NamespacedKey material) { + var unitConfig = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); + var section = unitConfig.getConfigurationSection(material.toString().toLowerCase()); + var legacySection = unitConfig.getConfigurationSection(material.toString().toLowerCase()); - if(material.isAir()){ - material = Material.BARRIER; + String materialName = CasedStringUtil.snakeToUpperSpacedCase(material.getKey().toLowerCase()); + + var display = MaterialUtil.INSTANCE.getMatFromKey(material); + + if (display == null || display.isAir()) { + display = Material.BARRIER; } - int reparableItemCount = materialSection == null ? 0 : materialSection.getKeys(false).size(); // Probably an expensive call but... why not + var reparable = new HashSet(); + if (section != null) + reparable.addAll(section.getKeys(false)); + if (legacySection != null) + reparable.addAll(legacySection.getKeys(false)); - ItemStack item = new ItemStack(material); + var reparableItemCount = reparable.size(); + + ItemStack item = new ItemStack(display); ItemMeta meta = item.getItemMeta(); assert meta != null; - meta.setDisplayName("§eRepaired by " +materialName); + meta.setDisplayName("§eRepaired by " + materialName); meta.setLore(Arrays.asList( - "§7There is currently §e" +reparableItemCount+ " §7reparable item with "+materialName, + "§7There is currently §e" + reparableItemCount + " §7reparable item with " + materialName, "§7Click here to open the menu to edit reparable item by " + materialName )); @@ -77,13 +94,16 @@ public class UnitRepairConfigGui extends } @Override - protected Collection getEveryInstanceOfGeneric() { - ArrayList materials = new ArrayList<>(); + protected Collection getEveryInstanceOfGeneric() { + var materials = new HashSet(); + var config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); - for (String matName : ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getKeys(false)) { - Material mat = Material.getMaterial(matName.toUpperCase()); - if(mat != null){ - materials.add(mat); + for (String matName : config.getKeys(false)) { + if(!config.isConfigurationSection(matName)) continue; + + NamespacedKey material = NamespacedKey.fromString(matName.toLowerCase()); + if (material != null) { + materials.add(material); } } return materials; @@ -113,7 +133,7 @@ public class UnitRepairConfigGui extends "§7You like to be an unit repair item", this, (itemStack, player) -> { - Material type = itemStack.getType(); + NamespacedKey type = MaterialUtil.INSTANCE.getCustomType(itemStack); // Add new material updateValueForGeneric(type, true); @@ -126,9 +146,9 @@ public class UnitRepairConfigGui extends } @NotNull - public LazyElement getInstanceOrCreate(Material mat){ + public LazyElement getInstanceOrCreate(NamespacedKey mat) { LazyElement element = this.elementGuiMap.get(mat); - if(element == null){ + if (element == null) { updateValueForGeneric(mat, false); element = this.elementGuiMap.get(mat); @@ -141,8 +161,10 @@ public class UnitRepairConfigGui extends protected String genericDisplayedName() { return "this function Should not be used."; } + @Override // Not used in this implementation. - protected Material createAndSaveNewEmptyGeneric(String name) { + protected NamespacedKey createAndSaveNewEmptyGeneric(String name) { 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 c9f2ada2..9b879fdc 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 @@ -3,12 +3,14 @@ package xyz.alexcrea.cuanvil.gui.config.list; import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.HumanEntity; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.meta.Damageable; 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.config.ask.SelectItemTypeGui; import xyz.alexcrea.cuanvil.gui.config.global.UnitRepairConfigGui; @@ -17,26 +19,25 @@ import xyz.alexcrea.cuanvil.gui.config.settings.DoubleSettingGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.util.CasedStringUtil; +import xyz.alexcrea.cuanvil.util.MaterialUtil; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; +import java.util.*; import java.util.function.Consumer; -public class UnitRepairElementListGui extends SettingGuiListConfigGui implements ElementMappedToListGui { +public class UnitRepairElementListGui extends SettingGuiListConfigGui implements ElementMappedToListGui { - private final Material parentMaterial; + private final NamespacedKey parentMaterial; private final UnitRepairConfigGui parentGui; private final String materialName; private boolean shouldWork = true; - public UnitRepairElementListGui(@NotNull Material parentMaterial, + + public UnitRepairElementListGui(@NotNull NamespacedKey parentMaterial, @NotNull UnitRepairConfigGui parentGui) { - super("§e" + CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.name().toLowerCase()) + " §rUnit repair"); + super("§e" + CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.getKey().toLowerCase()) + " §rUnit repair"); this.parentMaterial = parentMaterial; this.parentGui = parentGui; - this.materialName = CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.name().toLowerCase()); + this.materialName = CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.getKey().toLowerCase()); GuiGlobalItems.addBackItem(this.backgroundPane, parentGui); } @@ -54,7 +55,7 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui getCreateClickConsumer() { return event -> { event.setCancelled(true); - if(!this.shouldWork){ + if (!this.shouldWork) { return; } event.setCancelled(true); @@ -66,28 +67,28 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui { ItemMeta meta = itemStack.getItemMeta(); - Material type = itemStack.getType(); + NamespacedKey type = MaterialUtil.INSTANCE.getCustomType(itemStack); - if(!(meta instanceof Damageable) || (type.getMaxDurability() <= 0)) { + if (!(meta instanceof Damageable)) { player.sendMessage("§cThis item can't be damaged, so it can't be repaired."); return; } - if(type == this.parentMaterial){ + if (type.equals(this.parentMaterial)) { player.sendMessage("§cItem can't repair something of the same type."); return; } - String materialName = type.name().toLowerCase(); + String materialName = type.toString(); // Add new material - ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().set(parentMaterial.name().toLowerCase() + "." + materialName,0.25); + ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().set(parentMaterial.toString().toLowerCase() + "." + materialName, 0.25); if (GuiSharedConstant.TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE) { ConfigHolder.UNIT_REPAIR_HOLDER.saveToDisk(GuiSharedConstant.TEMPORARY_DO_BACKUP_EVERY_SAVE); } // Update gui - updateValueForGeneric(materialName, true); + updateValueForGeneric(type, true); this.parentGui.updateValueForGeneric(this.parentMaterial, true); @@ -106,17 +107,17 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui getEveryInstanceOfGeneric() { - ArrayList keys = new ArrayList<>(); - if(!this.shouldWork){ + protected Collection getEveryInstanceOfGeneric() { + Set keys = new HashSet<>(); + if (!this.shouldWork) { return keys; } - ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(parentMaterial.name().toLowerCase()); - if(materialSection == null){ - return keys; - } - keys.addAll(materialSection.getKeys(false)); + ConfigurationSection legacySection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(parentMaterial.getKey().toLowerCase()); + ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(parentMaterial.toString().toLowerCase()); + + addAllKeys(legacySection, keys); + addAllKeys(materialSection, keys); + return keys; } - private Material materialFromName(String materialName){ - Material mat = Material.getMaterial(materialName.toUpperCase()); - if(mat == null || mat.isAir()) return Material.BARRIER; + private void addAllKeys(@Nullable ConfigurationSection section, @NotNull Set keys) { + if (section == null) return; + for (var key : section.getKeys(false)) { + var material = NamespacedKey.fromString(key); + if (material == null) continue; + + keys.add(material); + } + } + + private Material materialFromName(NamespacedKey material) { + Material mat = MaterialUtil.INSTANCE.getMatFromKey(material); + if (mat == null || mat.isAir()) return Material.BARRIER; return mat; } @@ -163,7 +175,8 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui 0) return result // Get default val userDefault = config.getDouble(UNIT_REPAIR_DEFAULT_PATH, DEFAULT_DEFAULT_UNIT_REPAIR) @@ -41,6 +36,20 @@ object UnitRepairUtil { return userDefault } + private fun findRepairValue( + self: ItemStack, + other: ItemStack, + config: FileConfiguration + ): Double? { + val material = other.customType + val selfType = self.customType + + val result = checkSection(config, material.toString(), selfType) + if (result != null) return result + + return checkSection(config, material.key, selfType) + } + fun checkSection( config: FileConfiguration, path: String,