50 lines
1.7 KiB
Java
50 lines
1.7 KiB
Java
package mods.betterfoliage.loader;
|
|
|
|
import org.objectweb.asm.Opcodes;
|
|
import org.objectweb.asm.tree.AbstractInsnNode;
|
|
import org.objectweb.asm.tree.FieldInsnNode;
|
|
import org.objectweb.asm.tree.MethodInsnNode;
|
|
import org.objectweb.asm.tree.MethodNode;
|
|
import org.objectweb.asm.tree.VarInsnNode;
|
|
|
|
public class TransformRenderBlockOverride extends MethodTransformerBase {
|
|
|
|
@Override
|
|
public String getClassName() {
|
|
return "net.minecraft.client.renderer.RenderBlocks";
|
|
}
|
|
|
|
@Override
|
|
public String getMethodName() {
|
|
return "renderBlockByRenderType";
|
|
}
|
|
|
|
@Override
|
|
public String getSignature() {
|
|
return "(Lnet/minecraft/block/Block;III)Z";
|
|
}
|
|
|
|
@Override
|
|
public String getLogMessage() {
|
|
return "Applying RenderBlocks.renderBlockByRenderType() render type override";
|
|
}
|
|
|
|
@Override
|
|
public void transform(MethodNode method, boolean obf) {
|
|
AbstractInsnNode invokeGetRenderType = findNext(method.instructions.getFirst(), matchInvokeAny());
|
|
AbstractInsnNode storeRenderType = findNext(invokeGetRenderType, matchOpcode(Opcodes.ISTORE));
|
|
insertAfter(method.instructions, storeRenderType,
|
|
new VarInsnNode(Opcodes.ALOAD, 0),
|
|
new FieldInsnNode(Opcodes.GETFIELD, className("net/minecraft/client/renderer/RenderBlocks", obf), element("blockAccess", obf), signature("Lnet/minecraft/world/IBlockAccess;", obf)),
|
|
new VarInsnNode(Opcodes.ILOAD, 2),
|
|
new VarInsnNode(Opcodes.ILOAD, 3),
|
|
new VarInsnNode(Opcodes.ILOAD, 4),
|
|
new VarInsnNode(Opcodes.ALOAD, 1),
|
|
new VarInsnNode(Opcodes.ILOAD, 5),
|
|
new MethodInsnNode(Opcodes.INVOKESTATIC, "mods/betterfoliage/client/BetterFoliageClient", "getRenderTypeOverride", signature("(Lnet/minecraft/world/IBlockAccess;IIILnet/minecraft/block/Block;I)I", obf)),
|
|
new VarInsnNode(Opcodes.ISTORE, 5)
|
|
);
|
|
}
|
|
|
|
}
|