From 2e196c7ac47707253cb118e7c11be951ec850496 Mon Sep 17 00:00:00 2001 From: TheCodex6824 Date: Sun, 18 Aug 2024 22:16:17 -0400 Subject: [PATCH] Fix bore particles being missing textures for blocks like lit redstone ore --- .../core/TransformerExecutor.java | 1 + .../core/transformer/EntityTransformers.java | 41 +++++++++++++++++++ .../thaumcraftfix/core/transformer/Types.java | 2 + 3 files changed, 44 insertions(+) diff --git a/src/main/java/thecodex6824/thaumcraftfix/core/TransformerExecutor.java b/src/main/java/thecodex6824/thaumcraftfix/core/TransformerExecutor.java index da5c316..9ee0e94 100644 --- a/src/main/java/thecodex6824/thaumcraftfix/core/TransformerExecutor.java +++ b/src/main/java/thecodex6824/thaumcraftfix/core/TransformerExecutor.java @@ -98,6 +98,7 @@ private void initTransformers() { transformers.add(EntityTransformers.ADVANCED_CROSSBOW_PROCESS_INTERACT_DEAD.get()); transformers.add(EntityTransformers.BORE_FIX_RUMBLE.get()); transformers.add(EntityTransformers.BORE_NO_EQUIP_SOUND.get()); + transformers.add(EntityTransformers.BORE_PARTICLE_TEXTURE.get()); transformers.add(EntityTransformers.BORE_PROCESS_INTERACT_DEAD.get()); transformers.add(EntityTransformers.BORE_SPIRAL_MISSES.get()); transformers.add(EntityTransformers.CROSSBOW_PROCESS_INTERACT_DEAD.get()); diff --git a/src/main/java/thecodex6824/thaumcraftfix/core/transformer/EntityTransformers.java b/src/main/java/thecodex6824/thaumcraftfix/core/transformer/EntityTransformers.java index f8b4c16..f2cb80b 100644 --- a/src/main/java/thecodex6824/thaumcraftfix/core/transformer/EntityTransformers.java +++ b/src/main/java/thecodex6824/thaumcraftfix/core/transformer/EntityTransformers.java @@ -41,7 +41,9 @@ import com.mojang.authlib.GameProfile; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; @@ -263,6 +265,11 @@ public static float getRobeRotationDivisor(Entity entity) { return f; } + public static TextureAtlasSprite getBlockParticleTexture(TextureAtlasSprite old, IBlockState state) { + return Minecraft.getMinecraft().getBlockRendererDispatcher() + .getModelForState(state).getParticleTexture(); + } + } private static final String HOOKS_COMMON = Type.getInternalName(HooksCommon.class); @@ -599,6 +606,40 @@ private static Supplier makeEntityProcessInteractTransformer(Strin ); }; + public static final Supplier BORE_PARTICLE_TEXTURE = () -> { + return new GenericStateMachineTransformer( + PatchStateMachine.builder( + new MethodDefinition( + "thaumcraft/client/fx/particles/FXBoreParticles", + false, + "", + Type.VOID_TYPE, + Types.WORLD, Type.DOUBLE_TYPE, Type.DOUBLE_TYPE, Type.DOUBLE_TYPE, + Type.DOUBLE_TYPE, Type.DOUBLE_TYPE, Type.DOUBLE_TYPE, + Types.I_BLOCK_STATE, Type.INT_TYPE + ) + ) + .findNextMethodCall(TransformUtil.remapMethod(new MethodDefinition( + "thaumcraft/client/fx/particles/FXBoreParticles", + false, + "func_187117_a", + Type.VOID_TYPE, + Types.TEXTURE_ATLAS_SPRITE + ))) + .insertInstructionsBefore( + new VarInsnNode(Opcodes.ALOAD, 14), + new MethodInsnNode(Opcodes.INVOKESTATIC, + HOOKS_CLIENT, + "getBlockParticleTexture", + Type.getMethodDescriptor(Types.TEXTURE_ATLAS_SPRITE, Types.TEXTURE_ATLAS_SPRITE, + Types.I_BLOCK_STATE), + false + ) + ) + .build() + ); + }; + public static final Supplier BORE_SPIRAL_MISSES = () -> { return new GenericStateMachineTransformer( PatchStateMachine.builder( diff --git a/src/main/java/thecodex6824/thaumcraftfix/core/transformer/Types.java b/src/main/java/thecodex6824/thaumcraftfix/core/transformer/Types.java index ce416fb..b13621b 100644 --- a/src/main/java/thecodex6824/thaumcraftfix/core/transformer/Types.java +++ b/src/main/java/thecodex6824/thaumcraftfix/core/transformer/Types.java @@ -104,4 +104,6 @@ private Types() {} public static final Type SUBSCRIBE_EVENT = Type.getType("Lnet/minecraftforge/fml/common/eventhandler/SubscribeEvent;"); public static final Type EVENT_PRIORITY = Type.getType("Lnet/minecraftforge/fml/common/eventhandler/EventPriority;"); + public static final Type TEXTURE_ATLAS_SPRITE = Type.getType("Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;"); + }