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 e5c8242..fdbc7d8 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 @@ -4,12 +4,19 @@ import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import org.bukkit.Material; 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 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.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.MetricsUtil; import java.util.ArrayList; import java.util.Arrays; @@ -20,14 +27,17 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui getCreateItemLore() { return Arrays.asList( - "a", - "b", - "c" + "\u00A77Select a new item to be repairable.", + "\u00A77You will be asked the material to use." ); } @@ -47,8 +56,50 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui getCreateClickConsumer() { return event -> { event.setCancelled(true); + if(!this.shouldWork){ + return; + } + event.setCancelled(true); + + new SelectItemTypeGui( + "Select item to be repaired.", + "\u00A77Click here with an item to set the item\n" + + "\u00A77You like to be repaired by " + this.materialName, + this, + (itemStack, player) -> { + ItemMeta meta = itemStack.getItemMeta(); + Material type = itemStack.getType(); + + if(!(meta instanceof Damageable) || (type.getMaxDurability() <= 0)) { + player.sendMessage("\u00A7cThis item can't be damaged, so it can't be repaired."); + return; + } + if(type == this.material){ + player.sendMessage("\u00A7cItem can't repair something of the same type."); + return; + } + + String materialName = type.name().toLowerCase(); + + // Add new material + ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().set(material.name().toLowerCase()+"."+materialName,0.25); + + MetricsUtil.INSTANCE.notifyChange(ConfigHolder.UNIT_REPAIR_HOLDER, ""); + 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); + this.parentGui.updateValueForGeneric(this.material, true); + + + // Display material edit setting + this.factoryMap.get(materialName).create().show(player); + }, + true + ).show(event.getWhoClicked()); - event.getWhoClicked().sendMessage("todo"); }; } @@ -62,7 +113,7 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui getEveryDisplayableInstanceOfGeneric() { ArrayList keys = new ArrayList<>(); + if(!this.shouldWork){ + return keys; + } ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(material.name().toLowerCase()); if(materialSection == null){ @@ -98,6 +151,12 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui { event.setCancelled(true); @@ -98,7 +135,6 @@ public class DoubleSettingGui extends AbstractSettingGui { PatternPane pane = getPane(); - //minus item GuiItem minusItem; if (now.compareTo(holder.min) > 0) { @@ -139,7 +175,6 @@ public class DoubleSettingGui extends AbstractSettingGui { } pane.bindItem('D', returnToDefault); - } private GuiItem getSetValueItem(Material mat, BigDecimal planned, String numberPrefix){ @@ -262,7 +297,7 @@ public class DoubleSettingGui extends AbstractSettingGui { @Override public boolean onSave() { - if(this.nullOnZero && (this.now.compareTo(BigDecimal.ZERO) == 0)){ + if(isNull()){ this.holder.config.getConfig().set(this.holder.configPath, null); }else{ this.holder.config.getConfig().set(this.holder.configPath, now.doubleValue()); @@ -280,6 +315,10 @@ public class DoubleSettingGui extends AbstractSettingGui { return now.compareTo(before) != 0; } + public boolean isNull(){ + return this.nullOnZero && (this.now.compareTo(BigDecimal.ZERO) == 0); + } + private static final BigDecimal PERCENTAGE_OFFSET = BigDecimal.valueOf(100); public String displayValue(BigDecimal value){ return displayValue(value, this.asPercentage); diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/MetricsUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/MetricsUtil.kt index 614116d..6e0e270 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/util/MetricsUtil.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/MetricsUtil.kt @@ -127,7 +127,10 @@ object MetricsUtil { isDefaultItemGroupsConfig = false } else if (ConfigHolder.UNIT_REPAIR_HOLDER.equals(holder)) { isDefaultUnitRepairItemConfig = false + } else if (ConfigHolder.CUSTOM_RECIPE_HOLDER.equals(holder)) { + isDefaultCustomAnvilCraftConfig = false } + } fun addCustomMetric(metric: Metrics) {