diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java index 4403d0645..ea468b1b6 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java @@ -6,10 +6,7 @@ import net.momirealms.craftengine.bukkit.util.ItemUtils; import net.momirealms.craftengine.bukkit.util.MaterialUtils; import net.momirealms.craftengine.bukkit.util.Reflections; import net.momirealms.craftengine.core.entity.player.Player; -import net.momirealms.craftengine.core.item.AbstractItemManager; -import net.momirealms.craftengine.core.item.BuildableItem; -import net.momirealms.craftengine.core.item.CustomItem; -import net.momirealms.craftengine.core.item.Item; +import net.momirealms.craftengine.core.item.*; import net.momirealms.craftengine.core.item.behavior.ItemBehaviors; import net.momirealms.craftengine.core.item.modifier.CustomModelDataModifier; import net.momirealms.craftengine.core.item.modifier.IdModifier; @@ -359,6 +356,20 @@ public class BukkitItemManager extends AbstractItemManager { customModelData ); } + if (model.fallBack() != null) { + Map merged = mergePredicates( + parentPredicates, + predicateId, + predicate.toLegacyValue(0f) + ); + processModelRecursively( + model.fallBack(), + merged, + resultList, + materialId, + customModelData + ); + } } } @@ -380,6 +391,14 @@ public class BukkitItemManager extends AbstractItemManager { predicateId, predicate.toLegacyValue(caseValue) ); + // Additional check for crossbow + if (materialId.equals(ItemKeys.CROSSBOW)) { + merged = mergePredicates( + merged, + "charged", + 1 + ); + } processModelRecursively( entry.getValue(), merged, @@ -389,6 +408,21 @@ public class BukkitItemManager extends AbstractItemManager { ); } } + // Additional check for crossbow + if (model.fallBack() != null && materialId.equals(ItemKeys.CROSSBOW)) { + Map merged = mergePredicates( + parentPredicates, + "charged", + 0 + ); + processModelRecursively( + model.fallBack(), + merged, + resultList, + materialId, + customModelData + ); + } } } @@ -398,6 +432,7 @@ public class BukkitItemManager extends AbstractItemManager { Number newValue ) { Map merged = new LinkedHashMap<>(existing); + if (newKey == null) return merged; merged.put(newKey, newValue); return merged; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/RangeDispatchItemModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/RangeDispatchItemModel.java index 63eafae65..665251f68 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/RangeDispatchItemModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/RangeDispatchItemModel.java @@ -40,6 +40,7 @@ public class RangeDispatchItemModel implements ItemModel { return scale; } + @Nullable public ItemModel fallBack() { return fallBack; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/BrokenConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/BrokenConditionProperty.java index 7672eb5a3..3cc36665a 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/BrokenConditionProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/BrokenConditionProperty.java @@ -23,7 +23,7 @@ public class BrokenConditionProperty implements ConditionProperty, LegacyModelPr @Override public String legacyPredicateId(Key material) { if (material.equals(ItemKeys.ELYTRA)) return "broken"; - throw new IllegalArgumentException("Unsupported material: " + material); + return null; } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/RodCastConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/RodCastConditionProperty.java index 25640c0c7..d228e33a2 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/RodCastConditionProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/RodCastConditionProperty.java @@ -23,7 +23,7 @@ public class RodCastConditionProperty implements ConditionProperty, LegacyModelP @Override public String legacyPredicateId(Key material) { if (material.equals(ItemKeys.FISHING_ROD)) return "cast"; - throw new IllegalArgumentException("Unsupported material: " + material); + return null; } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/UsingItemConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/UsingItemConditionProperty.java index 8365a10d1..08cd5ad2f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/UsingItemConditionProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/UsingItemConditionProperty.java @@ -26,7 +26,7 @@ public class UsingItemConditionProperty implements ConditionProperty, LegacyMode if (material.equals(ItemKeys.TRIDENT)) return "throwing"; if (material.equals(ItemKeys.CROSSBOW) || material.equals(ItemKeys.BOW)) return "pulling"; if (material.equals(ItemKeys.GOAT_HORN)) return "tooting"; - throw new IllegalArgumentException("Unsupported material: " + material); + return null; } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CrossBowPullingRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CrossBowPullingRangeDispatchProperty.java index 311c32197..74c3d336c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CrossBowPullingRangeDispatchProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CrossBowPullingRangeDispatchProperty.java @@ -23,7 +23,7 @@ public class CrossBowPullingRangeDispatchProperty implements RangeDispatchProper @Override public String legacyPredicateId(Key material) { if (material.equals(ItemKeys.CROSSBOW) || material.equals(ItemKeys.BOW)) return "pull"; - throw new IllegalArgumentException("Unsupported material: " + material); + return null; } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseDurationRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseDurationRangeDispatchProperty.java index 4b7f9a6fb..3f440c5a8 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseDurationRangeDispatchProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseDurationRangeDispatchProperty.java @@ -1,11 +1,13 @@ package net.momirealms.craftengine.core.pack.model.rangedisptach; import com.google.gson.JsonObject; +import net.momirealms.craftengine.core.item.ItemKeys; +import net.momirealms.craftengine.core.pack.model.LegacyModelPredicate; import net.momirealms.craftengine.core.util.Key; import java.util.Map; -public class UseDurationRangeDispatchProperty implements RangeDispatchProperty { +public class UseDurationRangeDispatchProperty implements RangeDispatchProperty, LegacyModelPredicate { public static final Factory FACTORY = new Factory(); private final boolean remaining; @@ -26,6 +28,17 @@ public class UseDurationRangeDispatchProperty implements RangeDispatchProperty { } } + @Override + public String legacyPredicateId(Key material) { + if (material.equals(ItemKeys.BOW)) return "pull"; + return null; + } + + @Override + public Number toLegacyValue(Float value) { + return value; + } + public static class Factory implements RangeDispatchPropertyFactory { @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/ChargeTypeSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/ChargeTypeSelectProperty.java index db7967830..028b7db04 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/ChargeTypeSelectProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/ChargeTypeSelectProperty.java @@ -23,7 +23,7 @@ public class ChargeTypeSelectProperty implements SelectProperty, LegacyModelPred @Override public String legacyPredicateId(Key material) { if (material.equals(ItemKeys.CROSSBOW)) return "firework"; - throw new IllegalArgumentException("Unsupported material: " + material); + return null; } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/TrimMaterialSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/TrimMaterialSelectProperty.java index 8223abe7b..ce658ffff 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/TrimMaterialSelectProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/TrimMaterialSelectProperty.java @@ -41,7 +41,7 @@ public class TrimMaterialSelectProperty implements SelectProperty, LegacyModelPr if (s.contains("helmet") || s.contains("chestplate") || s.contains("leggings") || s.contains("boots")) { return "trim"; } - throw new IllegalArgumentException("Unsupported material " + material); + return null; } @Override