diff --git a/src/main/java/tobinio/realarrowtip/ModelPredicateProvider.java b/src/main/java/tobinio/realarrowtip/ModelPredicateProvider.java new file mode 100644 index 0000000..8c79b8b --- /dev/null +++ b/src/main/java/tobinio/realarrowtip/ModelPredicateProvider.java @@ -0,0 +1,51 @@ +package tobinio.realarrowtip; + +import net.minecraft.client.item.ModelPredicateProviderRegistry; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.CrossbowItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.util.Identifier; + +/** + * Created: 05/10/2023 + * + * @author Tobias Frischmann + */ +public class ModelPredicateProvider { + + public static void initialize() { + initializeBow(); + initializeCrossbow(); + } + + private static void initializeBow() { + ModelPredicateProviderRegistry.register(Items.BOW, new Identifier("spectral"), (stack, world, entity, seed) -> { + if (entity == null) return 0; + + return entity.getProjectileType(stack).isOf(Items.SPECTRAL_ARROW) ? 1 : 0; + }); + + ModelPredicateProviderRegistry.register(Items.BOW, new Identifier("tipped"), (stack, world, entity, seed) -> { + if (entity == null) return 0; + + return entity.getProjectileType(stack).isOf(Items.TIPPED_ARROW) ? 1 : 0; + }); + } + + private static void initializeCrossbow() { + ModelPredicateProviderRegistry.register(Items.CROSSBOW, new Identifier("spectral"), (stack, world, entity, seed) -> { + if (!CrossbowItem.isCharged(stack)) return 0; + + return CrossbowItem.hasProjectile(stack, Items.SPECTRAL_ARROW) ? 1 : 0; + }); + + ModelPredicateProviderRegistry.register(Items.CROSSBOW, new Identifier("tipped"), (stack, world, entity, seed) -> { + if (!CrossbowItem.isCharged(stack)) return 0; + + return CrossbowItem.hasProjectile(stack, Items.TIPPED_ARROW) ? 1 : 0; + }); + } +} diff --git a/src/main/java/tobinio/realarrowtip/RealArrowTip.java b/src/main/java/tobinio/realarrowtip/RealArrowTip.java index b134112..b37a281 100644 --- a/src/main/java/tobinio/realarrowtip/RealArrowTip.java +++ b/src/main/java/tobinio/realarrowtip/RealArrowTip.java @@ -19,32 +19,6 @@ public class RealArrowTip implements ModInitializer { @Override public void onInitialize() { - ModelPredicateProviderRegistry.register(Items.BOW, new Identifier("arrow_type"), RealArrowTip::arrowTypeBow); - ModelPredicateProviderRegistry.register(Items.CROSSBOW, new Identifier("arrow_type"), RealArrowTip::arrowTypeCrossbow); - } - - - // 0 = default arrow - // 0.1 = tipped arrow - // 0.2 = spectral arrow - private static float arrowTypeBow(ItemStack stack, ClientWorld world, LivingEntity entity, int seed) { - if (entity == null) return 0; - - Item item = entity.getProjectileType(stack).getItem(); - - if (item == Items.TIPPED_ARROW) return 0.1f; - if (item == Items.SPECTRAL_ARROW) return 0.2f; - - return 0; - } - - private static float arrowTypeCrossbow(ItemStack stack, ClientWorld world, LivingEntity entity, int seed) { - - if (!CrossbowItem.isCharged(stack)) return 0; - - if (CrossbowItem.hasProjectile(stack, Items.TIPPED_ARROW)) return 0.1f; - if (CrossbowItem.hasProjectile(stack, Items.SPECTRAL_ARROW)) return 0.2f; - - return 0; + ModelPredicateProvider.initialize(); } } diff --git a/src/main/resources/assets/minecraft/models/item/bow.json b/src/main/resources/assets/minecraft/models/item/bow.json index 9d76632..e26af52 100644 --- a/src/main/resources/assets/minecraft/models/item/bow.json +++ b/src/main/resources/assets/minecraft/models/item/bow.json @@ -97,14 +97,14 @@ { "predicate": { "pulling": 1, - "arrow_type": 0.1 + "tipped": 1 }, "model": "real_arrow_tip:item/bow_pulling_0_tipped" }, { "predicate": { "pulling": 1, - "arrow_type": 0.1, + "tipped": 1, "pull": 0.65 }, "model": "real_arrow_tip:item/bow_pulling_1_tipped" @@ -112,7 +112,7 @@ { "predicate": { "pulling": 1, - "arrow_type": 0.1, + "tipped": 1, "pull": 0.9 }, "model": "real_arrow_tip:item/bow_pulling_2_tipped" @@ -120,14 +120,14 @@ { "predicate": { "pulling": 1, - "arrow_type": 0.2 + "spectral": 1 }, "model": "real_arrow_tip:item/bow_pulling_0_spectral" }, { "predicate": { "pulling": 1, - "arrow_type": 0.2, + "spectral": 1, "pull": 0.65 }, "model": "real_arrow_tip:item/bow_pulling_1_spectral" @@ -135,7 +135,7 @@ { "predicate": { "pulling": 1, - "arrow_type": 0.2, + "spectral": 1, "pull": 0.9 }, "model": "real_arrow_tip:item/bow_pulling_2_spectral" diff --git a/src/main/resources/assets/minecraft/models/item/crossbow.json b/src/main/resources/assets/minecraft/models/item/crossbow.json index 9d5077c..fbbc9cb 100644 --- a/src/main/resources/assets/minecraft/models/item/crossbow.json +++ b/src/main/resources/assets/minecraft/models/item/crossbow.json @@ -110,14 +110,14 @@ { "predicate": { "charged": 1, - "arrow_type": 0.1 + "tipped": 1 }, "model": "real_arrow_tip:item/crossbow_tipped" }, { "predicate": { "charged": 1, - "arrow_type": 0.2 + "spectral": 1 }, "model": "real_arrow_tip:item/crossbow_spectral" }