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); + } +}