From 109bc5e1befcd0c023175af0f92b2d7e437ae199 Mon Sep 17 00:00:00 2001 From: ToBinio Date: Wed, 25 Mar 2026 09:52:41 +0100 Subject: [PATCH] move to mojang mappings --- build.gradle | 2 +- gradle.properties | 1 - .../tobinio/realarrowtip/RealArrowTip.java | 24 +++---- .../realarrowtip/config/ConfigMenu.java | 16 ++--- .../mixin/ArrowEntityRenderingStateMixin.java | 8 +-- .../mixin/ArrowRendererMixin.java | 63 +++++++++++++++++++ ...in.java => ClientItemInfoLoaderMixin.java} | 18 +++--- .../mixin/ProjectileEntityRendererMixin.java | 63 ------------------- ...n.java => TippableArrowRendererMixin.java} | 20 +++--- .../model/ChargeTypeProperty.java | 46 +++++++------- .../realarrowtip/model/TintSource.java | 42 ++++++------- .../resources/real-arrow-tip.accesswidener | 4 +- src/main/resources/real-arrow-tip.mixins.json | 6 +- 13 files changed, 156 insertions(+), 157 deletions(-) create mode 100644 src/main/java/tobinio/realarrowtip/mixin/ArrowRendererMixin.java rename src/main/java/tobinio/realarrowtip/mixin/{ItemAssetsLoaderMixin.java => ClientItemInfoLoaderMixin.java} (63%) delete mode 100644 src/main/java/tobinio/realarrowtip/mixin/ProjectileEntityRendererMixin.java rename src/main/java/tobinio/realarrowtip/mixin/{ArrowEntityRendererMixin.java => TippableArrowRendererMixin.java} (55%) diff --git a/build.gradle b/build.gradle index c2f86a3..613390b 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ loom { dependencies { // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" + mappings loom.officialMojangMappings() modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" // Fabric API. This is technically optional, but you probably want it anyway. diff --git a/gradle.properties b/gradle.properties index 86721e7..1a37aa1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,6 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties minecraft_version=1.21.11 -yarn_mappings=1.21.11+build.1 loader_version=0.18.2 # Mod Properties diff --git a/src/main/java/tobinio/realarrowtip/RealArrowTip.java b/src/main/java/tobinio/realarrowtip/RealArrowTip.java index 2bfc9c9..837f3f1 100644 --- a/src/main/java/tobinio/realarrowtip/RealArrowTip.java +++ b/src/main/java/tobinio/realarrowtip/RealArrowTip.java @@ -1,13 +1,13 @@ package tobinio.realarrowtip; import net.fabricmc.api.ClientModInitializer; -import net.minecraft.client.render.item.property.select.SelectProperties; -import net.minecraft.client.render.item.tint.TintSourceTypes; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.PotionContentsComponent; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.ColorHelper; +import net.minecraft.client.renderer.item.properties.select.SelectItemModelProperties; +import net.minecraft.client.color.item.ItemTintSources; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.item.ItemStack; +import net.minecraft.resources.Identifier; +import net.minecraft.util.ARGB; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import tobinio.realarrowtip.config.Config; @@ -23,18 +23,18 @@ public class RealArrowTip implements ClientModInitializer { public void onInitializeClient() { Config.HANDLER.load(); - SelectProperties.ID_MAPPER.put(id("charge_type"), ChargeTypeProperty.TYPE); - TintSourceTypes.ID_MAPPER.put(id("projectile"), TintSource.CODEC); + SelectItemModelProperties.ID_MAPPER.put(id("charge_type"), ChargeTypeProperty.TYPE); + ItemTintSources.ID_MAPPER.put(id("projectile"), TintSource.CODEC); } public static Identifier id(String path) { - return Identifier.of(MOD_ID, path); + return Identifier.fromNamespaceAndPath(MOD_ID, path); } public static int getColorFromStack(ItemStack stack) { - PotionContentsComponent component = stack.get(DataComponentTypes.POTION_CONTENTS); + PotionContents component = stack.get(DataComponents.POTION_CONTENTS); if(component == null) return -1; - return ColorHelper.fullAlpha(component.getColor()); + return ARGB.opaque(component.getColor()); } } diff --git a/src/main/java/tobinio/realarrowtip/config/ConfigMenu.java b/src/main/java/tobinio/realarrowtip/config/ConfigMenu.java index 6576ed5..e196219 100644 --- a/src/main/java/tobinio/realarrowtip/config/ConfigMenu.java +++ b/src/main/java/tobinio/realarrowtip/config/ConfigMenu.java @@ -5,7 +5,7 @@ import com.terraformersmc.modmenu.api.ModMenuApi; import dev.isxander.yacl3.api.*; import dev.isxander.yacl3.api.controller.BooleanControllerBuilder; import dev.isxander.yacl3.api.controller.StringControllerBuilder; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; /** * Created: 12.10.25 @@ -17,13 +17,13 @@ public class ConfigMenu implements ModMenuApi { @Override public ConfigScreenFactory getModConfigScreenFactory() { return parentScreen -> YetAnotherConfigLib.create(Config.HANDLER, - (defaults, config, builder) -> builder.title(Text.translatable("real-arrow-tip.config.title")) + (defaults, config, builder) -> builder.title(Component.translatable("real-arrow-tip.config.title")) .category(ConfigCategory.createBuilder() - .name(Text.translatable("real-arrow-tip.config.category-title")) - .tooltip(Text.literal("All the settings")) + .name(Component.translatable("real-arrow-tip.config.category-title")) + .tooltip(Component.literal("All the settings")) .option(Option.createBuilder() - .name(Text.translatable("real-arrow-tip.config.render-custom-arrow-entity.name")) - .description(OptionDescription.of(Text.translatable( + .name(Component.translatable("real-arrow-tip.config.render-custom-arrow-entity.name")) + .description(OptionDescription.of(Component.translatable( "real-arrow-tip.config.render-custom-arrow-entity.description"))) .binding(defaults.renderCustomArrowEntity, () -> config.renderCustomArrowEntity, @@ -31,8 +31,8 @@ public class ConfigMenu implements ModMenuApi { .controller(BooleanControllerBuilder::create) .build()) .option(ListOption.createBuilder() - .name(Text.translatable("real-arrow-tip.config.config.ignored-items.name")) - .description(OptionDescription.of(Text.translatable( + .name(Component.translatable("real-arrow-tip.config.config.ignored-items.name")) + .description(OptionDescription.of(Component.translatable( "real-arrow-tip.config.config.ignored-items.description"))) .binding(defaults.ignoredItems, () -> config.ignoredItems, diff --git a/src/main/java/tobinio/realarrowtip/mixin/ArrowEntityRenderingStateMixin.java b/src/main/java/tobinio/realarrowtip/mixin/ArrowEntityRenderingStateMixin.java index 569eb21..3346b8f 100644 --- a/src/main/java/tobinio/realarrowtip/mixin/ArrowEntityRenderingStateMixin.java +++ b/src/main/java/tobinio/realarrowtip/mixin/ArrowEntityRenderingStateMixin.java @@ -1,6 +1,6 @@ package tobinio.realarrowtip.mixin; -import net.minecraft.client.render.entity.state.ArrowEntityRenderState; +import net.minecraft.client.renderer.entity.state.TippableArrowRenderState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -11,11 +11,11 @@ import tobinio.realarrowtip.HasColor; * * @author Tobias Frischmann */ -@Mixin (ArrowEntityRenderState.class) +@Mixin (TippableArrowRenderState.class) public class ArrowEntityRenderingStateMixin implements HasColor { @Shadow - public boolean tipped; + public boolean isTipped; @Unique int color; @@ -27,6 +27,6 @@ public class ArrowEntityRenderingStateMixin implements HasColor { @Override public void real_arrow_tip$setColor(int color) { this.color = color; - this.tipped = color != -1; + this.isTipped = color != -1; } } diff --git a/src/main/java/tobinio/realarrowtip/mixin/ArrowRendererMixin.java b/src/main/java/tobinio/realarrowtip/mixin/ArrowRendererMixin.java new file mode 100644 index 0000000..066c38d --- /dev/null +++ b/src/main/java/tobinio/realarrowtip/mixin/ArrowRendererMixin.java @@ -0,0 +1,63 @@ +package tobinio.realarrowtip.mixin; + +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.renderer.rendertype.RenderType; +import net.minecraft.client.renderer.rendertype.RenderTypes; +import net.minecraft.client.renderer.Sheets; +import net.minecraft.client.renderer.SubmitNodeCollector; +import net.minecraft.client.renderer.entity.ArrowRenderer; +import net.minecraft.client.model.object.projectile.ArrowModel; +import net.minecraft.client.renderer.entity.state.TippableArrowRenderState; +import net.minecraft.client.renderer.entity.state.ArrowRenderState; +import net.minecraft.client.renderer.state.CameraRenderState; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.util.ARGB; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import tobinio.realarrowtip.HasColor; +import tobinio.realarrowtip.config.Config; + +import static tobinio.realarrowtip.RealArrowTip.id; + +@Mixin (ArrowRenderer.class) +public abstract class ArrowRendererMixin { + @Shadow + @Final + private ArrowModel model; + + @Inject (at = @At (value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;popPose()V"), method = "submit(Lnet/minecraft/client/renderer/entity/state/ArrowRenderState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/CameraRenderState;)V") + private void real_arrow_tip$render(S projectileEntityRenderState, PoseStack matrixStack, + SubmitNodeCollector orderedRenderCommandQueue, CameraRenderState cameraRenderState, CallbackInfo ci) { + + if (!Config.HANDLER.instance().renderCustomArrowEntity) { + return; + } + + if (projectileEntityRenderState instanceof TippableArrowRenderState arrowEntity) { + int color = ARGB.opaque(((HasColor) arrowEntity).real_arrow_tip$getColor()); + + if (color == -1) + return; + + orderedRenderCommandQueue.submitModel( + this.model, + projectileEntityRenderState, + matrixStack, + RenderTypes.entityCutout(id( + "textures/entity/projectiles/tipped_arrow_head.png")), + projectileEntityRenderState.lightCoords, + OverlayTexture.NO_OVERLAY, + color, + null, + projectileEntityRenderState.outlineColor, + null + ); + } + } +} diff --git a/src/main/java/tobinio/realarrowtip/mixin/ItemAssetsLoaderMixin.java b/src/main/java/tobinio/realarrowtip/mixin/ClientItemInfoLoaderMixin.java similarity index 63% rename from src/main/java/tobinio/realarrowtip/mixin/ItemAssetsLoaderMixin.java rename to src/main/java/tobinio/realarrowtip/mixin/ClientItemInfoLoaderMixin.java index db9c7c3..8fa89b1 100644 --- a/src/main/java/tobinio/realarrowtip/mixin/ItemAssetsLoaderMixin.java +++ b/src/main/java/tobinio/realarrowtip/mixin/ClientItemInfoLoaderMixin.java @@ -2,10 +2,10 @@ package tobinio.realarrowtip.mixin; import com.llamalad7.mixinextras.sugar.Local; import com.llamalad7.mixinextras.sugar.ref.LocalRef; -import net.minecraft.client.item.ItemAssetsLoader; -import net.minecraft.registry.DynamicRegistryManager; -import net.minecraft.resource.Resource; -import net.minecraft.util.Identifier; +import net.minecraft.client.resources.model.ClientItemInfoLoader; +import net.minecraft.core.RegistryAccess; +import net.minecraft.server.packs.resources.Resource; +import net.minecraft.resources.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -18,12 +18,12 @@ import tobinio.realarrowtip.config.Config; * * @author Tobias Frischmann */ -@Mixin (ItemAssetsLoader.class) -public class ItemAssetsLoaderMixin { +@Mixin (ClientItemInfoLoader.class) +public class ClientItemInfoLoaderMixin { - @Inject(method = "method_65926", at= @At (value = "INVOKE", target = "Lnet/minecraft/resource/Resource;getReader()Ljava/io/BufferedReader;")) + @Inject(method = "method_65926", at= @At (value = "INVOKE", target = "Lnet/minecraft/server/packs/resources/Resource;openAsReader()Ljava/io/BufferedReader;")) private static void real_arrow_tip$useOwnItemModels(Identifier itemId, Resource resource, - DynamicRegistryManager.Immutable immutable, CallbackInfoReturnable cir, + RegistryAccess.Frozen immutable, CallbackInfoReturnable cir, @Local(ordinal = 1) LocalRef identifier) { Config config = Config.HANDLER.instance(); @@ -32,7 +32,7 @@ public class ItemAssetsLoaderMixin { return; } - identifier.set(Identifier.of(identifier.get().getPath())); + identifier.set(Identifier.parse(identifier.get().getPath())); } } } diff --git a/src/main/java/tobinio/realarrowtip/mixin/ProjectileEntityRendererMixin.java b/src/main/java/tobinio/realarrowtip/mixin/ProjectileEntityRendererMixin.java deleted file mode 100644 index 92a461f..0000000 --- a/src/main/java/tobinio/realarrowtip/mixin/ProjectileEntityRendererMixin.java +++ /dev/null @@ -1,63 +0,0 @@ -package tobinio.realarrowtip.mixin; - -import com.llamalad7.mixinextras.sugar.Local; -import net.minecraft.client.model.ModelPart; -import net.minecraft.client.render.OverlayTexture; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.RenderLayers; -import net.minecraft.client.render.TexturedRenderLayers; -import net.minecraft.client.render.command.OrderedRenderCommandQueue; -import net.minecraft.client.render.entity.ProjectileEntityRenderer; -import net.minecraft.client.render.entity.model.ArrowEntityModel; -import net.minecraft.client.render.entity.state.ArrowEntityRenderState; -import net.minecraft.client.render.entity.state.ProjectileEntityRenderState; -import net.minecraft.client.render.state.CameraRenderState; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.math.ColorHelper; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import tobinio.realarrowtip.HasColor; -import tobinio.realarrowtip.config.Config; - -import static tobinio.realarrowtip.RealArrowTip.id; - -@Mixin (ProjectileEntityRenderer.class) -public abstract class ProjectileEntityRendererMixin { - @Shadow - @Final - private ArrowEntityModel model; - - @Inject (at = @At (value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;pop()V"), method = "render(Lnet/minecraft/client/render/entity/state/ProjectileEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V") - private void real_arrow_tip$render(S projectileEntityRenderState, MatrixStack matrixStack, - OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState cameraRenderState, CallbackInfo ci) { - - if (!Config.HANDLER.instance().renderCustomArrowEntity) { - return; - } - - if (projectileEntityRenderState instanceof ArrowEntityRenderState arrowEntity) { - int color = ColorHelper.fullAlpha(((HasColor) arrowEntity).real_arrow_tip$getColor()); - - if (color == -1) - return; - - orderedRenderCommandQueue.submitModel( - this.model, - projectileEntityRenderState, - matrixStack, - RenderLayers.entityCutout(id( - "textures/entity/projectiles/tipped_arrow_head.png")), - projectileEntityRenderState.light, - OverlayTexture.DEFAULT_UV, - color, - null, - projectileEntityRenderState.outlineColor, - null - ); - } - } -} diff --git a/src/main/java/tobinio/realarrowtip/mixin/ArrowEntityRendererMixin.java b/src/main/java/tobinio/realarrowtip/mixin/TippableArrowRendererMixin.java similarity index 55% rename from src/main/java/tobinio/realarrowtip/mixin/ArrowEntityRendererMixin.java rename to src/main/java/tobinio/realarrowtip/mixin/TippableArrowRendererMixin.java index 70cfa71..f425db4 100644 --- a/src/main/java/tobinio/realarrowtip/mixin/ArrowEntityRendererMixin.java +++ b/src/main/java/tobinio/realarrowtip/mixin/TippableArrowRendererMixin.java @@ -1,9 +1,9 @@ package tobinio.realarrowtip.mixin; -import net.minecraft.client.render.entity.ArrowEntityRenderer; -import net.minecraft.client.render.entity.state.ArrowEntityRenderState; -import net.minecraft.entity.projectile.ArrowEntity; -import net.minecraft.util.Identifier; +import net.minecraft.client.renderer.entity.TippableArrowRenderer; +import net.minecraft.client.renderer.entity.state.TippableArrowRenderState; +import net.minecraft.world.entity.projectile.arrow.Arrow; +import net.minecraft.resources.Identifier; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; @@ -22,15 +22,15 @@ import static tobinio.realarrowtip.RealArrowTip.id; * @author Tobias Frischmann */ -@Mixin (ArrowEntityRenderer.class) -public abstract class ArrowEntityRendererMixin { +@Mixin (TippableArrowRenderer.class) +public abstract class TippableArrowRendererMixin { @Mutable @Shadow @Final - public static Identifier TIPPED_TEXTURE; + public static Identifier TIPPED_ARROW_LOCATION; - @Inject (at = @At ("TAIL"), method = "updateRenderState(Lnet/minecraft/entity/projectile/ArrowEntity;Lnet/minecraft/client/render/entity/state/ArrowEntityRenderState;F)V") - private void real_arrow_tip$updateRenderState(ArrowEntity arrowEntity, ArrowEntityRenderState arrowEntityRenderState, float f, + @Inject (at = @At ("TAIL"), method = "extractRenderState(Lnet/minecraft/world/entity/projectile/arrow/Arrow;Lnet/minecraft/client/renderer/entity/state/TippableArrowRenderState;F)V") + private void real_arrow_tip$updateRenderState(Arrow arrowEntity, TippableArrowRenderState arrowEntityRenderState, float f, CallbackInfo ci) { ((HasColor) arrowEntityRenderState).real_arrow_tip$setColor(arrowEntity.getColor()); } @@ -41,6 +41,6 @@ public abstract class ArrowEntityRendererMixin { return; } - TIPPED_TEXTURE = id("textures/entity/projectiles/tipped_arrow.png"); + TIPPED_ARROW_LOCATION = id("textures/entity/projectiles/tipped_arrow.png"); } } diff --git a/src/main/java/tobinio/realarrowtip/model/ChargeTypeProperty.java b/src/main/java/tobinio/realarrowtip/model/ChargeTypeProperty.java index 7ff41ff..548de24 100644 --- a/src/main/java/tobinio/realarrowtip/model/ChargeTypeProperty.java +++ b/src/main/java/tobinio/realarrowtip/model/ChargeTypeProperty.java @@ -4,15 +4,15 @@ 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 net.minecraft.client.renderer.item.properties.select.SelectItemModelProperty; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.ChargedProjectiles; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.monster.skeleton.AbstractSkeleton; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -24,22 +24,22 @@ import static tobinio.realarrowtip.RealArrowTip.getColorFromStack; * @author Tobias Frischmann */ @Environment (EnvType.CLIENT) -public record ChargeTypeProperty() implements SelectProperty { - public static final SelectProperty.Type TYPE; +public record ChargeTypeProperty() implements SelectItemModelProperty { + public static final SelectItemModelProperty.Type TYPE; public static final Codec VALUE_CODEC; static { VALUE_CODEC = Codec.STRING; - TYPE = SelectProperty.Type.create( + TYPE = SelectItemModelProperty.Type.create( MapCodec.unit(new ChargeTypeProperty()), VALUE_CODEC ); } @Override - public String getValue(ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity user, + public String get(ItemStack stack, @Nullable ClientLevel world, @Nullable LivingEntity user, int seed, ItemDisplayContext displayContext) { - if (stack.isOf(Items.BOW)) { + if (stack.is(Items.BOW)) { return getChargeTypeBow(stack, user); } return getChargeTypeCrossbow(stack); @@ -47,10 +47,10 @@ public record ChargeTypeProperty() implements SelectProperty { private static @NotNull String getChargeTypeBow(ItemStack stack, @Nullable LivingEntity user) { if (user != null) { - ItemStack projectile = user.getProjectileType(stack); + ItemStack projectile = user.getProjectile(stack); - if (user instanceof AbstractSkeletonEntity skeleton) { - projectile = skeleton.createArrowProjectile(projectile, 0, stack).getItemStack(); + if (user instanceof AbstractSkeleton skeleton) { + projectile = skeleton.getArrow(projectile, 0, stack).getPickupItemStackOrigin(); } return getProjectileType(projectile); @@ -60,11 +60,11 @@ public record ChargeTypeProperty() implements SelectProperty { } private static String getChargeTypeCrossbow(ItemStack stack) { - ChargedProjectilesComponent chargedProjectilesComponent = stack.get(DataComponentTypes.CHARGED_PROJECTILES); + ChargedProjectiles chargedProjectilesComponent = stack.get(DataComponents.CHARGED_PROJECTILES); if (chargedProjectilesComponent == null || chargedProjectilesComponent.isEmpty()) { return "none"; } else { - ItemStack projectile = chargedProjectilesComponent.getProjectiles().getFirst(); + ItemStack projectile = chargedProjectilesComponent.getItems().getFirst(); return getProjectileType(projectile); } } @@ -73,11 +73,11 @@ public record ChargeTypeProperty() implements SelectProperty { var color = getColorFromStack(projectile); // needed since stray & bogged shoot normal arrow with effect - if(color != -1 && projectile.isOf(Items.ARROW)) { - return Items.TIPPED_ARROW.getRegistryEntry().getIdAsString(); + if(color != -1 && projectile.is(Items.ARROW)) { + return Items.TIPPED_ARROW.builtInRegistryHolder().getRegisteredName(); } - return projectile.getRegistryEntry().getIdAsString(); + return projectile.getItemHolder().getRegisteredName(); } @Override @@ -86,7 +86,7 @@ public record ChargeTypeProperty() implements SelectProperty { } @Override - public SelectProperty.Type getType() { + public SelectItemModelProperty.Type type() { return TYPE; } } \ No newline at end of file diff --git a/src/main/java/tobinio/realarrowtip/model/TintSource.java b/src/main/java/tobinio/realarrowtip/model/TintSource.java index b58e145..a1868ec 100644 --- a/src/main/java/tobinio/realarrowtip/model/TintSource.java +++ b/src/main/java/tobinio/realarrowtip/model/TintSource.java @@ -2,15 +2,15 @@ package tobinio.realarrowtip.model; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -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 net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.ChargedProjectiles; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.monster.skeleton.AbstractSkeleton; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.util.ExtraCodecs; +import net.minecraft.util.ARGB; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import tobinio.realarrowtip.RealArrowTip; @@ -24,15 +24,15 @@ import static tobinio.realarrowtip.RealArrowTip.getColorFromStack; * * @author Tobias Frischmann */ -public record TintSource(int defaultColor) implements net.minecraft.client.render.item.tint.TintSource { +public record TintSource(int defaultColor) implements net.minecraft.client.color.item.ItemTintSource { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( - instance -> instance.group(Codecs.RGB.fieldOf("default").forGetter(TintSource::defaultColor)) + instance -> instance.group(ExtraCodecs.RGB_COLOR_CODEC.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)) { + public int calculate(ItemStack stack, @Nullable ClientLevel world, @Nullable LivingEntity user) { + if (stack.is(Items.BOW)) { return getTintBow(stack, user); } return getTintCrossbow(stack); @@ -40,23 +40,23 @@ public record TintSource(int defaultColor) implements net.minecraft.client.rende private int getTintBow(ItemStack stack, @Nullable LivingEntity user) { if (user != null) { - ItemStack projectile = user.getProjectileType(stack); + ItemStack projectile = user.getProjectile(stack); - if (user instanceof AbstractSkeletonEntity skeleton) { - projectile = skeleton.createArrowProjectile(projectile, 0, stack).getItemStack(); + if (user instanceof AbstractSkeleton skeleton) { + projectile = skeleton.getArrow(projectile, 0, stack).getPickupItemStackOrigin(); } return getColorFromStack(projectile); } - return ColorHelper.fullAlpha(this.defaultColor); + return ARGB.opaque(this.defaultColor); } private @NotNull Integer getTintCrossbow(ItemStack stack) { - ChargedProjectilesComponent chargedProjectiles = stack.getOrDefault(DataComponentTypes.CHARGED_PROJECTILES, - ChargedProjectilesComponent.DEFAULT); + ChargedProjectiles chargedProjectiles = stack.getOrDefault(DataComponents.CHARGED_PROJECTILES, + ChargedProjectiles.EMPTY); - return chargedProjectiles.getProjectiles() + return chargedProjectiles.getItems() .stream() .map(RealArrowTip::getColorFromStack) .filter(color -> color != -1) @@ -66,7 +66,7 @@ public record TintSource(int defaultColor) implements net.minecraft.client.rende @Override - public MapCodec getCodec() { + public MapCodec type() { return CODEC; } } diff --git a/src/main/resources/real-arrow-tip.accesswidener b/src/main/resources/real-arrow-tip.accesswidener index 41e3bc4..c8aab00 100644 --- a/src/main/resources/real-arrow-tip.accesswidener +++ b/src/main/resources/real-arrow-tip.accesswidener @@ -1,3 +1,3 @@ accessWidener v2 named -accessible class net/minecraft/client/item/ItemAssetsLoader$Definition -accessible method net/minecraft/entity/mob/AbstractSkeletonEntity createArrowProjectile (Lnet/minecraft/item/ItemStack;FLnet/minecraft/item/ItemStack;)Lnet/minecraft/entity/projectile/PersistentProjectileEntity; \ No newline at end of file +accessible class net/minecraft/client/resources/model/ClientItemInfoLoader$PendingLoad +accessible method net/minecraft/world/entity/monster/skeleton/AbstractSkeleton getArrow (Lnet/minecraft/world/item/ItemStack;FLnet/minecraft/world/item/ItemStack;)Lnet/minecraft/world/entity/projectile/arrow/AbstractArrow; diff --git a/src/main/resources/real-arrow-tip.mixins.json b/src/main/resources/real-arrow-tip.mixins.json index 2233906..3151ae5 100644 --- a/src/main/resources/real-arrow-tip.mixins.json +++ b/src/main/resources/real-arrow-tip.mixins.json @@ -4,10 +4,10 @@ "package": "tobinio.realarrowtip.mixin", "compatibilityLevel": "JAVA_21", "client": [ - "ArrowEntityRendererMixin", + "TippableArrowRendererMixin", "ArrowEntityRenderingStateMixin", - "ItemAssetsLoaderMixin", - "ProjectileEntityRendererMixin" + "ClientItemInfoLoaderMixin", + "ArrowRendererMixin" ], "injectors": { "defaultRequire": 1 -- 2.51.2