Compare commits

..

No commits in common. "c062684a3cea5a5b98b5113ce8fc49685f126281" and "f6f68d19714a70bfa35b44f2990ccf2f5afd885c" have entirely different histories.

29 changed files with 341 additions and 1043 deletions

View file

@ -3,16 +3,18 @@ package xyz.alexcrea.cuanvil.api;
import io.delilaheve.CustomAnvil; import io.delilaheve.CustomAnvil;
import kotlin.Triple; import kotlin.Triple;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.dependency.DependencyManager; import xyz.alexcrea.cuanvil.dependency.DependencyManager;
import xyz.alexcrea.cuanvil.gui.config.global.UnitRepairConfigGui; 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 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. * Custom Anvil api for unit repair.
@ -20,8 +22,7 @@ import java.util.*;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class UnitRepairApi { public class UnitRepairApi {
private UnitRepairApi() { private UnitRepairApi(){}
}
private static Object saveChangeTask = null; private static Object saveChangeTask = null;
@ -38,19 +39,6 @@ public class UnitRepairApi {
return addUnitRepair(unit, repairable, 0.25, false); 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);
}
/** /**
* Write and add a custom anvil unit repair recipe. * Write and add a custom anvil unit repair recipe.
* Will not write the recipe if it already exists or was deleted. * Will not write the recipe if it already exists or was deleted.
@ -75,22 +63,8 @@ public class UnitRepairApi {
* @return true if successful. * @return true if successful.
*/ */
public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value, boolean overrideDeleted){ 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) {
FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); 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(!overrideDeleted && ConfigHolder.UNIT_REPAIR_HOLDER.isDeleted(path)) return false;
if(config.contains(path)) return false; if(config.contains(path)) return false;
@ -109,23 +83,10 @@ public class UnitRepairApi {
* @return true if successful. * @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(); FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
String repairableName = repairable.toString().toLowerCase(); String repairableName = repairable.name().toLowerCase();
String path = unit.toString().toLowerCase() + "." + repairableName; String path = unit.name().toLowerCase() + "." + repairableName;
// Add to config then prepare save // Add to config then prepare save
config.set(path, value); config.set(path, value);
@ -136,7 +97,7 @@ public class UnitRepairApi {
if(repairConfigGui != null) { if(repairConfigGui != null) {
UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit).getStored(); UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit).getStored();
if (elementGui != null) elementGui.updateValueForGeneric(repairable, true); if(elementGui != null) elementGui.updateValueForGeneric(repairableName, true);
repairConfigGui.updateValueForGeneric(unit, true); repairConfigGui.updateValueForGeneric(unit, true);
} }
@ -151,46 +112,38 @@ public class UnitRepairApi {
* @return true if successful. * @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 // Delete every possible variation and save to file
String unitName = unit.name();
String repairableName = repairable.name();
FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
config.set(unit.getKey() + "." + repairable.getKey(), null); config.set(unitName.toLowerCase() + "." + repairableName.toUpperCase(), null);
config.set(unit.getKey() + "." + repairable, null); config.set(unitName.toUpperCase() + "." + repairableName.toLowerCase(), null);
config.set(unit + "." + repairable.getKey(), null); config.set(unitName.toUpperCase() + "." + repairableName.toUpperCase(), null);
config.set(unit + "." + repairable, null); config.set(unitName.toLowerCase() + "." + repairableName.toLowerCase(), null);
// Test if it was the last value of this section // Test if it was the last value of this section
boolean lastValue = false; boolean lastValue = false;
if (config.isConfigurationSection(unit.toString())) { if(config.isConfigurationSection(unitName.toLowerCase())) {
ConfigurationSection section = config.getConfigurationSection(unit.toString()); ConfigurationSection section = config.getConfigurationSection(unitName.toLowerCase());
if(section != null && section.getKeys(false).isEmpty()) { if(section != null && section.getKeys(false).isEmpty()) {
lastValue = true; lastValue = true;
config.set(unit.toString(), null); config.set(unitName.toLowerCase(), null);
} }
} else if (config.isConfigurationSection(unit.getKey())) { } else if (config.isConfigurationSection(unitName.toUpperCase())) {
ConfigurationSection section = config.getConfigurationSection(unit.getKey()); ConfigurationSection section = config.getConfigurationSection(unitName.toUpperCase());
if(section != null && section.getKeys(false).isEmpty()) { if(section != null && section.getKeys(false).isEmpty()) {
lastValue = true; lastValue = true;
config.set(unit.getKey(), null); config.set(unitName.toUpperCase(), null);
} }
} else lastValue = true; } 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(); prepareSaveTask();
// Remove from gui // Remove from gui
@ -198,7 +151,7 @@ public class UnitRepairApi {
if(repairConfigGui != null) { if(repairConfigGui != null) {
UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit).getStored(); UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit).getStored();
if (elementGui != null) elementGui.removeGeneric(repairable); if(elementGui != null) elementGui.removeGeneric(repairableName);
if(lastValue){ if(lastValue){
repairConfigGui.removeGeneric(unit); repairConfigGui.removeGeneric(unit);
} }
@ -221,7 +174,6 @@ public class UnitRepairApi {
/** /**
* Get every unit repair recipes. * Get every unit repair recipes.
*
* @return An immutable collection of unit repair recipes. * @return An immutable collection of unit repair recipes.
* <p> * <p>
* Each element of the provided triple represent a part of the recipe * Each element of the provided triple represent a part of the recipe
@ -230,10 +182,7 @@ public class UnitRepairApi {
* <li>Second object is the item to be repaired. * <li>Second object is the item to be repaired.
* <li>Last object is the amount to be repaired by every unit. (1% = 0.01) * <li>Last object is the amount to be repaired by every unit. (1% = 0.01)
* </ul> * </ul>
* @deprecated some may be missing. use {@link #getModernUnitRepairs()}
*
*/ */
@Deprecated
@NotNull @NotNull
public static List<Triple<Material, Material, Double>> getUnitRepairs(){ public static List<Triple<Material, Material, Double>> getUnitRepairs(){
List<Triple<Material, Material, Double>> mutableList = new ArrayList<>(); List<Triple<Material, Material, Double>> mutableList = new ArrayList<>();
@ -266,53 +215,4 @@ public class UnitRepairApi {
return Collections.unmodifiableList(mutableList); return Collections.unmodifiableList(mutableList);
} }
/**
* Get every unit repair recipes.
*
* @return An immutable collection of unit repair recipes.
* <p>
* <li>First map contain a key the unit material used to repair the bellow item and value the second map
* <li>Second map contain as key the item to be repaired and as value the amount to be repaired by every unit. (1% = 0.01)
* </ul>
*/
@NotNull
public static Map<NamespacedKey, Map<NamespacedKey, Double>> getModernUnitRepairs() {
Map<NamespacedKey, Map<NamespacedKey, Double>> 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<NamespacedKey, Double> 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;
}
} }

View file

@ -9,7 +9,6 @@ import org.jetbrains.annotations.Nullable;
import xyz.alexcrea.cuanvil.enchant.bulk.BulkCleanEnchantOperation; import xyz.alexcrea.cuanvil.enchant.bulk.BulkCleanEnchantOperation;
import xyz.alexcrea.cuanvil.enchant.bulk.BulkGetEnchantOperation; import xyz.alexcrea.cuanvil.enchant.bulk.BulkGetEnchantOperation;
import xyz.alexcrea.cuanvil.group.EnchantConflictGroup; import xyz.alexcrea.cuanvil.group.EnchantConflictGroup;
import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
@ -46,14 +45,6 @@ public interface CAEnchantment {
@NotNull @NotNull
String getName(); String getName();
/**
* Get the enchantment name prettified (upper spaced case)
* @return Prettier enchantment name
*/
default String getPrettyName() {
return CasedStringUtil.snakeToUpperSpacedCase(getName());
}
/** /**
* Get the default maximum level of this enchantment. * Get the default maximum level of this enchantment.
* @return The default maximum level of this enchantment. * @return The default maximum level of this enchantment.

View file

@ -2,7 +2,6 @@ package xyz.alexcrea.cuanvil.gui.config;
import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui; 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.PatternPane;
import com.github.stefvanschie.inventoryframework.pane.util.Pattern; import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
import io.delilaheve.CustomAnvil; import io.delilaheve.CustomAnvil;
@ -40,142 +39,116 @@ public class MainConfigGui extends ChestGui {
GuiGlobalItems.addBackgroundItem(pane); GuiGlobalItems.addBackgroundItem(pane);
// Basic config item // Basic config item
var basicConfigItem = basicConfigItem(new BasicConfigGui(packetManager)); ItemStack basicConfigItemstack = new ItemStack(Material.COMMAND_BLOCK);
ItemMeta basicConfigMeta = basicConfigItemstack.getItemMeta();
assert basicConfigMeta != null;
basicConfigMeta.setDisplayName("§aBasic Config Menu");
basicConfigMeta.setLore(Collections.singletonList("§7Click here to open basic config menu"));
basicConfigItemstack.setItemMeta(basicConfigMeta);
GuiItem basicConfigItem = GuiGlobalItems.goToGuiItem(basicConfigItemstack, new BasicConfigGui(packetManager));
pane.bindItem('1', basicConfigItem); pane.bindItem('1', basicConfigItem);
// enchant level limit item // enchant level limit item
var enchantLimitItem = enchantLimitItem(new EnchantLimitConfigGui()); ItemStack enchantLimitItemstack = new ItemStack(Material.ENCHANTED_BOOK);
ItemMeta enchantLimitMeta = enchantLimitItemstack.getItemMeta();
assert enchantLimitMeta != null;
enchantLimitMeta.setDisplayName("§aEnchantment Level Limit");
enchantLimitMeta.setLore(Collections.singletonList("§7Click here to open enchantment level limit menu"));
enchantLimitItemstack.setItemMeta(enchantLimitMeta);
GuiItem enchantLimitItem = GuiGlobalItems.goToGuiItem(enchantLimitItemstack, new EnchantLimitConfigGui());
pane.bindItem('2', enchantLimitItem); pane.bindItem('2', enchantLimitItem);
// enchant level limit item // enchant level limit item
var enchantMergeLimitItem = enchantMergeLimitItem(new EnchantMergeLimitConfigGui()); ItemStack enchantMergeLimitItemstack = new ItemStack(Material.ENCHANTED_BOOK);
ItemMeta enchantMergeLimitMeta = enchantMergeLimitItemstack.getItemMeta();
assert enchantMergeLimitMeta != null;
enchantMergeLimitMeta.setDisplayName("§aEnchantment Merge Limit");
enchantMergeLimitMeta.setLore(Collections.singletonList("§7Click here to open enchantment merge limit menu"));
enchantMergeLimitItemstack.setItemMeta(enchantMergeLimitMeta);
GuiItem enchantMergeLimitItem = GuiGlobalItems.goToGuiItem(enchantMergeLimitItemstack, new EnchantMergeLimitConfigGui());
pane.bindItem('3', enchantMergeLimitItem); pane.bindItem('3', enchantMergeLimitItem);
// enchant cost item // enchant cost item
var enchantCostItem = enchantCostItem(new EnchantCostConfigGui()); ItemStack enchantCostItemstack = new ItemStack(Material.EXPERIENCE_BOTTLE);
ItemMeta enchantCostMeta = enchantCostItemstack.getItemMeta();
assert enchantCostMeta != null;
enchantCostMeta.setDisplayName("§aEnchantment Cost");
enchantCostMeta.setLore(Collections.singletonList("§7Click here to open enchantment costs menu"));
enchantCostItemstack.setItemMeta(enchantCostMeta);
GuiItem enchantCostItem = GuiGlobalItems.goToGuiItem(enchantCostItemstack, new EnchantCostConfigGui());
pane.bindItem('4', enchantCostItem); pane.bindItem('4', enchantCostItem);
// Enchantment Conflicts item // Enchantment Conflicts item
var enchantConflictItem = enchantConflictItem(EnchantConflictGui.getInstance()); ItemStack enchantConflictItemstack = new ItemStack(Material.OAK_FENCE);
ItemMeta enchantConflictMeta = enchantConflictItemstack.getItemMeta();
assert enchantConflictMeta != null;
enchantConflictMeta.setDisplayName("§aEnchantment Conflict");
enchantConflictMeta.setLore(Collections.singletonList("§7Click here to open enchantment conflict menu"));
enchantConflictItemstack.setItemMeta(enchantConflictMeta);
GuiItem enchantConflictItem = GuiGlobalItems.goToGuiItem(enchantConflictItemstack, EnchantConflictGui.getInstance());
pane.bindItem('5', enchantConflictItem); pane.bindItem('5', enchantConflictItem);
// Group config items // Group config items
var groupConfigItem = groupConfigItem(GroupConfigGui.getInstance()); ItemStack groupItemstack = new ItemStack(Material.CHEST);
ItemMeta groupMeta = groupItemstack.getItemMeta();
assert groupMeta != null;
groupMeta.setDisplayName("§aItem Groups");
groupMeta.setLore(Collections.singletonList("§7Click here to open item group menu"));
groupItemstack.setItemMeta(groupMeta);
GuiItem groupConfigItem = GuiGlobalItems.goToGuiItem(groupItemstack, GroupConfigGui.getInstance());
pane.bindItem('6', groupConfigItem); pane.bindItem('6', groupConfigItem);
// Unit repair item // Unit repair item
var unitRepairItem = unitRepairItem(UnitRepairConfigGui.getInstance()); ItemStack unirRepairItemstack = new ItemStack(Material.DIAMOND);
ItemMeta unitRepairMeta = unirRepairItemstack.getItemMeta();
assert unitRepairMeta != null;
unitRepairMeta.setDisplayName("§aUnit Repair");
unitRepairMeta.setLore(Collections.singletonList("§7Click here to open anvil unit repair menu"));
unirRepairItemstack.setItemMeta(unitRepairMeta);
GuiItem unitRepairItem = GuiGlobalItems.goToGuiItem(unirRepairItemstack, UnitRepairConfigGui.getInstance());
pane.bindItem('7', unitRepairItem); pane.bindItem('7', unitRepairItem);
// Custom recipe item // Custom recipe item
var customRecipeItem = customRecipeItem(CustomRecipeConfigGui.getInstance()); ItemStack customRecipeItemstack = new ItemStack(Material.CRAFTING_TABLE);
ItemMeta customRecipeMeta = customRecipeItemstack.getItemMeta();
assert customRecipeMeta != null;
customRecipeMeta.setDisplayName("§aCustom recipes");
customRecipeMeta.setLore(Collections.singletonList("§7Click here to open anvil custom recipe menu"));
customRecipeItemstack.setItemMeta(customRecipeMeta);
GuiItem customRecipeItem = GuiGlobalItems.goToGuiItem(customRecipeItemstack, CustomRecipeConfigGui.getInstance());
pane.bindItem('8', customRecipeItem); pane.bindItem('8', customRecipeItem);
// quit item // quit item
pane.bindItem('Q', quitItem()); ItemStack quitItemstack = new ItemStack(Material.BARRIER);
} ItemMeta quitMeta = quitItemstack.getItemMeta();
assert quitMeta != null;
public static GuiItem basicConfigItem(Gui target) { quitMeta.setDisplayName("§cQuit");
var item = new ItemStack(Material.COMMAND_BLOCK); quitItemstack.setItemMeta(quitMeta);
var meta = item.getItemMeta();
assert meta != null;
meta.setDisplayName("§aBasic Config Menu"); GuiItem quitItem = new GuiItem(quitItemstack, event -> {
meta.setLore(Collections.singletonList("§7Click here to open basic config menu"));
item.setItemMeta(meta);
return GuiGlobalItems.goToGuiItem(item, target);
}
public static GuiItem enchantLimitItem(Gui target) {
var item = new ItemStack(Material.ENCHANTED_BOOK);
var meta = item.getItemMeta();
assert meta != null;
meta.setDisplayName("§aEnchantment Level Limit");
meta.setLore(Collections.singletonList("§7Click here to open enchantment level limit menu"));
item.setItemMeta(meta);
return GuiGlobalItems.goToGuiItem(item, target);
}
public static GuiItem enchantMergeLimitItem(Gui target) {
ItemStack item = new ItemStack(Material.ENCHANTED_BOOK);
ItemMeta meta = item.getItemMeta();
assert meta != null;
meta.setDisplayName("§aEnchantment Merge Limit");
meta.setLore(Collections.singletonList("§7Click here to open enchantment merge limit menu"));
item.setItemMeta(meta);
return GuiGlobalItems.goToGuiItem(item, target);
}
public static GuiItem enchantCostItem(Gui target) {
ItemStack item = new ItemStack(Material.EXPERIENCE_BOTTLE);
ItemMeta meta = item.getItemMeta();
assert meta != null;
meta.setDisplayName("§aEnchantment Cost");
meta.setLore(Collections.singletonList("§7Click here to open enchantment costs menu"));
item.setItemMeta(meta);
return GuiGlobalItems.goToGuiItem(item, target);
}
public static GuiItem enchantConflictItem(Gui target) {
var item = new ItemStack(Material.OAK_FENCE);
var meta = item.getItemMeta();
assert meta != null;
meta.setDisplayName("§aEnchantment Conflict");
meta.setLore(Collections.singletonList("§7Click here to open enchantment conflict menu"));
item.setItemMeta(meta);
return GuiGlobalItems.goToGuiItem(item, target);
}
public static GuiItem groupConfigItem(Gui target) {
var item = new ItemStack(Material.CHEST);
var meta = item.getItemMeta();
assert meta != null;
meta.setDisplayName("§aItem Groups");
meta.setLore(Collections.singletonList("§7Click here to open item group menu"));
item.setItemMeta(meta);
return GuiGlobalItems.goToGuiItem(item, target);
}
public static GuiItem unitRepairItem(Gui target) {
var item = new ItemStack(Material.DIAMOND);
var meta = item.getItemMeta();
assert meta != null;
meta.setDisplayName("§aUnit Repair");
meta.setLore(Collections.singletonList("§7Click here to open anvil unit repair menu"));
item.setItemMeta(meta);
return GuiGlobalItems.goToGuiItem(item, target);
}
public static GuiItem customRecipeItem(Gui target) {
var item = new ItemStack(Material.CRAFTING_TABLE);
var meta = item.getItemMeta();
assert meta != null;
meta.setDisplayName("§aCustom recipes");
meta.setLore(Collections.singletonList("§7Click here to open anvil custom recipe menu"));
item.setItemMeta(meta);
return GuiGlobalItems.goToGuiItem(item, target);
}
public static GuiItem quitItem() {
var item = new ItemStack(Material.BARRIER);
var meta = item.getItemMeta();
assert meta != null;
meta.setDisplayName("§cQuit");
item.setItemMeta(meta);
return new GuiItem(item, event -> {
event.setCancelled(true); event.setCancelled(true);
event.getWhoClicked().closeInventory(); event.getWhoClicked().closeInventory();
}, CustomAnvil.instance); }, CustomAnvil.instance);
pane.bindItem('Q', quitItem);
} }
} }

View file

@ -1,11 +1,11 @@
package xyz.alexcrea.cuanvil.gui.config.global; package xyz.alexcrea.cuanvil.gui.config.global;
import com.github.stefvanschie.inventoryframework.gui.GuiItem; 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 com.github.stefvanschie.inventoryframework.pane.util.Pattern;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import xyz.alexcrea.cuanvil.enchant.CAEnchantment; import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry; import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry;
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
import xyz.alexcrea.cuanvil.gui.config.list.SettingGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.list.SettingGuiListConfigGui;
import xyz.alexcrea.cuanvil.gui.config.settings.SettingGui; import xyz.alexcrea.cuanvil.gui.config.settings.SettingGui;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
@ -31,17 +31,13 @@ public abstract class AbstractEnchantConfigGui<T extends SettingGui.SettingGuiFa
super(title); super(title);
} }
protected AbstractEnchantConfigGui(String title, Gui parent) {
super(title, parent);
}
@Override @Override
public void updateGuiValues() { //TODO maybe optimise it. public void updateGuiValues() { //TODO maybe optimise it.
reloadValues(); reloadValues();
} }
@Override @Override
protected Collection<CAEnchantment> getEveryInstanceOfGeneric() { protected Collection<CAEnchantment> getEveryDisplayableInstanceOfGeneric() {
return CAEnchantmentRegistry.getInstance().getNameSortedEnchantments(); return CAEnchantmentRegistry.getInstance().getNameSortedEnchantments();
} }
@ -77,7 +73,7 @@ public abstract class AbstractEnchantConfigGui<T extends SettingGui.SettingGuiFa
this.pages.clear(); this.pages.clear();
this.pages.add(this.firstPage); this.pages.add(this.firstPage);
for (CAEnchantment enchantment : getDisplayableInstanceOfGeneric()) { for (CAEnchantment enchantment : getEveryDisplayableInstanceOfGeneric()) {
GuiItem item = this.guiItemMap.get(enchantment); GuiItem item = this.guiItemMap.get(enchantment);
if(item == null) { if(item == null) {

View file

@ -1,7 +1,6 @@
package xyz.alexcrea.cuanvil.gui.config.global; package xyz.alexcrea.cuanvil.gui.config.global;
import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -41,10 +40,6 @@ public class CustomRecipeConfigGui extends MappedGuiListConfigGui<AnvilCustomRec
init(); init();
} }
public CustomRecipeConfigGui(Gui parent) {
super("Custom Recipe Config", parent);
}
@Override @Override
protected ItemStack createItemForGeneric(AnvilCustomRecipe recipe) { protected ItemStack createItemForGeneric(AnvilCustomRecipe recipe) {
// Get base item to display // Get base item to display
@ -118,7 +113,7 @@ public class CustomRecipeConfigGui extends MappedGuiListConfigGui<AnvilCustomRec
@Override @Override
protected Collection<AnvilCustomRecipe> getEveryInstanceOfGeneric() { protected Collection<AnvilCustomRecipe> getEveryDisplayableInstanceOfGeneric() {
return ConfigHolder.CUSTOM_RECIPE_HOLDER.getRecipeManager().getRecipeList(); return ConfigHolder.CUSTOM_RECIPE_HOLDER.getRecipeManager().getRecipeList();
} }
} }

View file

@ -1,196 +0,0 @@
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;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.api.EnchantmentApi;
import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
import xyz.alexcrea.cuanvil.group.EnchantConflictGroup;
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
import xyz.alexcrea.cuanvil.gui.config.MainConfigGui;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
import java.util.HashMap;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class EnchantConfigGui extends ChestGui implements ValueUpdatableGui {
private final Set<CAEnchantment> enchantments;
private final PatternPane pane;
private EnchantLimitConfigGui enchantLimitConfigGui;
private EnchantMergeLimitConfigGui enchantMergeLimitConfigGui;
private EnchantCostConfigGui enchantCostConfigGui;
private EnchantConflictGui enchantConflictGui;
private GroupConfigGui groupConfigGui;
public EnchantConfigGui(@NotNull Set<CAEnchantment> enchantments) {
super(3,
"Configuring Enchantments",
CustomAnvil.instance);
this.enchantments = enchantments;
Pattern pattern = new Pattern(
"0000D0000",
"023405600",
"Q00000000"
);
pane = new PatternPane(0, 0, 9, 3, pattern);
addPane(pane);
GuiGlobalItems.addBackgroundItem(pane);
ItemStack displayItemstack = new ItemStack(Material.ENCHANTED_BOOK);
ItemMeta displayMeta = displayItemstack.getItemMeta();
assert displayMeta != null;
displayMeta.setDisplayName("§aConfiguring Enchantments:");
displayItemstack.setItemMeta(displayMeta);
// Set enchantments
HashMap<CAEnchantment, Integer> enchantmentMap = new HashMap<>();
for (CAEnchantment enchantment : enchantments) {
enchantmentMap.put(enchantment, 1);
}
EnchantmentApi.setEnchantments(displayItemstack, enchantmentMap);
pane.bindItem('D', new GuiItem(displayItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance));
updateGuiValues();
// Enchantment Conflicts item
var enchantConflictItem = MainConfigGui.enchantConflictItem(getEnchantConflictGui());
pane.bindItem('5', enchantConflictItem);
// Group config items
var groupConfigItem = MainConfigGui.groupConfigItem(getGroupConfigGui());
pane.bindItem('6', groupConfigItem);
// quit item
pane.bindItem('Q', MainConfigGui.quitItem());
}
private GuiItem enchantLimitConfigGui() {
if (enchantLimitConfigGui == null) {
enchantLimitConfigGui = new EnchantLimitConfigGui(this);
enchantLimitConfigGui.setFilter(enchantments::contains);
enchantLimitConfigGui.init();
}
// Bypass
if(enchantments.size() == 1) {
var enchant = enchantments.iterator().next();
var factory = EnchantLimitConfigGui.createFactory(enchant, this);
return enchantLimitConfigGui.itemFromFactory(enchant, factory);
}
return MainConfigGui.enchantLimitItem(enchantLimitConfigGui);
}
private GuiItem enchantMergeLimitConfigGui() {
if (enchantMergeLimitConfigGui == null) {
enchantMergeLimitConfigGui = new EnchantMergeLimitConfigGui(this);
enchantMergeLimitConfigGui.setFilter(enchantments::contains);
enchantMergeLimitConfigGui.init();
}
// Bypass
if(enchantments.size() == 1) {
var enchant = enchantments.iterator().next();
var factory = EnchantMergeLimitConfigGui.createFactory(enchant, this);
return enchantMergeLimitConfigGui.itemFromFactory(enchant, factory);
}
return MainConfigGui.enchantMergeLimitItem(enchantMergeLimitConfigGui);
}
private GuiItem enchantCostConfigGui() {
if (enchantCostConfigGui == null) {
enchantCostConfigGui = new EnchantCostConfigGui(this);
enchantCostConfigGui.setFilter(enchantments::contains);
enchantCostConfigGui.init();
}
// Bypass
if(enchantments.size() == 1) {
var enchant = enchantments.iterator().next();
var factory = EnchantCostConfigGui.createFactory(enchant, this);
return enchantCostConfigGui.itemFromFactory(enchant, factory);
}
return MainConfigGui.enchantCostItem(enchantCostConfigGui);
}
@NotNull
@Contract(pure = true)
private Predicate<EnchantConflictGroup> getGroupFilter() {
return group -> group.getEnchants()
.stream()
.anyMatch(enchantments::contains);
}
private EnchantConflictGui getEnchantConflictGui() {
if (enchantConflictGui == null) {
enchantConflictGui = new EnchantConflictGui(this);
enchantConflictGui.setFilter(getGroupFilter());
enchantConflictGui.init();
}
return enchantConflictGui;
}
private GroupConfigGui getGroupConfigGui() {
if (groupConfigGui == null) {
groupConfigGui = new GroupConfigGui(this);
// Get all the conflict related to this enchantment
var groups = ConfigHolder.CONFLICT_HOLDER
.getConflictManager()
.getConflictList()
.stream()
.filter(getGroupFilter())
.map(EnchantConflictGroup::getCantConflictGroup)
.collect(Collectors.toSet());
groupConfigGui.setFilter(group ->
groups.stream().anyMatch(other -> other.isReferencing(group))
);
groupConfigGui.init();
}
return groupConfigGui;
}
@Override
public void updateGuiValues() {
// enchant level limit item
pane.bindItem('2', enchantLimitConfigGui());
// enchant level limit item
pane.bindItem('3', enchantMergeLimitConfigGui());
// enchant cost item
pane.bindItem('4', enchantCostConfigGui());
}
@Override
public Gui getConnectedGui() {
return this;
}
}

View file

@ -1,7 +1,6 @@
package xyz.alexcrea.cuanvil.gui.config.global; package xyz.alexcrea.cuanvil.gui.config.global;
import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -36,10 +35,6 @@ public class EnchantConflictGui extends MappedGuiListConfigGui<EnchantConflictGr
return INSTANCE; return INSTANCE;
} }
// Need to init myself
public EnchantConflictGui(Gui parent) {
super("Conflict Config", parent);
}
private EnchantConflictGui() { private EnchantConflictGui() {
super( "Conflict Config"); super( "Conflict Config");
@ -102,7 +97,7 @@ public class EnchantConflictGui extends MappedGuiListConfigGui<EnchantConflictGr
} }
@Override @Override
protected Collection<EnchantConflictGroup> getEveryInstanceOfGeneric() { protected Collection<EnchantConflictGroup> getEveryDisplayableInstanceOfGeneric() {
return ConfigHolder.CONFLICT_HOLDER.getConflictManager().getConflictList(); return ConfigHolder.CONFLICT_HOLDER.getConflictManager().getConflictList();
} }

View file

@ -1,14 +1,14 @@
package xyz.alexcrea.cuanvil.gui.config.global; package xyz.alexcrea.cuanvil.gui.config.global;
import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.enchant.CAEnchantment; import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.enchant.EnchantmentProperties;
import xyz.alexcrea.cuanvil.enchant.EnchantmentRarity;
import xyz.alexcrea.cuanvil.gui.config.settings.EnchantCostSettingsGui; import xyz.alexcrea.cuanvil.gui.config.settings.EnchantCostSettingsGui;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
@ -18,13 +18,13 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import static io.delilaheve.util.ConfigOptions.ENCHANT_VALUES_ROOT;
/** /**
* Global Config gui for enchantment cost settings. * Global Config gui for enchantment cost settings.
*/ */
public class EnchantCostConfigGui extends AbstractEnchantConfigGui<EnchantCostSettingsGui.EnchantCostSettingFactory> { public class EnchantCostConfigGui extends AbstractEnchantConfigGui<EnchantCostSettingsGui.EnchantCostSettingFactory> {
private static final String SECTION_NAME = "enchant_values";
private static EnchantCostConfigGui INSTANCE = null; private static EnchantCostConfigGui INSTANCE = null;
@Nullable @Nullable
@ -42,24 +42,13 @@ public class EnchantCostConfigGui extends AbstractEnchantConfigGui<EnchantCostSe
init(); init();
} }
/**
* Constructor of this Global gui for enchantment cost settings.
*/
public EnchantCostConfigGui(Gui parent) {
super("§8Enchantment Level Cost", parent);
}
@Override @Override
public EnchantCostSettingsGui.EnchantCostSettingFactory createFactory(CAEnchantment enchant) { public EnchantCostSettingsGui.EnchantCostSettingFactory createFactory(CAEnchantment enchant) {
return createFactory(enchant, this);
}
public static EnchantCostSettingsGui.EnchantCostSettingFactory createFactory(CAEnchantment enchant, ValueUpdatableGui parent) {
String key = enchant.getKey().toString().toLowerCase(Locale.ENGLISH); String key = enchant.getKey().toString().toLowerCase(Locale.ENGLISH);
String prettyKey = CasedStringUtil.snakeToUpperSpacedCase(key.replace(":", "_")); String prettyKey = CasedStringUtil.snakeToUpperSpacedCase(key.replace(":", "_"));
return new EnchantCostSettingsGui.EnchantCostSettingFactory(prettyKey + " Cost", parent, return new EnchantCostSettingsGui.EnchantCostSettingFactory(prettyKey + " Cost", this,
ENCHANT_VALUES_ROOT + '.' + key, ConfigHolder.DEFAULT_CONFIG, SECTION_NAME + '.' + key, ConfigHolder.DEFAULT_CONFIG,
Arrays.asList( Arrays.asList(
"§7How many level should " + prettyKey, "§7How many level should " + prettyKey,
"§7cost when applied by book or by another item." "§7cost when applied by book or by another item."

View file

@ -1,13 +1,11 @@
package xyz.alexcrea.cuanvil.gui.config.global; package xyz.alexcrea.cuanvil.gui.config.global;
import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
import io.delilaheve.util.ConfigOptions; import io.delilaheve.util.ConfigOptions;
import org.bukkit.Material; import org.bukkit.Material;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.enchant.CAEnchantment; import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui; import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
@ -38,22 +36,14 @@ public class EnchantLimitConfigGui extends AbstractEnchantConfigGui<IntSettingsG
init(); init();
} }
public EnchantLimitConfigGui(Gui parent) {
super("§8Enchantment Level Limit", parent);
}
@Override @Override
public IntSettingsGui.IntSettingFactory createFactory(CAEnchantment enchant) { public IntSettingsGui.IntSettingFactory createFactory(CAEnchantment enchant) {
return createFactory(enchant, this);
}
public static IntSettingsGui.IntSettingFactory createFactory(CAEnchantment enchant, ValueUpdatableGui parent) {
String key = enchant.getKey().toString().toLowerCase(Locale.ROOT); String key = enchant.getKey().toString().toLowerCase(Locale.ROOT);
String prettyKey = CasedStringUtil.snakeToUpperSpacedCase(key.replace(":", "_")); String prettyKey = CasedStringUtil.snakeToUpperSpacedCase(key.replace(":", "_"));
var defaultValue = enchant.defaultMaxLevel(); var defaultValue = enchant.defaultMaxLevel();
return new IntSettingsGui.IntSettingFactory(prettyKey + " Limit", parent, return new IntSettingsGui.IntSettingFactory(prettyKey + " Limit", this,
SECTION_NAME + '.' + key, ConfigHolder.DEFAULT_CONFIG, SECTION_NAME + '.' + key, ConfigHolder.DEFAULT_CONFIG,
Collections.singletonList( Collections.singletonList(
"§7Maximum applied level of " + prettyKey "§7Maximum applied level of " + prettyKey

View file

@ -1,13 +1,11 @@
package xyz.alexcrea.cuanvil.gui.config.global; package xyz.alexcrea.cuanvil.gui.config.global;
import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
import io.delilaheve.util.ConfigOptions; import io.delilaheve.util.ConfigOptions;
import org.bukkit.Material; import org.bukkit.Material;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.enchant.CAEnchantment; import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui; import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
@ -35,24 +33,12 @@ public class EnchantMergeLimitConfigGui extends AbstractEnchantConfigGui<IntSett
init(); init();
} }
/**
* Constructor of this Global gui for enchantment level limit settings.
*/
public EnchantMergeLimitConfigGui(Gui parent) {
super("§8Enchantment Maximum Merge Level", parent);
}
@Override @Override
public IntSettingsGui.IntSettingFactory createFactory(CAEnchantment enchant) { public IntSettingsGui.IntSettingFactory createFactory(CAEnchantment enchant) {
return createFactory(enchant, this);
}
public static IntSettingsGui.IntSettingFactory createFactory(CAEnchantment enchant, ValueUpdatableGui parent) {
String key = enchant.getKey().toString().toLowerCase(Locale.ROOT); String key = enchant.getKey().toString().toLowerCase(Locale.ROOT);
String prettyKey = CasedStringUtil.snakeToUpperSpacedCase(key.replace(":", "_")); String prettyKey = CasedStringUtil.snakeToUpperSpacedCase(key.replace(":", "_"));
return new IntSettingsGui.IntSettingFactory(prettyKey + " Merge Limit", parent, return new IntSettingsGui.IntSettingFactory(prettyKey + " Merge Limit", this,
SECTION_NAME + '.' + key, ConfigHolder.DEFAULT_CONFIG, SECTION_NAME + '.' + key, ConfigHolder.DEFAULT_CONFIG,
Arrays.asList( Arrays.asList(
"§7Maximum merge level for for " + prettyKey, "§7Maximum merge level for for " + prettyKey,

View file

@ -1,7 +1,6 @@
package xyz.alexcrea.cuanvil.gui.config.global; package xyz.alexcrea.cuanvil.gui.config.global;
import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -44,10 +43,6 @@ public class GroupConfigGui extends MappedGuiListConfigGui<IncludeGroup, MappedG
init(); init();
} }
public GroupConfigGui(Gui parent) {
super("Group Config", parent);
}
@Override @Override
protected ItemStack createItemForGeneric(IncludeGroup group) { protected ItemStack createItemForGeneric(IncludeGroup group) {
ItemStack item = new ItemStack(group.getRepresentativeMaterial()); ItemStack item = new ItemStack(group.getRepresentativeMaterial());
@ -67,7 +62,7 @@ public class GroupConfigGui extends MappedGuiListConfigGui<IncludeGroup, MappedG
} }
@Override @Override
protected Collection<IncludeGroup> getEveryInstanceOfGeneric() { protected Collection<IncludeGroup> getEveryDisplayableInstanceOfGeneric() {
ArrayList<IncludeGroup> includeGroups = new ArrayList<>(); ArrayList<IncludeGroup> includeGroups = new ArrayList<>();
for (AbstractMaterialGroup group : ConfigHolder.ITEM_GROUP_HOLDER.getItemGroupsManager().getGroupMap().values()) { for (AbstractMaterialGroup group : ConfigHolder.ITEM_GROUP_HOLDER.getItemGroupsManager().getGroupMap().values()) {

View file

@ -1,132 +0,0 @@
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.pane.PatternPane;
import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
import io.delilaheve.CustomAnvil;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
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.config.MainConfigGui;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import xyz.alexcrea.cuanvil.util.MaterialUtil;
import xyz.alexcrea.cuanvil.util.UnitRepairUtil;
public class ItemConfigGui extends ChestGui {
private EnchantConflictGui enchantConflictGui;
private GroupConfigGui groupConfigGui;
private UnitRepairConfigGui unitRepairConfigGui;
private CustomRecipeConfigGui customRecipeConfigGui;
public ItemConfigGui(@NotNull Material display, @NotNull NamespacedKey material) {
super(3,
CasedStringUtil.snakeToUpperSpacedCase(
material.getKey().toLowerCase()
) + " Config",
CustomAnvil.instance);
Pattern pattern = new Pattern(
"0000D0000",
"056000780",
"Q00000000"
);
PatternPane pane = new PatternPane(0, 0, 9, 3, pattern);
addPane(pane);
GuiGlobalItems.addBackgroundItem(pane);
ItemStack displayItemstack = new ItemStack(display);
ItemMeta displayMeta = displayItemstack.getItemMeta();
assert displayMeta != null;
displayMeta.setDisplayName("§aConfiguring " + material);
displayItemstack.setItemMeta(displayMeta);
pane.bindItem('D', new GuiItem(displayItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance));
// Enchantment Conflicts item
GuiItem enchantConflictItem = MainConfigGui.enchantConflictItem(getEnchantConflictGui(material));
pane.bindItem('5', enchantConflictItem);
// Group config items
GuiItem groupConfigItem = MainConfigGui.groupConfigItem(getGroupConfigGui(material));
pane.bindItem('6', groupConfigItem);
// Unit repair item
GuiItem unitRepairItem = MainConfigGui.unitRepairItem(getUnitRepairConfigGui(material));
pane.bindItem('7', unitRepairItem);
// Custom recipe item
GuiItem customRecipeItem = MainConfigGui.customRecipeItem(getCustomRecipeConfigGui(material));
pane.bindItem('8', customRecipeItem);
// quit item
pane.bindItem('Q', MainConfigGui.quitItem());
}
private EnchantConflictGui getEnchantConflictGui(@NotNull NamespacedKey material) {
if (enchantConflictGui == null) {
enchantConflictGui = new EnchantConflictGui(this);
enchantConflictGui.setFilter(group ->
group.getCantConflictGroup().contain(material)
);
enchantConflictGui.init();
}
return enchantConflictGui;
}
private GroupConfigGui getGroupConfigGui(@NotNull NamespacedKey material) {
if (groupConfigGui == null) {
groupConfigGui = new GroupConfigGui(this);
groupConfigGui.setFilter(group ->
group.contain(material)
);
groupConfigGui.init();
}
return groupConfigGui;
}
private UnitRepairConfigGui getUnitRepairConfigGui(@NotNull NamespacedKey material) {
if (unitRepairConfigGui == null) {
unitRepairConfigGui = new UnitRepairConfigGui(this);
unitRepairConfigGui.setFilter(otherMat ->
otherMat.equals(material) || UnitRepairUtil.INSTANCE.findRawRepairValue(
material, otherMat, ConfigHolder.UNIT_REPAIR_HOLDER.getConfig()) != null
);
unitRepairConfigGui.init();
}
return unitRepairConfigGui;
}
private CustomRecipeConfigGui getCustomRecipeConfigGui(@NotNull NamespacedKey material) {
if (customRecipeConfigGui == null) {
customRecipeConfigGui = new CustomRecipeConfigGui(this);
customRecipeConfigGui.setFilter(recipe -> {
if (isMaterial(recipe.getLeftItem(), material)) return true;
if (isMaterial(recipe.getRightItem(), material)) return true;
return isMaterial(recipe.getResultItem(), material);
}
);
customRecipeConfigGui.init();
}
return customRecipeConfigGui;
}
private boolean isMaterial(@Nullable ItemStack item, @NotNull NamespacedKey material) {
if (item == null) return false;
return material.equals(MaterialUtil.INSTANCE.getCustomType(item));
}
}

View file

@ -1,10 +1,9 @@
package xyz.alexcrea.cuanvil.gui.config.global; package xyz.alexcrea.cuanvil.gui.config.global;
import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
import io.delilaheve.CustomAnvil; import io.delilaheve.CustomAnvil;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.NamespacedKey; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -14,14 +13,13 @@ import xyz.alexcrea.cuanvil.gui.config.ask.SelectItemTypeGui;
import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui;
import xyz.alexcrea.cuanvil.gui.config.list.UnitRepairElementListGui; import xyz.alexcrea.cuanvil.gui.config.list.UnitRepairElementListGui;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import xyz.alexcrea.cuanvil.util.MaterialUtil;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet;
public class UnitRepairConfigGui extends public class UnitRepairConfigGui extends
MappedGuiListConfigGui<NamespacedKey, MappedGuiListConfigGui.LazyElement<UnitRepairElementListGui>> { MappedGuiListConfigGui<Material, MappedGuiListConfigGui.LazyElement<UnitRepairElementListGui>> {
private static UnitRepairConfigGui INSTANCE; private static UnitRepairConfigGui INSTANCE;
@ -43,12 +41,8 @@ public class UnitRepairConfigGui extends
init(); init();
} }
public UnitRepairConfigGui(Gui parent) {
super("Unit Repair Config", parent);
}
@Override @Override
protected LazyElement<UnitRepairElementListGui> newInstanceOfGui(NamespacedKey material, GuiItem item) { protected LazyElement<UnitRepairElementListGui> newInstanceOfGui(Material material, GuiItem item) {
return new LazyElement<>(item, () -> { return new LazyElement<>(item, () -> {
UnitRepairElementListGui element = new UnitRepairElementListGui(material, this); UnitRepairElementListGui element = new UnitRepairElementListGui(material, this);
element.init(); element.init();
@ -57,28 +51,17 @@ public class UnitRepairConfigGui extends
} }
@Override @Override
protected ItemStack createItemForGeneric(@NotNull NamespacedKey material) { protected ItemStack createItemForGeneric(Material material) {
var unitConfig = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig(); ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(material.name().toLowerCase());
var section = unitConfig.getConfigurationSection(material.toString().toLowerCase()); String materialName = CasedStringUtil.snakeToUpperSpacedCase(material.name().toLowerCase());
var legacySection = unitConfig.getConfigurationSection(material.getKey().toLowerCase());
String materialName = CasedStringUtil.snakeToUpperSpacedCase(material.getKey().toLowerCase()); if(material.isAir()){
material = Material.BARRIER;
var display = MaterialUtil.INSTANCE.getMatFromKey(material);
if (display == null || display.isAir()) {
display = Material.BARRIER;
} }
var reparable = new HashSet<String>(); int reparableItemCount = materialSection == null ? 0 : materialSection.getKeys(false).size(); // Probably an expensive call but... why not
if (section != null)
reparable.addAll(section.getKeys(false));
if (legacySection != null)
reparable.addAll(legacySection.getKeys(false));
var reparableItemCount = reparable.size(); ItemStack item = new ItemStack(material);
ItemStack item = new ItemStack(display);
ItemMeta meta = item.getItemMeta(); ItemMeta meta = item.getItemMeta();
assert meta != null; assert meta != null;
@ -94,16 +77,13 @@ public class UnitRepairConfigGui extends
} }
@Override @Override
protected Collection<NamespacedKey> getEveryInstanceOfGeneric() { protected Collection<Material> getEveryDisplayableInstanceOfGeneric() {
var materials = new HashSet<NamespacedKey>(); ArrayList<Material> materials = new ArrayList<>();
var config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
for (String matName : config.getKeys(false)) { for (String matName : ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getKeys(false)) {
if(!config.isConfigurationSection(matName)) continue; Material mat = Material.getMaterial(matName.toUpperCase());
if(mat != null){
NamespacedKey material = NamespacedKey.fromString(matName.toLowerCase()); materials.add(mat);
if (material != null) {
materials.add(material);
} }
} }
return materials; return materials;
@ -133,7 +113,7 @@ public class UnitRepairConfigGui extends
"§7You like to be an unit repair item", "§7You like to be an unit repair item",
this, this,
(itemStack, player) -> { (itemStack, player) -> {
NamespacedKey type = MaterialUtil.INSTANCE.getCustomType(itemStack); Material type = itemStack.getType();
// Add new material // Add new material
updateValueForGeneric(type, true); updateValueForGeneric(type, true);
@ -146,7 +126,7 @@ public class UnitRepairConfigGui extends
} }
@NotNull @NotNull
public LazyElement<UnitRepairElementListGui> getInstanceOrCreate(NamespacedKey mat) { public LazyElement<UnitRepairElementListGui> getInstanceOrCreate(Material mat){
LazyElement<UnitRepairElementListGui> element = this.elementGuiMap.get(mat); LazyElement<UnitRepairElementListGui> element = this.elementGuiMap.get(mat);
if(element == null){ if(element == null){
updateValueForGeneric(mat, false); updateValueForGeneric(mat, false);
@ -161,10 +141,8 @@ public class UnitRepairConfigGui extends
protected String genericDisplayedName() { protected String genericDisplayedName() {
return "this function Should not be used."; return "this function Should not be used.";
} }
@Override // Not used in this implementation. @Override // Not used in this implementation.
protected NamespacedKey createAndSaveNewEmptyGeneric(String name) { protected Material createAndSaveNewEmptyGeneric(String name) {
return null; return null;
} }
} }

View file

@ -23,21 +23,17 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.UUID; import java.util.UUID;
import java.util.function.Predicate;
public abstract class ElementListConfigGui< T > extends ChestGui implements ValueUpdatableGui { public abstract class ElementListConfigGui< T > extends ChestGui implements ValueUpdatableGui {
public static final int LIST_FILLER_START_X = 1;
public static final int LIST_FILLER_START_Y = 1;
public static final int LIST_FILLER_LENGTH = 7;
public static final int LIST_FILLER_HEIGHT = 4;
private final String namePrefix; private final String namePrefix;
protected PatternPane backgroundPane; protected PatternPane backgroundPane;
private Predicate<T> filter = (t) -> true; public static final int LIST_FILLER_START_X = 1;
private boolean hasDefaultFilter = true; public static final int LIST_FILLER_START_Y = 1;
public static final int LIST_FILLER_LENGTH = 7;
public static final int LIST_FILLER_HEIGHT = 4;
protected ElementListConfigGui(@NotNull String title, Gui parent) { protected ElementListConfigGui(@NotNull String title, Gui parent) {
super(6, title, CustomAnvil.instance); super(6, title, CustomAnvil.instance);
@ -50,11 +46,6 @@ public abstract class ElementListConfigGui<T> extends ChestGui implements ValueU
} }
public void setFilter(Predicate<T> filter) {
this.filter = filter;
this.hasDefaultFilter = false;
}
protected Pattern getBackgroundPattern(){ protected Pattern getBackgroundPattern(){
return new Pattern( return new Pattern(
GuiSharedConstant.UPPER_FILLER_FULL_PLANE, GuiSharedConstant.UPPER_FILLER_FULL_PLANE,
@ -70,7 +61,7 @@ public abstract class ElementListConfigGui<T> extends ChestGui implements ValueU
protected ArrayList<OutlinePane> pages; protected ArrayList<OutlinePane> pages;
protected HashMap<UUID, Integer> pageMap; protected HashMap<UUID, Integer> pageMap;
public void init() { public void init() { // Why I'm using an init function ? //TODO determine why is it using a init function and not used on constructor.
GuiGlobalItems.addBackgroundItem(this.backgroundPane); GuiGlobalItems.addBackgroundItem(this.backgroundPane);
this.backgroundPane.bindItem('1', GuiSharedConstant.SECONDARY_BACKGROUND_ITEM); this.backgroundPane.bindItem('1', GuiSharedConstant.SECONDARY_BACKGROUND_ITEM);
addPane(this.backgroundPane); addPane(this.backgroundPane);
@ -121,23 +112,17 @@ public abstract class ElementListConfigGui<T> extends ChestGui implements ValueU
viewer.setItemOnCursor(cursor); viewer.setItemOnCursor(cursor);
}, CustomAnvil.instance); }, CustomAnvil.instance);
GuiItem createNew; GuiItem createNew = prepareCreateNewItem();
if(hasDefaultFilter)
createNew = prepareCreateNewItem();
else
createNew = GuiSharedConstant.SECONDARY_BACKGROUND_ITEM;
if(createNew != null){ if(createNew != null){
this.backgroundPane.bindItem('C', createNew); this.backgroundPane.bindItem('C', createNew);
} }
} }
protected void reloadValues(){ protected void reloadValues(){
this.firstPage.clear(); this.firstPage.clear();
this.pages.clear(); this.pages.clear();
this.pages.add(this.firstPage); this.pages.add(this.firstPage);
for (T generic : getDisplayableInstanceOfGeneric()) { for (T generic : getEveryDisplayableInstanceOfGeneric()) {
updateValueForGeneric(generic, false); updateValueForGeneric(generic, false);
} }
@ -315,11 +300,7 @@ public abstract class ElementListConfigGui<T> extends ChestGui implements ValueU
protected abstract void updateGeneric(T generic, ItemStack usedItem); protected abstract void updateGeneric(T generic, ItemStack usedItem);
protected abstract Collection<T> getEveryInstanceOfGeneric(); protected abstract Collection<T> getEveryDisplayableInstanceOfGeneric();
protected Collection<T> getDisplayableInstanceOfGeneric() {
return getEveryInstanceOfGeneric().stream().filter(filter).toList();
}
@Override @Override
public void updateGuiValues() { public void updateGuiValues() {

View file

@ -1,7 +1,6 @@
package xyz.alexcrea.cuanvil.gui.config.list; package xyz.alexcrea.cuanvil.gui.config.list;
import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
import io.delilaheve.CustomAnvil; import io.delilaheve.CustomAnvil;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.HumanEntity; import org.bukkit.entity.HumanEntity;
@ -18,17 +17,12 @@ import java.util.function.Consumer;
public abstract class MappedElementListConfigGui< T, S > extends ElementListConfigGui< T > { public abstract class MappedElementListConfigGui< T, S > extends ElementListConfigGui< T > {
protected final HashMap<T, S> elementGuiMap; protected final HashMap<T, S> elementGuiMap;
protected MappedElementListConfigGui(@NotNull String title) {
protected MappedElementListConfigGui(@NotNull String title, @NotNull Gui parent) { super(title, MainConfigGui.getInstance());
super(title, parent);
this.elementGuiMap = new HashMap<>(); this.elementGuiMap = new HashMap<>();
} }
protected MappedElementListConfigGui(@NotNull String title) {
this(title, MainConfigGui.getInstance());
}
@Override @Override
protected GuiItem prepareCreateNewItem(){ protected GuiItem prepareCreateNewItem(){
// Create new conflict item // Create new conflict item

View file

@ -1,7 +1,6 @@
package xyz.alexcrea.cuanvil.gui.config.list; package xyz.alexcrea.cuanvil.gui.config.list;
import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
import io.delilaheve.CustomAnvil; import io.delilaheve.CustomAnvil;
import org.bukkit.entity.HumanEntity; import org.bukkit.entity.HumanEntity;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
@ -20,10 +19,7 @@ public abstract class MappedGuiListConfigGui<T, S extends MappedGuiListConfigGui
protected MappedGuiListConfigGui(@NotNull String title) { protected MappedGuiListConfigGui(@NotNull String title) {
super(title); super(title);
}
protected MappedGuiListConfigGui(@NotNull String title, @NotNull Gui parent) {
super(title, parent);
} }
@Override @Override
@ -84,7 +80,7 @@ public abstract class MappedGuiListConfigGui<T, S extends MappedGuiListConfigGui
// Try to find if it already exists in a for loop // Try to find if it already exists in a for loop
// Not the most efficient on large number of conflict, but it should not run often. // Not the most efficient on large number of conflict, but it should not run often.
for (T generic : getDisplayableInstanceOfGeneric()) { for (T generic : getEveryDisplayableInstanceOfGeneric()) {
if (generic.toString().equalsIgnoreCase(message)) { if (generic.toString().equalsIgnoreCase(message)) {
player.sendMessage("§cPlease enter a "+genericDisplayedName()+" name that do not already exist..."); player.sendMessage("§cPlease enter a "+genericDisplayedName()+" name that do not already exist...");
// wait next message. // wait next message.
@ -121,7 +117,6 @@ public abstract class MappedGuiListConfigGui<T, S extends MappedGuiListConfigGui
private final GuiItem parentItem; private final GuiItem parentItem;
private final LazyValue<Consumer<InventoryClickEvent>> lazyOpenConsumer; private final LazyValue<Consumer<InventoryClickEvent>> lazyOpenConsumer;
public LazyElement(GuiItem parentItem, Supplier<T> valueSupplier) { public LazyElement(GuiItem parentItem, Supplier<T> valueSupplier) {
super(valueSupplier); super(valueSupplier);
this.parentItem = parentItem; this.parentItem = parentItem;

View file

@ -19,7 +19,6 @@ public abstract class SettingGuiListConfigGui<T, S extends SettingGui.SettingGui
protected HashMap<T, GuiItem> guiItemMap; protected HashMap<T, GuiItem> guiItemMap;
protected HashMap<T, S> factoryMap; protected HashMap<T, S> factoryMap;
protected SettingGuiListConfigGui(@NotNull String title, Gui parent) { protected SettingGuiListConfigGui(@NotNull String title, Gui parent) {
super(title, parent); super(title, parent);
this.guiItemMap = new HashMap<>(); this.guiItemMap = new HashMap<>();
@ -87,22 +86,17 @@ public abstract class SettingGuiListConfigGui<T, S extends SettingGui.SettingGui
} }
@Override // Not used @Override // Not used
protected void updateGeneric(T generic, ItemStack usedItem) { protected void updateGeneric(T generic, ItemStack usedItem) {}
}
@Override // Not used @Override // Not used
protected ItemStack createItemForGeneric(T generic) { protected ItemStack createItemForGeneric(T generic) {
return null; return null;
} }
protected abstract List<String> getCreateItemLore(); protected abstract List<String> getCreateItemLore();
protected abstract Consumer<InventoryClickEvent> getCreateClickConsumer(); protected abstract Consumer<InventoryClickEvent> getCreateClickConsumer();
protected abstract String createItemName(); protected abstract String createItemName();
protected abstract S createFactory(T generic); protected abstract S createFactory(T generic);
protected abstract GuiItem itemFromFactory(T generic, S factory); protected abstract GuiItem itemFromFactory(T generic, S factory);

View file

@ -3,14 +3,12 @@ package xyz.alexcrea.cuanvil.gui.config.list;
import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.HumanEntity; import org.bukkit.entity.HumanEntity;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.Damageable;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.gui.config.ask.SelectItemTypeGui; import xyz.alexcrea.cuanvil.gui.config.ask.SelectItemTypeGui;
import xyz.alexcrea.cuanvil.gui.config.global.UnitRepairConfigGui; 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.GuiGlobalItems;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import xyz.alexcrea.cuanvil.util.CasedStringUtil; 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; import java.util.function.Consumer;
public class UnitRepairElementListGui extends SettingGuiListConfigGui<NamespacedKey, DoubleSettingGui.DoubleSettingFactory> implements ElementMappedToListGui { public class UnitRepairElementListGui extends SettingGuiListConfigGui<String, DoubleSettingGui.DoubleSettingFactory> implements ElementMappedToListGui {
private final NamespacedKey parentMaterial; private final Material parentMaterial;
private final UnitRepairConfigGui parentGui; private final UnitRepairConfigGui parentGui;
private final String materialName; private final String materialName;
private boolean shouldWork = true; private boolean shouldWork = true;
public UnitRepairElementListGui(@NotNull Material parentMaterial,
public UnitRepairElementListGui(@NotNull NamespacedKey parentMaterial,
@NotNull UnitRepairConfigGui parentGui) { @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.parentMaterial = parentMaterial;
this.parentGui = parentGui; this.parentGui = parentGui;
this.materialName = CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.getKey().toLowerCase()); this.materialName = CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.name().toLowerCase());
GuiGlobalItems.addBackItem(this.backgroundPane, parentGui); GuiGlobalItems.addBackItem(this.backgroundPane, parentGui);
} }
@ -67,28 +66,28 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui<Namespaced
this, this,
(itemStack, player) -> { (itemStack, player) -> {
ItemMeta meta = itemStack.getItemMeta(); 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."); player.sendMessage("§cThis item can't be damaged, so it can't be repaired.");
return; return;
} }
if (type.equals(this.parentMaterial)) { if(type == this.parentMaterial){
player.sendMessage("§cItem can't repair something of the same type."); player.sendMessage("§cItem can't repair something of the same type.");
return; return;
} }
String materialName = type.toString(); String materialName = type.name().toLowerCase();
// Add new material // 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) { if (GuiSharedConstant.TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE) {
ConfigHolder.UNIT_REPAIR_HOLDER.saveToDisk(GuiSharedConstant.TEMPORARY_DO_BACKUP_EVERY_SAVE); ConfigHolder.UNIT_REPAIR_HOLDER.saveToDisk(GuiSharedConstant.TEMPORARY_DO_BACKUP_EVERY_SAVE);
} }
// Update gui // Update gui
updateValueForGeneric(type, true); updateValueForGeneric(materialName, true);
this.parentGui.updateValueForGeneric(this.parentMaterial, true); this.parentGui.updateValueForGeneric(this.parentMaterial, true);
@ -107,14 +106,14 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui<Namespaced
} }
@Override @Override
protected DoubleSettingGui.DoubleSettingFactory createFactory(NamespacedKey materialName) { protected DoubleSettingGui.DoubleSettingFactory createFactory(String materialName) {
String materialDisplayName = CasedStringUtil.snakeToUpperSpacedCase(materialName.getKey()); String materialDisplayName = CasedStringUtil.snakeToUpperSpacedCase(materialName);
return new DoubleSettingGui.DoubleSettingFactory( return new DoubleSettingGui.DoubleSettingFactory(
"§0%§8" + materialDisplayName +" Repair", "§0%§8" + materialDisplayName +" Repair",
this, this,
ConfigHolder.UNIT_REPAIR_HOLDER, ConfigHolder.UNIT_REPAIR_HOLDER,
this.parentMaterial.toString().toLowerCase() + "." + materialName, this.parentMaterial.name().toLowerCase()+"."+materialName,
Arrays.asList( Arrays.asList(
"§7Click here to change how many §e% §7of §a" + materialDisplayName, "§7Click here to change how many §e% §7of §a" + materialDisplayName,
"§7Should get repaired by §e"+this.materialName "§7Should get repaired by §e"+this.materialName
@ -129,39 +128,28 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui<Namespaced
} }
@Override @Override
protected GuiItem itemFromFactory(NamespacedKey materialName, DoubleSettingGui.DoubleSettingFactory factory) { protected GuiItem itemFromFactory(String materialName, DoubleSettingGui.DoubleSettingFactory factory) {
return factory.getItem(materialFromName(materialName), return factory.getItem(materialFromName(materialName),
"§7%§a" + CasedStringUtil.snakeToUpperSpacedCase(materialName.getKey()) + " §erepaired by §a" + this.materialName); "§7%§a" + CasedStringUtil.snakeToUpperSpacedCase(materialName)+ " §erepaired by §a" + this.materialName);
} }
@Override @Override
protected Collection<NamespacedKey> getEveryInstanceOfGeneric() { protected Collection<String> getEveryDisplayableInstanceOfGeneric() {
Set<NamespacedKey> keys = new HashSet<>(); ArrayList<String> keys = new ArrayList<>();
if(!this.shouldWork){ if(!this.shouldWork){
return keys; return keys;
} }
ConfigurationSection legacySection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(parentMaterial.getKey().toLowerCase()); ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(parentMaterial.name().toLowerCase());
ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(parentMaterial.toString().toLowerCase()); if(materialSection == null){
return keys;
addAllKeys(legacySection, keys); }
addAllKeys(materialSection, keys); keys.addAll(materialSection.getKeys(false));
return keys; return keys;
} }
private void addAllKeys(@Nullable ConfigurationSection section, @NotNull Set<NamespacedKey> keys) { private Material materialFromName(String materialName){
if (section == null) return; Material mat = Material.getMaterial(materialName.toUpperCase());
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; if(mat == null || mat.isAir()) return Material.BARRIER;
return mat; return mat;
} }
@ -175,8 +163,7 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui<Namespaced
// ElementMappedToListGui methods // ElementMappedToListGui methods
@Override // Not used in this implementation @Override // Not used in this implementation
public void updateLocal() { public void updateLocal() {}
}
@Override @Override
public void cleanAndBeUnusable() { public void cleanAndBeUnusable() {

View file

@ -202,6 +202,7 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
} }
pane.bindItem('D', returnToDefault); pane.bindItem('D', returnToDefault);
} }
/** /**

View file

@ -63,7 +63,7 @@ public class EnchantSelectSettingGui extends SettingGuiListConfigGui<CAEnchantme
} }
@Override @Override
protected Collection<CAEnchantment> getEveryInstanceOfGeneric() { protected Collection<CAEnchantment> getEveryDisplayableInstanceOfGeneric() {
Stream<CAEnchantment> toDisplayStream; Stream<CAEnchantment> toDisplayStream;
if(this.displayUnselected){ if(this.displayUnselected){
toDisplayStream = CAEnchantmentRegistry.getInstance().getNameSortedEnchantments().stream(); toDisplayStream = CAEnchantmentRegistry.getInstance().getNameSortedEnchantments().stream();

View file

@ -217,7 +217,7 @@ public class MaterialSelectSettingGui extends MappedElementListConfigGui<Namespa
} }
@Override @Override
protected Collection<NamespacedKey> getEveryInstanceOfGeneric() { protected Collection<NamespacedKey> getEveryDisplayableInstanceOfGeneric() {
return this.defaultMaterials; return this.defaultMaterials;
} }

View file

@ -1,5 +1,6 @@
package xyz.alexcrea.cuanvil.update.minecraft; package xyz.alexcrea.cuanvil.update.minecraft;
import io.delilaheve.CustomAnvil;
import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.update.UpdateUtils; import xyz.alexcrea.cuanvil.update.UpdateUtils;
import xyz.alexcrea.cuanvil.update.Version; import xyz.alexcrea.cuanvil.update.Version;

View file

@ -38,26 +38,26 @@ public class Update_1_21_11 extends MCUpdate{
addAbsentToList(conflictConfig, "restriction_fire_aspect.notAffectedGroups", "spears"); addAbsentToList(conflictConfig, "restriction_fire_aspect.notAffectedGroups", "spears");
// Unit repair for spears // Unit repair for spears
unitConfig.set("minecraft:gold_ingot.minecraft:golden_spear", 0.25); unitConfig.set("gold_ingot.golden_spear", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_spear", 0.25); unitConfig.set("copper_ingot.copper_spear", 0.25);
unitConfig.set("minecraft:iron_ingot.minecraft:iron_spear", 0.25); unitConfig.set("iron_ingot.iron_spear", 0.25);
unitConfig.set("minecraft:diamond.minecraft:diamond_spear", 0.25); unitConfig.set("diamond.diamond_spear", 0.25);
unitConfig.set("minecraft:netherite_ingot.minecraft:netherite_spear", 0.25); unitConfig.set("netherite_ingot.netherite_spear", 0.25);
unitConfig.set("minecraft:cobblestone.stone_spear", 0.25); unitConfig.set("cobblestone.stone_spear", 0.25);
unitConfig.set("minecraft:cobbled_deepslate.stone_spear", 0.25); unitConfig.set("cobbled_deepslate.stone_spear", 0.25);
unitConfig.set("minecraft:oak_planks.minecraft:wooden_spear", 0.25); unitConfig.set("oak_planks.wooden_spear", 0.25);
unitConfig.set("minecraft:spruce_planks.minecraft:wooden_spear", 0.25); unitConfig.set("spruce_planks.wooden_spear", 0.25);
unitConfig.set("minecraft:birch_planks.minecraft:wooden_spear", 0.25); unitConfig.set("birch_planks.wooden_spear", 0.25);
unitConfig.set("minecraft:jungle_planks.minecraft:wooden_spear", 0.25); unitConfig.set("jungle_planks.wooden_spear", 0.25);
unitConfig.set("minecraft:acacia_planks.minecraft:wooden_spear", 0.25); unitConfig.set("acacia_planks.wooden_spear", 0.25);
unitConfig.set("minecraft:dark_oak_planks.minecraft:wooden_spear", 0.25); unitConfig.set("dark_oak_planks.wooden_spear", 0.25);
unitConfig.set("minecraft:mangrove_planks.minecraft:wooden_spear", 0.25); unitConfig.set("mangrove_planks.wooden_spear", 0.25);
unitConfig.set("minecraft:cherry_planks.minecraft:wooden_spear", 0.25); unitConfig.set("cherry_planks.wooden_spear", 0.25);
unitConfig.set("minecraft:bamboo_planks.minecraft:wooden_spear", 0.25); unitConfig.set("bamboo_planks.wooden_spear", 0.25);
unitConfig.set("minecraft:crimson_planks.minecraft:wooden_spear", 0.25); unitConfig.set("crimson_planks.wooden_spear", 0.25);
unitConfig.set("minecraft:warped_planks.minecraft:wooden_spear", 0.25); unitConfig.set("warped_planks.wooden_spear", 0.25);
// Create lunge enchant value and group // Create lunge enchant value and group
baseConfig.set("enchant_limits.minecraft:lunge", 3); baseConfig.set("enchant_limits.minecraft:lunge", 3);

View file

@ -49,16 +49,16 @@ public class Update_1_21_9 extends MCUpdate{
public static void addCopperUnitRepair(FileConfiguration unitConfig) { public static void addCopperUnitRepair(FileConfiguration unitConfig) {
// Add unit repair // Add unit repair
unitConfig.set("minecraft:copper_ingot.minecraft:copper_helmet", 0.25); unitConfig.set("copper_ingot.copper_helmet", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_chestplate", 0.25); unitConfig.set("copper_ingot.copper_chestplate", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_leggings", 0.25); unitConfig.set("copper_ingot.copper_leggings", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_boots", 0.25); unitConfig.set("copper_ingot.copper_boots", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_pickaxe", 0.25); unitConfig.set("copper_ingot.copper_pickaxe", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_shovel", 0.25); unitConfig.set("copper_ingot.copper_shovel", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_hoe", 0.25); unitConfig.set("copper_ingot.copper_hoe", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_axe", 0.25); unitConfig.set("copper_ingot.copper_axe", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_sword", 0.25); unitConfig.set("copper_ingot.copper_sword", 0.25);
} }
} }

View file

@ -20,7 +20,6 @@ class CustomAnvilCommand(plugin: CustomAnvil) : CommandExecutor, TabCompleter {
private val helpCommand = HelpExecutor() private val helpCommand = HelpExecutor()
private val commands = ImmutableMap.of( private val commands = ImmutableMap.of(
"gui", editConfigCommand, "gui", editConfigCommand,
"config", editConfigCommand,
"reload", ReloadExecutor(), "reload", ReloadExecutor(),
"diagnostic", DiagnosticExecutor(), "diagnostic", DiagnosticExecutor(),
"debug", DebugToggleExecutor(), "debug", DebugToggleExecutor(),
@ -43,16 +42,12 @@ class CustomAnvilCommand(plugin: CustomAnvil) : CommandExecutor, TabCompleter {
): Boolean { ): Boolean {
// Find sub command to execute based on the provided command name // Find sub command to execute based on the provided command name
val subcmd: CASubCommand? val subcmd: CASubCommand?
val subcmdStr: String
val newargs: Array<out String> val newargs: Array<out String>
if(args.isEmpty()) { if(args.isEmpty()) {
subcmdStr = "config"
subcmd = editConfigCommand subcmd = editConfigCommand
newargs = args newargs = args
}else { }else {
subcmdStr = args[0].lowercase() subcmd = commands[args[0].lowercase()]
subcmd = commands[subcmdStr]
newargs = args.copyOfRange(1, args.size) newargs = args.copyOfRange(1, args.size)
} }
@ -62,7 +57,7 @@ class CustomAnvilCommand(plugin: CustomAnvil) : CommandExecutor, TabCompleter {
} }
try { try {
return subcmd.executeCommand(sender, cmd, subcmdStr, newargs) return subcmd.executeCommand(sender, cmd, cmdstr, newargs)
} catch (e: Throwable) { } catch (e: Throwable) {
MetricsUtil.trackError(e) MetricsUtil.trackError(e)
sender.sendMessage("§cError running this command") sender.sendMessage("§cError running this command")
@ -80,7 +75,6 @@ class CustomAnvilCommand(plugin: CustomAnvil) : CommandExecutor, TabCompleter {
if(args.size < 2) { if(args.size < 2) {
for ((key, cmd) in commands) { for ((key, cmd) in commands) {
if(!cmd.allowed(sender)) continue if(!cmd.allowed(sender)) continue
if("gui".contentEquals(key)) continue
result.add(key) result.add(key)
} }
} else { } else {

View file

@ -4,33 +4,16 @@ import io.delilaheve.CustomAnvil
import org.bukkit.command.Command import org.bukkit.command.Command
import org.bukkit.command.CommandSender import org.bukkit.command.CommandSender
import org.bukkit.entity.HumanEntity import org.bukkit.entity.HumanEntity
import xyz.alexcrea.cuanvil.api.EnchantmentApi
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil
import xyz.alexcrea.cuanvil.enchant.CAEnchantment
import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry
import xyz.alexcrea.cuanvil.gui.config.MainConfigGui import xyz.alexcrea.cuanvil.gui.config.MainConfigGui
import xyz.alexcrea.cuanvil.gui.config.global.EnchantConfigGui
import xyz.alexcrea.cuanvil.gui.config.global.ItemConfigGui
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions
import xyz.alexcrea.cuanvil.util.MaterialUtil.customType
import xyz.alexcrea.cuanvil.util.MaterialUtil.isAir
class EditConfigExecutor: CASubCommand() { class EditConfigExecutor: CASubCommand() {
override fun allowed(sender: CommandSender): Boolean { override fun executeCommand(sender: CommandSender,
return sender.hasPermission(CustomAnvil.editConfigPermission)
}
override fun description(): String {
return "Gui to edit the plugin's config"
}
override fun executeCommand(
sender: CommandSender,
cmd: Command, cmd: Command,
cmdstr: String, cmdstr: String,
args: Array<out String> args: Array<out String>): Boolean {
): Boolean {
if (sender !is HumanEntity) return false if (sender !is HumanEntity) return false
if (!allowed(sender)) { if (!allowed(sender)) {
@ -46,88 +29,17 @@ class EditConfigExecutor : CASubCommand() {
return false return false
} }
if ("gui".equals(cmdstr, ignoreCase = true)) { MainConfigGui.getInstance().show(sender)
sender.sendMessage("§c/ca gui has been moved to /ca config")
}
if (args.isEmpty())
processOpen(sender)
else when (args[0].lowercase()) {
"open" -> processOpen(sender)
"enchant" -> processEnchant(sender, args)
"item" -> processItem(sender)
else -> sender.sendMessage("Unknown subcommand \"${args[0]}\"")
}
return true return true
} }
private fun processEnchant(sender: HumanEntity, args: Array<out String>) { override fun allowed(sender: CommandSender): Boolean {
val enchantToFilter: Set<CAEnchantment> return sender.hasPermission(CustomAnvil.editConfigPermission)
if (args.size <= 1) {
val item = sender.inventory.itemInMainHand
enchantToFilter = EnchantmentApi.getEnchantments(item).keys
if (enchantToFilter.isEmpty()) {
sender.sendMessage("No enchantment found in the item you are holding")
return
}
} else {
enchantToFilter = HashSet(EnchantmentApi.getListByName(args[1].lowercase()))
if (enchantToFilter.isEmpty()) {
sender.sendMessage("No enchantment found with the name \"${args[1]}\"")
return
}
} }
EnchantConfigGui(enchantToFilter).show(sender) override fun description(): String {
return "Gui to edit the plugin's config"
}
private fun processItem(sender: HumanEntity) {
val item = sender.inventory.itemInMainHand
if (item.isAir) {
sender.sendMessage("Cannot configure the item in hand")
return
}
ItemConfigGui(item.type, item.customType).show(sender)
}
private fun processOpen(sender: HumanEntity) {
MainConfigGui.getInstance().show(sender)
}
// ---------------
// Tab completer
// ---------------
private fun allEnchantmentsByName(): Collection<String> {
val names = mutableSetOf<String>()
for (enchantment in CAEnchantmentRegistry.getInstance().values()) {
names.add(enchantment.name)
names.add(enchantment.key.toString())
}
return names
}
override fun tabCompleter(sender: CommandSender, args: Array<out String>, list: MutableList<String>) {
list.addAll(
when (args.size) {
1 -> listOf("item", "enchant", "open")
2 -> {
when (args[0].lowercase()) {
"enchant" -> allEnchantmentsByName()
else -> listOf()
}
}
else -> listOf()
}
)
} }
} }

View file

@ -6,7 +6,6 @@ import org.bukkit.NamespacedKey
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import xyz.alexcrea.cuanvil.dependency.DependencyManager import xyz.alexcrea.cuanvil.dependency.DependencyManager
import xyz.alexcrea.cuanvil.dependency.plugins.EcoItemDependencyUtil import xyz.alexcrea.cuanvil.dependency.plugins.EcoItemDependencyUtil
import javax.annotation.Nullable
object MaterialUtil { object MaterialUtil {
@ -36,13 +35,11 @@ object MaterialUtil {
return this.type.key return this.type.key
} }
@Nullable
private fun bukkitMaterialFromKey(key: NamespacedKey): Material? { private fun bukkitMaterialFromKey(key: NamespacedKey): Material? {
//TODO on paper only transition Registry.MATERIAL.get(key) //TODO on paper only transition Registry.MATERIAL.get(key)
return Material.matchMaterial(key.toString()) return Material.matchMaterial(key.toString())
} }
@Nullable
fun getMatFromKey(key: NamespacedKey): Material? { fun getMatFromKey(key: NamespacedKey): Material? {
if(DependencyManager.ecoEnchantCompatibility != null) { if(DependencyManager.ecoEnchantCompatibility != null) {
val result = EcoItemDependencyUtil.ecoItemMaterialFromKey(key) val result = EcoItemDependencyUtil.ecoItemMaterialFromKey(key)

View file

@ -1,8 +1,6 @@
package xyz.alexcrea.cuanvil.util package xyz.alexcrea.cuanvil.util
import org.bukkit.NamespacedKey
import org.bukkit.configuration.ConfigurationSection import org.bukkit.configuration.ConfigurationSection
import org.bukkit.configuration.file.FileConfiguration
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import xyz.alexcrea.cuanvil.config.ConfigHolder import xyz.alexcrea.cuanvil.config.ConfigHolder
import xyz.alexcrea.cuanvil.util.MaterialUtil.customType import xyz.alexcrea.cuanvil.util.MaterialUtil.customType
@ -13,7 +11,7 @@ object UnitRepairUtil {
private const val DEFAULT_DEFAULT_UNIT_REPAIR = 0.25 private const val DEFAULT_DEFAULT_UNIT_REPAIR = 0.25
// Path to user default unit repair value // Path to user default unit repair value
public const val UNIT_REPAIR_DEFAULT_PATH = "default_repair_amount" private const val UNIT_REPAIR_DEFAULT_PATH = "default_repair_amount"
/** /**
* Get the % of repair by unit [other] will do to this [ItemStack]. * Get the % of repair by unit [other] will do to this [ItemStack].
@ -24,56 +22,40 @@ object UnitRepairUtil {
): Double? { ): Double? {
if (other == null) return null if (other == null) return null
val config = ConfigHolder.UNIT_REPAIR_HOLDER.config val config = ConfigHolder.UNIT_REPAIR_HOLDER.config
// Get configuration section if exist
val otherName = other.customType.key.lowercase()
var section = config.getConfigurationSection(otherName)
if (section == null) {
section = config.getConfigurationSection(otherName.uppercase())
if (section == null) return null
val result = findRawRepairValue(this, other, config) ?: return null }
// Get repair amount
if(result > 0) return result var userDefault = config.getDouble(UNIT_REPAIR_DEFAULT_PATH, DEFAULT_DEFAULT_UNIT_REPAIR)
if (userDefault <= 0) {
// Get default userDefault = DEFAULT_DEFAULT_UNIT_REPAIR
val userDefault = config.getDouble(UNIT_REPAIR_DEFAULT_PATH, DEFAULT_DEFAULT_UNIT_REPAIR)
if (userDefault <= 0)
return DEFAULT_DEFAULT_UNIT_REPAIR
return userDefault
} }
private fun findRawRepairValue( return getRepairAmount(this, section, userDefault)
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 findRawRepairValue( /**
self: NamespacedKey, * Get the item % repaired by this configuration section of a unit repair.
other: NamespacedKey, * null if not found.
config: FileConfiguration * If value is set to less than or equal to 0 then it will be set to default
): Double? { */
val result = checkSection(config, other.toString(), self) private fun getRepairAmount(item: ItemStack, section: ConfigurationSection, default: Double): Double? {
if (result != null) return result val itemName = item.customType.key.lowercase()
val repairValue = if (section.isDouble(itemName)) {
return checkSection(config, other.key, self) section.getDouble(itemName)
} } else if (section.isDouble(itemName.uppercase())) {
section.getDouble(itemName.uppercase())
fun checkSection( } else {
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 return null
} }
if (repairValue <= 0)
return default
return repairValue
}
} }