From 172eb2a8678e07afd1caad56d8c852b320ed7a1b Mon Sep 17 00:00:00 2001 From: tobinio Date: Sat, 5 Apr 2025 14:49:47 +0200 Subject: [PATCH] support 1.21.5 - #7 --- build.gradle | 2 +- gradle.properties | 14 +++--- gradle/wrapper/gradle-wrapper.properties | 2 +- ...TransparentItemFrameBlockStateMangers.java | 25 ++++++++++ .../client/BlockStateManagersInvoker.java | 23 +++++++++ .../mixin/client/BlockStateManagersMixin.java | 39 +++++++++++++++ .../mixin/client/BlockStatesLoaderMixin.java | 44 ----------------- .../client/ItemFrameEntityRendererMixin.java | 49 ++++++++----------- .../visible-entities.client.mixins.json | 3 +- 9 files changed, 119 insertions(+), 82 deletions(-) create mode 100644 src/client/java/tobinio/visibleentities/entity/TransparentItemFrameBlockStateMangers.java create mode 100644 src/client/java/tobinio/visibleentities/mixin/client/BlockStateManagersInvoker.java create mode 100644 src/client/java/tobinio/visibleentities/mixin/client/BlockStateManagersMixin.java delete mode 100644 src/client/java/tobinio/visibleentities/mixin/client/BlockStatesLoaderMixin.java diff --git a/build.gradle b/build.gradle index 2ac9e98..fb01cc5 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 21327f2..cb37c46 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,16 +4,16 @@ org.gradle.parallel=true # Fabric Properties # check these on https://fabricmc.net/develop -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.4+mc1.21.4 +mod_version=0.1.4+mc1.21.5 maven_group=tobinio.visibleentities archives_base_name=visible-entities # Dependencies -fabric_version=0.111.0+1.21.4 -yacl_version=3.6.2+1.21.4-fabric -modmenu_version=13.0.0-beta.1 \ No newline at end of file +fabric_version=0.119.5+1.21.5 +yacl_version=3.6.6+1.21.5-fabric +modmenu_version=14.0.0-rc.2 \ No newline at end of file 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/client/java/tobinio/visibleentities/entity/TransparentItemFrameBlockStateMangers.java b/src/client/java/tobinio/visibleentities/entity/TransparentItemFrameBlockStateMangers.java new file mode 100644 index 0000000..2aff290 --- /dev/null +++ b/src/client/java/tobinio/visibleentities/entity/TransparentItemFrameBlockStateMangers.java @@ -0,0 +1,25 @@ +package tobinio.visibleentities.entity; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.state.StateManager; +import net.minecraft.util.Identifier; +import tobinio.visibleentities.VisibleEntitiesClient; + +import static tobinio.visibleentities.mixin.client.BlockStateManagersInvoker.createItemFrameStateManager; + +/** + * Created: 05.04.25 + * + * @author Tobias Frischmann + */ +public class TransparentItemFrameBlockStateMangers { + public static final StateManager TRANSPARENT_ITEM_FRAME = createItemFrameStateManager(); + + public static final StateManager TRANSPARENT_GLOW_ITEM_FRAME = createItemFrameStateManager(); + + public static final Identifier TRANSPARENT_ITEM_FRAME_ID = VisibleEntitiesClient.id("transparent_item_frame"); + public static final Identifier TRANSPARENT_GLOW_ITEM_FRAME_ID = VisibleEntitiesClient.id( + "transparent_glow_item_frame"); + +} diff --git a/src/client/java/tobinio/visibleentities/mixin/client/BlockStateManagersInvoker.java b/src/client/java/tobinio/visibleentities/mixin/client/BlockStateManagersInvoker.java new file mode 100644 index 0000000..e432c2b --- /dev/null +++ b/src/client/java/tobinio/visibleentities/mixin/client/BlockStateManagersInvoker.java @@ -0,0 +1,23 @@ +package tobinio.visibleentities.mixin.client; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.client.render.model.BlockStateManagers; +import net.minecraft.state.StateManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + + +/** + * Created: 14.09.24 + * + * @author Tobias Frischmann + */ +@Mixin (BlockStateManagers.class) +public interface BlockStateManagersInvoker { + + @Invoker ("createItemFrameStateManager") + static StateManager createItemFrameStateManager() { + throw new AssertionError(); + } +} diff --git a/src/client/java/tobinio/visibleentities/mixin/client/BlockStateManagersMixin.java b/src/client/java/tobinio/visibleentities/mixin/client/BlockStateManagersMixin.java new file mode 100644 index 0000000..0e5b198 --- /dev/null +++ b/src/client/java/tobinio/visibleentities/mixin/client/BlockStateManagersMixin.java @@ -0,0 +1,39 @@ +package tobinio.visibleentities.mixin.client; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.client.render.model.BlockStateManagers; +import net.minecraft.state.StateManager; +import net.minecraft.util.Identifier; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.HashMap; +import java.util.Map; + +import static tobinio.visibleentities.entity.TransparentItemFrameBlockStateMangers.*; + + +/** + * Created: 14.09.24 + * + * @author Tobias Frischmann + */ +@Mixin (BlockStateManagers.class) +public abstract class BlockStateManagersMixin { + + @Mutable + @Shadow + @Final + private static Map> STATIC_MANAGERS; + + @Inject (method = "", at = @At ("TAIL")) + private static void addCustomItemFrameModels(CallbackInfo ci) { + STATIC_MANAGERS = new HashMap<>(STATIC_MANAGERS); + + STATIC_MANAGERS.put(TRANSPARENT_ITEM_FRAME_ID, TRANSPARENT_ITEM_FRAME); + STATIC_MANAGERS.put(TRANSPARENT_GLOW_ITEM_FRAME_ID, TRANSPARENT_GLOW_ITEM_FRAME); + } +} diff --git a/src/client/java/tobinio/visibleentities/mixin/client/BlockStatesLoaderMixin.java b/src/client/java/tobinio/visibleentities/mixin/client/BlockStatesLoaderMixin.java deleted file mode 100644 index 370f3a0..0000000 --- a/src/client/java/tobinio/visibleentities/mixin/client/BlockStatesLoaderMixin.java +++ /dev/null @@ -1,44 +0,0 @@ -package tobinio.visibleentities.mixin.client; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.client.render.model.BlockStatesLoader; -import net.minecraft.state.StateManager; -import net.minecraft.util.Identifier; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import tobinio.visibleentities.VisibleEntitiesClient; - -import java.util.HashMap; -import java.util.Map; - -/** - * Created: 14.09.24 - * - * @author Tobias Frischmann - */ -@Mixin (BlockStatesLoader.class) -public class BlockStatesLoaderMixin { - @Mutable - @Shadow - @Final - private static Map> STATIC_DEFINITIONS; - - @Shadow - @Final - private static StateManager ITEM_FRAME_STATE_MANAGER; - - @Inject (method = "", at = @At ("TAIL")) - private static void modifySnowball(CallbackInfo ci) { - STATIC_DEFINITIONS = new HashMap<>(); - - STATIC_DEFINITIONS.put(Identifier.ofVanilla("item_frame"), ITEM_FRAME_STATE_MANAGER); - STATIC_DEFINITIONS.put(Identifier.ofVanilla("glow_item_frame"), ITEM_FRAME_STATE_MANAGER); - STATIC_DEFINITIONS.put(VisibleEntitiesClient.id("transparent_item_frame"), - ITEM_FRAME_STATE_MANAGER); - STATIC_DEFINITIONS.put(VisibleEntitiesClient.id("transparent_glow_item_frame"), - ITEM_FRAME_STATE_MANAGER); - } -} diff --git a/src/client/java/tobinio/visibleentities/mixin/client/ItemFrameEntityRendererMixin.java b/src/client/java/tobinio/visibleentities/mixin/client/ItemFrameEntityRendererMixin.java index 47a2f0e..c9ae4c4 100644 --- a/src/client/java/tobinio/visibleentities/mixin/client/ItemFrameEntityRendererMixin.java +++ b/src/client/java/tobinio/visibleentities/mixin/client/ItemFrameEntityRendererMixin.java @@ -1,26 +1,35 @@ package tobinio.visibleentities.mixin.client; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.TexturedRenderLayers; import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.block.BlockModelRenderer; import net.minecraft.client.render.block.BlockRenderManager; import net.minecraft.client.render.entity.ItemFrameEntityRenderer; import net.minecraft.client.render.entity.state.ItemFrameEntityRenderState; import net.minecraft.client.render.model.BakedModelManager; -import net.minecraft.client.util.ModelIdentifier; +import net.minecraft.client.render.model.BlockStateModel; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.EntityType; import net.minecraft.entity.decoration.ItemFrameEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.Properties; +import net.minecraft.state.property.Property; import net.minecraft.util.math.RotationAxis; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import tobinio.visibleentities.VisibleEntitiesClient; import tobinio.visibleentities.settings.Config; +import static tobinio.visibleentities.entity.TransparentItemFrameBlockStateMangers.TRANSPARENT_GLOW_ITEM_FRAME; +import static tobinio.visibleentities.entity.TransparentItemFrameBlockStateMangers.TRANSPARENT_ITEM_FRAME; + /** * Created: 14.09.24 * @@ -32,22 +41,22 @@ public abstract class ItemFrameEntityRendererMixin { @Final private BlockRenderManager blockRenderManager; - @Inject (at = @At (value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;multiply(Lorg/joml/Quaternionf;)V", ordinal = 1), method = "render(Lnet/minecraft/client/render/entity/state/ItemFrameEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V") + @Inject (at = @At (value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;multiply(Lorg/joml/Quaternionfc;)V", ordinal = 1), method = "render(Lnet/minecraft/client/render/entity/state/ItemFrameEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V") private void renderTransparent(ItemFrameEntityRenderState state, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo ci) { Config instance = Config.HANDLER.instance(); if (instance.isActive && instance.showItemFrames && state.invisible) { - BakedModelManager bakedModelManager = this.blockRenderManager.getModels().getModelManager(); - ModelIdentifier modelIdentifier = this.getTransparentModelId(state); + BlockState blockState = this.getTransparentModelId(state); + BlockStateModel model = this.blockRenderManager.getModel(blockState); + matrixStack.push(); matrixStack.translate(-0.5F, -0.5F, -0.5F); - this.blockRenderManager.getModelRenderer() + BlockModelRenderer .render(matrixStack.peek(), vertexConsumerProvider.getBuffer(TexturedRenderLayers.getItemEntityTranslucentCull()), - null, - bakedModelManager.getModel(modelIdentifier), + model, 1.0F, 1.0F, 1.0F, @@ -57,7 +66,7 @@ public abstract class ItemFrameEntityRendererMixin { } } - @Inject (at = @At (value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;multiply(Lorg/joml/Quaternionf;)V", ordinal = 2), method = "render(Lnet/minecraft/client/render/entity/state/ItemFrameEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V") + @Inject (at = @At (value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;multiply(Lorg/joml/Quaternionfc;)V", ordinal = 2), method = "render(Lnet/minecraft/client/render/entity/state/ItemFrameEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V") private void offSetMap(ItemFrameEntityRenderState state, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo ci) { @@ -69,25 +78,9 @@ public abstract class ItemFrameEntityRendererMixin { } @Unique - private static final ModelIdentifier TRANSPARENT_NORMAL_FRAME = of("transparent_item_frame", false); - @Unique - private static final ModelIdentifier TRANSPARENT_MAP_FRAME = of("transparent_item_frame", true); - @Unique - private static final ModelIdentifier TRANSPARENT_GLOW_FRAME = of("transparent_glow_item_frame", false); - @Unique - private static final ModelIdentifier TRANSPARENT_MAP_GLOW_FRAME = of("transparent_glow_item_frame", true); - - @Unique - private static ModelIdentifier of(String id, boolean map) { - return new ModelIdentifier(VisibleEntitiesClient.id(id), "map=%s".formatted(map)); - } + private BlockState getTransparentModelId(ItemFrameEntityRenderState state) { + return ((state.glow ? TRANSPARENT_GLOW_ITEM_FRAME : TRANSPARENT_ITEM_FRAME).getDefaultState()).with(Properties.MAP, + state.mapId != null); - @Unique - private ModelIdentifier getTransparentModelId(ItemFrameEntityRenderState state) { - if (state.mapId != null) { - return state.glow ? TRANSPARENT_MAP_GLOW_FRAME : TRANSPARENT_MAP_FRAME; - } else { - return state.glow ? TRANSPARENT_GLOW_FRAME : TRANSPARENT_NORMAL_FRAME; - } } } diff --git a/src/client/resources/visible-entities.client.mixins.json b/src/client/resources/visible-entities.client.mixins.json index a21b02d..1882aa5 100644 --- a/src/client/resources/visible-entities.client.mixins.json +++ b/src/client/resources/visible-entities.client.mixins.json @@ -3,7 +3,8 @@ "package": "tobinio.visibleentities.mixin.client", "compatibilityLevel": "JAVA_21", "client": [ - "BlockStatesLoaderMixin", + "BlockStateManagersInvoker", + "BlockStateManagersMixin", "EntityMixin", "EntityRendererMixin", "ItemFrameEntityRendererMixin", -- 2.51.2