Skip to content

Commit

Permalink
fix shaders mod integration
Browse files Browse the repository at this point in the history
  • Loading branch information
octarine-noise committed Mar 25, 2015
1 parent 1c01d89 commit 9e0aa20
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 9 deletions.
Expand Up @@ -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;
Expand All @@ -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;

Expand All @@ -37,8 +41,15 @@ public byte[] transform(String name, String transformedName, byte[] basicClass)

for (Map.Entry<MethodRef, AbstractMethodTransformer> 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;

Expand Down
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/mods/betterfoliage/loader/impl/CodeRefs.java
Expand Up @@ -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);
Expand Down

0 comments on commit 9e0aa20

Please sign in to comment.