diff --git a/pom.xml b/pom.xml
index c50bc46..e5cd9cb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -68,6 +68,18 @@
maven-shade-plugin
3.6.0
+
+
+
+
+
+
+ org.bstats:*
+
+ META-INF/MANIFEST.MF
+
+
+
false
diff --git a/src/main/java/net/tfminecraft/musicalinstruments/items/ItemResolver.java b/src/main/java/net/tfminecraft/musicalinstruments/items/ItemResolver.java
index 3a31c78..153c6d8 100644
--- a/src/main/java/net/tfminecraft/musicalinstruments/items/ItemResolver.java
+++ b/src/main/java/net/tfminecraft/musicalinstruments/items/ItemResolver.java
@@ -1,5 +1,7 @@
package net.tfminecraft.musicalinstruments.items;
+import net.tfminecraft.musicalinstruments.util.LegacyModelData;
+
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
@@ -84,6 +86,8 @@ private ItemStack resolveVanilla(String path) {
}
// modeled(type=paper;name=&6Flute;model=1001)
+ // Keep the existing legacy text representation, formatting, and exact-string comparisons.
+ @SuppressWarnings("deprecation")
private ItemStack resolveModeled(String path) {
int open = path.indexOf('(');
int close = path.lastIndexOf(')');
@@ -114,7 +118,7 @@ private ItemStack resolveModeled(String path) {
}
if (attributes.containsKey("model")) {
try {
- meta.setCustomModelData(Integer.parseInt(attributes.get("model")));
+ LegacyModelData.set(meta, Integer.parseInt(attributes.get("model")));
} catch (NumberFormatException e) {
logger.warning("Invalid model data in modeled item '" + path + "'.");
}
diff --git a/src/main/java/net/tfminecraft/musicalinstruments/util/LegacyModelData.java b/src/main/java/net/tfminecraft/musicalinstruments/util/LegacyModelData.java
new file mode 100644
index 0000000..e002dbb
--- /dev/null
+++ b/src/main/java/net/tfminecraft/musicalinstruments/util/LegacyModelData.java
@@ -0,0 +1,36 @@
+package net.tfminecraft.musicalinstruments.util;
+
+import java.util.List;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.inventory.meta.components.CustomModelDataComponent;
+
+/** Preserves the integer model IDs used by existing configuration and resource packs. */
+public final class LegacyModelData {
+ private LegacyModelData() {}
+
+ public static boolean has(ItemMeta meta) {
+ return !meta.getCustomModelDataComponent().getFloats().isEmpty();
+ }
+
+ public static int get(ItemMeta meta) {
+ List floats = meta.getCustomModelDataComponent().getFloats();
+ if (floats.isEmpty()) {
+ throw new IllegalStateException("We don't have CustomModelData! Check hasCustomModelData first!");
+ }
+ return floats.get(0).intValue();
+ }
+
+ public static void set(ItemMeta meta, Integer value) {
+ if (value == null) {
+ meta.setCustomModelDataComponent(null);
+ return;
+ }
+ CustomModelDataComponent component = meta.getCustomModelDataComponent();
+ // The former integer setter replaced the entire component, not just its first float.
+ component.setFloats(List.of(value.floatValue()));
+ component.setFlags(List.of());
+ component.setStrings(List.of());
+ component.setColors(List.of());
+ meta.setCustomModelDataComponent(component);
+ }
+}