diff --git a/src/main/java/mods/betterfoliage/loader/AbstractClassTransformer.java b/src/main/java/mods/betterfoliage/loader/AbstractClassTransformer.java index 2ec598df..9ba52c41 100644 --- a/src/main/java/mods/betterfoliage/loader/AbstractClassTransformer.java +++ b/src/main/java/mods/betterfoliage/loader/AbstractClassTransformer.java @@ -4,6 +4,8 @@ import net.minecraft.launchwrapper.IClassTransformer; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.tree.ClassNode; @@ -14,6 +16,8 @@ public abstract class AbstractClassTransformer implements IClassTransformer { + protected final Logger log = LogManager.getLogger(getClass().getSimpleName()); + /** The kind of environment we are in. Assume MCP until proven otherwise */ protected Namespace environment = Namespace.MCP; @@ -37,8 +41,15 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) for (Map.Entry entry : methodTransformers.entrySet()) { if (transformedName.equals(entry.getKey().parent.getName(Namespace.MCP))) { + log.debug(String.format("Found class: %s -> %s", name, transformedName)); + log.debug(String.format("Searching for method: %s %s -> %s %s", + entry.getKey().getName(Namespace.OBF), entry.getKey().getAsmDescriptor(Namespace.OBF), + entry.getKey().getName(Namespace.MCP), entry.getKey().getAsmDescriptor(Namespace.MCP))); for (MethodNode methodNode : classNode.methods) { - if (entry.getKey().getName(environment).equals(methodNode.name) && entry.getKey().getAsmDescriptor(environment).equals(methodNode.desc)) { + log.debug(String.format(" %s, %s", methodNode.name, methodNode.desc)); + // try to match against both namespaces - mods sometimes have deobfed class names in signatures + if (entry.getKey().getName(Namespace.MCP).equals(methodNode.name) && entry.getKey().getAsmDescriptor(Namespace.MCP).equals(methodNode.desc) || + entry.getKey().getName(Namespace.OBF).equals(methodNode.name) && entry.getKey().getAsmDescriptor(Namespace.OBF).equals(methodNode.desc)) { AbstractMethodTransformer transformer = entry.getValue(); hasTransformed = true; diff --git a/src/main/java/mods/betterfoliage/loader/impl/BetterFoliageTransformer.java b/src/main/java/mods/betterfoliage/loader/impl/BetterFoliageTransformer.java index f8f83cdf..0556895a 100644 --- a/src/main/java/mods/betterfoliage/loader/impl/BetterFoliageTransformer.java +++ b/src/main/java/mods/betterfoliage/loader/impl/BetterFoliageTransformer.java @@ -1,19 +1,15 @@ package mods.betterfoliage.loader.impl; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.tree.VarInsnNode; - import mods.betterfoliage.loader.AbstractClassTransformer; import mods.betterfoliage.loader.AbstractMethodTransformer; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.VarInsnNode; + public class BetterFoliageTransformer extends AbstractClassTransformer { public BetterFoliageTransformer() { - final Logger log = LogManager.getLogger(BetterFoliageTransformer.class.getSimpleName()); - // where: RenderBlocks.renderBlockByRenderType() // what: invoke code to overrule the return value of Block.getRenderType() // why: allows us to use custom block renderers for any block, without touching block code diff --git a/src/main/java/mods/betterfoliage/loader/impl/CodeRefs.java b/src/main/java/mods/betterfoliage/loader/impl/CodeRefs.java index 09ebc9d4..d2581ae6 100644 --- a/src/main/java/mods/betterfoliage/loader/impl/CodeRefs.java +++ b/src/main/java/mods/betterfoliage/loader/impl/CodeRefs.java @@ -95,7 +95,7 @@ public class CodeRefs { mShouldSideBeRendered = new MethodRef(cBlock, "shouldSideBeRendered", "func_149646_a", "a", ClassRef.BOOLEAN, cIBlockAccess, ClassRef.INT, ClassRef.INT, ClassRef.INT, ClassRef.INT); mShouldRenderBlockSideOverride = new MethodRef(cBetterFoliageClient, "shouldRenderBlockSideOverride", ClassRef.BOOLEAN, ClassRef.BOOLEAN, cIBlockAccess, ClassRef.INT, ClassRef.INT, ClassRef.INT, ClassRef.INT); - mGetBlockIdOverride = new MethodRef(new ClassRef("mods.betterfoliage.client.ShadersModIntegration"), "getBlockIdOverride", ClassRef.INT, ClassRef.INT, cBlock); + mGetBlockIdOverride = new MethodRef(new ClassRef("mods.betterfoliage.client.integration.ShadersModIntegration"), "getBlockIdOverride", ClassRef.INT, ClassRef.INT, cBlock); cShaders = new ClassRef("shadersmodcore.client.Shaders"); mPushEntity = new MethodRef(cShaders, "pushEntity", ClassRef.VOID, cRenderBlocks, cBlock, ClassRef.INT, ClassRef.INT, ClassRef.INT); fShadersEntityData = new FieldRef(cShaders, "entityData", ClassRef.INT);