Compare commits

..

No commits in common. "eeb6dd0e57b0829aec74383155ad1107fa0c0b62" and "4291e41eaaa490fe9636417a10415b1123e05222" have entirely different histories.

10 changed files with 169 additions and 345 deletions

View file

@ -3,16 +3,18 @@ package xyz.alexcrea.cuanvil.api;
import io.delilaheve.CustomAnvil;
import kotlin.Triple;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.dependency.DependencyManager;
import xyz.alexcrea.cuanvil.gui.config.global.UnitRepairConfigGui;
import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui;
import xyz.alexcrea.cuanvil.gui.config.list.UnitRepairElementListGui;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Custom Anvil api for unit repair.
@ -20,8 +22,7 @@ import java.util.*;
@SuppressWarnings("unused")
public class UnitRepairApi {
private UnitRepairApi() {
}
private UnitRepairApi(){}
private static Object saveChangeTask = null;
@ -34,20 +35,7 @@ public class UnitRepairApi {
* @param repairable The item to be repaired.
* @return true if successful.
*/
public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable) {
return addUnitRepair(unit, repairable, 0.25, false);
}
/**
* Write and add a custom anvil unit repair recipe.
* Will not write the recipe if it already exists or was deleted.
* Set the value to minecraft default value (0.25 = 25%)
*
* @param unit The unit material used to repair the bellow item.
* @param repairable The item to be repaired.
* @return true if successful.
*/
public static boolean addUnitRepair(@NotNull NamespacedKey unit, @NotNull NamespacedKey repairable) {
public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable){
return addUnitRepair(unit, repairable, 0.25, false);
}
@ -60,7 +48,7 @@ public class UnitRepairApi {
* @param value The amount to be repaired by every unit. (1% = 0.01)
* @return true if successful.
*/
public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value) {
public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value){
return addUnitRepair(unit, repairable, value, false);
}
@ -74,26 +62,12 @@ public class UnitRepairApi {
* @param overrideDeleted If we should write even if the recipe was previously deleted.
* @return true if successful.
*/
public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value, boolean overrideDeleted) {
return addUnitRepair(unit.getKey(), repairable.getKey(), value, overrideDeleted);
}
/**
* Write and add a custom anvil unit repair recipe.
* Will not write the recipe if it already exists.
*
* @param unit The unit material used to repair the bellow item.
* @param repairable The item to be repaired.
* @param value The amount to be repaired by every unit. (1% = 0.01)
* @param overrideDeleted If we should write even if the recipe was previously deleted.
* @return true if successful.
*/
public static boolean addUnitRepair(@NotNull NamespacedKey unit, @NotNull NamespacedKey repairable, double value, boolean overrideDeleted) {
public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value, boolean overrideDeleted){
FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
String path = unit.toString().toLowerCase() + "." + repairable.toString().toLowerCase();
String path = unit.name().toLowerCase() + "." + repairable.name().toLowerCase();
if (!overrideDeleted && ConfigHolder.UNIT_REPAIR_HOLDER.isDeleted(path)) return false;
if (config.contains(path)) return false;
if(!overrideDeleted && ConfigHolder.UNIT_REPAIR_HOLDER.isDeleted(path)) return false;
if(config.contains(path)) return false;
// Set unit repair
return setUnitRepair(unit, repairable, value);
@ -108,24 +82,11 @@ public class UnitRepairApi {
* @param value The amount to be repaired by every unit. (1% = 0.01)
* @return true if successful.
*/
public static boolean setUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value) {
return setUnitRepair(unit.getKey(), repairable.getKey(), value);
}
/**
* Write and add a custom anvil unit repair recipe.
* Do not check if it previously existed or exist.
*
* @param unit The unit material used to repair the bellow item.
* @param repairable The item to be repaired.
* @param value The amount to be repaired by every unit. (1% = 0.01)
* @return true if successful.
*/
public static boolean setUnitRepair(@NotNull NamespacedKey unit, @NotNull NamespacedKey repairable, double value) {
public static boolean setUnitRepair(@NotNull Material unit, @NotNull Material repairable, double value){
FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
String repairableName = repairable.toString().toLowerCase();
String path = unit.toString().toLowerCase() + "." + repairableName;
String repairableName = repairable.name().toLowerCase();
String path = unit.name().toLowerCase() + "." + repairableName;
// Add to config then prepare save
config.set(path, value);
@ -133,10 +94,10 @@ public class UnitRepairApi {
// Add to gui
UnitRepairConfigGui repairConfigGui = UnitRepairConfigGui.getCurrentInstance();
if (repairConfigGui != null) {
if(repairConfigGui != null) {
UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit).getStored();
if (elementGui != null) elementGui.updateValueForGeneric(repairable, true);
if(elementGui != null) elementGui.updateValueForGeneric(repairableName, true);
repairConfigGui.updateValueForGeneric(unit, true);
}
@ -150,56 +111,48 @@ public class UnitRepairApi {
* @param repairable The item used to be repaired.
* @return true if successful.
*/
public static boolean removeUnitRepair(@NotNull Material unit, @NotNull Material repairable) {
return removeUnitRepair(unit.getKey(), repairable.getKey());
}
/**
* Remove a custom anvil unit repair recipe.
*
* @param unit The unit material used to repair the bellow item.
* @param repairable The item used to be repaired.
* @return true if successful.
*/
public static boolean removeUnitRepair(@NotNull NamespacedKey unit, @NotNull NamespacedKey repairable) {
public static boolean removeUnitRepair(@NotNull Material unit, @NotNull Material repairable){
// Delete every possible variation and save to file
String unitName = unit.name();
String repairableName = repairable.name();
FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
config.set(unit.getKey() + "." + repairable.getKey(), null);
config.set(unit.getKey() + "." + repairable, null);
config.set(unit + "." + repairable.getKey(), null);
config.set(unit + "." + repairable, null);
config.set(unitName.toLowerCase() + "." + repairableName.toUpperCase(), null);
config.set(unitName.toUpperCase() + "." + repairableName.toLowerCase(), null);
config.set(unitName.toUpperCase() + "." + repairableName.toUpperCase(), null);
config.set(unitName.toLowerCase() + "." + repairableName.toLowerCase(), null);
// Test if it was the last value of this section
boolean lastValue = false;
if (config.isConfigurationSection(unit.toString())) {
ConfigurationSection section = config.getConfigurationSection(unit.toString());
if(config.isConfigurationSection(unitName.toLowerCase())) {
ConfigurationSection section = config.getConfigurationSection(unitName.toLowerCase());
if (section != null && section.getKeys(false).isEmpty()) {
if(section != null && section.getKeys(false).isEmpty()) {
lastValue = true;
config.set(unit.toString(), null);
config.set(unitName.toLowerCase(), null);
}
} else if (config.isConfigurationSection(unit.getKey())) {
ConfigurationSection section = config.getConfigurationSection(unit.getKey());
if (section != null && section.getKeys(false).isEmpty()) {
} else if (config.isConfigurationSection(unitName.toUpperCase())) {
ConfigurationSection section = config.getConfigurationSection(unitName.toUpperCase());
if(section != null && section.getKeys(false).isEmpty()) {
lastValue = true;
config.set(unit.getKey(), null);
config.set(unitName.toUpperCase(), null);
}
} else lastValue = true;
ConfigHolder.UNIT_REPAIR_HOLDER.delete(unit.toString().toLowerCase() + "." + repairable.toString().toLowerCase());
// We only need to "delete" as the lower case to be counted as deleted
ConfigHolder.UNIT_REPAIR_HOLDER.delete(unitName.toLowerCase() + "." + repairableName.toLowerCase());
prepareSaveTask();
// Remove from gui
UnitRepairConfigGui repairConfigGui = UnitRepairConfigGui.getCurrentInstance();
if (repairConfigGui != null) {
if(repairConfigGui != null) {
UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit).getStored();
if (elementGui != null) elementGui.removeGeneric(repairable);
if (lastValue) {
if(elementGui != null) elementGui.removeGeneric(repairableName);
if(lastValue){
repairConfigGui.removeGeneric(unit);
}
}
@ -211,9 +164,9 @@ public class UnitRepairApi {
* Prepare a task to save custom unit repair recipe configuration.
*/
private static void prepareSaveTask() {
if (saveChangeTask != null) return;
if(saveChangeTask != null) return;
saveChangeTask = DependencyManager.scheduler.scheduleGlobally(CustomAnvil.instance, () -> {
saveChangeTask = DependencyManager.scheduler.scheduleGlobally(CustomAnvil.instance, ()->{
ConfigHolder.UNIT_REPAIR_HOLDER.saveToDisk(true);
saveChangeTask = null;
});
@ -221,7 +174,6 @@ public class UnitRepairApi {
/**
* Get every unit repair recipes.
*
* @return An immutable collection of unit repair recipes.
* <p>
* Each element of the provided triple represent a part of the recipe
@ -230,32 +182,29 @@ public class UnitRepairApi {
* <li>Second object is the item to be repaired.
* <li>Last object is the amount to be repaired by every unit. (1% = 0.01)
* </ul>
* @deprecated some may be missing. use {@link #getModernUnitRepairs()}
*
*/
@Deprecated
@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<>();
FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
for (String unitKey : config.getKeys(false)) {
// Test if config section exist
if (!config.isConfigurationSection(unitKey)) continue;
if(!config.isConfigurationSection(unitKey)) continue;
// Test if unit is a material
Material unit = Material.getMaterial(unitKey.toUpperCase());
if (unit == null) continue;
if(unit == null) continue;
// Iterate over reparable items
ConfigurationSection section = config.getConfigurationSection(unitKey);
for (String repairableKey : section.getKeys(false)) {
// Test if value section exist
if (!section.isDouble(repairableKey)) continue;
if(!section.isDouble(repairableKey)) continue;
// Test if repairable is valid a material
Material repairable = Material.getMaterial(repairableKey.toUpperCase());
if (repairable == null) continue;
if(repairable == null) continue;
// Add the values
mutableList.add(new Triple<>(unit, repairable, section.getDouble(repairableKey)));
@ -266,53 +215,4 @@ public class UnitRepairApi {
return Collections.unmodifiableList(mutableList);
}
/**
* Get every unit repair recipes.
*
* @return An immutable collection of unit repair recipes.
* <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

@ -1,7 +1,6 @@
package xyz.alexcrea.cuanvil.gui.config.global;
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
@ -44,10 +43,6 @@ public class GroupConfigGui extends MappedGuiListConfigGui<IncludeGroup, MappedG
init();
}
public GroupConfigGui(Gui parent) {
super("Group Config", parent);
}
@Override
protected ItemStack createItemForGeneric(IncludeGroup group) {
ItemStack item = new ItemStack(group.getRepresentativeMaterial());

View file

@ -2,6 +2,7 @@ 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;
@ -17,9 +18,7 @@ import java.util.Collections;
public class ItemConfigGui extends ChestGui {
public EnchantConflictGui enchantConflictGui;
public GroupConfigGui groupConfigGui;
public UnitRepairConfigGui unitRepairConfigGui;
public CustomRecipeConfigGui customRecipeConfigGui;
public ItemConfigGui(Material display, NamespacedKey material) {
super(3, material.getKey() + " Config", CustomAnvil.instance);
@ -63,7 +62,7 @@ public class ItemConfigGui extends ChestGui {
groupMeta.setLore(Collections.singletonList("§7Click here to open item group menu"));
groupItemstack.setItemMeta(groupMeta);
GuiItem groupConfigItem = GuiGlobalItems.goToGuiItem(groupItemstack, getGroupConfigGui(material));
GuiItem groupConfigItem = GuiGlobalItems.goToGuiItem(groupItemstack, GroupConfigGui.getInstance());
pane.bindItem('6', groupConfigItem);
@ -76,7 +75,6 @@ public class ItemConfigGui extends ChestGui {
unitRepairMeta.setLore(Collections.singletonList("§7Click here to open anvil unit repair menu"));
unirRepairItemstack.setItemMeta(unitRepairMeta);
//TODO
GuiItem unitRepairItem = GuiGlobalItems.goToGuiItem(unirRepairItemstack, UnitRepairConfigGui.getInstance());
pane.bindItem('7', unitRepairItem);
@ -89,12 +87,12 @@ public class ItemConfigGui extends ChestGui {
customRecipeMeta.setLore(Collections.singletonList("§7Click here to open anvil custom recipe menu"));
customRecipeItemstack.setItemMeta(customRecipeMeta);
//TODO
GuiItem customRecipeItem = GuiGlobalItems.goToGuiItem(customRecipeItemstack, CustomRecipeConfigGui.getInstance());
pane.bindItem('8', customRecipeItem);
}
private EnchantConflictGui getEnchantConflictGui(NamespacedKey material) {
private Gui getEnchantConflictGui(NamespacedKey material) {
if (enchantConflictGui == null) {
enchantConflictGui = new EnchantConflictGui(this);
enchantConflictGui.setFilter(group ->
@ -105,29 +103,4 @@ public class ItemConfigGui extends ChestGui {
return enchantConflictGui;
}
private GroupConfigGui getGroupConfigGui(NamespacedKey material) {
if (groupConfigGui == null) {
groupConfigGui = new GroupConfigGui(this);
groupConfigGui.setFilter(group ->
group.contain(material)
);
groupConfigGui.init();
}
return groupConfigGui;
}
/*private UnitRepairConfigGui getUnitRepairConfigGui(NamespacedKey material) {
if (unitRepairConfigGui == null) {
unitRepairConfigGui = new UnitRepairConfigGui(this);
unitRepairConfigGui.setFilter(otherMat ->
group.contain(material) //TODO check material & what inside
);
unitRepairConfigGui.init();
}
return unitRepairConfigGui;
}*/
}

View file

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

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.type.util.Gui;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.meta.Damageable;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.gui.config.ask.SelectItemTypeGui;
import xyz.alexcrea.cuanvil.gui.config.global.UnitRepairConfigGui;
@ -19,25 +17,26 @@ import xyz.alexcrea.cuanvil.gui.config.settings.DoubleSettingGui;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import xyz.alexcrea.cuanvil.util.MaterialUtil;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.function.Consumer;
public class UnitRepairElementListGui extends SettingGuiListConfigGui<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 String materialName;
private boolean shouldWork = true;
public UnitRepairElementListGui(@NotNull NamespacedKey parentMaterial,
public UnitRepairElementListGui(@NotNull Material parentMaterial,
@NotNull UnitRepairConfigGui parentGui) {
super("§e" + CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.getKey().toLowerCase()) + " §rUnit repair");
super("§e" + CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.name().toLowerCase()) + " §rUnit repair");
this.parentMaterial = parentMaterial;
this.parentGui = parentGui;
this.materialName = CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.getKey().toLowerCase());
this.materialName = CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.name().toLowerCase());
GuiGlobalItems.addBackItem(this.backgroundPane, parentGui);
}
@ -55,7 +54,7 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui<Namespaced
protected Consumer<InventoryClickEvent> getCreateClickConsumer() {
return event -> {
event.setCancelled(true);
if (!this.shouldWork) {
if(!this.shouldWork){
return;
}
event.setCancelled(true);
@ -67,28 +66,28 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui<Namespaced
this,
(itemStack, player) -> {
ItemMeta meta = itemStack.getItemMeta();
NamespacedKey type = MaterialUtil.INSTANCE.getCustomType(itemStack);
Material type = itemStack.getType();
if (!(meta instanceof Damageable)) {
if(!(meta instanceof Damageable) || (type.getMaxDurability() <= 0)) {
player.sendMessage("§cThis item can't be damaged, so it can't be repaired.");
return;
}
if (type.equals(this.parentMaterial)) {
if(type == this.parentMaterial){
player.sendMessage("§cItem can't repair something of the same type.");
return;
}
String materialName = type.toString();
String materialName = type.name().toLowerCase();
// Add new material
ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().set(parentMaterial.toString().toLowerCase() + "." + materialName, 0.25);
ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().set(parentMaterial.name().toLowerCase() + "." + materialName,0.25);
if (GuiSharedConstant.TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE) {
ConfigHolder.UNIT_REPAIR_HOLDER.saveToDisk(GuiSharedConstant.TEMPORARY_DO_BACKUP_EVERY_SAVE);
}
// Update gui
updateValueForGeneric(type, true);
updateValueForGeneric(materialName, true);
this.parentGui.updateValueForGeneric(this.parentMaterial, true);
@ -107,17 +106,17 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui<Namespaced
}
@Override
protected DoubleSettingGui.DoubleSettingFactory createFactory(NamespacedKey materialName) {
String materialDisplayName = CasedStringUtil.snakeToUpperSpacedCase(materialName.getKey());
protected DoubleSettingGui.DoubleSettingFactory createFactory(String materialName) {
String materialDisplayName = CasedStringUtil.snakeToUpperSpacedCase(materialName);
return new DoubleSettingGui.DoubleSettingFactory(
"§0%§8" + materialDisplayName + " Repair",
"§0%§8" + materialDisplayName +" Repair",
this,
ConfigHolder.UNIT_REPAIR_HOLDER,
this.parentMaterial.toString().toLowerCase() + "." + materialName,
this.parentMaterial.name().toLowerCase()+"."+materialName,
Arrays.asList(
"§7Click here to change how many §e% §7of §a" + materialDisplayName,
"§7Should get repaired by §e" + this.materialName
"§7Should get repaired by §e"+this.materialName
),
2,
true, true,
@ -129,40 +128,29 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui<Namespaced
}
@Override
protected GuiItem itemFromFactory(NamespacedKey materialName, DoubleSettingGui.DoubleSettingFactory factory) {
protected GuiItem itemFromFactory(String materialName, DoubleSettingGui.DoubleSettingFactory factory) {
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
protected Collection<NamespacedKey> getEveryInstanceOfGeneric() {
Set<NamespacedKey> keys = new HashSet<>();
if (!this.shouldWork) {
protected Collection<String> getEveryInstanceOfGeneric() {
ArrayList<String> keys = new ArrayList<>();
if(!this.shouldWork){
return keys;
}
ConfigurationSection legacySection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(parentMaterial.getKey().toLowerCase());
ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(parentMaterial.toString().toLowerCase());
addAllKeys(legacySection, keys);
addAllKeys(materialSection, keys);
ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(parentMaterial.name().toLowerCase());
if(materialSection == null){
return keys;
}
keys.addAll(materialSection.getKeys(false));
return keys;
}
private void addAllKeys(@Nullable ConfigurationSection section, @NotNull Set<NamespacedKey> keys) {
if (section == null) return;
for (var key : section.getKeys(false)) {
var material = NamespacedKey.fromString(key);
if (material == null) continue;
keys.add(material);
}
}
private Material materialFromName(NamespacedKey material) {
Material mat = MaterialUtil.INSTANCE.getMatFromKey(material);
if (mat == null || mat.isAir()) return Material.BARRIER;
private Material materialFromName(String materialName){
Material mat = Material.getMaterial(materialName.toUpperCase());
if(mat == null || mat.isAir()) return Material.BARRIER;
return mat;
}
@ -175,8 +163,7 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui<Namespaced
// ElementMappedToListGui methods
@Override // Not used in this implementation
public void updateLocal() {
}
public void updateLocal() {}
@Override
public void cleanAndBeUnusable() {
@ -198,7 +185,7 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui<Namespaced
@Override
public void show(@NotNull HumanEntity humanEntity) {
if (!this.shouldWork) {
if(!this.shouldWork){
humanEntity.closeInventory();
return;
}

View file

@ -1,5 +1,6 @@
package xyz.alexcrea.cuanvil.update.minecraft;
import io.delilaheve.CustomAnvil;
import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.update.UpdateUtils;
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");
// Unit repair for spears
unitConfig.set("minecraft:gold_ingot.minecraft:golden_spear", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_spear", 0.25);
unitConfig.set("minecraft:iron_ingot.minecraft:iron_spear", 0.25);
unitConfig.set("minecraft:diamond.minecraft:diamond_spear", 0.25);
unitConfig.set("minecraft:netherite_ingot.minecraft:netherite_spear", 0.25);
unitConfig.set("gold_ingot.golden_spear", 0.25);
unitConfig.set("copper_ingot.copper_spear", 0.25);
unitConfig.set("iron_ingot.iron_spear", 0.25);
unitConfig.set("diamond.diamond_spear", 0.25);
unitConfig.set("netherite_ingot.netherite_spear", 0.25);
unitConfig.set("minecraft:cobblestone.stone_spear", 0.25);
unitConfig.set("minecraft:cobbled_deepslate.stone_spear", 0.25);
unitConfig.set("cobblestone.stone_spear", 0.25);
unitConfig.set("cobbled_deepslate.stone_spear", 0.25);
unitConfig.set("minecraft:oak_planks.minecraft:wooden_spear", 0.25);
unitConfig.set("minecraft:spruce_planks.minecraft:wooden_spear", 0.25);
unitConfig.set("minecraft:birch_planks.minecraft:wooden_spear", 0.25);
unitConfig.set("minecraft:jungle_planks.minecraft:wooden_spear", 0.25);
unitConfig.set("minecraft:acacia_planks.minecraft:wooden_spear", 0.25);
unitConfig.set("minecraft:dark_oak_planks.minecraft:wooden_spear", 0.25);
unitConfig.set("minecraft:mangrove_planks.minecraft:wooden_spear", 0.25);
unitConfig.set("minecraft:cherry_planks.minecraft:wooden_spear", 0.25);
unitConfig.set("minecraft:bamboo_planks.minecraft:wooden_spear", 0.25);
unitConfig.set("minecraft:crimson_planks.minecraft:wooden_spear", 0.25);
unitConfig.set("minecraft:warped_planks.minecraft:wooden_spear", 0.25);
unitConfig.set("oak_planks.wooden_spear", 0.25);
unitConfig.set("spruce_planks.wooden_spear", 0.25);
unitConfig.set("birch_planks.wooden_spear", 0.25);
unitConfig.set("jungle_planks.wooden_spear", 0.25);
unitConfig.set("acacia_planks.wooden_spear", 0.25);
unitConfig.set("dark_oak_planks.wooden_spear", 0.25);
unitConfig.set("mangrove_planks.wooden_spear", 0.25);
unitConfig.set("cherry_planks.wooden_spear", 0.25);
unitConfig.set("bamboo_planks.wooden_spear", 0.25);
unitConfig.set("crimson_planks.wooden_spear", 0.25);
unitConfig.set("warped_planks.wooden_spear", 0.25);
// Create lunge enchant value and group
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) {
// Add unit repair
unitConfig.set("minecraft:copper_ingot.minecraft:copper_helmet", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_chestplate", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_leggings", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_boots", 0.25);
unitConfig.set("copper_ingot.copper_helmet", 0.25);
unitConfig.set("copper_ingot.copper_chestplate", 0.25);
unitConfig.set("copper_ingot.copper_leggings", 0.25);
unitConfig.set("copper_ingot.copper_boots", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_pickaxe", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_shovel", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_hoe", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_axe", 0.25);
unitConfig.set("minecraft:copper_ingot.minecraft:copper_sword", 0.25);
unitConfig.set("copper_ingot.copper_pickaxe", 0.25);
unitConfig.set("copper_ingot.copper_shovel", 0.25);
unitConfig.set("copper_ingot.copper_hoe", 0.25);
unitConfig.set("copper_ingot.copper_axe", 0.25);
unitConfig.set("copper_ingot.copper_sword", 0.25);
}
}

View file

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

View file

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