diff --git a/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java b/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java index f5df41bc..bc50c162 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java +++ b/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java @@ -3,16 +3,18 @@ package xyz.alexcrea.cuanvil.api; import io.delilaheve.CustomAnvil; import kotlin.Triple; import org.bukkit.Material; -import org.bukkit.NamespacedKey; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.dependency.DependencyManager; import xyz.alexcrea.cuanvil.gui.config.global.UnitRepairConfigGui; +import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.list.UnitRepairElementListGui; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; /** * Custom Anvil api for unit repair. @@ -20,8 +22,7 @@ import java.util.*; @SuppressWarnings("unused") public class UnitRepairApi { - private UnitRepairApi() { - } + private UnitRepairApi(){} private static Object saveChangeTask = null; @@ -34,20 +35,7 @@ public class UnitRepairApi { * @param repairable The item to be repaired. * @return true if successful. */ - public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable) { - return addUnitRepair(unit, repairable, 0.25, false); - } - - /** - * Write and add a custom anvil unit repair recipe. - * Will not write the recipe if it already exists or was deleted. - * Set the value to minecraft default value (0.25 = 25%) - * - * @param unit The unit material used to repair the bellow item. - * @param repairable The item to be repaired. - * @return true if successful. - */ - public static boolean addUnitRepair(@NotNull NamespacedKey unit, @NotNull NamespacedKey repairable) { + public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable){ return addUnitRepair(unit, repairable, 0.25, false); } @@ -60,7 +48,7 @@ public class UnitRepairApi { * @param value The amount to be repaired by every unit. (1% = 0.01) * @return true if successful. */ - public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value) { + public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value){ return addUnitRepair(unit, repairable, value, false); } @@ -74,26 +62,12 @@ public class UnitRepairApi { * @param overrideDeleted If we should write even if the recipe was previously deleted. * @return true if successful. */ - public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value, boolean overrideDeleted) { - return addUnitRepair(unit.getKey(), repairable.getKey(), value, overrideDeleted); - } - - /** - * Write and add a custom anvil unit repair recipe. - * Will not write the recipe if it already exists. - * - * @param unit The unit material used to repair the bellow item. - * @param repairable The item to be repaired. - * @param value The amount to be repaired by every unit. (1% = 0.01) - * @param overrideDeleted If we should write even if the recipe was previously deleted. - * @return true if successful. - */ - public static boolean addUnitRepair(@NotNull NamespacedKey unit, @NotNull NamespacedKey repairable, double value, boolean overrideDeleted) { + public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value, boolean overrideDeleted){ FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); - String path = unit.toString().toLowerCase() + "." + repairable.toString().toLowerCase(); + String path = unit.name().toLowerCase() + "." + repairable.name().toLowerCase(); - if (!overrideDeleted && ConfigHolder.UNIT_REPAIR_HOLDER.isDeleted(path)) return false; - if (config.contains(path)) return false; + if(!overrideDeleted && ConfigHolder.UNIT_REPAIR_HOLDER.isDeleted(path)) return false; + if(config.contains(path)) return false; // Set unit repair return setUnitRepair(unit, repairable, value); @@ -108,24 +82,11 @@ public class UnitRepairApi { * @param value The amount to be repaired by every unit. (1% = 0.01) * @return true if successful. */ - public static boolean setUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value) { - return setUnitRepair(unit.getKey(), repairable.getKey(), value); - } - - /** - * Write and add a custom anvil unit repair recipe. - * Do not check if it previously existed or exist. - * - * @param unit The unit material used to repair the bellow item. - * @param repairable The item to be repaired. - * @param value The amount to be repaired by every unit. (1% = 0.01) - * @return true if successful. - */ - public static boolean setUnitRepair(@NotNull NamespacedKey unit, @NotNull NamespacedKey repairable, double value) { + public static boolean setUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value){ FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); - String repairableName = repairable.toString().toLowerCase(); - String path = unit.toString().toLowerCase() + "." + repairableName; + String repairableName = repairable.name().toLowerCase(); + String path = unit.name().toLowerCase() + "." + repairableName; // Add to config then prepare save config.set(path, value); @@ -133,10 +94,10 @@ public class UnitRepairApi { // Add to gui UnitRepairConfigGui repairConfigGui = UnitRepairConfigGui.getCurrentInstance(); - if (repairConfigGui != null) { + if(repairConfigGui != null) { UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit).getStored(); - if (elementGui != null) elementGui.updateValueForGeneric(repairable, true); + if(elementGui != null) elementGui.updateValueForGeneric(repairableName, true); repairConfigGui.updateValueForGeneric(unit, true); } @@ -150,56 +111,48 @@ public class UnitRepairApi { * @param repairable The item used to be repaired. * @return true if successful. */ - public static boolean removeUnitRepair(@NotNull Material unit, @NotNull Material repairable) { - return removeUnitRepair(unit.getKey(), repairable.getKey()); - } - - /** - * Remove a custom anvil unit repair recipe. - * - * @param unit The unit material used to repair the bellow item. - * @param repairable The item used to be repaired. - * @return true if successful. - */ - public static boolean removeUnitRepair(@NotNull NamespacedKey unit, @NotNull NamespacedKey repairable) { + public static boolean removeUnitRepair(@NotNull Material unit, @NotNull Material repairable){ // Delete every possible variation and save to file + String unitName = unit.name(); + String repairableName = repairable.name(); FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); - config.set(unit.getKey() + "." + repairable.getKey(), null); - config.set(unit.getKey() + "." + repairable, null); - config.set(unit + "." + repairable.getKey(), null); - config.set(unit + "." + repairable, null); + config.set(unitName.toLowerCase() + "." + repairableName.toUpperCase(), null); + config.set(unitName.toUpperCase() + "." + repairableName.toLowerCase(), null); + config.set(unitName.toUpperCase() + "." + repairableName.toUpperCase(), null); + config.set(unitName.toLowerCase() + "." + repairableName.toLowerCase(), null); // Test if it was the last value of this section boolean lastValue = false; - if (config.isConfigurationSection(unit.toString())) { - ConfigurationSection section = config.getConfigurationSection(unit.toString()); + if(config.isConfigurationSection(unitName.toLowerCase())) { + ConfigurationSection section = config.getConfigurationSection(unitName.toLowerCase()); - if (section != null && section.getKeys(false).isEmpty()) { + if(section != null && section.getKeys(false).isEmpty()) { lastValue = true; - config.set(unit.toString(), null); + config.set(unitName.toLowerCase(), null); } - } else if (config.isConfigurationSection(unit.getKey())) { - ConfigurationSection section = config.getConfigurationSection(unit.getKey()); - if (section != null && section.getKeys(false).isEmpty()) { + } else if (config.isConfigurationSection(unitName.toUpperCase())) { + ConfigurationSection section = config.getConfigurationSection(unitName.toUpperCase()); + if(section != null && section.getKeys(false).isEmpty()) { lastValue = true; - config.set(unit.getKey(), null); + config.set(unitName.toUpperCase(), null); } } else lastValue = true; - ConfigHolder.UNIT_REPAIR_HOLDER.delete(unit.toString().toLowerCase() + "." + repairable.toString().toLowerCase()); + // We only need to "delete" as the lower case to be counted as deleted + ConfigHolder.UNIT_REPAIR_HOLDER.delete(unitName.toLowerCase() + "." + repairableName.toLowerCase()); prepareSaveTask(); // Remove from gui UnitRepairConfigGui repairConfigGui = UnitRepairConfigGui.getCurrentInstance(); - if (repairConfigGui != null) { + if(repairConfigGui != null) { UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit).getStored(); - if (elementGui != null) elementGui.removeGeneric(repairable); - if (lastValue) { + if(elementGui != null) elementGui.removeGeneric(repairableName); + if(lastValue){ repairConfigGui.removeGeneric(unit); } } @@ -211,9 +164,9 @@ public class UnitRepairApi { * Prepare a task to save custom unit repair recipe configuration. */ private static void prepareSaveTask() { - if (saveChangeTask != null) return; + if(saveChangeTask != null) return; - saveChangeTask = DependencyManager.scheduler.scheduleGlobally(CustomAnvil.instance, () -> { + saveChangeTask = DependencyManager.scheduler.scheduleGlobally(CustomAnvil.instance, ()->{ ConfigHolder.UNIT_REPAIR_HOLDER.saveToDisk(true); saveChangeTask = null; }); @@ -221,7 +174,6 @@ public class UnitRepairApi { /** * Get every unit repair recipes. - * * @return An immutable collection of unit repair recipes. *

* Each element of the provided triple represent a part of the recipe @@ -230,32 +182,29 @@ public class UnitRepairApi { *

  • Second object is the item to be repaired. *
  • Last object is the amount to be repaired by every unit. (1% = 0.01) * - * @deprecated some may be missing. use {@link #getModernUnitRepairs()} - * */ - @Deprecated @NotNull - public static List> getUnitRepairs() { + public static List> getUnitRepairs(){ List> mutableList = new ArrayList<>(); FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); for (String unitKey : config.getKeys(false)) { // Test if config section exist - if (!config.isConfigurationSection(unitKey)) continue; + if(!config.isConfigurationSection(unitKey)) continue; // Test if unit is a material Material unit = Material.getMaterial(unitKey.toUpperCase()); - if (unit == null) continue; + if(unit == null) continue; // Iterate over reparable items ConfigurationSection section = config.getConfigurationSection(unitKey); for (String repairableKey : section.getKeys(false)) { // Test if value section exist - if (!section.isDouble(repairableKey)) continue; + if(!section.isDouble(repairableKey)) continue; // Test if repairable is valid a material Material repairable = Material.getMaterial(repairableKey.toUpperCase()); - if (repairable == null) continue; + if(repairable == null) continue; // Add the values mutableList.add(new Triple<>(unit, repairable, section.getDouble(repairableKey))); @@ -266,53 +215,4 @@ public class UnitRepairApi { return Collections.unmodifiableList(mutableList); } - /** - * Get every unit repair recipes. - * - * @return An immutable collection of unit repair recipes. - *

    - *

  • First map contain a key the unit material used to repair the bellow item and value the second map - *
  • Second map contain as key the item to be repaired and as value the amount to be repaired by every unit. (1% = 0.01) - * - */ - @NotNull - public static Map> getModernUnitRepairs() { - Map> mutableList = new HashMap<>(); - - FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); - for (String unitKey : config.getKeys(false)) { - // Test if config section exist - if (!config.isConfigurationSection(unitKey)) continue; - - // Test if unit is a material - NamespacedKey unit = NamespacedKey.fromString(unitKey.toLowerCase()); - if (unit == null) continue; - - Map map; - if (!mutableList.containsKey(unit)) { - map = new HashMap<>(); - mutableList.put(unit, map); - } else { - map = mutableList.get(unit); - } - - // Iterate over reparable items - ConfigurationSection section = config.getConfigurationSection(unitKey); - for (String repairableKey : section.getKeys(false)) { - // Test if value section exist - if (!section.isDouble(repairableKey)) continue; - - // Test if repairable is valid a material - NamespacedKey repairable = NamespacedKey.fromString(repairableKey.toLowerCase()); - if (repairable == null) continue; - - // Add the values - map.put(repairable, section.getDouble(repairableKey)); - - } - } - - return mutableList; - } - } 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 7f85278e..fa53174c 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 @@ -1,7 +1,6 @@ package xyz.alexcrea.cuanvil.gui.config.global; import com.github.stefvanschie.inventoryframework.gui.GuiItem; -import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; @@ -44,10 +43,6 @@ public class GroupConfigGui extends MappedGuiListConfigGui @@ -105,29 +103,4 @@ public class ItemConfigGui extends ChestGui { return enchantConflictGui; } - - private GroupConfigGui getGroupConfigGui(NamespacedKey material) { - if (groupConfigGui == null) { - groupConfigGui = new GroupConfigGui(this); - groupConfigGui.setFilter(group -> - group.contain(material) - ); - groupConfigGui.init(); - } - - 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 cc4a981f..c3e8bcb0 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,10 +1,9 @@ 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.NamespacedKey; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; @@ -14,25 +13,24 @@ 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; } @@ -43,12 +41,8 @@ public class UnitRepairConfigGui extends init(); } - public UnitRepairConfigGui(Gui parent) { - super("Unit Repair Config", parent); - } - @Override - protected LazyElement newInstanceOfGui(NamespacedKey material, GuiItem item) { + protected LazyElement newInstanceOfGui(Material material, GuiItem item) { return new LazyElement<>(item, () -> { UnitRepairElementListGui element = new UnitRepairElementListGui(material, this); element.init(); @@ -57,34 +51,23 @@ public class UnitRepairConfigGui extends } @Override - 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()); + protected ItemStack createItemForGeneric(Material material) { + ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(material.name().toLowerCase()); + String materialName = CasedStringUtil.snakeToUpperSpacedCase(material.name().toLowerCase()); - String materialName = CasedStringUtil.snakeToUpperSpacedCase(material.getKey().toLowerCase()); - - var display = MaterialUtil.INSTANCE.getMatFromKey(material); - - if (display == null || display.isAir()) { - display = Material.BARRIER; + if(material.isAir()){ + material = Material.BARRIER; } - var reparable = new HashSet(); - if (section != null) - reparable.addAll(section.getKeys(false)); - if (legacySection != null) - reparable.addAll(legacySection.getKeys(false)); + int reparableItemCount = materialSection == null ? 0 : materialSection.getKeys(false).size(); // Probably an expensive call but... why not - var reparableItemCount = reparable.size(); - - ItemStack item = new ItemStack(display); + ItemStack item = new ItemStack(material); 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 )); @@ -94,16 +77,13 @@ public class UnitRepairConfigGui extends } @Override - protected Collection getEveryInstanceOfGeneric() { - var materials = new HashSet(); - var config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); + protected Collection getEveryInstanceOfGeneric() { + ArrayList materials = new ArrayList<>(); - for (String matName : config.getKeys(false)) { - if(!config.isConfigurationSection(matName)) continue; - - NamespacedKey material = NamespacedKey.fromString(matName.toLowerCase()); - if (material != null) { - materials.add(material); + for (String matName : ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getKeys(false)) { + Material mat = Material.getMaterial(matName.toUpperCase()); + if(mat != null){ + materials.add(mat); } } return materials; @@ -133,7 +113,7 @@ public class UnitRepairConfigGui extends "§7You like to be an unit repair item", this, (itemStack, player) -> { - NamespacedKey type = MaterialUtil.INSTANCE.getCustomType(itemStack); + Material type = itemStack.getType(); // Add new material updateValueForGeneric(type, true); @@ -146,9 +126,9 @@ public class UnitRepairConfigGui extends } @NotNull - public LazyElement getInstanceOrCreate(NamespacedKey mat) { + public LazyElement getInstanceOrCreate(Material mat){ LazyElement element = this.elementGuiMap.get(mat); - if (element == null) { + if(element == null){ updateValueForGeneric(mat, false); element = this.elementGuiMap.get(mat); @@ -161,10 +141,8 @@ public class UnitRepairConfigGui extends protected String genericDisplayedName() { return "this function Should not be used."; } - @Override // Not used in this implementation. - protected NamespacedKey createAndSaveNewEmptyGeneric(String name) { + protected Material 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 9b879fdc..c9f2ada2 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,14 +3,12 @@ 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; @@ -19,25 +17,26 @@ 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.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; import java.util.function.Consumer; -public class UnitRepairElementListGui extends SettingGuiListConfigGui implements ElementMappedToListGui { +public class UnitRepairElementListGui extends SettingGuiListConfigGui implements ElementMappedToListGui { - private final NamespacedKey parentMaterial; + private final Material parentMaterial; private final UnitRepairConfigGui parentGui; private final String materialName; private boolean shouldWork = true; - - public UnitRepairElementListGui(@NotNull NamespacedKey parentMaterial, + public UnitRepairElementListGui(@NotNull Material parentMaterial, @NotNull UnitRepairConfigGui parentGui) { - super("§e" + CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.getKey().toLowerCase()) + " §rUnit repair"); + super("§e" + CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.name().toLowerCase()) + " §rUnit repair"); this.parentMaterial = parentMaterial; this.parentGui = parentGui; - this.materialName = CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.getKey().toLowerCase()); + this.materialName = CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.name().toLowerCase()); GuiGlobalItems.addBackItem(this.backgroundPane, parentGui); } @@ -55,7 +54,7 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui getCreateClickConsumer() { return event -> { event.setCancelled(true); - if (!this.shouldWork) { + if(!this.shouldWork){ return; } event.setCancelled(true); @@ -67,28 +66,28 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui { ItemMeta meta = itemStack.getItemMeta(); - NamespacedKey type = MaterialUtil.INSTANCE.getCustomType(itemStack); + Material type = itemStack.getType(); - if (!(meta instanceof Damageable)) { + if(!(meta instanceof Damageable) || (type.getMaxDurability() <= 0)) { player.sendMessage("§cThis item can't be damaged, so it can't be repaired."); return; } - if (type.equals(this.parentMaterial)) { + if(type == this.parentMaterial){ player.sendMessage("§cItem can't repair something of the same type."); return; } - String materialName = type.toString(); + String materialName = type.name().toLowerCase(); // Add new material - ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().set(parentMaterial.toString().toLowerCase() + "." + materialName, 0.25); + ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().set(parentMaterial.name().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(type, true); + updateValueForGeneric(materialName, true); this.parentGui.updateValueForGeneric(this.parentMaterial, true); @@ -107,17 +106,17 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui getEveryInstanceOfGeneric() { - Set keys = new HashSet<>(); - if (!this.shouldWork) { + protected Collection getEveryInstanceOfGeneric() { + ArrayList keys = new ArrayList<>(); + if(!this.shouldWork){ return keys; } - 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); - + ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(parentMaterial.name().toLowerCase()); + if(materialSection == null){ + return keys; + } + keys.addAll(materialSection.getKeys(false)); return keys; } - 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; + private Material materialFromName(String materialName){ + Material mat = Material.getMaterial(materialName.toUpperCase()); + if(mat == null || mat.isAir()) return Material.BARRIER; return mat; } @@ -175,8 +163,7 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui 0) return result - - // Get default - val userDefault = config.getDouble(UNIT_REPAIR_DEFAULT_PATH, DEFAULT_DEFAULT_UNIT_REPAIR) - if (userDefault <= 0) - return DEFAULT_DEFAULT_UNIT_REPAIR - return userDefault + return getRepairAmount(this, section, 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, - material: NamespacedKey - ): Double? { - val section = config.getConfigurationSection(path) ?: return null - - if (section.isDouble(material.toString())) - return section.getDouble(material.toString()) - if (section.isDouble(material.key)) - return section.getDouble(material.key) - - return null + /** + * Get the item % repaired by this configuration section of a unit repair. + * null if not found. + * If value is set to less than or equal to 0 then it will be set to default + */ + private fun getRepairAmount(item: ItemStack, section: ConfigurationSection, default: Double): Double? { + val itemName = item.customType.key.lowercase() + val repairValue = if (section.isDouble(itemName)) { + section.getDouble(itemName) + } else if (section.isDouble(itemName.uppercase())) { + section.getDouble(itemName.uppercase()) + } else { + return null + } + if (repairValue <= 0) + return default + return repairValue } } \ No newline at end of file