From 72339c0bdbf8dfe61a2a34995cb47fee5659ee22 Mon Sep 17 00:00:00 2001 From: tobinio Date: Wed, 26 Mar 2025 14:33:41 +0100 Subject: [PATCH] support 1.21.5 --- build.gradle | 2 +- gradle.properties | 19 +-- gradle/wrapper/gradle-wrapper.properties | 2 +- .../tobinio/realarrowtip/RealArrowTip.java | 13 +- .../model/charge/BowChargeTypeProperty.java | 65 ---------- .../model/charge/ChargeTypeProperty.java | 101 +++++++++++++++ .../charge/CrossbowChargeTypeProperty.java | 55 -------- .../model/tint/BowTintSource.java | 46 ------- ...rossbowTintSource.java => TintSource.java} | 38 +++++- .../resources/assets/minecraft/items/bow.json | 8 +- .../assets/minecraft/items/crossbow.json | 122 +++++++++--------- 11 files changed, 211 insertions(+), 260 deletions(-) delete mode 100644 src/main/java/tobinio/realarrowtip/model/charge/BowChargeTypeProperty.java create mode 100644 src/main/java/tobinio/realarrowtip/model/charge/ChargeTypeProperty.java delete mode 100644 src/main/java/tobinio/realarrowtip/model/charge/CrossbowChargeTypeProperty.java delete mode 100644 src/main/java/tobinio/realarrowtip/model/tint/BowTintSource.java rename src/main/java/tobinio/realarrowtip/model/tint/{CrossbowTintSource.java => TintSource.java} (52%) diff --git a/build.gradle b/build.gradle index c5870f6..6c79541 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.9-SNAPSHOT' + id 'fabric-loom' version '1.10-SNAPSHOT' id 'maven-publish' } diff --git a/gradle.properties b/gradle.properties index e37fd5d..cab6dab 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,17 +1,12 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx1G - # Fabric Properties - # check these on https://modmuss50.me/fabric.html - minecraft_version=1.21.4 - yarn_mappings=1.21.4+build.1 - loader_version=0.16.9 - +minecraft_version=1.21.5 +yarn_mappings=1.21.5+build.1 +loader_version=0.16.10 # Mod Properties - mod_version = 0.1.1+mc1.21.4 - maven_group = tobinio - archives_base_name = real-arrow-tip - +mod_version=0.1.1+mc1.21.5 +maven_group=tobinio +archives_base_name=real-arrow-tip # Dependencies - # check this on https://modmuss50.me/fabric.html - fabric_version=0.111.0+1.21.4 +fabric_version=0.119.5+1.21.5 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 94113f2..cea7a79 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/java/tobinio/realarrowtip/RealArrowTip.java b/src/main/java/tobinio/realarrowtip/RealArrowTip.java index 868f4ba..bbb37b2 100644 --- a/src/main/java/tobinio/realarrowtip/RealArrowTip.java +++ b/src/main/java/tobinio/realarrowtip/RealArrowTip.java @@ -10,10 +10,8 @@ import net.minecraft.util.Identifier; import net.minecraft.util.math.ColorHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tobinio.realarrowtip.model.charge.BowChargeTypeProperty; -import tobinio.realarrowtip.model.charge.CrossbowChargeTypeProperty; -import tobinio.realarrowtip.model.tint.BowTintSource; -import tobinio.realarrowtip.model.tint.CrossbowTintSource; +import tobinio.realarrowtip.model.charge.ChargeTypeProperty; +import tobinio.realarrowtip.model.tint.TintSource; public class RealArrowTip implements ClientModInitializer { public static String modID = "real_arrow_tip"; @@ -22,11 +20,8 @@ public class RealArrowTip implements ClientModInitializer { @Override public void onInitializeClient() { - SelectProperties.ID_MAPPER.put(id("crossbow_charge_type"), CrossbowChargeTypeProperty.TYPE); - SelectProperties.ID_MAPPER.put(id("bow_charge_type"), BowChargeTypeProperty.TYPE); - - TintSourceTypes.ID_MAPPER.put(id("bow"), BowTintSource.CODEC); - TintSourceTypes.ID_MAPPER.put(id("crossbow"), CrossbowTintSource.CODEC); + SelectProperties.ID_MAPPER.put(id("charge_type"), ChargeTypeProperty.TYPE); + TintSourceTypes.ID_MAPPER.put(id("projectile"), TintSource.CODEC); } public static Identifier id(String path) { diff --git a/src/main/java/tobinio/realarrowtip/model/charge/BowChargeTypeProperty.java b/src/main/java/tobinio/realarrowtip/model/charge/BowChargeTypeProperty.java deleted file mode 100644 index c352358..0000000 --- a/src/main/java/tobinio/realarrowtip/model/charge/BowChargeTypeProperty.java +++ /dev/null @@ -1,65 +0,0 @@ -package tobinio.realarrowtip.model.charge; - -import com.mojang.serialization.MapCodec; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.client.render.item.property.select.SelectProperty; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.ChargedProjectilesComponent; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.mob.AbstractSkeletonEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.item.ModelTransformationMode; -import net.minecraft.util.math.ColorHelper; -import org.jetbrains.annotations.Nullable; - -import static tobinio.realarrowtip.RealArrowTip.getColorFromStack; - -/** - * Created: 18.12.24 - * - * @author Tobias Frischmann - */ -@Environment (EnvType.CLIENT) -public record BowChargeTypeProperty() implements SelectProperty { - public static final Type TYPE = Type.create( - MapCodec.unit(new BowChargeTypeProperty()), ChargeType.CODEC - ); - - public ChargeType getValue( - ItemStack itemStack, @Nullable ClientWorld clientWorld, @Nullable LivingEntity livingEntity, int i, - ModelTransformationMode modelTransformationMode - ) { - - if (livingEntity != null) { - ItemStack projectile = livingEntity.getProjectileType(itemStack); - - if (livingEntity instanceof AbstractSkeletonEntity skeleton) { - projectile = skeleton.createArrowProjectile(projectile, 0, itemStack).getItemStack(); - } - - if (projectile.isOf(Items.SPECTRAL_ARROW)) { - return ChargeType.SPECTRAL; - } - - if (projectile.isOf(Items.TIPPED_ARROW) || projectile.get(DataComponentTypes.POTION_CONTENTS) != null) { - return ChargeType.TIPPED; - } - - if (projectile.isOf(Items.FIREWORK_ROCKET)) { - return ChargeType.ROCKET; - } - - return ChargeType.ARROW; - } - - return ChargeType.NONE; - } - - @Override - public Type getType() { - return TYPE; - } -} \ No newline at end of file diff --git a/src/main/java/tobinio/realarrowtip/model/charge/ChargeTypeProperty.java b/src/main/java/tobinio/realarrowtip/model/charge/ChargeTypeProperty.java new file mode 100644 index 0000000..63fb87c --- /dev/null +++ b/src/main/java/tobinio/realarrowtip/model/charge/ChargeTypeProperty.java @@ -0,0 +1,101 @@ +package tobinio.realarrowtip.model.charge; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.render.item.property.select.SelectProperty; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.ChargedProjectilesComponent; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.mob.AbstractSkeletonEntity; +import net.minecraft.item.ItemDisplayContext; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Created: 18.12.24 + * + * @author Tobias Frischmann + */ +@Environment (EnvType.CLIENT) +public record ChargeTypeProperty() implements SelectProperty { + public static final SelectProperty.Type TYPE; + public static final Codec VALUE_CODEC; + + static { + VALUE_CODEC = ChargeType.CODEC; + TYPE = SelectProperty.Type.create( + MapCodec.unit(new ChargeTypeProperty()), VALUE_CODEC + ); + } + + @Override + public ChargeType getValue(ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity user, + int seed, ItemDisplayContext displayContext) { + if (stack.isOf(Items.BOW)) { + return getChargeTypeBow(stack, user); + } + return getChargeTypeCrossbow(stack); + } + + private static @NotNull ChargeType getChargeTypeBow(ItemStack stack, @Nullable LivingEntity user) { + if (user != null) { + ItemStack projectile = user.getProjectileType(stack); + + if (user instanceof AbstractSkeletonEntity skeleton) { + projectile = skeleton.createArrowProjectile(projectile, 0, stack).getItemStack(); + } + + if (projectile.isOf(Items.SPECTRAL_ARROW)) { + return ChargeType.SPECTRAL; + } + + if (projectile.isOf(Items.TIPPED_ARROW) || projectile.get(DataComponentTypes.POTION_CONTENTS) != null) { + return ChargeType.TIPPED; + } + + if (projectile.isOf(Items.FIREWORK_ROCKET)) { + return ChargeType.ROCKET; + } + + return ChargeType.ARROW; + } + + return ChargeType.NONE; + } + + private static @NotNull ChargeType getChargeTypeCrossbow(ItemStack stack) { + ChargedProjectilesComponent chargedProjectilesComponent = stack.get(DataComponentTypes.CHARGED_PROJECTILES); + if (chargedProjectilesComponent == null || chargedProjectilesComponent.isEmpty()) { + return ChargeType.NONE; + } else { + if (chargedProjectilesComponent.contains(Items.SPECTRAL_ARROW)) { + return ChargeType.SPECTRAL; + } + + if (chargedProjectilesComponent.contains(Items.TIPPED_ARROW)) { + return ChargeType.TIPPED; + } + + if (chargedProjectilesComponent.contains(Items.FIREWORK_ROCKET)) { + return ChargeType.ROCKET; + } + + return ChargeType.ARROW; + } + } + + @Override + public Codec valueCodec() { + return VALUE_CODEC; + } + + @Override + public SelectProperty.Type getType() { + return TYPE; + } +} \ No newline at end of file diff --git a/src/main/java/tobinio/realarrowtip/model/charge/CrossbowChargeTypeProperty.java b/src/main/java/tobinio/realarrowtip/model/charge/CrossbowChargeTypeProperty.java deleted file mode 100644 index cefcf28..0000000 --- a/src/main/java/tobinio/realarrowtip/model/charge/CrossbowChargeTypeProperty.java +++ /dev/null @@ -1,55 +0,0 @@ -package tobinio.realarrowtip.model.charge; - -import com.mojang.serialization.MapCodec; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.client.render.item.property.select.SelectProperty; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.ChargedProjectilesComponent; -import net.minecraft.entity.LivingEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.item.ModelTransformationMode; -import org.jetbrains.annotations.Nullable; - -/** - * Created: 18.12.24 - * - * @author Tobias Frischmann - */ -@Environment (EnvType.CLIENT) -public record CrossbowChargeTypeProperty() implements SelectProperty { - public static final SelectProperty.Type TYPE = SelectProperty.Type.create( - MapCodec.unit(new CrossbowChargeTypeProperty()), ChargeType.CODEC - ); - - public ChargeType getValue( - ItemStack itemStack, @Nullable ClientWorld clientWorld, @Nullable LivingEntity livingEntity, int i, - ModelTransformationMode modelTransformationMode - ) { - ChargedProjectilesComponent chargedProjectilesComponent = itemStack.get(DataComponentTypes.CHARGED_PROJECTILES); - if (chargedProjectilesComponent == null || chargedProjectilesComponent.isEmpty()) { - return ChargeType.NONE; - } else { - if (chargedProjectilesComponent.contains(Items.SPECTRAL_ARROW)) { - return ChargeType.SPECTRAL; - } - - if (chargedProjectilesComponent.contains(Items.TIPPED_ARROW)) { - return ChargeType.TIPPED; - } - - if (chargedProjectilesComponent.contains(Items.FIREWORK_ROCKET)) { - return ChargeType.ROCKET; - } - - return ChargeType.ARROW; - } - } - - @Override - public SelectProperty.Type getType() { - return TYPE; - } -} \ No newline at end of file diff --git a/src/main/java/tobinio/realarrowtip/model/tint/BowTintSource.java b/src/main/java/tobinio/realarrowtip/model/tint/BowTintSource.java deleted file mode 100644 index 6a9502d..0000000 --- a/src/main/java/tobinio/realarrowtip/model/tint/BowTintSource.java +++ /dev/null @@ -1,46 +0,0 @@ -package tobinio.realarrowtip.model.tint; - -import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.client.render.item.tint.TintSource; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.mob.AbstractSkeletonEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.dynamic.Codecs; -import net.minecraft.util.math.ColorHelper; -import org.jetbrains.annotations.Nullable; - -import static tobinio.realarrowtip.RealArrowTip.getColorFromStack; - -/** - * Created: 18.12.24 - * - * @author Tobias Frischmann - */ -public record BowTintSource(int defaultColor) implements TintSource { - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( - instance -> instance.group(Codecs.RGB.fieldOf("default").forGetter(BowTintSource::defaultColor)) - .apply(instance, BowTintSource::new) - ); - - @Override - public int getTint(ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity user) { - if (user != null) { - ItemStack projectile = user.getProjectileType(stack); - - if (user instanceof AbstractSkeletonEntity skeleton) { - projectile = skeleton.createArrowProjectile(projectile, 0, stack).getItemStack(); - } - - return getColorFromStack(projectile); - } - - return ColorHelper.fullAlpha(this.defaultColor); - } - - @Override - public MapCodec getCodec() { - return CODEC; - } -} diff --git a/src/main/java/tobinio/realarrowtip/model/tint/CrossbowTintSource.java b/src/main/java/tobinio/realarrowtip/model/tint/TintSource.java similarity index 52% rename from src/main/java/tobinio/realarrowtip/model/tint/CrossbowTintSource.java rename to src/main/java/tobinio/realarrowtip/model/tint/TintSource.java index 3240f28..385cb66 100644 --- a/src/main/java/tobinio/realarrowtip/model/tint/CrossbowTintSource.java +++ b/src/main/java/tobinio/realarrowtip/model/tint/TintSource.java @@ -2,32 +2,57 @@ package tobinio.realarrowtip.model.tint; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.client.render.item.tint.TintSource; import net.minecraft.client.world.ClientWorld; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.ChargedProjectilesComponent; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.mob.AbstractSkeletonEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.util.dynamic.Codecs; +import net.minecraft.util.math.ColorHelper; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import tobinio.realarrowtip.RealArrowTip; import java.util.Optional; +import static tobinio.realarrowtip.RealArrowTip.getColorFromStack; + /** * Created: 18.12.24 * * @author Tobias Frischmann */ -public record CrossbowTintSource(int defaultColor) implements TintSource { - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( - instance -> instance.group(Codecs.RGB.fieldOf("default").forGetter(CrossbowTintSource::defaultColor)) - .apply(instance, CrossbowTintSource::new) +public record TintSource(int defaultColor) implements net.minecraft.client.render.item.tint.TintSource { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( + instance -> instance.group(Codecs.RGB.fieldOf("default").forGetter(TintSource::defaultColor)) + .apply(instance, TintSource::new) ); @Override public int getTint(ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity user) { + if (stack.isOf(Items.BOW)) { + return getTintBow(stack, user); + } + return getTintCrossbow(stack); + } + + private int getTintBow(ItemStack stack, @Nullable LivingEntity user) { + if (user != null) { + ItemStack projectile = user.getProjectileType(stack); + + if (user instanceof AbstractSkeletonEntity skeleton) { + projectile = skeleton.createArrowProjectile(projectile, 0, stack).getItemStack(); + } + + return getColorFromStack(projectile); + } + + return ColorHelper.fullAlpha(this.defaultColor); + } + + private @NotNull Integer getTintCrossbow(ItemStack stack) { ChargedProjectilesComponent chargedProjectiles = stack.getOrDefault(DataComponentTypes.CHARGED_PROJECTILES, ChargedProjectilesComponent.DEFAULT); Optional tippedArrow = chargedProjectiles.getProjectiles() @@ -38,8 +63,9 @@ public record CrossbowTintSource(int defaultColor) implements TintSource { return tippedArrow.map(RealArrowTip::getColorFromStack).orElse(this.defaultColor); } + @Override - public MapCodec getCodec() { + public MapCodec getCodec() { return CODEC; } } diff --git a/src/main/resources/assets/minecraft/items/bow.json b/src/main/resources/assets/minecraft/items/bow.json index 3183b5a..1548556 100644 --- a/src/main/resources/assets/minecraft/items/bow.json +++ b/src/main/resources/assets/minecraft/items/bow.json @@ -46,7 +46,7 @@ "model": "real_arrow_tip:item/bow_pulling_1_tipped", "tints": [ { - "type": "real_arrow_tip:bow", + "type": "real_arrow_tip:projectile", "default": -13083194 } ] @@ -59,7 +59,7 @@ "model": "real_arrow_tip:item/bow_pulling_2_tipped", "tints": [ { - "type": "real_arrow_tip:bow", + "type": "real_arrow_tip:projectile", "default": -13083194 } ] @@ -72,7 +72,7 @@ "model": "real_arrow_tip:item/bow_pulling_0_tipped", "tints": [ { - "type": "real_arrow_tip:bow", + "type": "real_arrow_tip:projectile", "default": -13083194 } ] @@ -108,7 +108,7 @@ "property": "minecraft:use_duration", "scale": 0.05 }, - "property": "real_arrow_tip:bow_charge_type" + "property": "real_arrow_tip:charge_type" }, "property": "minecraft:using_item" } diff --git a/src/main/resources/assets/minecraft/items/crossbow.json b/src/main/resources/assets/minecraft/items/crossbow.json index 965cfdc..9744fbe 100644 --- a/src/main/resources/assets/minecraft/items/crossbow.json +++ b/src/main/resources/assets/minecraft/items/crossbow.json @@ -1,74 +1,74 @@ { "model": { - "type": "minecraft:condition", - "on_false": { - "type": "minecraft:select", - "cases": [ - { - "model": { - "type": "minecraft:model", - "model": "minecraft:item/crossbow_arrow" - }, - "when": "arrow" + "type": "minecraft:select", + "cases": [ + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/crossbow_arrow" }, - { - "model": { - "type": "minecraft:model", - "model": "minecraft:item/crossbow_firework" - }, - "when": "rocket" + "when": "arrow" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/crossbow_firework" }, - { - "model": { - "type": "minecraft:model", - "model": "real_arrow_tip:item/crossbow_spectral" - }, - "when": "spectral" + "when": "rocket" + }, + { + "model": { + "type": "minecraft:model", + "model": "real_arrow_tip:item/crossbow_spectral" }, - { - "model": { - "type": "minecraft:model", - "model": "real_arrow_tip:item/crossbow_tipped", - "tints": [ - { - "type": "real_arrow_tip:crossbow", - "default": -13083194 - } - ] - }, - "when": "tipped" - } - ], - "fallback": { + "when": "spectral" + }, + { + "model": { + "type": "minecraft:model", + "model": "real_arrow_tip:item/crossbow_tipped", + "tints": [ + { + "type": "real_arrow_tip:projectile", + "default": -13083194 + } + ] + }, + "when": "tipped" + } + ], + "fallback": { + "type": "minecraft:condition", + "on_false": { "type": "minecraft:model", "model": "minecraft:item/crossbow" }, - "property": "real_arrow_tip:crossbow_charge_type" - }, - "on_true": { - "type": "minecraft:range_dispatch", - "entries": [ - { - "model": { - "type": "minecraft:model", - "model": "minecraft:item/crossbow_pulling_1" + "on_true": { + "type": "minecraft:range_dispatch", + "entries": [ + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/crossbow_pulling_1" + }, + "threshold": 0.58 }, - "threshold": 0.58 + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/crossbow_pulling_2" + }, + "threshold": 1 + } + ], + "fallback": { + "type": "minecraft:model", + "model": "minecraft:item/crossbow_pulling_0" }, - { - "model": { - "type": "minecraft:model", - "model": "minecraft:item/crossbow_pulling_2" - }, - "threshold": 1 - } - ], - "fallback": { - "type": "minecraft:model", - "model": "minecraft:item/crossbow_pulling_0" + "property": "minecraft:crossbow/pull" }, - "property": "minecraft:crossbow/pull" + "property": "minecraft:using_item" }, - "property": "minecraft:using_item" + "property": "real_arrow_tip:charge_type" } -} \ No newline at end of file +} -- 2.51.2