diff --git a/src/main/java/xyz/alexcrea/cuanvil/api/ConflictBuilder.java b/src/main/java/xyz/alexcrea/cuanvil/api/ConflictBuilder.java
index 6e1bb58..77479d2 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/api/ConflictBuilder.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/api/ConflictBuilder.java
@@ -352,8 +352,8 @@ public class ConflictBuilder {
* @return An Enchant conflict group with this builder parameters.
*/
public EnchantConflictGroup build() {
- AbstractItemTypeGroup materials = extractGroups();
- EnchantConflictGroup conflict = new EnchantConflictGroup(getName(), materials, getMaxBeforeConflict());
+ AbstractItemTypeGroup groups = extractGroups();
+ EnchantConflictGroup conflict = new EnchantConflictGroup(getName(), groups, getMaxBeforeConflict());
appendEnchantments(conflict);
return conflict;
@@ -441,15 +441,15 @@ public class ConflictBuilder {
IncludeItemTypeGroup group = new IncludeItemTypeGroup(EnchantConflictManager.DEFAULT_GROUP_NAME);
for (String groupName : getExcludedGroupNames()) {
- AbstractItemTypeGroup materialGroup = itemGroupManager.get(groupName);
+ AbstractItemTypeGroup typeGroup = itemGroupManager.get(groupName);
- if (materialGroup == null) {
+ if (typeGroup == null) {
CustomAnvil.instance.getLogger().warning("Material group " + groupName + " do not exist but is ask by conflict " + getName());
ConflictAPI.logConflictOrigin(this);
continue;
}
- group.addToPolicy(materialGroup);
+ group.addToPolicy(typeGroup);
}
return group;
diff --git a/src/main/java/xyz/alexcrea/cuanvil/api/MaterialGroupApi.java b/src/main/java/xyz/alexcrea/cuanvil/api/MaterialGroupApi.java
index 3318fe2..8b51ed0 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/api/MaterialGroupApi.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/api/MaterialGroupApi.java
@@ -14,12 +14,15 @@ import xyz.alexcrea.cuanvil.group.IncludeItemTypeGroup;
import xyz.alexcrea.cuanvil.group.ItemGroupManager;
import xyz.alexcrea.cuanvil.gui.config.global.GroupConfigGui;
-import java.util.*;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
/**
* Custom Anvil api for material group registry.
*/
-@SuppressWarnings({"unused", "UnstableApiUsage"})
+@SuppressWarnings({"unused"})
public class MaterialGroupApi {
private MaterialGroupApi() {
diff --git a/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java b/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java
index 44c0083..4752095 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java
@@ -2,14 +2,15 @@ package xyz.alexcrea.cuanvil.api;
import io.delilaheve.CustomAnvil;
import kotlin.Triple;
-import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.inventory.ItemType;
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.UnitRepairElementListGui;
+import xyz.alexcrea.cuanvil.util.ItemTypeUtil;
import java.util.ArrayList;
import java.util.Collections;
@@ -31,11 +32,11 @@ public class UnitRepairApi {
* 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 unit The unit type used to repair the bellow item.
* @param repairable The item to be repaired.
* @return true if successful.
*/
- public static boolean addUnitRepair(@NotNull Material unit, @NotNull Material repairable) {
+ public static boolean addUnitRepair(@NotNull ItemType unit, @NotNull ItemType repairable) {
return addUnitRepair(unit, repairable, 0.25, false);
}
@@ -48,7 +49,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 ItemType unit, @NotNull ItemType repairable, double value) {
return addUnitRepair(unit, repairable, value, false);
}
@@ -56,15 +57,15 @@ public class UnitRepairApi {
* 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 unit The unit type 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 Material unit, @NotNull Material repairable, double value, boolean overrideDeleted) {
+ public static boolean addUnitRepair(@NotNull ItemType unit, @NotNull ItemType repairable, double value, boolean overrideDeleted) {
FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
- String path = unit.name().toLowerCase() + "." + repairable.name().toLowerCase();
+ String path = unit.getKey() + "." + repairable.getKey();
if (!overrideDeleted && ConfigHolder.UNIT_REPAIR_HOLDER.isDeleted(path)) return false;
if (config.contains(path)) return false;
@@ -77,16 +78,15 @@ public class UnitRepairApi {
* 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 unit The unit type 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 Material unit, @NotNull Material repairable, double value) {
+ public static boolean setUnitRepair(@NotNull ItemType unit, @NotNull ItemType repairable, double value) {
FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
- String repairableName = repairable.name().toLowerCase();
- String path = unit.name().toLowerCase() + "." + repairableName;
+ String path = unit.getKey() + "." + repairable.getKey();
// Add to config then prepare save
config.set(path, value);
@@ -97,7 +97,7 @@ public class UnitRepairApi {
if (repairConfigGui != null) {
UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit).getStored();
- if (elementGui != null) elementGui.updateValueForGeneric(repairableName, true);
+ if (elementGui != null) elementGui.updateValueForGeneric(repairable, true);
repairConfigGui.updateValueForGeneric(unit, true);
}
@@ -107,43 +107,40 @@ public class UnitRepairApi {
/**
* Remove a custom anvil unit repair recipe.
*
- * @param unit The unit material used to repair the bellow item.
+ * @param unit The unit type used to repair the bellow item.
* @param repairable The item used to be repaired.
* @return true if successful.
*/
- public static boolean removeUnitRepair(@NotNull Material unit, @NotNull Material repairable) {
+ public static boolean removeUnitRepair(@NotNull ItemType unit, @NotNull ItemType repairable) {
// Delete every possible variation and save to file
- String unitName = unit.name();
- String repairableName = repairable.name();
-
FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
- config.set(unitName.toLowerCase() + "." + repairableName.toUpperCase(), null);
- config.set(unitName.toUpperCase() + "." + repairableName.toLowerCase(), null);
- config.set(unitName.toUpperCase() + "." + repairableName.toUpperCase(), null);
- config.set(unitName.toLowerCase() + "." + repairableName.toLowerCase(), null);
+ config.set(unit.getKey() + "." + repairable.getKey(), null);
+ config.set(unit.getKey().getKey() + "." + repairable.getKey().getKey(), null);
+ config.set(unit.getKey().getKey() + "." + repairable.getKey(), null);
+ config.set(unit.getKey() + "." + repairable.getKey().getKey(), null);
// Test if it was the last value of this section
boolean lastValue = false;
- if (config.isConfigurationSection(unitName.toLowerCase())) {
- ConfigurationSection section = config.getConfigurationSection(unitName.toLowerCase());
+ if (config.isConfigurationSection(unit.getKey().toString())) {
+ ConfigurationSection section = config.getConfigurationSection(unit.getKey().toString());
if (section != null && section.getKeys(false).isEmpty()) {
lastValue = true;
- config.set(unitName.toLowerCase(), null);
+ config.set(unit.getKey().toString(), null);
}
- } else if (config.isConfigurationSection(unitName.toUpperCase())) {
- ConfigurationSection section = config.getConfigurationSection(unitName.toUpperCase());
+ } else if (config.isConfigurationSection(unit.getKey().getKey())) {
+ ConfigurationSection section = config.getConfigurationSection(unit.getKey().getKey());
if (section != null && section.getKeys(false).isEmpty()) {
lastValue = true;
- config.set(unitName.toUpperCase(), null);
+ config.set(unit.getKey().getKey(), null);
}
} else lastValue = true;
- // We only need to "delete" as the lower case to be counted as deleted
- ConfigHolder.UNIT_REPAIR_HOLDER.delete(unitName.toLowerCase() + "." + repairableName.toLowerCase());
+ // We only need to "delete" as the primary path to be counted as deleted
+ ConfigHolder.UNIT_REPAIR_HOLDER.delete(unit.getKey() + "." + repairable.getKey());
prepareSaveTask();
// Remove from gui
@@ -151,7 +148,7 @@ public class UnitRepairApi {
if (repairConfigGui != null) {
UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit).getStored();
- if (elementGui != null) elementGui.removeGeneric(repairableName);
+ if (elementGui != null) elementGui.removeGeneric(repairable);
if (lastValue) {
repairConfigGui.removeGeneric(unit);
}
@@ -179,23 +176,23 @@ public class UnitRepairApi {
*
* Each element of the provided triple represent a part of the recipe
*
- * - First object is the unit material used to repair the bellow item.
- *
- Second object is the item to be repaired.
+ *
- First object is the unit item type used to repair the bellow item.
+ *
- Second object is the item type of the item to be repaired.
*
- Last object is the amount to be repaired by every unit. (1% = 0.01)
*
*/
@NotNull
- public static List> getUnitRepairs() {
- List> mutableList = new ArrayList<>();
+ public static List> getUnitRepairs() {
+ List> mutableList = new ArrayList<>();
FileConfiguration config = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
for (String unitKey : config.getKeys(false)) {
// Test if config section exist
if (!config.isConfigurationSection(unitKey)) continue;
- // Test if unit is a material
- Material unit = Material.getMaterial(unitKey.toUpperCase());
- if (unit == null) continue;
+ // Test if unit is a correct item type
+ ItemType unit = ItemTypeUtil.INSTANCE.getItemType(unitKey);
+ if(unit == null) continue;
// Iterate over reparable items
ConfigurationSection section = config.getConfigurationSection(unitKey);
@@ -205,7 +202,7 @@ public class UnitRepairApi {
if (!section.isDouble(repairableKey)) continue;
// Test if repairable is valid a material
- Material repairable = Material.getMaterial(repairableKey.toUpperCase());
+ ItemType repairable = ItemTypeUtil.INSTANCE.getItemType(repairableKey);
if (repairable == null) continue;
// Add the values
diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/AdditionalTestEnchantment.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/AdditionalTestEnchantment.java
index 832e5af..8466688 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/enchant/AdditionalTestEnchantment.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/AdditionalTestEnchantment.java
@@ -1,7 +1,7 @@
package xyz.alexcrea.cuanvil.enchant;
-import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.jetbrains.annotations.NotNull;
import java.util.Map;
@@ -11,24 +11,24 @@ public interface AdditionalTestEnchantment {
/**
* Test if the provided enchantments can be compatible with this enchantment. only non-Custom Anvil conflict.
* @param enchantments Immutable map of validated enchantments for the item.
- * @param itemMat Material of the tested item.
+ * @param type Type of the tested item.
* @return If there is a conflict with the enchantments.
*/
boolean isEnchantConflict(
@NotNull Map enchantments,
- @NotNull Material itemMat);
+ @NotNull ItemType type);
/**
* Test if the provided item can be compatible with this enchantment. only non-Custom Anvil conflict.
* @param enchantments Immutable map of validated enchantments for the item.
- * @param itemMat Material of the tested item.
+ * @param type Type of the tested item.
* @param item Provide a new instance of the used item stack with the partial enchantment applied.
* @return If there is a conflict with the enchantment and the item.
*/
boolean isItemConflict(
@NotNull Map enchantments,
- @NotNull Material itemMat,
+ @NotNull ItemType type,
@NotNull ItemStack item);
}
diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/bulk/BukkitEnchantBulkOperation.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/bulk/BukkitEnchantBulkOperation.java
index 42c4eb7..5b4fd7d 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/enchant/bulk/BukkitEnchantBulkOperation.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/bulk/BukkitEnchantBulkOperation.java
@@ -3,9 +3,9 @@ package xyz.alexcrea.cuanvil.enchant.bulk;
import io.delilaheve.CustomAnvil;
import io.delilaheve.util.ConfigOptions;
import io.delilaheve.util.ItemUtil;
-import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
@@ -14,6 +14,7 @@ import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
import java.util.Map;
+@SuppressWarnings("UnstableApiUsage")
public class BukkitEnchantBulkOperation implements BulkGetEnchantOperation, BulkCleanEnchantOperation {
@Override
@@ -45,7 +46,8 @@ public class BukkitEnchantBulkOperation implements BulkGetEnchantOperation, Bulk
@Override
public void bulkClear(@NotNull ItemStack item) {
- if (item.getType() != Material.ENCHANTED_BOOK || ConfigOptions.INSTANCE.getAddBookEnchantmentAsStoredEnchantment()) {
+ if (item.getType().asItemType() != ItemType.ENCHANTED_BOOK ||
+ ConfigOptions.INSTANCE.getAddBookEnchantmentAsStoredEnchantment()) {
item.getEnchantments().forEach((enchantment, level) ->
item.removeEnchantment(enchantment)
@@ -55,7 +57,7 @@ public class BukkitEnchantBulkOperation implements BulkGetEnchantOperation, Bulk
@Override
public void bulkClear(@NotNull ItemStack item, @NotNull ItemMeta meta) {
- if (item.getType() == Material.ENCHANTED_BOOK) {
+ if (item.getType().asItemType() == ItemType.ENCHANTED_BOOK) {
EnchantmentStorageMeta bookMeta = (EnchantmentStorageMeta) meta;
bookMeta.getStoredEnchants().forEach((enchantment, leve) ->
bookMeta.removeStoredEnchant(enchantment)
diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEEV5Enchantment.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEEV5Enchantment.java
index e91930f..3a7a141 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEEV5Enchantment.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEEV5Enchantment.java
@@ -1,7 +1,7 @@
package xyz.alexcrea.cuanvil.enchant.wrapped;
-import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.jetbrains.annotations.NotNull;
import su.nightexpress.excellentenchants.api.enchantment.CustomEnchantment;
import su.nightexpress.excellentenchants.api.item.ItemSet;
@@ -13,6 +13,7 @@ import xyz.alexcrea.cuanvil.enchant.EnchantmentRarity;
import java.util.Map;
import java.util.Set;
+@SuppressWarnings("UnstableApiUsage")
public class CAEEV5Enchantment extends CABukkitEnchantment implements AdditionalTestEnchantment {
@NotNull CustomEnchantment eeenchantment;
@@ -26,7 +27,7 @@ public class CAEEV5Enchantment extends CABukkitEnchantment implements Additional
}
@Override
- public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull Material itemMat) {
+ public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull ItemType type) {
if (!definition.hasConflicts()) return false;
Set conflicts = definition.getExclusiveSet();
@@ -39,10 +40,10 @@ public class CAEEV5Enchantment extends CABukkitEnchantment implements Additional
}
@Override
- public boolean isItemConflict(@NotNull Map enchantments, @NotNull Material itemMat, @NotNull ItemStack item) {
- if (Material.ENCHANTED_BOOK.equals(itemMat)) return false;
+ public boolean isItemConflict(@NotNull Map enchantments, @NotNull ItemType type, @NotNull ItemStack item) {
+ if (ItemType.ENCHANTED_BOOK.equals(type)) return false;
- String key = itemMat.getKey().getKey();
+ String key = type.getKey().getKey();
ItemSet primary = eeenchantment.getPrimaryItems();
if (primary.getMaterials().contains(key)) return false;
diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEcoEnchant.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEcoEnchant.java
index 6e74b73..8657e80 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEcoEnchant.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEcoEnchant.java
@@ -3,8 +3,8 @@ package xyz.alexcrea.cuanvil.enchant.wrapped;
import com.willfp.ecoenchants.enchant.EcoEnchant;
import com.willfp.ecoenchants.target.EnchantmentTarget;
import com.willfp.ecoenchants.type.EnchantmentType;
-import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.enchant.AdditionalTestEnchantment;
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
@@ -13,6 +13,7 @@ import xyz.alexcrea.cuanvil.enchant.EnchantmentRarity;
import java.util.HashMap;
import java.util.Map;
+@SuppressWarnings("UnstableApiUsage")
public class CAEcoEnchant extends CABukkitEnchantment implements AdditionalTestEnchantment {
private final @NotNull EcoEnchant ecoEnchant;
@@ -23,7 +24,7 @@ public class CAEcoEnchant extends CABukkitEnchantment implements AdditionalTestE
}
@Override
- public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull Material itemMat) {
+ public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull ItemType itemType) {
if (enchantments.isEmpty()) return false;
if (this.ecoEnchant.getConflictsWithEverything()) {
@@ -57,9 +58,9 @@ public class CAEcoEnchant extends CABukkitEnchantment implements AdditionalTestE
@Override
public boolean isItemConflict(@NotNull Map enchantments,
- @NotNull Material itemMat,
+ @NotNull ItemType type,
@NotNull ItemStack item) {
- if (Material.ENCHANTED_BOOK.equals(itemMat)) {
+ if (ItemType.ENCHANTED_BOOK.equals(type)) {
return false;
}
diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAIncompatibleAllEnchant.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAIncompatibleAllEnchant.java
index 218ce87..c0fb338 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAIncompatibleAllEnchant.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAIncompatibleAllEnchant.java
@@ -1,11 +1,13 @@
package xyz.alexcrea.cuanvil.enchant.wrapped;
-import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import xyz.alexcrea.cuanvil.enchant.*;
+import xyz.alexcrea.cuanvil.enchant.AdditionalTestEnchantment;
+import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
+import xyz.alexcrea.cuanvil.enchant.EnchantmentRarity;
import java.util.Map;
@@ -24,12 +26,12 @@ public class CAIncompatibleAllEnchant extends CABukkitEnchantment implements Add
@Override
- public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull Material itemMat) {
+ public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull ItemType type) {
return !enchantments.isEmpty() && !(enchantments.size() == 1 && enchantments.containsKey(this));
}
@Override
- public boolean isItemConflict(@NotNull Map enchantments, @NotNull Material itemMat, @NotNull ItemStack item) {
+ public boolean isItemConflict(@NotNull Map enchantments, @NotNull ItemType type, @NotNull ItemStack item) {
return false;
}
}
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java
index bb8488d..c9802bc 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/MainConfigGui.java
@@ -5,8 +5,8 @@ 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.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import xyz.alexcrea.cuanvil.dependency.packet.PacketManagerBase;
import xyz.alexcrea.cuanvil.gui.config.global.*;
@@ -15,6 +15,7 @@ import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import java.util.Collections;
+@SuppressWarnings("UnstableApiUsage")
public class MainConfigGui extends ChestGui {
private static final MainConfigGui INSTANCE = new MainConfigGui();
@@ -39,7 +40,7 @@ public class MainConfigGui extends ChestGui {
GuiGlobalItems.addBackgroundItem(pane);
// Basic config item
- ItemStack basicConfigItemstack = new ItemStack(Material.COMMAND_BLOCK);
+ ItemStack basicConfigItemstack = ItemType.COMMAND_BLOCK.createItemStack();
ItemMeta basicConfigMeta = basicConfigItemstack.getItemMeta();
assert basicConfigMeta != null;
@@ -51,7 +52,7 @@ public class MainConfigGui extends ChestGui {
pane.bindItem('1', basicConfigItem);
// enchant level limit item
- ItemStack enchantLimitItemstack = new ItemStack(Material.ENCHANTED_BOOK);
+ ItemStack enchantLimitItemstack = ItemType.ENCHANTED_BOOK.createItemStack();
ItemMeta enchantLimitMeta = enchantLimitItemstack.getItemMeta();
assert enchantLimitMeta != null;
@@ -63,7 +64,7 @@ public class MainConfigGui extends ChestGui {
pane.bindItem('2', enchantLimitItem);
// enchant level limit item
- ItemStack enchantMergeLimitItemstack = new ItemStack(Material.ENCHANTED_BOOK);
+ ItemStack enchantMergeLimitItemstack = ItemType.ENCHANTED_BOOK.createItemStack();
ItemMeta enchantMergeLimitMeta = enchantMergeLimitItemstack.getItemMeta();
assert enchantMergeLimitMeta != null;
@@ -75,7 +76,7 @@ public class MainConfigGui extends ChestGui {
pane.bindItem('3', enchantMergeLimitItem);
// enchant cost item
- ItemStack enchantCostItemstack = new ItemStack(Material.EXPERIENCE_BOTTLE);
+ ItemStack enchantCostItemstack = ItemType.EXPERIENCE_BOTTLE.createItemStack();
ItemMeta enchantCostMeta = enchantCostItemstack.getItemMeta();
assert enchantCostMeta != null;
@@ -87,7 +88,7 @@ public class MainConfigGui extends ChestGui {
pane.bindItem('4', enchantCostItem);
// Enchantment Conflicts item
- ItemStack enchantConflictItemstack = new ItemStack(Material.OAK_FENCE);
+ ItemStack enchantConflictItemstack = ItemType.OAK_FENCE.createItemStack();
ItemMeta enchantConflictMeta = enchantConflictItemstack.getItemMeta();
assert enchantConflictMeta != null;
@@ -99,7 +100,7 @@ public class MainConfigGui extends ChestGui {
pane.bindItem('5', enchantConflictItem);
// Group config items
- ItemStack groupItemstack = new ItemStack(Material.CHEST);
+ ItemStack groupItemstack = ItemType.CHEST.createItemStack();
ItemMeta groupMeta = groupItemstack.getItemMeta();
assert groupMeta != null;
@@ -112,7 +113,7 @@ public class MainConfigGui extends ChestGui {
pane.bindItem('6', groupConfigItem);
// Unit repair item
- ItemStack unirRepairItemstack = new ItemStack(Material.DIAMOND);
+ ItemStack unirRepairItemstack = ItemType.DIAMOND.createItemStack();
ItemMeta unitRepairMeta = unirRepairItemstack.getItemMeta();
assert unitRepairMeta != null;
@@ -124,7 +125,7 @@ public class MainConfigGui extends ChestGui {
pane.bindItem('7', unitRepairItem);
// Custom recipe item
- ItemStack customRecipeItemstack = new ItemStack(Material.CRAFTING_TABLE);
+ ItemStack customRecipeItemstack = ItemType.CRAFTING_TABLE.createItemStack();
ItemMeta customRecipeMeta = customRecipeItemstack.getItemMeta();
assert customRecipeMeta != null;
@@ -136,7 +137,7 @@ public class MainConfigGui extends ChestGui {
pane.bindItem('8', customRecipeItem);
// quit item
- ItemStack quitItemstack = new ItemStack(Material.BARRIER);
+ ItemStack quitItemstack = ItemType.BARRIER.createItemStack();
ItemMeta quitMeta = quitItemstack.getItemMeta();
assert quitMeta != null;
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectItemTypeContainer.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectItemTypeContainer.java
index 8b2b0ea..58e065e 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectItemTypeContainer.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectItemTypeContainer.java
@@ -3,7 +3,10 @@ package xyz.alexcrea.cuanvil.gui.config;
import org.bukkit.inventory.ItemType;
import xyz.alexcrea.cuanvil.util.CasedStringUtil;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
@SuppressWarnings("UnstableApiUsage")
public interface SelectItemTypeContainer {
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/ConfirmActionGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/ConfirmActionGui.java
index 56bf848..d8d9ab9 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/ConfirmActionGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/ConfirmActionGui.java
@@ -4,9 +4,9 @@ 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 io.delilaheve.CustomAnvil;
-import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
@@ -16,6 +16,7 @@ import java.util.Arrays;
import java.util.function.Supplier;
import java.util.logging.Level;
+@SuppressWarnings("UnstableApiUsage")
public class ConfirmActionGui extends AbstractAskGui {
public ConfirmActionGui(@NotNull String title, String actionDescription,
@@ -52,7 +53,7 @@ public class ConfirmActionGui extends AbstractAskGui {
}, CustomAnvil.instance));
// Info item
- ItemStack infoItem = new ItemStack(Material.PAPER);
+ ItemStack infoItem = ItemType.PAPER.createItemStack();
ItemMeta infoMeta = infoItem.getItemMeta();
infoMeta.setDisplayName("§eAre you sure ?");
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java
index b2d6afe..a8f2023 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java
@@ -4,9 +4,9 @@ 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 io.delilaheve.CustomAnvil;
-import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
@@ -17,6 +17,7 @@ import java.util.Arrays;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiConsumer;
+@SuppressWarnings("UnstableApiUsage")
public class SelectItemTypeGui extends AbstractAskGui {
private ItemStack selectedItem;
@@ -45,7 +46,7 @@ public class SelectItemTypeGui extends AbstractAskGui {
this.pane.bindItem('S', GuiGlobalItems.backgroundItem());
// Select item
- ItemStack selectItem = setDisplayMeta(new ItemStack(Material.BARRIER), actionDescription);
+ ItemStack selectItem = setDisplayMeta(ItemType.BARRIER.createItemStack(), actionDescription);
AtomicReference selectGuiItem = new AtomicReference<>();
selectGuiItem.set(new GuiItem(selectItem, event -> {
@@ -56,7 +57,9 @@ public class SelectItemTypeGui extends AbstractAskGui {
ItemStack finalItem;
if(materialOnly){
- finalItem = setDisplayMeta(new ItemStack(cursor.getType()), actionDescription);
+ finalItem = setDisplayMeta(
+ cursor.getType().asItemType().createItemStack(),
+ actionDescription);
}else{
finalItem = cursor.clone();
}
@@ -71,7 +74,7 @@ public class SelectItemTypeGui extends AbstractAskGui {
this.pane.bindItem('V', selectGuiItem.get());
// Temporary leave item
- GuiItem temporaryLeave = GuiGlobalItems.temporaryCloseGuiToSelectItem(Material.YELLOW_STAINED_GLASS_PANE, this);
+ GuiItem temporaryLeave = GuiGlobalItems.temporaryCloseGuiToSelectItem(ItemType.YELLOW_STAINED_GLASS_PANE, this);
this.pane.bindItem('s', temporaryLeave);
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java
index 74373bd..3f1bf6d 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/BasicConfigGui.java
@@ -8,8 +8,8 @@ import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
import io.delilaheve.CustomAnvil;
import io.delilaheve.util.ConfigOptions;
import kotlin.ranges.IntRange;
-import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -32,6 +32,7 @@ import java.util.List;
/**
* Global config to edit basic basic settings.
*/
+@SuppressWarnings("UnstableApiUsage")
public class BasicConfigGui extends ChestGui implements ValueUpdatableGui {
private static BasicConfigGui INSTANCE = null;
@@ -109,7 +110,7 @@ public class BasicConfigGui extends ChestGui implements ValueUpdatableGui {
"§7In other words:",
"§7For any anvil cost greater than §aMax Anvil Cost§7, Cost will be set to §aMax Anvil Cost§7.");
// cap anvil cost not needed
- ItemStack item = new ItemStack(Material.BARRIER);
+ ItemStack item = ItemType.BARRIER.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -134,7 +135,7 @@ public class BasicConfigGui extends ChestGui implements ValueUpdatableGui {
ConfigOptions.DEFAULT_MAX_ANVIL_COST,
1, 5, 10);
// max anvil cost not needed
- item = new ItemStack(Material.BARRIER);
+ item = ItemType.BARRIER.createItemStack();
meta = item.getItemMeta();
assert meta != null;
@@ -238,7 +239,7 @@ public class BasicConfigGui extends ChestGui implements ValueUpdatableGui {
"§7Give player §eca.color.hex§7 Permission to allow use of hexadecimal color.");
// Permission needed for color not necessary
- item = new ItemStack(Material.BARRIER);
+ item = ItemType.BARRIER.createItemStack();
meta = item.getItemMeta();
assert meta != null;
@@ -262,7 +263,7 @@ public class BasicConfigGui extends ChestGui implements ValueUpdatableGui {
1, 5, 10, 50, 100);
// Permission needed for color not necessary
- item = new ItemStack(Material.BARRIER);
+ item = ItemType.BARRIER.createItemStack();
meta = item.getItemMeta();
assert meta != null;
@@ -300,7 +301,7 @@ public class BasicConfigGui extends ChestGui implements ValueUpdatableGui {
GuiItem maxAnvilCostItem;
if (!this.removeAnvilCostLimit.getConfiguredValue()) {
capAnvilCostItem = this.capAnvilCost.getItem("Cap Anvil Cost");
- maxAnvilCostItem = this.maxAnvilCost.getItem(Material.EXPERIENCE_BOTTLE, "Max Anvil Cost");
+ maxAnvilCostItem = this.maxAnvilCost.getItem(ItemType.EXPERIENCE_BOTTLE, "Max Anvil Cost");
} else {
capAnvilCostItem = this.noCapRepairItem;
maxAnvilCostItem = this.noMaxCostItem;
@@ -319,23 +320,23 @@ public class BasicConfigGui extends ChestGui implements ValueUpdatableGui {
// item repair cost
- GuiItem itemRepairCostItem = this.itemRepairCost.getItem(Material.ANVIL);
+ GuiItem itemRepairCostItem = this.itemRepairCost.getItem(ItemType.ANVIL);
pane.bindItem('I', itemRepairCostItem);
// unit repair cost
- GuiItem unitRepairCostItem = this.unitRepairCost.getItem(Material.DIAMOND);
+ GuiItem unitRepairCostItem = this.unitRepairCost.getItem(ItemType.DIAMOND);
pane.bindItem('U', unitRepairCostItem);
// item rename cost
- GuiItem itemRenameCostItem = this.itemRenameCost.getItem(Material.NAME_TAG);
+ GuiItem itemRenameCostItem = this.itemRenameCost.getItem(ItemType.NAME_TAG);
pane.bindItem('r', itemRenameCostItem);
// sacrifice illegal enchant cost
- GuiItem illegalCostItem = this.sacrificeIllegalEnchantCost.getItem(Material.ENCHANTED_BOOK);
+ GuiItem illegalCostItem = this.sacrificeIllegalEnchantCost.getItem(ItemType.ENCHANTED_BOOK);
pane.bindItem('S', illegalCostItem);
// work penalty type
- GuiItem workPenaltyType = WorkPenaltyTypeSettingGui.getDisplayItem(this, Material.DAMAGED_ANVIL, "§aWork Penalty Type");
+ GuiItem workPenaltyType = WorkPenaltyTypeSettingGui.getDisplayItem(this, ItemType.DAMAGED_ANVIL, "§aWork Penalty Type");
pane.bindItem('W', workPenaltyType);
// allow color code
@@ -353,7 +354,7 @@ public class BasicConfigGui extends ChestGui implements ValueUpdatableGui {
pane.bindItem('p', permissionNeededItem);
// using color cost
- GuiItem useColorCostItem = this.useOfColorCost.getItem(Material.EXPERIENCE_BOTTLE, "Use color");
+ GuiItem useColorCostItem = this.useOfColorCost.getItem(ItemType.EXPERIENCE_BOTTLE, "Use color");
pane.bindItem('P', useColorCostItem);
} else {
pane.bindItem('p', this.noPermissionNeededItem);
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/CustomRecipeConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/CustomRecipeConfigGui.java
index e21ad75..558bf6b 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/CustomRecipeConfigGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/CustomRecipeConfigGui.java
@@ -1,9 +1,9 @@
package xyz.alexcrea.cuanvil.gui.config.global;
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
-import org.bukkit.Material;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -17,6 +17,7 @@ import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import java.util.ArrayList;
import java.util.Collection;
+@SuppressWarnings("UnstableApiUsage")
public class CustomRecipeConfigGui extends MappedGuiListConfigGui> {
@@ -46,7 +47,7 @@ public class CustomRecipeConfigGui extends MappedGuiListConfigGui {
private static final String SECTION_NAME = "enchant_values";
@@ -62,7 +63,7 @@ public class EnchantCostConfigGui extends AbstractEnchantConfigGui {
private static final String SECTION_NAME = "enchant_limits";
@@ -60,7 +61,7 @@ public class EnchantLimitConfigGui extends AbstractEnchantConfigGui {
private static final String SECTION_NAME = "disable-merge-over";
@@ -61,7 +62,7 @@ public class EnchantMergeLimitConfigGui extends AbstractEnchantConfigGui> {
+ MappedGuiListConfigGui> {
private static UnitRepairConfigGui INSTANCE;
@@ -42,33 +44,51 @@ public class UnitRepairConfigGui extends
}
@Override
- protected LazyElement newInstanceOfGui(Material material, GuiItem item) {
+ protected LazyElement newInstanceOfGui(ItemType type, GuiItem item) {
return new LazyElement<>(item, () -> {
- UnitRepairElementListGui element = new UnitRepairElementListGui(material, this);
+ UnitRepairElementListGui element = new UnitRepairElementListGui(type, this);
element.init();
return element;
});
}
- @Override
- protected ItemStack createItemForGeneric(Material material) {
- ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(material.name().toLowerCase());
- String materialName = CasedStringUtil.snakeToUpperSpacedCase(material.name().toLowerCase());
+ private void aggregateFromSection(HashSet set, String sectionName){
+ ConfigurationSection section = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(sectionName);
+ if(section == null) return;
- if(material.isAir()){
- material = Material.BARRIER;
+ for (String key : section.getKeys(false)) {
+ ItemType type = ItemTypeUtil.INSTANCE.getItemTypeExact(key);
+ if(type != null) set.add(type);
+ }
+ }
+
+ private int numberOfChildren(ItemType type){
+ HashSet set = new HashSet<>();
+
+ aggregateFromSection(set, type.getKey().toString());
+ aggregateFromSection(set, type.getKey().getKey());
+
+ return set.size();
+ }
+
+ @Override
+ protected ItemStack createItemForGeneric(ItemType type) {
+ String typeName = CasedStringUtil.snakeToUpperSpacedCase(ItemTypeUtil.INSTANCE.name(type));
+
+ if(type == ItemType.AIR){
+ type = ItemType.BARRIER;
}
- int reparableItemCount = materialSection == null ? 0 : materialSection.getKeys(false).size(); // Probably an expensive call but... why not
+ int reparableItemCount = numberOfChildren(type);
- ItemStack item = new ItemStack(material);
+ ItemStack item = type.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
- meta.setDisplayName("§eRepaired by " +materialName);
+ meta.setDisplayName("§eRepaired by " +typeName);
meta.setLore(Arrays.asList(
- "§7There is currently §e" +reparableItemCount+ " §7reparable item with "+materialName,
- "§7Click here to open the menu to edit reparable item by " + materialName
+ "§7There is currently §e" +reparableItemCount+ " §7reparable item with "+typeName,
+ "§7Click here to open the menu to edit reparable item by " + typeName
));
item.setItemMeta(meta);
@@ -77,29 +97,29 @@ public class UnitRepairConfigGui extends
}
@Override
- protected Collection getEveryDisplayableInstanceOfGeneric() {
- ArrayList materials = new ArrayList<>();
+ protected Collection getEveryDisplayableInstanceOfGeneric() {
+ HashSet types = new HashSet<>(); // we need set to avoid duplicate
- for (String matName : ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getKeys(false)) {
- Material mat = Material.getMaterial(matName.toUpperCase());
- if(mat != null){
- materials.add(mat);
+ for (String typeName : ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getKeys(false)) {
+ ItemType type = ItemTypeUtil.INSTANCE.getItemTypeExact(typeName);
+ if(type != null){
+ types.add(type);
}
}
- return materials;
+ return types;
}
@Override
protected GuiItem prepareCreateNewItem() {
// Create new conflict item
- ItemStack createItem = new ItemStack(Material.PAPER);
+ ItemStack createItem = ItemType.PAPER.createItemStack();
ItemMeta createMeta = createItem.getItemMeta();
assert createMeta != null;
- createMeta.setDisplayName("§aSelect a new unit material");
+ createMeta.setDisplayName("§aSelect a new unit type");
createMeta.setLore(Arrays.asList(
- "§7Select a new unit material to be used.",
- "§7You will be asked the material to use."
+ "§7Select a new unit to be used.",
+ "§7You will be asked the item/item type to use."
));
createItem.setItemMeta(createMeta);
@@ -113,11 +133,11 @@ public class UnitRepairConfigGui extends
"§7You like to be an unit repair item",
this,
(itemStack, player) -> {
- Material type = itemStack.getType();
- // Add new material
+ ItemType type = itemStack.getType().asItemType();
+ // Add new item type
updateValueForGeneric(type, true);
- // Display material edit setting
+ // Display item type edit setting
this.elementGuiMap.get(type).get().getMappedGui().show(player);
},
true
@@ -126,7 +146,7 @@ public class UnitRepairConfigGui extends
}
@NotNull
- public LazyElement getInstanceOrCreate(Material mat){
+ public LazyElement getInstanceOrCreate(ItemType mat){
LazyElement element = this.elementGuiMap.get(mat);
if(element == null){
updateValueForGeneric(mat, false);
@@ -142,7 +162,7 @@ public class UnitRepairConfigGui extends
return "this function Should not be used.";
}
@Override // Not used in this implementation.
- protected Material createAndSaveNewEmptyGeneric(String name) {
+ protected ItemType createAndSaveNewEmptyGeneric(String name) {
return null;
}
}
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/ElementListConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/ElementListConfigGui.java
index f3cc0b4..eafc72e 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/ElementListConfigGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/ElementListConfigGui.java
@@ -9,10 +9,10 @@ import com.github.stefvanschie.inventoryframework.pane.Pane;
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.entity.HumanEntity;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
@@ -24,6 +24,7 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.UUID;
+@SuppressWarnings("UnstableApiUsage")
public abstract class ElementListConfigGui< T > extends ChestGui implements ValueUpdatableGui {
private final String namePrefix;
@@ -83,14 +84,14 @@ public abstract class ElementListConfigGui< T > extends ChestGui implements Valu
protected void prepareStaticValues(){
// Left item creation for consumer & bind
- this.goLeftItem = new GuiItem(new ItemStack(Material.RED_STAINED_GLASS_PANE), event -> {
+ this.goLeftItem = new GuiItem(ItemType.RED_STAINED_GLASS_PANE.createItemStack(), event -> {
HumanEntity viewer = event.getWhoClicked();
UUID playerUUID = viewer.getUniqueId();
int page = this.pageMap.getOrDefault(playerUUID, 0);
this.pageMap.put(playerUUID, page - 1);
ItemStack cursor = viewer.getItemOnCursor();
- viewer.setItemOnCursor(new ItemStack(Material.AIR));
+ viewer.setItemOnCursor(ItemType.AIR.createItemStack());
show(viewer);
@@ -98,14 +99,14 @@ public abstract class ElementListConfigGui< T > extends ChestGui implements Valu
}, CustomAnvil.instance);
// Right item creation for consumer & bind
- this.goRightItem = new GuiItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), event -> {
+ this.goRightItem = new GuiItem(ItemType.LIME_STAINED_GLASS_PANE.createItemStack(), event -> {
HumanEntity viewer = event.getWhoClicked();
UUID playerUUID = viewer.getUniqueId();
int page = pageMap.getOrDefault(playerUUID, 0);
this.pageMap.put(playerUUID, page + 1);
ItemStack cursor = viewer.getItemOnCursor();
- viewer.setItemOnCursor(new ItemStack(Material.AIR));
+ viewer.setItemOnCursor(ItemType.AIR.createItemStack());
show(viewer);
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedElementListConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedElementListConfigGui.java
index 31ab718..a9346b3 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedElementListConfigGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedElementListConfigGui.java
@@ -2,9 +2,9 @@ package xyz.alexcrea.cuanvil.gui.config.list;
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import io.delilaheve.CustomAnvil;
-import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.config.MainConfigGui;
@@ -14,9 +14,10 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.function.Consumer;
-public abstract class MappedElementListConfigGui< T, S > extends ElementListConfigGui< T > {
+public abstract class MappedElementListConfigGui extends ElementListConfigGui {
protected final HashMap elementGuiMap;
+
protected MappedElementListConfigGui(@NotNull String title) {
super(title, MainConfigGui.getInstance());
this.elementGuiMap = new HashMap<>();
@@ -24,17 +25,17 @@ public abstract class MappedElementListConfigGui< T, S > extends ElementListConf
}
@Override
- protected GuiItem prepareCreateNewItem(){
+ protected GuiItem prepareCreateNewItem() {
// Create new conflict item
- ItemStack createItem = new ItemStack(Material.PAPER);
+ ItemStack createItem = ItemType.PAPER.createItemStack();
ItemMeta createMeta = createItem.getItemMeta();
assert createMeta != null;
- createMeta.setDisplayName("§aCreate new "+genericDisplayedName());
+ createMeta.setDisplayName("§aCreate new " + genericDisplayedName());
createMeta.setLore(Arrays.asList(
- "§7Create a new "+genericDisplayedName()+".",
- "§7You will be asked to name the "+genericDisplayedName()+" in chat.",
- "§7Then, you should edit the "+genericDisplayedName()+" config as you need"
+ "§7Create a new " + genericDisplayedName() + ".",
+ "§7You will be asked to name the " + genericDisplayedName() + " in chat.",
+ "§7Then, you should edit the " + genericDisplayedName() + " config as you need"
));
createItem.setItemMeta(createMeta);
@@ -51,8 +52,8 @@ public abstract class MappedElementListConfigGui< T, S > extends ElementListConf
}
player.closeInventory();
- player.sendMessage("§eWrite the "+genericDisplayedName()+" name you want to create in the chat.\n" +
- "§eOr write §ccancel §eto go back to "+genericDisplayedName()+" config menu");
+ player.sendMessage("§eWrite the " + genericDisplayedName() + " name you want to create in the chat.\n" +
+ "§eOr write §ccancel §eto go back to " + genericDisplayedName() + " config menu");
CustomAnvil.Companion.getChatListener().setListenedCallback(player, prepareCreateItemConsumer(player));
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/SettingGuiListConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/SettingGuiListConfigGui.java
index f0e7cb0..a4b55c4 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/SettingGuiListConfigGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/SettingGuiListConfigGui.java
@@ -3,9 +3,9 @@ package xyz.alexcrea.cuanvil.gui.config.list;
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.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.config.MainConfigGui;
@@ -31,7 +31,7 @@ public abstract class SettingGuiListConfigGui< T, S extends SettingGui.SettingGu
@Override
protected GuiItem prepareCreateNewItem() {
- ItemStack createItem = new ItemStack(Material.PAPER);
+ ItemStack createItem = ItemType.PAPER.createItemStack();
ItemMeta createMeta = createItem.getItemMeta();
assert createMeta != null;
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/UnitRepairElementListGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/UnitRepairElementListGui.java
index 35f8ebb..36d1cdd 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/UnitRepairElementListGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/UnitRepairElementListGui.java
@@ -2,10 +2,10 @@ 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.configuration.ConfigurationSection;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.Damageable;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
@@ -17,26 +17,29 @@ 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.ItemTypeUtil;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.HashSet;
import java.util.List;
import java.util.function.Consumer;
-public class UnitRepairElementListGui extends SettingGuiListConfigGui implements ElementMappedToListGui {
+public class UnitRepairElementListGui extends
+ SettingGuiListConfigGui implements ElementMappedToListGui {
- private final Material parentMaterial;
+ private final ItemType parentType;
private final UnitRepairConfigGui parentGui;
private final String materialName;
private boolean shouldWork = true;
- public UnitRepairElementListGui(@NotNull Material parentMaterial,
+
+ public UnitRepairElementListGui(@NotNull ItemType parentType,
@NotNull UnitRepairConfigGui parentGui) {
- super("§e" + CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.name().toLowerCase()) + " §rUnit repair");
- this.parentMaterial = parentMaterial;
+ super("§e" + CasedStringUtil.snakeToUpperSpacedCase(parentType.getKey().getKey()) + " §rUnit repair");
+ this.parentType = parentType;
this.parentGui = parentGui;
- this.materialName = CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.name().toLowerCase());
+ this.materialName = CasedStringUtil.snakeToUpperSpacedCase(parentType.getKey().getKey());
GuiGlobalItems.addBackItem(this.backgroundPane, parentGui);
}
@@ -54,7 +57,7 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui getCreateClickConsumer() {
return event -> {
event.setCancelled(true);
- if(!this.shouldWork){
+ if (!this.shouldWork) {
return;
}
event.setCancelled(true);
@@ -66,29 +69,29 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui {
ItemMeta meta = itemStack.getItemMeta();
- Material type = itemStack.getType();
+ ItemType type = itemStack.getType().asItemType();
- if(!(meta instanceof Damageable) || (type.getMaxDurability() <= 0)) {
+ if (!(meta instanceof Damageable)) {
player.sendMessage("§cThis item can't be damaged, so it can't be repaired.");
return;
}
- if(type == this.parentMaterial){
+ if (type == this.parentType) {
player.sendMessage("§cItem can't repair something of the same type.");
return;
}
- String materialName = type.name().toLowerCase();
+ String materialName = type.getKey().getKey().toLowerCase();
// Add new material
- ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().set(parentMaterial.name().toLowerCase() + "." + materialName,0.25);
+ ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().set(parentType.getKey() + "." + type.getKey(), 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(materialName, true);
- this.parentGui.updateValueForGeneric(this.parentMaterial, true);
+ updateValueForGeneric(type, true);
+ this.parentGui.updateValueForGeneric(this.parentType, true);
// Display material edit setting
@@ -106,71 +109,81 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui set, String path){
+ ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER
+ .getConfig()
+ .getConfigurationSection(path);
+ if (materialSection != null) {
+ for (String key : materialSection.getKeys(false)) {
+ ItemType type = ItemTypeUtil.INSTANCE.getItemTypeExact(key);
+ if(type == null) continue; // maybe warn the user ?
+
+ set.add(type);
+ }
+ }
}
@Override
- protected Collection getEveryDisplayableInstanceOfGeneric() {
- ArrayList keys = new ArrayList<>();
- if(!this.shouldWork){
+ protected Collection getEveryDisplayableInstanceOfGeneric() {
+ HashSet keys = new HashSet<>();
+ if (!this.shouldWork) {
return keys;
}
- ConfigurationSection materialSection = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig().getConfigurationSection(parentMaterial.name().toLowerCase());
- if(materialSection == null){
- return keys;
- }
- keys.addAll(materialSection.getKeys(false));
+ fillSet(keys, parentType.getKey().toString());
+ fillSet(keys, parentType.getKey().getKey());
+
return keys;
}
- private Material materialFromName(String materialName){
- Material mat = Material.getMaterial(materialName.toUpperCase());
- if(mat == null || mat.isAir()) return Material.BARRIER;
- return mat;
- }
-
@Override
public void updateGuiValues() {
super.updateGuiValues();
- this.parentGui.updateValueForGeneric(this.parentMaterial, true);
+ this.parentGui.updateValueForGeneric(this.parentType, true);
}
// ElementMappedToListGui methods
@Override // Not used in this implementation
- public void updateLocal() {}
+ public void updateLocal() {
+ }
@Override
public void cleanAndBeUnusable() {
this.shouldWork = false;
- this.backgroundPane.bindItem('S', GuiGlobalItems.backgroundItem(Material.BLACK_STAINED_GLASS_PANE));
- this.backgroundPane.bindItem('L', GuiGlobalItems.backgroundItem(Material.BLACK_STAINED_GLASS_PANE));
- this.backgroundPane.bindItem('R', GuiGlobalItems.backgroundItem(Material.BLACK_STAINED_GLASS_PANE));
+ this.backgroundPane.bindItem('S', GuiGlobalItems.backgroundItem(ItemType.BLACK_STAINED_GLASS_PANE));
+ this.backgroundPane.bindItem('L', GuiGlobalItems.backgroundItem(ItemType.BLACK_STAINED_GLASS_PANE));
+ this.backgroundPane.bindItem('R', GuiGlobalItems.backgroundItem(ItemType.BLACK_STAINED_GLASS_PANE));
for (HumanEntity viewer : getViewers()) {
viewer.sendMessage("This config do not exist anymore");
@@ -185,10 +198,11 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui {
+ this.enchantSettingItem = new GuiItem(ItemType.ENCHANTED_BOOK.createItemStack(), event -> {
event.setCancelled(true);
EnchantSelectSettingGui enchantGui = new EnchantSelectSettingGui(
"§e" + CasedStringUtil.snakeToUpperSpacedCase(enchantConflict.toString()) + "§5",
@@ -85,7 +86,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
enchantGui.show(event.getWhoClicked());
}, CustomAnvil.instance);
- this.groupSettingItem = new GuiItem(new ItemStack(Material.PAPER), event -> {
+ this.groupSettingItem = new GuiItem(ItemType.PAPER.createItemStack(), event -> {
event.setCancelled(true);
GroupSelectSettingGui enchantGui = new GroupSelectSettingGui(
"§e" + CasedStringUtil.snakeToUpperSpacedCase(this.enchantConflict.toString()) + " §3Groups",
@@ -145,7 +146,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
@Override
public void updateGuiValues() {
// update value from config to conflict
- int minBeforeBlock = ConfigHolder.CONFLICT_HOLDER.getConfig().getInt(this.enchantConflict.toString()+'.'+EnchantConflictManager.ENCH_MAX_PATH, 0);
+ int minBeforeBlock = ConfigHolder.CONFLICT_HOLDER.getConfig().getInt(this.enchantConflict.toString() + '.' + EnchantConflictManager.ENCH_MAX_PATH, 0);
this.enchantConflict.setMinBeforeBlock(minBeforeBlock);
// Parent should call updateLocal with this call
@@ -206,7 +207,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
this.groupSettingItem.setItem(groupItem); // Just in case
- this.pane.bindItem('M', this.minBeforeActiveSettingFactory.getItem(Material.COMMAND_BLOCK,
+ this.pane.bindItem('M', this.minBeforeActiveSettingFactory.getItem(ItemType.COMMAND_BLOCK,
"Minimum Enchantment Count"));
update();
}
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java
index 9ae5834..2e46963 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java
@@ -4,7 +4,6 @@ import com.github.stefvanschie.inventoryframework.gui.GuiItem;
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.entity.HumanEntity;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemFlag;
@@ -64,7 +63,7 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen
GuiGlobalItems.addBackgroundItem(this.pane);
// Delete item
- ItemStack deleteItem = new ItemStack(Material.RED_TERRACOTTA);
+ ItemStack deleteItem = ItemType.RED_TERRACOTTA.createItemStack();
ItemMeta deleteMeta = deleteItem.getItemMeta();
deleteMeta.setDisplayName("§4DELETE GROUP");
@@ -75,7 +74,7 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen
// Displayed item will be updated later
String materialSelectionName = "§e" + CasedStringUtil.snakeToUpperSpacedCase(group.getName()) + " §rMaterials";
- ItemStack selectItem = new ItemStack(Material.DIAMOND_SWORD);
+ ItemStack selectItem = ItemType.DIAMOND_SWORD.createItemStack();
ItemMeta selectItemMeta = selectItem.getItemMeta();
selectItemMeta.setDisplayName(materialSelectionName);
@@ -90,7 +89,7 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen
}, CustomAnvil.instance);
String selectGroupName = "§e" + CasedStringUtil.snakeToUpperSpacedCase(this.group.getName()) + " §rGroups";
- ItemStack selectGroup = new ItemStack(Material.CHEST);
+ ItemStack selectGroup = ItemType.CHEST.createItemStack();
ItemMeta selectGroupMeta = selectGroup.getItemMeta();
selectGroupMeta.setDisplayName(selectGroupName);
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java
index 1d5e73d..6745caa 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/BoolSettingsGui.java
@@ -5,9 +5,9 @@ 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.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.config.ConfigHolder;
@@ -25,6 +25,7 @@ import java.util.function.Consumer;
/**
* An instance of a gui used to edit a boolean setting.
*/
+@SuppressWarnings("UnstableApiUsage")
public class BoolSettingsGui extends AbstractSettingGui {
private final BoolSettingFactory holder;
@@ -65,14 +66,14 @@ public class BoolSettingsGui extends AbstractSettingGui {
protected void prepareReturnToDefault() {
// Prepare default Value text
String defaultValueLore;
- if(holder.defaultVal){
+ if (holder.defaultVal) {
defaultValueLore = "§aYes §7Is the default value";
- }else{
+ } else {
defaultValueLore = "§cNo §7Is the default value";
}
// Create reset to default item
- ItemStack item = new ItemStack(Material.COMMAND_BLOCK);
+ ItemStack item = ItemType.COMMAND_BLOCK.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -95,24 +96,24 @@ public class BoolSettingsGui extends AbstractSettingGui {
// Get displayed value for this config.
String displayedName;
- Material displayedMat;
+ ItemType displayedType;
if (now) {
displayedName = "§aYes";
- displayedMat = Material.GREEN_TERRACOTTA;
+ displayedType = ItemType.GREEN_TERRACOTTA;
} else {
displayedName = "§cNo";
- displayedMat = Material.RED_TERRACOTTA;
+ displayedType = ItemType.RED_TERRACOTTA;
}
// create & set Value item
ArrayList valueLore = new ArrayList<>();
- if(!holder.displayLore.isEmpty()){
+ if (!holder.displayLore.isEmpty()) {
valueLore.addAll(holder.displayLore);
valueLore.add("");
}
valueLore.add(AbstractSettingGui.CLICK_LORE);
- ItemStack valueItemStack = new ItemStack(displayedMat);
+ ItemStack valueItemStack = displayedType.createItemStack();
ItemMeta valueMeta = valueItemStack.getItemMeta();
assert valueMeta != null;
@@ -177,12 +178,12 @@ public class BoolSettingsGui extends AbstractSettingGui {
/**
* Constructor for a boolean setting gui factory.
*
- * @param title The title of the gui.
- * @param parent Parent gui to go back when completed.
- * @param config Configuration holder of this setting.
- * @param configPath Configuration path of this setting.
- * @param defaultVal Default value if not found on the config.
- * @param displayLore Gui display item lore.
+ * @param title The title of the gui.
+ * @param parent Parent gui to go back when completed.
+ * @param config Configuration holder of this setting.
+ * @param configPath Configuration path of this setting.
+ * @param defaultVal Default value if not found on the config.
+ * @param displayLore Gui display item lore.
*/
public BoolSettingFactory(
@NotNull String title, @NotNull ValueUpdatableGui parent,
@@ -227,23 +228,23 @@ public class BoolSettingsGui extends AbstractSettingGui {
* @param name Name of the item.
* @return A formatted GuiItem that will create and open a GUI for the boolean setting.
*/
- public GuiItem getItem(String name){
+ public GuiItem getItem(String name) {
// Get item properties
boolean value = getConfiguredValue();
- Material itemMat;
+ ItemType itemType;
StringBuilder itemName = new StringBuilder("§e");
String finalValue;
if (value) {
- itemMat = Material.GREEN_TERRACOTTA;
+ itemType = ItemType.GREEN_TERRACOTTA;
finalValue = "§aYes";
} else {
- itemMat = Material.RED_TERRACOTTA;
+ itemType = ItemType.RED_TERRACOTTA;
finalValue = "§cNo";
}
itemName.append(name);
- return GuiGlobalItems.createGuiItemFromProperties(this, itemMat, itemName, finalValue, this.displayLore, false);
+ return GuiGlobalItems.createGuiItemFromProperties(this, itemType, itemName, finalValue, this.displayLore, false);
}
/**
@@ -254,7 +255,7 @@ public class BoolSettingsGui extends AbstractSettingGui {
*
* @return A formatted GuiItem that will create and open a GUI for the boolean setting.
*/
- public GuiItem getItem(){
+ public GuiItem getItem() {
// Get item properties
String configPath = GuiGlobalItems.getConfigNameFromPath(getConfigPath());
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java
index be19894..83b04bc 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/DoubleSettingGui.java
@@ -5,10 +5,10 @@ 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.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -24,6 +24,7 @@ import java.math.RoundingMode;
import java.util.*;
import java.util.function.Consumer;
+@SuppressWarnings("UnstableApiUsage")
public class DoubleSettingGui extends AbstractSettingGui {
protected final DoubleSettingFactory holder;
@@ -60,7 +61,8 @@ public class DoubleSettingGui extends AbstractSettingGui {
updateValueDisplay();
}
- private static final ItemStack DELETE_ITEM_STACK = new ItemStack(Material.RED_TERRACOTTA);
+ private static final ItemStack DELETE_ITEM_STACK = ItemType.RED_TERRACOTTA.createItemStack();
+
static {
ItemMeta meta = DELETE_ITEM_STACK.getItemMeta();
assert meta != null;
@@ -88,13 +90,13 @@ public class DoubleSettingGui extends AbstractSettingGui {
boolean shouldDelete = isNull() && hadChange();
GuiItem tempSaveItem = this.saveItem;
- if(shouldDelete){
+ if (shouldDelete) {
this.saveItem = this.askDelete;
}
super.update();
- if(shouldDelete){
+ if (shouldDelete) {
this.saveItem = tempSaveItem;
}
}
@@ -114,7 +116,7 @@ public class DoubleSettingGui extends AbstractSettingGui {
* Prepare "return to default value" gui item.
*/
protected void prepareReturnToDefault() {
- ItemStack item = new ItemStack(Material.COMMAND_BLOCK);
+ ItemStack item = ItemType.COMMAND_BLOCK.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -141,9 +143,9 @@ public class DoubleSettingGui extends AbstractSettingGui {
if (now.compareTo(holder.min) > 0) {
BigDecimal planned = holder.min.max(now.subtract(step));
- minusItem = getSetValueItem(Material.RED_TERRACOTTA, planned, "§c-");
+ minusItem = getSetValueItem(ItemType.RED_TERRACOTTA, planned, "§c-");
} else {
- minusItem = GuiGlobalItems.backgroundItem(Material.BARRIER);
+ minusItem = GuiGlobalItems.backgroundItem(ItemType.BARRIER);
}
pane.bindItem('-', minusItem);
@@ -152,14 +154,14 @@ public class DoubleSettingGui extends AbstractSettingGui {
if (now.compareTo(holder.max) < 0) {
BigDecimal planned = holder.max.min(now.add(step));
- plusItem = getSetValueItem(Material.GREEN_TERRACOTTA, planned, "§a+");
+ plusItem = getSetValueItem(ItemType.GREEN_TERRACOTTA, planned, "§a+");
} else {
- plusItem = GuiGlobalItems.backgroundItem(Material.BARRIER);
+ plusItem = GuiGlobalItems.backgroundItem(ItemType.BARRIER);
}
pane.bindItem('+', plusItem);
// "result" display
- ItemStack resultPaper = new ItemStack(Material.PAPER);
+ ItemStack resultPaper = ItemType.PAPER.createItemStack();
ItemMeta resultMeta = resultPaper.getItemMeta();
assert resultMeta != null;
@@ -180,17 +182,17 @@ public class DoubleSettingGui extends AbstractSettingGui {
}
- private GuiItem getSetValueItem(Material mat, BigDecimal planned, String numberPrefix){
+ private GuiItem getSetValueItem(ItemType type, BigDecimal planned, String numberPrefix) {
// Create set item lore
ArrayList setLoreItem = new ArrayList<>();
- if(!holder.displayLore.isEmpty()){
+ if (!holder.displayLore.isEmpty()) {
setLoreItem.addAll(holder.displayLore);
setLoreItem.add("");
}
setLoreItem.add(AbstractSettingGui.CLICK_LORE);
// Create & return set value item
- ItemStack item = new ItemStack(mat);
+ ItemStack item = type.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -267,17 +269,17 @@ public class DoubleSettingGui extends AbstractSettingGui {
BigDecimal stepValue = holder.steps[stepIndex];
// Get material properties
- Material stepMat;
+ ItemType stepType;
StringBuilder stepName = new StringBuilder("§");
List stepLore;
Consumer clickEvent;
if (stepValue.compareTo(step) == 0) {
- stepMat = Material.GREEN_STAINED_GLASS_PANE;
+ stepType = ItemType.GREEN_STAINED_GLASS_PANE;
stepName.append('a');
stepLore = Collections.singletonList("§7Value is changing by " + displayValue(stepValue));
clickEvent = GuiGlobalActions.stayInPlace;
} else {
- stepMat = Material.RED_STAINED_GLASS_PANE;
+ stepType = ItemType.RED_STAINED_GLASS_PANE;
stepName.append('c');
stepLore = Collections.singletonList("§7Click here to change the value by " + displayValue(stepValue));
clickEvent = updateStepValue(stepValue);
@@ -285,7 +287,7 @@ public class DoubleSettingGui extends AbstractSettingGui {
stepName.append("Step of §e").append(displayValue(stepValue));
// Create item stack then gui item
- ItemStack item = new ItemStack(stepMat);
+ ItemStack item = stepType.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -312,13 +314,13 @@ public class DoubleSettingGui extends AbstractSettingGui {
@Override
public boolean onSave() {
- if(isNull()){
- if(this.holder.config instanceof ConfigHolder.DeletableResource deletableResource){
+ if (isNull()) {
+ if (this.holder.config instanceof ConfigHolder.DeletableResource deletableResource) {
deletableResource.delete(this.holder.configPath);
- }else{
+ } else {
this.holder.config.getConfig().set(this.holder.configPath, null);
}
- }else{
+ } else {
this.holder.config.getConfig().set(this.holder.configPath, now.doubleValue());
}
@@ -333,18 +335,19 @@ public class DoubleSettingGui extends AbstractSettingGui {
return now.compareTo(before) != 0;
}
- public boolean isNull(){
+ public boolean isNull() {
return this.nullOnZero && (this.now.compareTo(BigDecimal.ZERO) == 0);
}
private static final BigDecimal PERCENTAGE_OFFSET = BigDecimal.valueOf(100);
- public String displayValue(BigDecimal value){
+
+ public String displayValue(BigDecimal value) {
return displayValue(value, this.asPercentage);
}
- public static String displayValue(BigDecimal value, boolean isAsPercentage){
- if(isAsPercentage){
- return value.multiply(PERCENTAGE_OFFSET).setScale(value.scale()-2, RoundingMode.HALF_UP) + "%";
+ public static String displayValue(BigDecimal value, boolean isAsPercentage) {
+ if (isAsPercentage) {
+ return value.multiply(PERCENTAGE_OFFSET).setScale(value.scale() - 2, RoundingMode.HALF_UP) + "%";
}
return value.toString();
}
@@ -365,6 +368,7 @@ public class DoubleSettingGui extends AbstractSettingGui {
BigDecimal max;
BigDecimal defaultVal;
BigDecimal[] steps;
+ String[] alternativePaths;
@NotNull
List displayLore;
@@ -411,6 +415,53 @@ public class DoubleSettingGui extends AbstractSettingGui {
}
this.displayLore = Objects.requireNonNullElse(displayLore, Collections.emptyList());
+ this.alternativePaths = new String[0];
+ }
+
+ /**
+ * Constructor for a double setting gui factory.
+ *
+ * @param title The title of the gui.
+ * @param parent Parent gui to go back when completed.
+ * @param config Configuration holder of this setting.
+ * @param configPath Configuration path of this setting.
+ * @param displayLore Gui display item lore.
+ * @param scale The scale of the decimal.
+ * @param asPercentage If we should display the value as a %.
+ * @param nullOnZero Set the value as null (deleting it) when equal to 0
+ * @param min Minimum value of this setting.
+ * @param max Maximum value of this setting.
+ * @param defaultVal Default value if not found on the config.
+ * @param steps List of step the value can increment/decrement.
+ * List's size should be between 1 (included) and 5 (included).
+ * it is visually preferable to have an odd number of step.
+ * If step only contain 1 value, no step item should be displayed.
+ * @param alternatePaths Alternative config path where the value will be tried to fetch here if absent in the primary config path
+ */
+ public DoubleSettingFactory(
+ @NotNull String title, @NotNull ValueUpdatableGui parent,
+ @NotNull ConfigHolder config,
+ @NotNull String configPath,
+ @Nullable List displayLore,
+ int scale, boolean asPercentage, boolean nullOnZero,
+ double min, double max, double defaultVal, double[] steps, String... alternatePaths) {
+ super(configPath, config);
+ this.title = title;
+ this.parent = parent;
+ this.scale = scale;
+ this.asPercentage = asPercentage;
+ this.nullOnZero = nullOnZero;
+ this.min = BigDecimal.valueOf(min).setScale(scale, RoundingMode.HALF_UP);
+ this.max = BigDecimal.valueOf(max).setScale(scale, RoundingMode.HALF_UP);
+ this.defaultVal = BigDecimal.valueOf(defaultVal).setScale(scale, RoundingMode.HALF_UP);
+
+ this.steps = new BigDecimal[steps.length];
+ for (int i = 0; i < steps.length; i++) {
+ this.steps[i] = BigDecimal.valueOf(steps[i]).setScale(scale, RoundingMode.HALF_UP);
+ }
+
+ this.displayLore = Objects.requireNonNullElse(displayLore, Collections.emptyList());
+ this.alternativePaths = alternatePaths;
}
/**
@@ -426,9 +477,17 @@ public class DoubleSettingGui extends AbstractSettingGui {
*/
public BigDecimal getConfiguredValue() {
ConfigurationSection section = this.config.getConfig();
- if(section.isDouble(this.configPath)){
+ if (section.isDouble(this.configPath)) {
return BigDecimal.valueOf(section.getDouble(this.configPath)).setScale(2, RoundingMode.HALF_UP);
}
+
+ for (String alternativePath : alternativePaths) {
+ section = this.config.getConfig();
+
+ if (section.isDouble(alternativePath)) {
+ return BigDecimal.valueOf(section.getDouble(this.configPath)).setScale(2, RoundingMode.HALF_UP);
+ }
+ }
return this.defaultVal;
}
@@ -440,22 +499,21 @@ public class DoubleSettingGui extends AbstractSettingGui {
return new DoubleSettingGui(this, now, this.asPercentage, this.nullOnZero);
}
-
- public GuiItem getItem(Material itemMat, String name){
+ public GuiItem getItem(ItemType type, String name) {
// Get item properties
BigDecimal value = getConfiguredValue();
StringBuilder itemName = new StringBuilder("§a").append(name);
- return GuiGlobalItems.createGuiItemFromProperties(this, itemMat, itemName,
+ return GuiGlobalItems.createGuiItemFromProperties(this, type, itemName,
"§e" + displayValue(value, this.asPercentage),
this.displayLore, true);
}
- public GuiItem getItem(Material itemMat){
+ public GuiItem getItem(ItemType type) {
// Get item properties
String configPath = GuiGlobalItems.getConfigNameFromPath(getConfigPath());
- return getItem(itemMat, CasedStringUtil.detectToUpperSpacedCase(configPath));
+ return getItem(type, CasedStringUtil.detectToUpperSpacedCase(configPath));
}
}
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java
index 3bd923b..67b7cd0 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantCostSettingsGui.java
@@ -6,10 +6,10 @@ import com.github.stefvanschie.inventoryframework.pane.PatternPane;
import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
import io.delilaheve.CustomAnvil;
import io.delilaheve.util.ConfigOptions;
-import org.bukkit.Material;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -29,6 +29,7 @@ import java.util.function.Consumer;
* An instance of a gui used to edit an enchantment cost setting.
* May be considered as a 2 int setting.
*/
+@SuppressWarnings("UnstableApiUsage")
public class EnchantCostSettingsGui extends IntSettingsGui {
protected final static String ITEM_PATH = ".item";
@@ -81,7 +82,7 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
PatternPane pane = getPane();
// book display
- ItemStack bookItemstack = new ItemStack(Material.BOOK);
+ ItemStack bookItemstack = ItemType.BOOK.createItemStack();
ItemMeta bookMeta = bookItemstack.getItemMeta();
assert bookMeta != null;
@@ -92,7 +93,7 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
bookItemstack.setItemMeta(bookMeta);
// sword display
- ItemStack swordItemstack = new ItemStack(Material.WOODEN_SWORD);
+ ItemStack swordItemstack = ItemType.WOODEN_SWORD.createItemStack();
ItemMeta swordMeta = swordItemstack.getItemMeta();
assert swordMeta != null;
@@ -103,14 +104,14 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
"§7Only apply if sacrificed item §cis not §7a book"));
swordItemstack.setItemMeta(swordMeta);
- pane.bindItem('1', GuiGlobalItems.backgroundItem(Material.BLACK_STAINED_GLASS_PANE));
+ pane.bindItem('1', GuiGlobalItems.backgroundItem(ItemType.BLACK_STAINED_GLASS_PANE));
pane.bindItem('2', new GuiItem(bookItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance));
pane.bindItem('3', new GuiItem(swordItemstack, GuiGlobalActions.stayInPlace, CustomAnvil.instance));
}
@Override
protected void prepareReturnToDefault() {
- ItemStack item = new ItemStack(Material.COMMAND_BLOCK);
+ ItemStack item = ItemType.COMMAND_BLOCK.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -145,7 +146,7 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
GuiItem minusItem;
if (nowBook > holder.min) {
int planned = Math.max(holder.min, nowBook - step);
- ItemStack item = new ItemStack(Material.RED_TERRACOTTA);
+ ItemStack item = ItemType.RED_TERRACOTTA.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -155,7 +156,7 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
minusItem = new GuiItem(item, updateNowBookConsumer(planned), CustomAnvil.instance);
} else {
- minusItem = GuiGlobalItems.backgroundItem(Material.BARRIER);
+ minusItem = GuiGlobalItems.backgroundItem(ItemType.BARRIER);
}
pane.bindItem('M', minusItem);
@@ -163,7 +164,7 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
GuiItem plusItem;
if (nowBook < holder.max) {
int planned = Math.min(holder.max, nowBook + step);
- ItemStack item = new ItemStack(Material.GREEN_TERRACOTTA);
+ ItemStack item = ItemType.GREEN_TERRACOTTA.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -173,12 +174,12 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
plusItem = new GuiItem(item, updateNowBookConsumer(planned), CustomAnvil.instance);
} else {
- plusItem = GuiGlobalItems.backgroundItem(Material.BARRIER);
+ plusItem = GuiGlobalItems.backgroundItem(ItemType.BARRIER);
}
pane.bindItem('P', plusItem);
// now value display
- ItemStack nowPaper = new ItemStack(Material.PAPER);
+ ItemStack nowPaper = ItemType.PAPER.createItemStack();
ItemMeta nowMeta = nowPaper.getItemMeta();
assert nowMeta != null;
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantSelectSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantSelectSettingGui.java
index b7f71d9..f8b140d 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantSelectSettingGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantSelectSettingGui.java
@@ -9,6 +9,7 @@ import org.bukkit.enchantments.Enchantment;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.config.ConfigHolder;
@@ -26,6 +27,7 @@ import java.util.*;
import java.util.function.Consumer;
import java.util.stream.Stream;
+@SuppressWarnings("UnstableApiUsage")
public class EnchantSelectSettingGui extends SettingGuiListConfigGui implements SettingGui {
private final SelectEnchantmentContainer enchantContainer;
@@ -88,13 +90,13 @@ public class EnchantSelectSettingGui extends SettingGuiListConfigGui & EnumSettingGui.ConfigurableEnum> extends AbstractSettingGui {
private final EnumSettingFactory holder;
@@ -52,7 +53,7 @@ public class EnumSettingGui & EnumSettingGui.ConfigurableEnum>
}
- public void prepareStaticItems(){
+ public void prepareStaticItems() {
prepareReturnToDefault();
}
@@ -63,7 +64,7 @@ public class EnumSettingGui & EnumSettingGui.ConfigurableEnum>
* Prepare "return to default value" gui item.
*/
protected void prepareReturnToDefault() {
- ItemStack item = new ItemStack(Material.COMMAND_BLOCK);
+ ItemStack item = ItemType.COMMAND_BLOCK.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -157,6 +158,7 @@ public class EnumSettingGui & EnumSettingGui.ConfigurableEnum>
this.parent = parent;
}
+
/**
* @return Get setting's gui title.
*/
@@ -178,12 +180,12 @@ public class EnumSettingGui & EnumSettingGui.ConfigurableEnum>
* @return Next value for a given enum
*/
@NotNull
- public T next(@NotNull T now){
+ public T next(@NotNull T now) {
Class clazz = now.getDeclaringClass();
T[] values = clazz.getEnumConstants();
int index = now.ordinal();
- if(index == values.length - 1)
+ if (index == values.length - 1)
return values[0];
return values[index + 1];
@@ -191,6 +193,7 @@ public class EnumSettingGui & EnumSettingGui.ConfigurableEnum>
/**
* Get default value value
+ *
* @return default value
*/
@NotNull
@@ -212,10 +215,10 @@ public class EnumSettingGui & EnumSettingGui.ConfigurableEnum>
* @param name Name of the display.
* @return A formatted GuiItem that will create and open a GUI for the enum setting.
*/
- public GuiItem getItem(@NotNull Material material, @NotNull String name) {
+ public GuiItem getItem(@NotNull ItemType type, @NotNull String name) {
T value = getConfiguredValue();
- ItemStack item = new ItemStack(material);
+ ItemStack item = type.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -234,6 +237,7 @@ public class EnumSettingGui & EnumSettingGui.ConfigurableEnum>
String configName();
ItemStack configurationGuiItem();
+
String configurationGuiName();
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/GroupSelectSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/GroupSelectSettingGui.java
index 4bcd86f..c2d6182 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/GroupSelectSettingGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/GroupSelectSettingGui.java
@@ -98,13 +98,13 @@ public class GroupSelectSettingGui extends AbstractSettingGui {
private static final List TRUE_LORE = Collections.singletonList("§7Value: §aSelected");
private static final List FALSE_LORE = Collections.singletonList("§7Value: §cNot Selected");
- public void setGroupItemMeta(ItemStack item, String name, boolean isIn) {
+ public ItemStack setGroupItemMeta(ItemStack item, String name, boolean isIn) {
ItemMeta meta = item.getItemMeta();
if (meta == null) {
CustomAnvil.instance.getLogger().warning("Could not create item for group: " + name + ":\n" +
"Item do not gave item meta: " + item + ". Using placeholder instead");
- item.setType(Material.PAPER);
+ item = item.withType(Material.PAPER);
meta = item.getItemMeta();
assert meta != null;
}
@@ -120,6 +120,7 @@ public class GroupSelectSettingGui extends AbstractSettingGui {
meta.addItemFlags(ItemFlag.values());
item.setItemMeta(meta);
+ return item;
}
private Consumer getGroupItemConsumer(AbstractItemTypeGroup group, GuiItem guiItem) {
@@ -134,7 +135,7 @@ public class GroupSelectSettingGui extends AbstractSettingGui {
}
ItemStack item = guiItem.getItem();
- setGroupItemMeta(item, group.getName(), !isIn);
+ item = setGroupItemMeta(item, group.getName(), !isIn);
guiItem.setItem(item);// Just in case
update();
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java
index b8aab08..fdf64e5 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/IntSettingsGui.java
@@ -5,9 +5,9 @@ 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.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -26,6 +26,7 @@ import java.util.function.Consumer;
/**
* An instance of a gui used to edit an int setting.
*/
+@SuppressWarnings("UnstableApiUsage")
public class IntSettingsGui extends AbstractSettingGui {
protected final IntSettingFactory holder;
@@ -68,7 +69,7 @@ public class IntSettingsGui extends AbstractSettingGui {
* Prepare "return to default value" gui item.
*/
protected void prepareReturnToDefault() {
- ItemStack item = new ItemStack(Material.COMMAND_BLOCK);
+ ItemStack item = ItemType.COMMAND_BLOCK.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -94,7 +95,7 @@ public class IntSettingsGui extends AbstractSettingGui {
GuiItem minusItem;
if (now > holder.min) {
int planned = Math.max(holder.min, now - step);
- ItemStack item = new ItemStack(Material.RED_TERRACOTTA);
+ ItemStack item = ItemType.RED_TERRACOTTA.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -104,7 +105,7 @@ public class IntSettingsGui extends AbstractSettingGui {
minusItem = new GuiItem(item, updateNowConsumer(planned), CustomAnvil.instance);
} else {
- minusItem = GuiGlobalItems.backgroundItem(Material.BARRIER);
+ minusItem = GuiGlobalItems.backgroundItem(ItemType.BARRIER);
}
pane.bindItem('-', minusItem);
@@ -113,7 +114,7 @@ public class IntSettingsGui extends AbstractSettingGui {
GuiItem plusItem;
if (now < holder.max) {
int planned = Math.min(holder.max, now + step);
- ItemStack item = new ItemStack(Material.GREEN_TERRACOTTA);
+ ItemStack item = ItemType.GREEN_TERRACOTTA.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -123,12 +124,12 @@ public class IntSettingsGui extends AbstractSettingGui {
plusItem = new GuiItem(item, updateNowConsumer(planned), CustomAnvil.instance);
} else {
- plusItem = GuiGlobalItems.backgroundItem(Material.BARRIER);
+ plusItem = GuiGlobalItems.backgroundItem(ItemType.BARRIER);
}
pane.bindItem('+', plusItem);
// "result" display
- ItemStack resultPaper = new ItemStack(Material.PAPER);
+ ItemStack resultPaper = ItemType.PAPER.createItemStack();
ItemMeta resultMeta = resultPaper.getItemMeta();
assert resultMeta != null;
@@ -218,17 +219,17 @@ public class IntSettingsGui extends AbstractSettingGui {
int stepValue = holder.steps[stepIndex];
// Get material properties
- Material stepMat;
+ ItemType stepMat;
StringBuilder stepName = new StringBuilder("§");
List stepLore;
Consumer clickEvent;
if (stepValue == step) {
- stepMat = Material.GREEN_STAINED_GLASS_PANE;
+ stepMat = ItemType.GREEN_STAINED_GLASS_PANE;
stepName.append('a');
stepLore = Collections.singletonList("§7Value is changing by " + stepValue);
clickEvent = GuiGlobalActions.stayInPlace;
} else {
- stepMat = Material.RED_STAINED_GLASS_PANE;
+ stepMat = ItemType.RED_STAINED_GLASS_PANE;
stepName.append('c');
stepLore = Collections.singletonList("§7Click here to change the value by " + stepValue);
clickEvent = updateStepValue(stepValue);
@@ -236,7 +237,7 @@ public class IntSettingsGui extends AbstractSettingGui {
stepName.append("Step of: §e").append(stepValue);
// Create item stack then gui item
- ItemStack item = new ItemStack(stepMat);
+ ItemStack item = stepMat.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -353,19 +354,19 @@ public class IntSettingsGui extends AbstractSettingGui {
* This item will create and open an int setting GUI from the factory.
* The item will have its value written in the lore part of the item.
*
- * @param itemMat Displayed material of the item.
- * @param name Name of the item.
+ * @param type Displayed item type
+ * @param name Name of the item.
* @return A formatted GuiItem that will create and open a GUI for the int setting.
*/
public GuiItem getItem(
- @NotNull Material itemMat,
+ @NotNull ItemType type,
@NotNull String name
) {
// Get item properties
int value = getConfiguredValue();
StringBuilder itemName = new StringBuilder("§a").append(name);
- return GuiGlobalItems.createGuiItemFromProperties(this, itemMat, itemName,
+ return GuiGlobalItems.createGuiItemFromProperties(this, type, itemName,
"§e" + value,
this.displayLore, true);
}
@@ -376,14 +377,14 @@ public class IntSettingsGui extends AbstractSettingGui {
* The item will have its value written in the lore part of the item.
* Item's name will be the factory set title.
*
- * @param itemMat Displayed material of the item.
+ * @param type Displayed item type.
* @return A formatted GuiItem that will create and open a GUI for the int setting.
*/
public GuiItem getItem(
- @NotNull Material itemMat
+ @NotNull ItemType type
) {
String configPath = GuiGlobalItems.getConfigNameFromPath(getConfigPath());
- return getItem(itemMat, CasedStringUtil.detectToUpperSpacedCase(configPath));
+ return getItem(type, CasedStringUtil.detectToUpperSpacedCase(configPath));
}
}
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/ItemSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/ItemSettingGui.java
index 3df2af8..1f966e7 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/ItemSettingGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/ItemSettingGui.java
@@ -5,11 +5,11 @@ 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.entity.HumanEntity;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -27,6 +27,7 @@ import java.util.function.Consumer;
/**
* An instance of a gui used to edit an item setting.
*/
+@SuppressWarnings("UnstableApiUsage")
public class ItemSettingGui extends AbstractSettingGui {
private final ItemSettingFactory holder;
@@ -62,7 +63,8 @@ public class ItemSettingGui extends AbstractSettingGui {
public void prepareStaticItems(){
prepareReturnToDefault();
- GuiItem temporaryLeave = GuiGlobalItems.temporaryCloseGuiToSelectItem(Material.YELLOW_STAINED_GLASS_PANE, this);
+ GuiItem temporaryLeave = GuiGlobalItems.temporaryCloseGuiToSelectItem(
+ ItemType.YELLOW_STAINED_GLASS_PANE, this);
getPane().bindItem('s', temporaryLeave);
}
@@ -73,7 +75,7 @@ public class ItemSettingGui extends AbstractSettingGui {
* Prepare "return to default value" gui item.
*/
protected void prepareReturnToDefault() {
- ItemStack item = new ItemStack(Material.COMMAND_BLOCK);
+ ItemStack item = ItemType.COMMAND_BLOCK.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -101,7 +103,7 @@ public class ItemSettingGui extends AbstractSettingGui {
if(this.now != null){
displayedItem = this.now.clone();
}else{
- displayedItem = new ItemStack(Material.BARRIER);
+ displayedItem = ItemType.BARRIER.createItemStack();
ItemMeta valueMeta = displayedItem.getItemMeta();
assert valueMeta != null;
@@ -238,7 +240,7 @@ public class ItemSettingGui extends AbstractSettingGui {
public GuiItem getItem(@NotNull String name) {
ItemStack item = getConfiguredValue();
if(item == null || item.getType().isAir()){
- item = new ItemStack(Material.BARRIER);
+ item = ItemType.BARRIER.createItemStack();
}else{
item = item.clone();
}
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java
index 0887196..85f4f08 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java
@@ -4,7 +4,6 @@ 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 io.delilaheve.CustomAnvil;
-import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemFlag;
@@ -79,11 +78,12 @@ public class MaterialSelectSettingGui extends MappedElementListConfigGui displayLore = new ArrayList<>();
@@ -58,7 +58,7 @@ public class WorkPenaltyTypeSettingGui extends AbstractSettingGui {
displayLore.add(SHARED_EXPLANATION);
displayLore.add(EXCLUSIVE_EXPLANATION);
- ItemStack item = new ItemStack(itemMat);
+ ItemStack item = type.createItemStack();
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(name);
@@ -116,7 +116,7 @@ public class WorkPenaltyTypeSettingGui extends AbstractSettingGui {
String exclusiveAdditiveStr = (part.exclusivePenaltyAdditive() ? "§a" : "§c") + "Additive";
// Display item
- ItemStack displayItem = new ItemStack(type.getDisplayMat());
+ ItemStack displayItem = type.getDisplayMat().createItemStack();
ArrayList displayLore = new ArrayList<>();
displayLore.add("§eShared§7: " + additiveStr + " §7| " + increasingStr);
@@ -133,7 +133,7 @@ public class WorkPenaltyTypeSettingGui extends AbstractSettingGui {
// Can probably put this in a function but this works so
// "Increment" item
- ItemStack incrementItem = new ItemStack(part.penaltyIncrease() ? Material.GREEN_TERRACOTTA : Material.RED_TERRACOTTA);
+ ItemStack incrementItem = (part.penaltyIncrease() ? ItemType.GREEN_TERRACOTTA : ItemType.RED_TERRACOTTA).createItemStack();
meta = incrementItem.getItemMeta();
meta.setDisplayName(increasingStr);
@@ -153,7 +153,7 @@ public class WorkPenaltyTypeSettingGui extends AbstractSettingGui {
}));
// "Additive" item
- ItemStack additiveItem = new ItemStack(part.penaltyAdditive() ? Material.GREEN_TERRACOTTA : Material.RED_TERRACOTTA);
+ ItemStack additiveItem = (part.penaltyAdditive() ? ItemType.GREEN_TERRACOTTA : ItemType.RED_TERRACOTTA).createItemStack();
meta = additiveItem.getItemMeta();
meta.setDisplayName(additiveStr);
@@ -173,7 +173,7 @@ public class WorkPenaltyTypeSettingGui extends AbstractSettingGui {
}));
// exclusive "Increment" item
- ItemStack exclusiveIncrementItem = new ItemStack(part.exclusivePenaltyIncrease() ? Material.GREEN_TERRACOTTA : Material.RED_TERRACOTTA);
+ ItemStack exclusiveIncrementItem = (part.exclusivePenaltyIncrease() ? ItemType.GREEN_TERRACOTTA : ItemType.RED_TERRACOTTA).createItemStack();
meta = exclusiveIncrementItem.getItemMeta();
meta.setDisplayName(exclusiveIncreasingStr);
@@ -193,7 +193,7 @@ public class WorkPenaltyTypeSettingGui extends AbstractSettingGui {
}));
// exclusive "Additive" item
- ItemStack exclusiveAdditiveItem = new ItemStack(part.exclusivePenaltyAdditive() ? Material.GREEN_TERRACOTTA : Material.RED_TERRACOTTA);
+ ItemStack exclusiveAdditiveItem = (part.exclusivePenaltyAdditive() ? ItemType.GREEN_TERRACOTTA : ItemType.RED_TERRACOTTA).createItemStack();
meta = exclusiveAdditiveItem.getItemMeta();
meta.setDisplayName(exclusiveAdditiveStr);
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java
index 79f1462..560aa94 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiGlobalItems.java
@@ -4,10 +4,10 @@ import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
import com.github.stefvanschie.inventoryframework.pane.PatternPane;
import io.delilaheve.CustomAnvil;
-import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
@@ -20,13 +20,14 @@ import java.util.List;
/**
* A utility class to store function that create generic GUI item.
*/
+@SuppressWarnings("UnstableApiUsage")
public class GuiGlobalItems {
// statically create default back itemstack
private static final ItemStack BACK_ITEM;
static {
- BACK_ITEM = new ItemStack(Material.BARRIER);
+ BACK_ITEM = ItemType.BARRIER.createItemStack();
ItemMeta meta = BACK_ITEM.getItemMeta();
assert meta != null;
@@ -68,17 +69,17 @@ public class GuiGlobalItems {
target.bindItem('B', backItem(goal));
}
- private static final Material DEFAULT_BACKGROUND_MAT = Material.LIGHT_GRAY_STAINED_GLASS_PANE;
+ private static final ItemType DEFAULT_BACKGROUND_TYPE = ItemType.LIGHT_GRAY_STAINED_GLASS_PANE;
/**
* Get a background item with backgroundMat as the displayed material.
* A background item is a GuiItem that do nothing when interacted with and have an empty name.
*
- * @param backgroundMat The material to which the background item should be made of.
+ * @param backgroundType The item type of the background.
* @return A background item with backgroundMat as material.
*/
- public static GuiItem backgroundItem(Material backgroundMat) {
- ItemStack item = new ItemStack(backgroundMat);
+ public static GuiItem backgroundItem(ItemType backgroundType) {
+ ItemStack item = backgroundType.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -94,19 +95,19 @@ public class GuiGlobalItems {
* @return A new instance of the default background item.
*/
public static GuiItem backgroundItem() {
- return backgroundItem(DEFAULT_BACKGROUND_MAT);
+ return backgroundItem(DEFAULT_BACKGROUND_TYPE);
}
/**
* Add default background item to a GUI pattern with the reserved character key 0.
* A background item is a GuiItem that do nothing when interacted with and have an empty name.
*
- * @param target The pattern to add the background item.
- * @param backgroundMat The material of the background item.
+ * @param target The pattern to add the background item.
+ * @param backgroundType The item type of the background.
*/
public static void addBackgroundItem(@NotNull PatternPane target,
- @NotNull Material backgroundMat) {
- target.bindItem('0', backgroundItem(backgroundMat));
+ @NotNull ItemType backgroundType) {
+ target.bindItem('0', backgroundItem(backgroundType));
}
/**
@@ -116,11 +117,11 @@ public class GuiGlobalItems {
* @param target The pattern to add the background item.
*/
public static void addBackgroundItem(@NotNull PatternPane target) {
- addBackgroundItem(target, DEFAULT_BACKGROUND_MAT);
+ addBackgroundItem(target, DEFAULT_BACKGROUND_TYPE);
}
- public static final Material DEFAULT_SAVE_ITEM = Material.LIME_DYE;
- public static final Material DEFAULT_NO_CHANGE_ITEM = Material.GRAY_DYE;
+ public static final ItemType DEFAULT_SAVE_ITEM = ItemType.LIME_DYE;
+ public static final ItemType DEFAULT_NO_CHANGE_ITEM = ItemType.GRAY_DYE;
/**
* Create a new save setting GuiItem.
@@ -135,7 +136,7 @@ public class GuiGlobalItems {
@NotNull SettingGui setting,
@NotNull ValueUpdatableGui goal) {
- ItemStack item = new ItemStack(DEFAULT_SAVE_ITEM);
+ ItemStack item = DEFAULT_SAVE_ITEM.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -150,7 +151,7 @@ public class GuiGlobalItems {
private static final GuiItem NO_CHANGE_ITEM;
static {
- ItemStack item = new ItemStack(DEFAULT_NO_CHANGE_ITEM);
+ ItemStack item = DEFAULT_NO_CHANGE_ITEM.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -191,7 +192,7 @@ public class GuiGlobalItems {
* Create an arbitrary GuiItem from a unique setting and item's property.
*
* @param factory The setting's GUI factory.
- * @param itemMat Displayed material of the item.
+ * @param type Displayed item type
* @param itemName Name of the item.
* @param value Value of the setting when the item is created.
* Will not update automatically, if the setting's value change, the item need to be created again.
@@ -200,7 +201,7 @@ public class GuiGlobalItems {
*/
public static GuiItem createGuiItemFromProperties(
@NotNull SettingGui.SettingGuiFactory factory,
- @NotNull Material itemMat,
+ @NotNull ItemType type,
@NotNull StringBuilder itemName,
@NotNull Object value,
@NotNull List displayLore,
@@ -208,14 +209,14 @@ public class GuiGlobalItems {
) {
// Prepare lore
ArrayList lore = new ArrayList<>();
- lore.add((displayValuePrefix ? SETTING_ITEM_LORE_PREFIX : "") + value);
- if(!displayLore.isEmpty()){
+ lore.add((displayValuePrefix ? SETTING_ITEM_LORE_PREFIX : "") + value);
+ if (!displayLore.isEmpty()) {
lore.add("");
lore.addAll(displayLore);
}
// Create & initialise item
- ItemStack item = new ItemStack(itemMat);
+ ItemStack item = type.createItemStack();
ItemMeta itemMeta = item.getItemMeta();
assert itemMeta != null;
@@ -242,8 +243,8 @@ public class GuiGlobalItems {
return path.substring(indexOfDot + 1);
}
- public static GuiItem temporaryCloseGuiToSelectItem(Material itemMaterial, Gui openBack){
- ItemStack item = new ItemStack(itemMaterial);
+ public static GuiItem temporaryCloseGuiToSelectItem(ItemType type, Gui openBack) {
+ ItemStack item = type.createItemStack();
ItemMeta meta = item.getItemMeta();
assert meta != null;
@@ -256,9 +257,9 @@ public class GuiGlobalItems {
HumanEntity player = event.getWhoClicked();
- CustomAnvil.Companion.getChatListener().setListenedCallback(player, (message) ->{
+ CustomAnvil.Companion.getChatListener().setListenedCallback(player, (message) -> {
- if(message == null) return;
+ if (message == null) return;
openBack.show(player);
});
diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiSharedConstant.java b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiSharedConstant.java
index 11f3657..eae034a 100644
--- a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiSharedConstant.java
+++ b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiSharedConstant.java
@@ -4,19 +4,20 @@ import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.pane.Pane;
import com.github.stefvanschie.inventoryframework.pane.PatternPane;
import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
-import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import xyz.alexcrea.cuanvil.gui.config.MainConfigGui;
import java.util.Arrays;
import java.util.Collections;
+@SuppressWarnings("UnstableApiUsage")
public class GuiSharedConstant {
private GuiSharedConstant(){}
- public static final Material SECONDARY_BACKGROUND_MATERIAL = Material.BLACK_STAINED_GLASS_PANE;
+ public static final ItemType SECONDARY_BACKGROUND_MATERIAL = ItemType.BLACK_STAINED_GLASS_PANE;
public static final GuiItem SECONDARY_BACKGROUND_ITEM = GuiGlobalItems.backgroundItem(GuiSharedConstant.SECONDARY_BACKGROUND_MATERIAL);
public static final String UPPER_FILLER_FULL_PLANE = "111111111";
@@ -52,7 +53,7 @@ public class GuiSharedConstant {
public static final ItemStack CONFIRM_PERMANENT_ITEM;
static {
- CANCEL_ITEM = new ItemStack(Material.RED_TERRACOTTA);
+ CANCEL_ITEM = ItemType.RED_TERRACOTTA.createItemStack();
ItemMeta meta = CANCEL_ITEM.getItemMeta();
assert meta != null;
@@ -60,7 +61,7 @@ public class GuiSharedConstant {
meta.setLore(Collections.singletonList("§7Cancel current action and return to previous menu."));
CANCEL_ITEM.setItemMeta(meta);
- CONFIRM_ITEM = new ItemStack(Material.GREEN_TERRACOTTA);
+ CONFIRM_ITEM = ItemType.GREEN_TERRACOTTA.createItemStack();
meta = CONFIRM_ITEM.getItemMeta();
assert meta != null;
@@ -68,7 +69,7 @@ public class GuiSharedConstant {
meta.setLore(Collections.singletonList("§7Confirm current action."));
CONFIRM_ITEM.setItemMeta(meta);
- CONFIRM_PERMANENT_ITEM = new ItemStack(Material.GREEN_TERRACOTTA);
+ CONFIRM_PERMANENT_ITEM = ItemType.GREEN_TERRACOTTA.createItemStack();
meta = CONFIRM_PERMANENT_ITEM.getItemMeta();
assert meta != null;
diff --git a/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt b/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt
index 4e3dcb1..3f9812e 100644
--- a/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt
+++ b/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt
@@ -2,8 +2,8 @@ package io.delilaheve.util
import io.delilaheve.CustomAnvil
import io.delilaheve.util.EnchantmentUtil.enchantmentName
-import org.bukkit.Material
import org.bukkit.NamespacedKey
+import org.bukkit.inventory.ItemType
import xyz.alexcrea.cuanvil.config.ConfigHolder
import xyz.alexcrea.cuanvil.config.WorkPenaltyType
import xyz.alexcrea.cuanvil.config.WorkPenaltyType.WorkPenaltyPart
@@ -348,8 +348,8 @@ object ConfigOptions {
*
* @return the current enchantment limit. -1 if none
*/
- fun getEnchantCountLimit(type: Material): Int? {
- val limit = materialEnchantCountLimit(type)
+ fun getEnchantCountLimit(type: ItemType): Int? {
+ val limit = itemEnchantCountLimit(type)
if(limit != null) return limit
if(defaultEnchantCountLimit >= 0) return defaultEnchantCountLimit
@@ -362,7 +362,7 @@ object ConfigOptions {
*
* @return The current enchantment limit. -1 if none
*/
- private fun materialEnchantCountLimit(type: Material): Int? {
+ private fun itemEnchantCountLimit(type: ItemType): Int? {
val path = "$ENCHANT_COUNT_LIMIT_ITEMS.${type.key.key.lowercase()}"
if(!ConfigHolder.DEFAULT_CONFIG.config.isInt(path))
return null
diff --git a/src/main/kotlin/io/delilaheve/util/EnchantmentUtil.kt b/src/main/kotlin/io/delilaheve/util/EnchantmentUtil.kt
index bee9bda..3540d31 100644
--- a/src/main/kotlin/io/delilaheve/util/EnchantmentUtil.kt
+++ b/src/main/kotlin/io/delilaheve/util/EnchantmentUtil.kt
@@ -4,9 +4,9 @@ import io.delilaheve.CustomAnvil
import org.bukkit.entity.HumanEntity
import org.bukkit.inventory.ItemStack
import xyz.alexcrea.cuanvil.config.ConfigHolder
-import xyz.alexcrea.cuanvil.dependency.DependencyManager
import xyz.alexcrea.cuanvil.enchant.CAEnchantment
import xyz.alexcrea.cuanvil.group.ConflictType
+import xyz.alexcrea.cuanvil.util.ItemTypeUtil.itemType
import kotlin.math.max
import kotlin.math.min
@@ -34,7 +34,7 @@ object EnchantmentUtil {
val bypassFuse = player.hasPermission(CustomAnvil.bypassFusePermission)
val bypassLevel = player.hasPermission(CustomAnvil.bypassLevelPermission)
- var maxEnchantCount = ConfigOptions.getEnchantCountLimit(item.type)
+ var maxEnchantCount = ConfigOptions.getEnchantCountLimit(item.itemType)
if(maxEnchantCount == null || maxEnchantCount < 0) maxEnchantCount = Int.MAX_VALUE
other.forEach { (enchantment, level) ->
diff --git a/src/main/kotlin/io/delilaheve/util/ItemUtil.kt b/src/main/kotlin/io/delilaheve/util/ItemUtil.kt
index a85af39..f0df2d5 100644
--- a/src/main/kotlin/io/delilaheve/util/ItemUtil.kt
+++ b/src/main/kotlin/io/delilaheve/util/ItemUtil.kt
@@ -1,9 +1,10 @@
package io.delilaheve.util
-import org.bukkit.Material.ENCHANTED_BOOK
import org.bukkit.inventory.ItemStack
+import org.bukkit.inventory.ItemType.ENCHANTED_BOOK
import org.bukkit.inventory.meta.Damageable
import xyz.alexcrea.cuanvil.enchant.CAEnchantment
+import xyz.alexcrea.cuanvil.util.ItemTypeUtil.itemType
import kotlin.math.ceil
import kotlin.math.max
import kotlin.math.min
@@ -11,12 +12,13 @@ import kotlin.math.min
/**
* Item manipulation utilities
*/
+@Suppress("UnstableApiUsage")
object ItemUtil {
/**
* Check if this [ItemStack] is an [ENCHANTED_BOOK]
*/
- fun ItemStack.isEnchantedBook() = type == ENCHANTED_BOOK
+ fun ItemStack.isEnchantedBook() = itemType == ENCHANTED_BOOK
/**
* Find the enchantment map for this [ItemStack] and return it as a [MutableMap]
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt
index d2fdbc0..89cb11b 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt
@@ -8,11 +8,11 @@ import org.bukkit.entity.HumanEntity
import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.event.inventory.PrepareAnvilEvent
import org.bukkit.inventory.ItemStack
+import org.bukkit.inventory.view.AnvilView
import xyz.alexcrea.cuanvil.api.event.listener.CAClickResultBypassEvent
import xyz.alexcrea.cuanvil.api.event.listener.CAEarlyPreAnvilBypassEvent
import xyz.alexcrea.cuanvil.api.event.listener.CAPreAnvilBypassEvent
import xyz.alexcrea.cuanvil.api.event.listener.CATreatAnvilResultEvent
-import org.bukkit.inventory.view.AnvilView
import xyz.alexcrea.cuanvil.config.ConfigHolder
import xyz.alexcrea.cuanvil.dependency.datapack.DataPackDependency
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackDependency.kt
index 93a61a0..4434c8f 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackDependency.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackDependency.kt
@@ -2,8 +2,6 @@ package xyz.alexcrea.cuanvil.dependency.datapack
import io.delilaheve.CustomAnvil
import io.papermc.paper.datapack.Datapack
-import io.papermc.paper.registry.RegistryAccess
-import io.papermc.paper.registry.RegistryKey
import org.bukkit.Bukkit
import org.bukkit.NamespacedKey
import org.bukkit.configuration.file.FileConfiguration
@@ -18,6 +16,7 @@ import xyz.alexcrea.cuanvil.enchant.wrapped.CAIncompatibleAllEnchant
import xyz.alexcrea.cuanvil.group.IncludeItemTypeGroup
import xyz.alexcrea.cuanvil.update.UpdateUtils
import xyz.alexcrea.cuanvil.update.Version
+import xyz.alexcrea.cuanvil.util.ItemTypeUtil.getItemType
import java.io.InputStreamReader
object DataPackDependency {
@@ -136,8 +135,6 @@ object DataPackDependency {
// Order matter for this file
// Could rewrite to not matter but not really important, so I keep it like that
private fun handleItemGroups(yml: YamlConfiguration) {
- val itemRegistry = RegistryAccess.registryAccess().getRegistry(RegistryKey.ITEM)
-
for (groupName in yml.getKeys(false)) {
val section = yml.getConfigurationSection(groupName) ?: continue
@@ -147,10 +144,9 @@ object DataPackDependency {
if (group == null) group = IncludeItemTypeGroup(groupName)
for (name in section.getStringList("items")) {
- val key = NamespacedKey.fromString(name.lowercase())
- if (key == null) throw IllegalStateException("Invalid item type: $name")
- val type = itemRegistry.get(key)
+ // Test if repairable is a valid item type
+ val type = getItemType(name)
if (type == null) {
throw IllegalStateException("Could not find item type $name for item group $groupName")
}
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ExcellentEnchantsDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ExcellentEnchantsDependency.kt
index ce9cc4e..6f0d6de 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ExcellentEnchantsDependency.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ExcellentEnchantsDependency.kt
@@ -1,10 +1,10 @@
package xyz.alexcrea.cuanvil.dependency.plugins
import io.delilaheve.CustomAnvil
-import org.bukkit.Material
import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.event.inventory.PrepareAnvilEvent
import org.bukkit.inventory.ItemStack
+import org.bukkit.inventory.ItemType
import org.bukkit.plugin.RegisteredListener
import xyz.alexcrea.cuanvil.api.EnchantmentApi
import xyz.alexcrea.cuanvil.api.event.listener.CATreatAnvilResultEvent
@@ -13,6 +13,7 @@ import java.lang.reflect.Method
import su.nightexpress.excellentenchants.api.EnchantRegistry as V5EnchantRegistry
import su.nightexpress.excellentenchants.manager.listener.AnvilListener as V5AnvilListener
+@SuppressWarnings("UnstableApiUsage")
class ExcellentEnchantsDependency {
init {
@@ -93,7 +94,7 @@ class ExcellentEnchantsDependency {
}
private fun treatInput(item: ItemStack?): ItemStack {
- if (item == null) return ItemStack(Material.AIR)
+ if (item == null) return ItemType.AIR.createItemStack()
return item
}
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictManager.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictManager.kt
index 82e5e60..d315763 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictManager.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictManager.kt
@@ -8,6 +8,7 @@ import org.bukkit.inventory.ItemStack
import xyz.alexcrea.cuanvil.enchant.AdditionalTestEnchantment
import xyz.alexcrea.cuanvil.enchant.CAEnchantment
import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry
+import xyz.alexcrea.cuanvil.util.ItemTypeUtil.itemType
import java.util.*
@Suppress("UnstableApiUsage")
@@ -176,10 +177,9 @@ class EnchantConflictManager {
item: ItemStack,
newEnchant: CAEnchantment
): ConflictType {
- val mat = item.type
- val itemType = mat.asItemType()!!
+ val type = item.itemType
- CustomAnvil.verboseLog("Testing conflict for ${newEnchant.key} on ${itemType.key}")
+ CustomAnvil.verboseLog("Testing conflict for ${newEnchant.key} on ${type.key}")
val conflictList = newEnchant.conflicts
var result = ConflictType.NO_CONFLICT
@@ -190,7 +190,7 @@ class EnchantConflictManager {
continue
}
- val allowed = conflict.allowed(appliedEnchants.keys, itemType)
+ val allowed = conflict.allowed(appliedEnchants.keys, type)
CustomAnvil.verboseLog("Was against $conflict and conflicting: ${!allowed} ")
if (!allowed) {
if (conflict.getEnchants().size <= 1) {
@@ -206,7 +206,7 @@ class EnchantConflictManager {
val immutableEnchants = Collections.unmodifiableMap(appliedEnchants)
for (appliedEnchant in appliedEnchants.keys) {
if (appliedEnchant is AdditionalTestEnchantment) {
- val doConflict = appliedEnchant.isEnchantConflict(immutableEnchants, mat)
+ val doConflict = appliedEnchant.isEnchantConflict(immutableEnchants, type)
if (doConflict) {
CustomAnvil.verboseLog("Big conflict by additional test, stopping")
return ConflictType.ENCHANTMENT_CONFLICT
@@ -218,7 +218,7 @@ class EnchantConflictManager {
if ((result != ConflictType.ITEM_CONFLICT) && (newEnchant is AdditionalTestEnchantment)) {
val partialItem = createPartialResult(item, immutableEnchants)
- if (newEnchant.isItemConflict(immutableEnchants, mat, partialItem)) {
+ if (newEnchant.isItemConflict(immutableEnchants, type, partialItem)) {
return ConflictType.ITEM_CONFLICT
}
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/ExcludeItemTypeGroup.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/ExcludeItemTypeGroup.kt
index 5b49c36..e02c20e 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/group/ExcludeItemTypeGroup.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/ExcludeItemTypeGroup.kt
@@ -1,18 +1,16 @@
package xyz.alexcrea.cuanvil.group
-import io.papermc.paper.registry.RegistryAccess
-import io.papermc.paper.registry.RegistryKey
+import org.bukkit.Registry
import org.bukkit.inventory.ItemType
import java.util.*
@Deprecated("Need rework to reduce memory cost as not enum set")
-@Suppress("UnstableApiUsage")
class ExcludeItemTypeGroup(name: String) : AbstractItemTypeGroup(name) {
override fun createDefaultSet(): MutableSet {
val types: MutableSet = HashSet()
- types.addAll(RegistryAccess.registryAccess().getRegistry(RegistryKey.ITEM))
+ types.addAll(Registry.ITEM)
return types
}
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/IncludeItemTypeGroup.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/IncludeItemTypeGroup.kt
index 9191b52..26fb8fb 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/group/IncludeItemTypeGroup.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/IncludeItemTypeGroup.kt
@@ -3,7 +3,6 @@ package xyz.alexcrea.cuanvil.group
import org.bukkit.inventory.ItemType
import java.util.*
-@Suppress("UnstableApiUsage")
class IncludeItemTypeGroup(name: String) : AbstractItemTypeGroup(name) {
override fun createDefaultSet(): MutableSet {
return HashSet()
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/ItemGroupManager.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/ItemGroupManager.kt
index c72df28..c999f43 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/group/ItemGroupManager.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/ItemGroupManager.kt
@@ -1,10 +1,8 @@
package xyz.alexcrea.cuanvil.group
import io.delilaheve.CustomAnvil
-import io.papermc.paper.registry.RegistryAccess
-import io.papermc.paper.registry.RegistryKey
-import org.bukkit.NamespacedKey
import org.bukkit.configuration.ConfigurationSection
+import xyz.alexcrea.cuanvil.util.ItemTypeUtil
import java.util.*
@SuppressWarnings("UnstableApiUsage")
@@ -79,21 +77,10 @@ class ItemGroupManager {
config: ConfigurationSection,
keys: Set
) {
- val itemRegistry = RegistryAccess.registryAccess().getRegistry(RegistryKey.ITEM)
-
// Read material to include in this group policy
val materialList = groupSection.getStringList(MATERIAL_LIST_PATH)
for (typeName in materialList) {
- val key = NamespacedKey.fromString(typeName.lowercase())
- if (key == null) {
- CustomAnvil.instance.logger.warning(
- "Malformed item type $typeName on group ${group.getName()}"
- )
-
- continue
- }
-
- val type = itemRegistry.get(key)
+ val type = ItemTypeUtil.getItemType(typeName)
if (type == null) {
// Check if we should warn the user
if (typeName !in FUTURE_MATERIAL) {
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt
index 428ee4e..e4246f3 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt
@@ -5,7 +5,6 @@ import io.delilaheve.util.ConfigOptions
import io.delilaheve.util.ItemUtil.canMergeWith
import io.delilaheve.util.ItemUtil.unitRepair
import org.bukkit.GameMode
-import org.bukkit.Material
import org.bukkit.entity.Player
import org.bukkit.event.Event
import org.bukkit.event.EventHandler
@@ -13,6 +12,7 @@ import org.bukkit.event.Listener
import org.bukkit.event.inventory.ClickType
import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.inventory.ItemStack
+import org.bukkit.inventory.ItemType
import org.bukkit.inventory.meta.BookMeta
import org.bukkit.inventory.view.AnvilView
import xyz.alexcrea.cuanvil.dependency.DependencyManager
@@ -24,6 +24,7 @@ import xyz.alexcrea.cuanvil.util.AnvilLoreEditUtil
import xyz.alexcrea.cuanvil.util.AnvilUseType
import xyz.alexcrea.cuanvil.util.AnvilXpUtil
import xyz.alexcrea.cuanvil.util.CustomRecipeUtil
+import xyz.alexcrea.cuanvil.util.ItemTypeUtil.itemType
import xyz.alexcrea.cuanvil.util.UnitRepairUtil.getRepair
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil
import xyz.alexcrea.cuanvil.util.config.LoreEditType
@@ -365,7 +366,7 @@ class AnvilResultListener : Listener {
rightItem: ItemStack,
output: ItemStack,
): Boolean {
- if (Material.WRITABLE_BOOK != rightItem.type) return false
+ if (ItemType.WRITABLE_BOOK != rightItem.itemType) return false
val bookMeta = rightItem.itemMeta as BookMeta? ?: return false
val editType = AnvilLoreEditUtil.bookLoreEditIsAppend(leftItem, rightItem) ?: return false
@@ -437,7 +438,7 @@ class AnvilResultListener : Listener {
rightItem: ItemStack,
output: ItemStack,
): Boolean {
- if (Material.PAPER != rightItem.type) return false
+ if (ItemType.PAPER != rightItem.itemType) return false
val paperMeta = rightItem.itemMeta ?: return false
val editType = AnvilLoreEditUtil.paperLoreEditIsAppend(leftItem, rightItem) ?: return false
@@ -534,21 +535,21 @@ class AnvilResultListener : Listener {
}
//check hotbare full
var slotIndex = 8
- while (slotIndex >= 0 && ((inventory.getItem(slotIndex)?.type ?: Material.AIR) != Material.AIR)) {
+ while (slotIndex >= 0 && ((inventory.getItem(slotIndex)?.type ?: ItemType.AIR) != ItemType.AIR)) {
slotIndex--
}
if (slotIndex >= 0) {
return SlotContainer(SlotType.INVENTORY, slotIndex)
}
slotIndex = 35 //4*9 - 1 (max of player inventory)
- while (slotIndex >= 9 && ((inventory.getItem(slotIndex)?.type ?: Material.AIR) != Material.AIR)) {
+ while (slotIndex >= 9 && ((inventory.getItem(slotIndex)?.type ?: ItemType.AIR) != ItemType.AIR)) {
slotIndex--
}
if (slotIndex < 9) {
return NO_SLOT
}
return SlotContainer(SlotType.INVENTORY, slotIndex)
- } else if (player.itemOnCursor.type != Material.AIR) return NO_SLOT
+ } else if (player.itemOnCursor.itemType != ItemType.AIR) return NO_SLOT
return CURSOR_SLOT
}
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt
index 291e625..3e9beef 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt
@@ -10,19 +10,20 @@ import io.delilaheve.util.ItemUtil.repairFrom
import io.delilaheve.util.ItemUtil.setEnchantmentsUnsafe
import io.delilaheve.util.ItemUtil.unitRepair
import org.bukkit.ChatColor
-import org.bukkit.Material
import org.bukkit.entity.HumanEntity
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.Listener
import org.bukkit.event.inventory.PrepareAnvilEvent
import org.bukkit.inventory.ItemStack
+import org.bukkit.inventory.ItemType
import org.bukkit.inventory.meta.EnchantmentStorageMeta
import org.bukkit.inventory.meta.ItemMeta
import org.bukkit.inventory.view.AnvilView
import xyz.alexcrea.cuanvil.dependency.DependencyManager
import xyz.alexcrea.cuanvil.enchant.CAEnchantment
import xyz.alexcrea.cuanvil.util.*
+import xyz.alexcrea.cuanvil.util.ItemTypeUtil.itemType
import xyz.alexcrea.cuanvil.util.UnitRepairUtil.getRepair
import java.util.concurrent.atomic.AtomicInteger
@@ -322,13 +323,13 @@ class PrepareAnvilListener : Listener {
event: PrepareAnvilEvent, view: AnvilView, player: HumanEntity,
first: ItemStack, second: ItemStack
): Boolean {
- val type = second.type
+ val type = second.itemType
var result: ItemStack? = null
val xpCost = AtomicInteger()
- if (Material.WRITABLE_BOOK == type) {
+ if (ItemType.WRITABLE_BOOK == type) {
result = AnvilLoreEditUtil.tryLoreEditByBook(player, first, second, xpCost)
- } else if (Material.PAPER == type) {
+ } else if (ItemType.PAPER == type) {
result = AnvilLoreEditUtil.tryLoreEditByPaper(player, first, second, xpCost)
}
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/recipe/CustomAnvilRecipeManager.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/recipe/CustomAnvilRecipeManager.kt
index f271d90..1cab77b 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/recipe/CustomAnvilRecipeManager.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/recipe/CustomAnvilRecipeManager.kt
@@ -1,19 +1,20 @@
package xyz.alexcrea.cuanvil.recipe
import io.delilaheve.CustomAnvil
-import org.bukkit.Material
import org.bukkit.configuration.file.FileConfiguration
import org.bukkit.inventory.ItemStack
+import org.bukkit.inventory.ItemType
+import xyz.alexcrea.cuanvil.util.ItemTypeUtil.itemType
class CustomAnvilRecipeManager {
lateinit var recipeList: ArrayList
- lateinit var recipeByMat: HashMap>
+ lateinit var recipeByType: HashMap>
fun prepareRecipes(config: FileConfiguration) {
recipeList = ArrayList()
- recipeByMat = HashMap()
+ recipeByType = HashMap()
// read all configs
val keys = config.getKeys(false)
@@ -43,9 +44,9 @@ class CustomAnvilRecipeManager {
// Remove left item mat if exist
val oldLeftItem = recipe.leftItem
if (oldLeftItem != null) {
- val oldMat = oldLeftItem.type
+ val oldMat = oldLeftItem.itemType
- val test = recipeByMat[oldMat]
+ val test = recipeByType[oldMat]
test!!.remove(recipe)
}
if (leftItem != null) {
@@ -56,10 +57,10 @@ class CustomAnvilRecipeManager {
}
private fun addToMatMap(recipe: AnvilCustomRecipe, leftItem: ItemStack) {
- var recipeList = recipeByMat[leftItem.type]
+ var recipeList = recipeByType[leftItem.itemType]
if (recipeList == null) {
recipeList = ArrayList()
- recipeByMat[leftItem.type] = recipeList
+ recipeByType[leftItem.itemType] = recipeList
}
recipeList.add(recipe)
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilUseType.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilUseType.kt
index d17e908..429dfa2 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilUseType.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilUseType.kt
@@ -1,61 +1,61 @@
package xyz.alexcrea.cuanvil.util
-import org.bukkit.Material
+import org.bukkit.inventory.ItemType
import xyz.alexcrea.cuanvil.config.WorkPenaltyType.WorkPenaltyPart
-import xyz.alexcrea.cuanvil.util.config.LoreEditType
+@Suppress("UnstableApiUsage")
enum class AnvilUseType(
val typeName: String, val path: String,
val defaultPenalty: WorkPenaltyPart,
- val displayName: String, val displayMat: Material
+ val displayName: String, val displayMat: ItemType
) {
RENAME_ONLY(
"rename_only",
WorkPenaltyPart(false, true),
- "Rename Only", Material.NAME_TAG
+ "Rename Only", ItemType.NAME_TAG
),
MERGE(
"merge",
WorkPenaltyPart(true, true),
- "Merge", Material.ANVIL
+ "Merge", ItemType.ANVIL
),
UNIT_REPAIR(
"unit_repair",
WorkPenaltyPart(true, true),
- "Unit Repair", Material.DIAMOND
+ "Unit Repair", ItemType.DIAMOND
),
CUSTOM_CRAFT(
"custom_craft",
WorkPenaltyPart(false, false),
- "Custom Craft", Material.CRAFTING_TABLE
+ "Custom Craft", ItemType.CRAFTING_TABLE
),
LORE_EDIT_BOOK_APPEND(
"lore_edit_book_append", "lore_edit.book_and_quil.append",
WorkPenaltyPart(false, false),
- "Book Add", Material.WRITABLE_BOOK
+ "Book Add", ItemType.WRITABLE_BOOK
),
LORE_EDIT_BOOK_REMOVE(
"lore_edit_book_remove", "lore_edit.book_and_quil.remove",
WorkPenaltyPart(false, false),
- "Book Remove", Material.WRITABLE_BOOK
+ "Book Remove", ItemType.WRITABLE_BOOK
),
LORE_EDIT_PAPER_APPEND(
"lore_edit_paper_append", "lore_edit.paper.append_line",
WorkPenaltyPart(false, false),
- "Paper Add", Material.WRITABLE_BOOK
+ "Paper Add", ItemType.WRITABLE_BOOK
),
LORE_EDIT_PAPER_REMOVE(
"lore_edit_paper_remove", "lore_edit.paper.remove_line",
WorkPenaltyPart(false, false),
- "Paper Remove", Material.WRITABLE_BOOK
+ "Paper Remove", ItemType.WRITABLE_BOOK
),
;
constructor(
typeName: String,
defaultPenalty: WorkPenaltyPart,
- displayName: String, displayMat: Material
+ displayName: String, displayMat: ItemType
) :
this(
typeName,
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilXpUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilXpUtil.kt
index ae35196..6c60393 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilXpUtil.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilXpUtil.kt
@@ -9,8 +9,6 @@ import org.bukkit.GameMode
import org.bukkit.NamespacedKey
import org.bukkit.entity.HumanEntity
import org.bukkit.entity.Player
-import org.bukkit.inventory.AnvilInventory
-import org.bukkit.inventory.InventoryView
import org.bukkit.inventory.ItemStack
import org.bukkit.inventory.meta.Repairable
import org.bukkit.inventory.view.AnvilView
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/CustomRecipeUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/CustomRecipeUtil.kt
index 058b25a..f39f6d5 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/util/CustomRecipeUtil.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/CustomRecipeUtil.kt
@@ -4,6 +4,7 @@ import io.delilaheve.CustomAnvil
import org.bukkit.inventory.ItemStack
import xyz.alexcrea.cuanvil.config.ConfigHolder
import xyz.alexcrea.cuanvil.recipe.AnvilCustomRecipe
+import xyz.alexcrea.cuanvil.util.ItemTypeUtil.itemType
import kotlin.math.min
object CustomRecipeUtil {
@@ -12,7 +13,7 @@ object CustomRecipeUtil {
leftItem: ItemStack,
rightItem: ItemStack?) : AnvilCustomRecipe? {
- val recipeList = ConfigHolder.CUSTOM_RECIPE_HOLDER.recipeManager.recipeByMat[leftItem.type] ?: return null
+ val recipeList = ConfigHolder.CUSTOM_RECIPE_HOLDER.recipeManager.recipeByType[leftItem.itemType] ?: return null
CustomAnvil.verboseLog("Testing " + recipeList.size + " recipe...")
for (recipe in recipeList) {
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/ItemTypeUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/ItemTypeUtil.kt
new file mode 100644
index 0000000..9e722c2
--- /dev/null
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/ItemTypeUtil.kt
@@ -0,0 +1,43 @@
+package xyz.alexcrea.cuanvil.util
+
+import org.bukkit.NamespacedKey
+import org.bukkit.Registry
+import org.bukkit.inventory.ItemStack
+import org.bukkit.inventory.ItemType
+
+object ItemTypeUtil {
+
+ /**
+ * Get item type by its name
+ * @return the item type or null if absent or malformed key
+ */
+ fun getItemType(name: String): ItemType? {
+ val key = NamespacedKey.fromString(name.lowercase())
+ if (key == null) return null;
+
+ return Registry.ITEM.get(key)
+ }
+
+ /**
+ * Get item type by its name
+ * @return the item type or null if absent or malformed key
+ */
+ fun getItemTypeExact(name: String): ItemType? {
+ val key = NamespacedKey.fromString(name)
+ if (key == null) return null;
+
+ return Registry.ITEM.get(key)
+ }
+
+ fun ItemType.name(): String {
+ return this.key.key
+ }
+
+ val ItemStack.itemType: ItemType
+ get() {
+ // we assume material of an item stack is a material of an item...
+ return this.type.asItemType()!!
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/UnitRepairUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/UnitRepairUtil.kt
index 2047e79..c67dc4c 100644
--- a/src/main/kotlin/xyz/alexcrea/cuanvil/util/UnitRepairUtil.kt
+++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/UnitRepairUtil.kt
@@ -3,6 +3,7 @@ package xyz.alexcrea.cuanvil.util
import org.bukkit.configuration.ConfigurationSection
import org.bukkit.inventory.ItemStack
import xyz.alexcrea.cuanvil.config.ConfigHolder
+import xyz.alexcrea.cuanvil.util.ItemTypeUtil.itemType
object UnitRepairUtil {
@@ -21,14 +22,16 @@ object UnitRepairUtil {
): Double? {
if (other == null) return null
val config = ConfigHolder.UNIT_REPAIR_HOLDER.config
- // Get configuration section if exist
- val otherName = other.type.name.lowercase()
- var section = config.getConfigurationSection(otherName)
- if (section == null) {
- section = config.getConfigurationSection(otherName.uppercase())
- if (section == null) return null
+ val otherKey = other.itemType.key
+
+ // Get configuration section if exist
+ var section = config.getConfigurationSection(otherKey.toString())
+ if (section == null) {
+ section = config.getConfigurationSection(otherKey.key)
+ if (section == null) return null
}
+
// Get repair amount
var userDefault = config.getDouble(UNIT_REPAIR_DEFAULT_PATH, DEFAULT_DEFAULT_UNIT_REPAIR)
if (userDefault <= 0) {
@@ -44,14 +47,16 @@ object UnitRepairUtil {
* 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.type.name.lowercase()
- val repairValue = if (section.isDouble(itemName)) {
- section.getDouble(itemName)
- } else if (section.isDouble(itemName.uppercase())) {
- section.getDouble(itemName.uppercase())
+ val itemKey = item.itemType.key
+
+ val repairValue = if (section.isDouble(itemKey.toString())) {
+ section.getDouble(itemKey.toString())
+ } else if (section.isDouble(itemKey.key)) {
+ section.getDouble(itemKey.key)
} else {
return null
}
+
if (repairValue <= 0)
return default
return repairValue
diff --git a/src/test/java/io/delilaheve/util/EnchantmentUtilTests.java b/src/test/java/io/delilaheve/util/EnchantmentUtilTests.java
index 10ea252..5ba242f 100644
--- a/src/test/java/io/delilaheve/util/EnchantmentUtilTests.java
+++ b/src/test/java/io/delilaheve/util/EnchantmentUtilTests.java
@@ -1,24 +1,24 @@
package io.delilaheve.util;
import io.delilaheve.CustomAnvil;
-import org.bukkit.Material;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.AnvilInventory;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.permissions.PermissionAttachment;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockbukkit.mockbukkit.entity.PlayerMock;
-import org.mockbukkit.mockbukkit.inventory.ItemStackMock;
import xyz.alexcrea.cuanvil.config.ConfigHolder;
-import xyz.alexcrea.cuanvil.tests.ConfigResetCustomAnvilTest;
import xyz.alexcrea.cuanvil.data.AnvilFuseTestData;
+import xyz.alexcrea.cuanvil.tests.ConfigResetCustomAnvilTest;
import xyz.alexcrea.cuanvil.util.AnvilFuseTestUtil;
import java.util.List;
+@SuppressWarnings("UnstableApiUsage")
public class EnchantmentUtilTests extends ConfigResetCustomAnvilTest {
private AnvilInventory anvil;
@@ -48,21 +48,21 @@ public class EnchantmentUtilTests extends ConfigResetCustomAnvilTest {
"Caution with that as it will break some server CustomAnvil setup.");
// Create ingredient item
- ItemStack normalStick = new ItemStackMock(Material.STICK);
+ ItemStack normalStick = ItemType.STICK.createItemStack();
ItemStack sharpnessBook = AnvilFuseTestUtil.prepareItem(
- Material.ENCHANTED_BOOK,
+ ItemType.ENCHANTED_BOOK,
List.of("sharpness"), 1);
ItemStack sharpnessStick = AnvilFuseTestUtil.prepareItem(
- Material.STICK,
+ ItemType.STICK,
List.of("sharpness"), 1);
// Create result item
ItemStack sharpnessResultStick = AnvilFuseTestUtil.prepareItem(
- Material.STICK, 1,
+ ItemType.STICK, 1,
List.of("sharpness"), 1);
ItemStack sharpness2ResultStick = AnvilFuseTestUtil.prepareItem(
- Material.STICK, 1,
+ ItemType.STICK, 1,
List.of("sharpness"), 2);
// Create failing anvil fuse data
@@ -108,25 +108,25 @@ public class EnchantmentUtilTests extends ConfigResetCustomAnvilTest {
// Create ingredient item
ItemStack sharpness5Sword = AnvilFuseTestUtil.prepareItem(
- Material.DIAMOND_SWORD,
+ ItemType.DIAMOND_SWORD,
List.of("sharpness"), 5);
ItemStack sharpnessBook = AnvilFuseTestUtil.prepareItem(
- Material.ENCHANTED_BOOK,
+ ItemType.ENCHANTED_BOOK,
List.of("sharpness"), 1);
ItemStack sharpness5Book = AnvilFuseTestUtil.prepareItem(
- Material.ENCHANTED_BOOK,
+ ItemType.ENCHANTED_BOOK,
List.of("sharpness"), 5);
ItemStack sharpness6Book = AnvilFuseTestUtil.prepareItem(
- Material.ENCHANTED_BOOK,
+ ItemType.ENCHANTED_BOOK,
List.of("sharpness"), 6);
// Create result item
ItemStack sharpness2BookResult = AnvilFuseTestUtil.prepareItem(
- Material.ENCHANTED_BOOK, 1,
+ ItemType.ENCHANTED_BOOK, 1,
List.of("sharpness"), 2);
ItemStack sharpness6SwordResult = AnvilFuseTestUtil.prepareItem(
- Material.DIAMOND_SWORD, 1,
+ ItemType.DIAMOND_SWORD, 1,
List.of("sharpness"), 6);
// Create failing anvil fuse data
diff --git a/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java b/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java
index 19f1d6f..e066515 100644
--- a/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java
+++ b/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java
@@ -2,11 +2,11 @@ package xyz.alexcrea.cuanvil.anvil;
import io.delilaheve.util.ConfigOptions;
import net.kyori.adventure.text.Component;
-import org.bukkit.Material;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.AnvilInventory;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.Repairable;
import org.junit.jupiter.api.AfterAll;
@@ -15,11 +15,11 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockbukkit.mockbukkit.entity.PlayerMock;
import xyz.alexcrea.cuanvil.config.ConfigHolder;
-import xyz.alexcrea.cuanvil.tests.SharedCustomAnvilTest;
import xyz.alexcrea.cuanvil.data.AnvilFuseTestData;
-import xyz.alexcrea.cuanvil.util.AnvilFuseTestUtil;
+import xyz.alexcrea.cuanvil.tests.SharedCustomAnvilTest;
import xyz.alexcrea.cuanvil.util.CommonItemUtil;
+@SuppressWarnings("UnstableApiUsage")
public class AnvilFuseTests extends SharedCustomAnvilTest {
private static AnvilInventory anvil;
@@ -107,7 +107,7 @@ public class AnvilFuseTests extends SharedCustomAnvilTest {
// Note: currently anvil can only have null name. maybe handle differently later
@Test
public void nullNameResetTest(){
- ItemStack base = new ItemStack(Material.NETHERITE_SWORD);
+ ItemStack base = ItemType.NETHERITE_SWORD.createItemStack();
ItemStack expected = base.clone();
ItemMeta meta = expected.getItemMeta();
diff --git a/src/test/java/xyz/alexcrea/cuanvil/anvil/LoreEditTests.java b/src/test/java/xyz/alexcrea/cuanvil/anvil/LoreEditTests.java
index ebfb84f..339b965 100644
--- a/src/test/java/xyz/alexcrea/cuanvil/anvil/LoreEditTests.java
+++ b/src/test/java/xyz/alexcrea/cuanvil/anvil/LoreEditTests.java
@@ -1,12 +1,12 @@
package xyz.alexcrea.cuanvil.anvil;
import io.delilaheve.util.ConfigOptions;
-import org.bukkit.Material;
import org.bukkit.event.Event;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.AnvilInventory;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.BookMeta;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
@@ -29,6 +29,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+@SuppressWarnings("UnstableApiUsage")
public class LoreEditTests extends SharedCustomAnvilTest {
private static AnvilInventory anvil;
@@ -93,7 +94,7 @@ public class LoreEditTests extends SharedCustomAnvilTest {
ConfigHolder.DEFAULT_CONFIG.getConfig().set(ConfigOptions.VERBOSE_DEBUG_LOGGING, true);
// Applied item
- ItemStack item = new ItemStack(Material.STICK, 33);
+ ItemStack item = ItemType.STICK.createItemStack(33);
ItemMeta meta = item.getItemMeta();
ArrayList lore = new ArrayList<>();
@@ -122,7 +123,7 @@ public class LoreEditTests extends SharedCustomAnvilTest {
lore.clear();
// Paper items
- item = new ItemStack(Material.PAPER, 64);
+ item = ItemType.PAPER.createItemStack(64);
meta = item.getItemMeta();
emptyPaperStack = item.clone();
item.setAmount(63);
@@ -149,7 +150,7 @@ public class LoreEditTests extends SharedCustomAnvilTest {
uncoloredPaperOne = item.clone();
// Book items
- item = new ItemStack(Material.WRITABLE_BOOK);
+ item = ItemType.WRITABLE_BOOK.createItemStack();
BookMeta bookmeta = (BookMeta) item.getItemMeta();
emptyBook = item.clone();
diff --git a/src/test/java/xyz/alexcrea/cuanvil/api/AnvilRecipeBuilderTest.java b/src/test/java/xyz/alexcrea/cuanvil/api/AnvilRecipeBuilderTest.java
index d9ff329..92531c4 100644
--- a/src/test/java/xyz/alexcrea/cuanvil/api/AnvilRecipeBuilderTest.java
+++ b/src/test/java/xyz/alexcrea/cuanvil/api/AnvilRecipeBuilderTest.java
@@ -1,14 +1,13 @@
package xyz.alexcrea.cuanvil.api;
-
-import org.bukkit.Material;
-import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import xyz.alexcrea.cuanvil.tests.SharedOnlyMockBukkit;
import static org.junit.jupiter.api.Assertions.*;
+@SuppressWarnings("UnstableApiUsage")
public class AnvilRecipeBuilderTest extends SharedOnlyMockBukkit {
private AnvilRecipeBuilder builder;
@@ -19,56 +18,56 @@ public class AnvilRecipeBuilderTest extends SharedOnlyMockBukkit {
builder = new AnvilRecipeBuilder("test");
builder2 = new AnvilRecipeBuilder("test");
- builder2.setLeftItem(new ItemStack(Material.STICK));
- builder2.setResultItem(new ItemStack(Material.STICK));
+ builder2.setLeftItem(ItemType.STICK.createItemStack());
+ builder2.setResultItem(ItemType.STICK.createItemStack());
}
@Test
- void createBuilder_NoLeftItem(){
- builder.setResultItem(new ItemStack(Material.STICK));
+ void createBuilder_NoLeftItem() {
+ builder.setResultItem(ItemType.STICK.createItemStack());
assertNull(builder.build());
}
@Test
- void createBuilder_NoResultItem(){
- builder.setLeftItem(new ItemStack(Material.STICK));
+ void createBuilder_NoResultItem() {
+ builder.setLeftItem(ItemType.STICK.createItemStack());
assertNull(builder.build());
}
@Test
- void createBuilder_minimalist(){
- builder.setLeftItem(new ItemStack(Material.STICK))
- .setResultItem(new ItemStack(Material.STICK));
+ void createBuilder_minimalist() {
+ builder.setLeftItem(ItemType.STICK.createItemStack())
+ .setResultItem(ItemType.STICK.createItemStack());
assertNotNull(builder.build());
assertNotNull(builder2.build());
}
@Test
- void setLeftItem(){
+ void setLeftItem() {
assertNull(builder.getLeftItem());
- builder.setLeftItem(new ItemStack(Material.STICK));
+ builder.setLeftItem(ItemType.STICK.createItemStack());
assertNotNull(builder.getLeftItem());
}
@Test
- void setRightItem(){
+ void setRightItem() {
assertNull(builder.getRightItem());
- builder.setRightItem(new ItemStack(Material.STICK));
+ builder.setRightItem(ItemType.STICK.createItemStack());
assertNotNull(builder.getRightItem());
}
@Test
- void setResultItem(){
+ void setResultItem() {
assertNull(builder.getResultItem());
- builder.setResultItem(new ItemStack(Material.STICK));
+ builder.setResultItem(ItemType.STICK.createItemStack());
assertNotNull(builder.getResultItem());
}
@Test
- void setXpCostPerCraft(){
+ void setXpCostPerCraft() {
assertEquals(0, builder2.getLevelCostPerCraft());
assertEquals(0, builder2.build().getLevelCostPerCraft());
builder2.setLevelCostPerCraft(2);
@@ -77,7 +76,7 @@ public class AnvilRecipeBuilderTest extends SharedOnlyMockBukkit {
}
@Test
- void setLinearXpCostPerCraft(){
+ void setLinearXpCostPerCraft() {
assertEquals(0, builder2.getLinearXpCostPerCraft());
assertEquals(0, builder2.build().getXpCostPerCraft());
builder2.setLinearXpCostPerCraft(2);
@@ -87,7 +86,7 @@ public class AnvilRecipeBuilderTest extends SharedOnlyMockBukkit {
@Test
- void setExactCount(){
+ void setExactCount() {
assertTrue(builder2.isExactCount());
assertTrue(builder2.build().getExactCount());
builder2.setExactCount(false);
@@ -96,7 +95,7 @@ public class AnvilRecipeBuilderTest extends SharedOnlyMockBukkit {
}
@Test
- void setName(){
+ void setName() {
assertEquals("test", builder2.getName());
assertEquals("test", builder2.build().getName());
builder2.setName("other");
diff --git a/src/test/java/xyz/alexcrea/cuanvil/api/ConflictApiTests.java b/src/test/java/xyz/alexcrea/cuanvil/api/ConflictApiTests.java
index 1a9a256..3fd1461 100644
--- a/src/test/java/xyz/alexcrea/cuanvil/api/ConflictApiTests.java
+++ b/src/test/java/xyz/alexcrea/cuanvil/api/ConflictApiTests.java
@@ -1,11 +1,11 @@
package xyz.alexcrea.cuanvil.api;
-import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.AnvilInventory;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.junit.jupiter.api.Assertions;
@@ -13,10 +13,10 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockbukkit.mockbukkit.entity.PlayerMock;
import xyz.alexcrea.cuanvil.config.ConfigHolder;
+import xyz.alexcrea.cuanvil.data.AnvilFuseTestData;
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
import xyz.alexcrea.cuanvil.group.EnchantConflictGroup;
import xyz.alexcrea.cuanvil.tests.ConfigResetCustomAnvilTest;
-import xyz.alexcrea.cuanvil.data.AnvilFuseTestData;
import xyz.alexcrea.cuanvil.util.AnvilFuseTestUtil;
import xyz.alexcrea.cuanvil.util.CommonItemUtil;
@@ -25,6 +25,7 @@ import java.util.List;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
+@SuppressWarnings("UnstableApiUsage")
public class ConflictApiTests extends ConfigResetCustomAnvilTest {
private AnvilInventory anvil;
@@ -51,7 +52,7 @@ public class ConflictApiTests extends ConfigResetCustomAnvilTest {
ItemStack sharpness1 = CommonItemUtil.sharpness(1);
ItemStack arthropods1 = CommonItemUtil.bane_of_arthropods(1);
ItemStack illegalResult = AnvilFuseTestUtil.prepareItem(
- Material.DIAMOND_SWORD, 1,
+ ItemType.DIAMOND_SWORD, 1,
List.of("bane_of_arthropods", "sharpness"),
1, 1
);
diff --git a/src/test/java/xyz/alexcrea/cuanvil/api/CustomAnvilRecipeApiTests.java b/src/test/java/xyz/alexcrea/cuanvil/api/CustomAnvilRecipeApiTests.java
index 651b873..ce14e90 100644
--- a/src/test/java/xyz/alexcrea/cuanvil/api/CustomAnvilRecipeApiTests.java
+++ b/src/test/java/xyz/alexcrea/cuanvil/api/CustomAnvilRecipeApiTests.java
@@ -1,25 +1,25 @@
package xyz.alexcrea.cuanvil.api;
-import org.bukkit.Material;
import org.bukkit.event.Event;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.AnvilInventory;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.jetbrains.annotations.Nullable;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockbukkit.mockbukkit.entity.PlayerMock;
-import org.mockbukkit.mockbukkit.inventory.ItemStackMock;
import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.data.AnvilClickTestData;
+import xyz.alexcrea.cuanvil.data.AnvilFuseTestData;
import xyz.alexcrea.cuanvil.data.TestDataContainer;
import xyz.alexcrea.cuanvil.recipe.AnvilCustomRecipe;
import xyz.alexcrea.cuanvil.tests.ConfigResetCustomAnvilTest;
-import xyz.alexcrea.cuanvil.data.AnvilFuseTestData;
import static org.junit.jupiter.api.Assertions.*;
+@SuppressWarnings("UnstableApiUsage")
public class CustomAnvilRecipeApiTests extends ConfigResetCustomAnvilTest {
private AnvilInventory anvil;
@@ -44,7 +44,7 @@ public class CustomAnvilRecipeApiTests extends ConfigResetCustomAnvilTest {
@Test
public void testBasicRecipe() {
String recipeName = "stick_recipe";
- ItemStack stick = new ItemStackMock(Material.STICK);
+ ItemStack stick = ItemType.STICK.createItemStack();
AnvilFuseTestData nullResultData = new AnvilFuseTestData(
stick, stick,
@@ -97,10 +97,10 @@ public class CustomAnvilRecipeApiTests extends ConfigResetCustomAnvilTest {
@Test
public void testUnitRecipe() {
String recipeName = "stick_recipe";
- ItemStack stick = new ItemStackMock(Material.STICK);
- ItemStack stick2 = new ItemStackMock(Material.STICK, 2);
- ItemStack stick5 = new ItemStackMock(Material.STICK, 5);
- ItemStack stick10 = new ItemStackMock(Material.STICK, 10);
+ ItemStack stick = ItemType.STICK.createItemStack();
+ ItemStack stick2 = ItemType.STICK.createItemStack(2);
+ ItemStack stick5 = ItemType.STICK.createItemStack(5);
+ ItemStack stick10 = ItemType.STICK.createItemStack(10);
AnvilFuseTestData nullResultData = new AnvilFuseTestData(
stick, stick,
@@ -139,10 +139,10 @@ public class CustomAnvilRecipeApiTests extends ConfigResetCustomAnvilTest {
@Test
public void testLinearXpCost() {
String recipeName = "stick_recipe";
- ItemStack stick = new ItemStackMock(Material.STICK);
- ItemStack stick2 = new ItemStackMock(Material.STICK, 2);
- ItemStack stick5 = new ItemStackMock(Material.STICK, 5);
- ItemStack stick10 = new ItemStackMock(Material.STICK, 10);
+ ItemStack stick = ItemType.STICK.createItemStack();
+ ItemStack stick2 = ItemType.STICK.createItemStack(2);
+ ItemStack stick5 = ItemType.STICK.createItemStack(5);
+ ItemStack stick10 = ItemType.STICK.createItemStack(10);
AnvilFuseTestData nullResultData = new AnvilFuseTestData(
@@ -193,10 +193,10 @@ public class CustomAnvilRecipeApiTests extends ConfigResetCustomAnvilTest {
@Test
public void testLinearXpCostRemoveExact() {
String recipeName = "stick_recipe";
- ItemStack stick = new ItemStackMock(Material.STICK);
- ItemStack stick2 = new ItemStackMock(Material.STICK, 2);
- ItemStack stick5 = new ItemStackMock(Material.STICK, 5);
- ItemStack stick10 = new ItemStackMock(Material.STICK, 10);
+ ItemStack stick = ItemType.STICK.createItemStack();
+ ItemStack stick2 = ItemType.STICK.createItemStack(2);
+ ItemStack stick5 = ItemType.STICK.createItemStack(5);
+ ItemStack stick10 = ItemType.STICK.createItemStack(10);
AnvilFuseTestData nullResultData = new AnvilFuseTestData(
stick, stick,
diff --git a/src/test/java/xyz/alexcrea/cuanvil/api/UnitRepairApiTests.java b/src/test/java/xyz/alexcrea/cuanvil/api/UnitRepairApiTests.java
index adda4e1..00263f7 100644
--- a/src/test/java/xyz/alexcrea/cuanvil/api/UnitRepairApiTests.java
+++ b/src/test/java/xyz/alexcrea/cuanvil/api/UnitRepairApiTests.java
@@ -1,23 +1,23 @@
package xyz.alexcrea.cuanvil.api;
-import org.bukkit.Material;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.AnvilInventory;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.Repairable;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockbukkit.mockbukkit.entity.PlayerMock;
-import org.mockbukkit.mockbukkit.inventory.ItemStackMock;
import xyz.alexcrea.cuanvil.config.ConfigHolder;
-import xyz.alexcrea.cuanvil.tests.ConfigResetCustomAnvilTest;
import xyz.alexcrea.cuanvil.data.AnvilFuseTestData;
-import xyz.alexcrea.cuanvil.util.AnvilFuseTestUtil;
+import xyz.alexcrea.cuanvil.tests.ConfigResetCustomAnvilTest;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+@SuppressWarnings("UnstableApiUsage")
public class UnitRepairApiTests extends ConfigResetCustomAnvilTest {
private AnvilInventory anvil;
@@ -40,17 +40,17 @@ public class UnitRepairApiTests extends ConfigResetCustomAnvilTest {
}
@Test
- void vanillaUnitRepair(){
- ItemStack damagedPickaxe = new ItemStackMock(Material.DIAMOND_PICKAXE);
- damagedPickaxe.setDurability((short) (Material.DIAMOND_PICKAXE.getMaxDurability() -1));
+ void vanillaUnitRepair() {
+ ItemStack damagedPickaxe = ItemType.DIAMOND_PICKAXE.createItemStack();
+ damagedPickaxe.setDurability((short) (ItemType.DIAMOND_PICKAXE.getMaxDurability() - 1));
- ItemStack resultPickaxe = new ItemStackMock(Material.DIAMOND_PICKAXE);
- resultPickaxe.setDurability((short) (Material.DIAMOND_PICKAXE.getMaxDurability()/2));
+ ItemStack resultPickaxe = ItemType.DIAMOND_PICKAXE.createItemStack();
+ resultPickaxe.setDurability((short) (ItemType.DIAMOND_PICKAXE.getMaxDurability() / 2));
ItemMeta meta = resultPickaxe.getItemMeta();
((Repairable) meta).setRepairCost(1);
resultPickaxe.setItemMeta(meta);
- ItemStack diamond2 = new ItemStackMock(Material.DIAMOND, 2);
+ ItemStack diamond2 = ItemType.DIAMOND.createItemStack(2);
AnvilFuseTestData legalResultData = new AnvilFuseTestData(
damagedPickaxe, diamond2,
@@ -62,11 +62,11 @@ public class UnitRepairApiTests extends ConfigResetCustomAnvilTest {
}
@Test
- void removeUnitRepair(){
- ItemStack damagedPickaxe = new ItemStackMock(Material.DIAMOND_PICKAXE);
- damagedPickaxe.setDurability((short) (Material.DIAMOND_PICKAXE.getMaxDurability() -1));
+ void removeUnitRepair() {
+ ItemStack damagedPickaxe = ItemType.DIAMOND_PICKAXE.createItemStack();
+ damagedPickaxe.setDurability((short) (ItemType.DIAMOND_PICKAXE.getMaxDurability() - 1));
- ItemStack diamond2 = new ItemStackMock(Material.DIAMOND, 2);
+ ItemStack diamond2 = ItemType.DIAMOND.createItemStack(2);
AnvilFuseTestData nullResultData = new AnvilFuseTestData(
damagedPickaxe, diamond2,
@@ -74,28 +74,28 @@ public class UnitRepairApiTests extends ConfigResetCustomAnvilTest {
);
// Remove unit repair
- assertTrue(UnitRepairApi.removeUnitRepair(Material.DIAMOND, Material.DIAMOND_PICKAXE));
+ assertTrue(UnitRepairApi.removeUnitRepair(ItemType.DIAMOND, ItemType.DIAMOND_PICKAXE));
nullResultData.executeTest(anvil, player);
// see override
- assertFalse(UnitRepairApi.addUnitRepair(Material.DIAMOND, Material.DIAMOND_PICKAXE, 0.25));
- assertTrue(UnitRepairApi.addUnitRepair(Material.DIAMOND, Material.DIAMOND_PICKAXE, 0.25, true));
+ assertFalse(UnitRepairApi.addUnitRepair(ItemType.DIAMOND, ItemType.DIAMOND_PICKAXE, 0.25));
+ assertTrue(UnitRepairApi.addUnitRepair(ItemType.DIAMOND, ItemType.DIAMOND_PICKAXE, 0.25, true));
}
@Test
- void addUnitRepair(){
- ItemStack damagedPickaxe = new ItemStackMock(Material.DIAMOND_PICKAXE);
- damagedPickaxe.setDurability((short) (Material.DIAMOND_PICKAXE.getMaxDurability() -1));
+ void addUnitRepair() {
+ ItemStack damagedPickaxe = ItemType.DIAMOND_PICKAXE.createItemStack();
+ damagedPickaxe.setDurability((short) (ItemType.DIAMOND_PICKAXE.getMaxDurability() - 1));
- ItemStack resultPickaxe = new ItemStackMock(Material.DIAMOND_PICKAXE);
- resultPickaxe.setDurability((short) (Material.DIAMOND_PICKAXE.getMaxDurability()/2));
+ ItemStack resultPickaxe = ItemType.DIAMOND_PICKAXE.createItemStack();
+ resultPickaxe.setDurability((short) (ItemType.DIAMOND_PICKAXE.getMaxDurability() / 2));
ItemMeta meta = resultPickaxe.getItemMeta();
((Repairable) meta).setRepairCost(1);
resultPickaxe.setItemMeta(meta);
- ItemStack stick2 = new ItemStackMock(Material.STICK, 2);
+ ItemStack stick2 = ItemType.STICK.createItemStack(2);
AnvilFuseTestData nullResultData = new AnvilFuseTestData(
damagedPickaxe, stick2,
@@ -110,8 +110,8 @@ public class UnitRepairApiTests extends ConfigResetCustomAnvilTest {
nullResultData.executeTest(anvil, player);
// Add unit repair
- assertTrue(UnitRepairApi.addUnitRepair(Material.STICK, Material.DIAMOND_PICKAXE));
- assertFalse(UnitRepairApi.addUnitRepair(Material.STICK, Material.DIAMOND_PICKAXE));
+ assertTrue(UnitRepairApi.addUnitRepair(ItemType.STICK, ItemType.DIAMOND_PICKAXE));
+ assertFalse(UnitRepairApi.addUnitRepair(ItemType.STICK, ItemType.DIAMOND_PICKAXE));
legalResultData.executeTest(anvil, player);
}
diff --git a/src/test/java/xyz/alexcrea/cuanvil/data/TestDataContainer.java b/src/test/java/xyz/alexcrea/cuanvil/data/TestDataContainer.java
index b4f47a5..c5a329b 100644
--- a/src/test/java/xyz/alexcrea/cuanvil/data/TestDataContainer.java
+++ b/src/test/java/xyz/alexcrea/cuanvil/data/TestDataContainer.java
@@ -7,7 +7,6 @@ import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.junit.jupiter.api.Assertions;
-import xyz.alexcrea.cuanvil.util.AnvilFuseTestUtil;
@SuppressWarnings("unused")
public record TestDataContainer(
diff --git a/src/test/java/xyz/alexcrea/cuanvil/util/AnvilFuseTestUtil.java b/src/test/java/xyz/alexcrea/cuanvil/util/AnvilFuseTestUtil.java
index 1d3c5f4..35914e7 100644
--- a/src/test/java/xyz/alexcrea/cuanvil/util/AnvilFuseTestUtil.java
+++ b/src/test/java/xyz/alexcrea/cuanvil/util/AnvilFuseTestUtil.java
@@ -1,13 +1,13 @@
package xyz.alexcrea.cuanvil.util;
import io.delilaheve.util.ItemUtil;
-import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.inventory.*;
import org.bukkit.inventory.AnvilInventory;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.Repairable;
import org.jetbrains.annotations.NotNull;
@@ -24,18 +24,19 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+@SuppressWarnings("UnstableApiUsage")
public class AnvilFuseTestUtil {
private static PrepareAnvilListener PREPARE_LISTENER = new PrepareAnvilListener();
private static AnvilResultListener RESULT_LISTENER = new AnvilResultListener();
- public static ItemStack prepareItem(@NotNull Material material,
+ public static ItemStack prepareItem(@NotNull ItemType type,
@NotNull List enchantments,
@NotNull List level) {
- return prepareItem(material, 0, enchantments, level);
+ return prepareItem(type, 0, enchantments, level);
}
- public static ItemStack prepareItem(@NotNull Material material,
+ public static ItemStack prepareItem(@NotNull ItemType type,
int repairCost,
@NotNull List enchantments,
@NotNull List level) {
@@ -46,7 +47,7 @@ public class AnvilFuseTestUtil {
enchantmentMap.put(enchantments.get(i), level.get(i));
}
- ItemStack item = new ItemStack(material);
+ ItemStack item = type.createItemStack();
ItemUtil.INSTANCE.setEnchantmentsUnsafe(item, enchantmentMap);
ItemMeta meta = item.getItemMeta();
@@ -57,13 +58,13 @@ public class AnvilFuseTestUtil {
}
- public static ItemStack prepareItem(@NotNull Material material,
+ public static ItemStack prepareItem(@NotNull ItemType type,
@NotNull List enchantmentNames,
Integer... levels) {
- return prepareItem(material, 0, enchantmentNames, levels);
+ return prepareItem(type, 0, enchantmentNames, levels);
}
- public static ItemStack prepareItem(@NotNull Material material,
+ public static ItemStack prepareItem(@NotNull ItemType type,
int repairCost,
@NotNull List enchantmentNames,
Integer... levels) {
@@ -77,7 +78,7 @@ public class AnvilFuseTestUtil {
enchantments.addAll(enchantmentList);
}
- return prepareItem(material, repairCost, enchantments, List.of(levels));
+ return prepareItem(type, repairCost, enchantments, List.of(levels));
}
diff --git a/src/test/java/xyz/alexcrea/cuanvil/util/CommonItemUtil.java b/src/test/java/xyz/alexcrea/cuanvil/util/CommonItemUtil.java
index 1228cda..baafc32 100644
--- a/src/test/java/xyz/alexcrea/cuanvil/util/CommonItemUtil.java
+++ b/src/test/java/xyz/alexcrea/cuanvil/util/CommonItemUtil.java
@@ -1,15 +1,16 @@
package xyz.alexcrea.cuanvil.util;
-import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.ItemType;
import java.util.List;
+@SuppressWarnings("UnstableApiUsage")
public class CommonItemUtil {
public static ItemStack sharpness(int level){
return AnvilFuseTestUtil.prepareItem(
- Material.DIAMOND_SWORD,
+ ItemType.DIAMOND_SWORD,
List.of("sharpness"),
level
);
@@ -17,11 +18,10 @@ public class CommonItemUtil {
public static ItemStack bane_of_arthropods(int level){
return AnvilFuseTestUtil.prepareItem(
- Material.DIAMOND_SWORD,
+ ItemType.DIAMOND_SWORD,
List.of("bane_of_arthropods"),
level
);
}
-
}