package coloredlightscore.src.asm.transformer;
import coloredlightscore.src.asm.transformer.core.ASMUtils;
import coloredlightscore.src.asm.transformer.core.SingleMethodTransformer;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.*;
public class TransformTessellator extends SingleMethodTransformer {
public TransformTessellator() {
// TODO Auto-generated constructor stub
}
@Override
protected String getMcpMethod() {
return "setBrightness (I)V";
}
@Override
protected String getClassName() {
return "net.minecraft.client.renderer.Tessellator";
}
@Override
protected boolean transform(ClassNode clazz, MethodNode method) {
/*
* This ASM was taken from the mockup "CLTesselatorHelper.setBrightness", as compared to Tessellator.class
* We want to insert the lines starting with '+':
*
* 0 aload_0 [this]
* 1 iconst_1
* 2 putfield kovukore.coloredlights.src.helper.CLTesselatorHelper.hasBrightness : boolean [20]
* 5 aload_0 [this]
* 6 iload_1 [par1]
* + 7 ldc <Integer 15728880> [22]
* + 9 iand
* 10 putfield kovukore.coloredlights.src.helper.CLTesselatorHelper.brightness : int [23]
* 13 return
*
*/
AbstractInsnNode putBrightness = ASMUtils.findLastOpcode(method, Opcodes.PUTFIELD);
InsnList andOperation = new InsnList();
andOperation.add(new LdcInsnNode(15728880));
andOperation.add(new InsnNode(Opcodes.IAND));
method.instructions.insertBefore(putBrightness, andOperation);
return true;
}
@Override
protected boolean transforms(String className) {
return className.equals(getClassName());
}
}