diff --git a/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java b/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java index bc50c162..f5df41bc 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java +++ b/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java @@ -3,18 +3,16 @@ 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.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; /** * Custom Anvil api for unit repair. @@ -22,7 +20,8 @@ import java.util.List; @SuppressWarnings("unused") public class UnitRepairApi { - private UnitRepairApi(){} + private UnitRepairApi() { + } private static Object saveChangeTask = null; @@ -35,7 +34,20 @@ public class UnitRepairApi { * @param repairable The item to be repaired. * @return true if successful. */ - public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable){ + 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) { return addUnitRepair(unit, repairable, 0.25, false); } @@ -48,7 +60,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); } @@ -62,12 +74,26 @@ 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){ - FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); - String path = unit.name().toLowerCase() + "." + repairable.name().toLowerCase(); + public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value, boolean overrideDeleted) { + return addUnitRepair(unit.getKey(), repairable.getKey(), value, overrideDeleted); + } - if(!overrideDeleted && ConfigHolder.UNIT_REPAIR_HOLDER.isDeleted(path)) return false; - if(config.contains(path)) return false; + /** + * 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) { + FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); + String path = unit.toString().toLowerCase() + "." + repairable.toString().toLowerCase(); + + if (!overrideDeleted && ConfigHolder.UNIT_REPAIR_HOLDER.isDeleted(path)) return false; + if (config.contains(path)) return false; // Set unit repair return setUnitRepair(unit, repairable, value); @@ -82,11 +108,24 @@ 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){ + 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) { FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); - String repairableName = repairable.name().toLowerCase(); - String path = unit.name().toLowerCase() + "." + repairableName; + String repairableName = repairable.toString().toLowerCase(); + String path = unit.toString().toLowerCase() + "." + repairableName; // Add to config then prepare save config.set(path, value); @@ -94,10 +133,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(repairableName, true); + if (elementGui != null) elementGui.updateValueForGeneric(repairable, true); repairConfigGui.updateValueForGeneric(unit, true); } @@ -111,48 +150,56 @@ 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){ + 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) { // 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(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); + config.set(unit.getKey() + "." + repairable.getKey(), null); + config.set(unit.getKey() + "." + repairable, null); + config.set(unit + "." + repairable.getKey(), null); + config.set(unit + "." + repairable, null); // Test if it was the last value of this section boolean lastValue = false; - if(config.isConfigurationSection(unitName.toLowerCase())) { - ConfigurationSection section = config.getConfigurationSection(unitName.toLowerCase()); + if (config.isConfigurationSection(unit.toString())) { + ConfigurationSection section = config.getConfigurationSection(unit.toString()); - if(section != null && section.getKeys(false).isEmpty()) { + if (section != null && section.getKeys(false).isEmpty()) { lastValue = true; - config.set(unitName.toLowerCase(), null); + config.set(unit.toString(), null); } - } else if (config.isConfigurationSection(unitName.toUpperCase())) { - ConfigurationSection section = config.getConfigurationSection(unitName.toUpperCase()); - if(section != null && section.getKeys(false).isEmpty()) { + } else if (config.isConfigurationSection(unit.getKey())) { + ConfigurationSection section = config.getConfigurationSection(unit.getKey()); + if (section != null && section.getKeys(false).isEmpty()) { lastValue = true; - config.set(unitName.toUpperCase(), null); + config.set(unit.getKey(), null); } } else lastValue = true; - // We only need to "delete" as the lower case to be counted as deleted - ConfigHolder.UNIT_REPAIR_HOLDER.delete(unitName.toLowerCase() + "." + repairableName.toLowerCase()); + ConfigHolder.UNIT_REPAIR_HOLDER.delete(unit.toString().toLowerCase() + "." + repairable.toString().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(repairableName); - if(lastValue){ + if (elementGui != null) elementGui.removeGeneric(repairable); + if (lastValue) { repairConfigGui.removeGeneric(unit); } } @@ -164,9 +211,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; }); @@ -174,6 +221,7 @@ 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 @@ -182,29 +230,32 @@ public class UnitRepairApi { *
+ *