package joshie.harvest.asm;
import joshie.harvest.asm.transformers.*;
import net.minecraft.launchwrapper.IClassTransformer;
import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin;
import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.MCVersion;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@MCVersion("1.10.2")
public class HFTransformer implements IFMLLoadingPlugin, IClassTransformer {
public static boolean isObfuscated = false;
private static final List<AbstractASM> asm = new ArrayList<>();
static {
asm.add(new PlayerWakeTransformer());
asm.add(new RenderRainTransformer());
asm.add(new RenderItemTransformer());
asm.add(new FishingTransformer(4, "net.minecraft.entity.projectile.EntityFishHook", "zc"));
asm.add(new FishingTransformer(3, "com.teammetallurgy.aquaculture.handlers.EntityCustomFishHook"));
}
@Override
public byte[] transform(String name, String transformedName, byte[] data) {
byte[] modified = data;
for (AbstractASM a : asm) {
if (a.isClass(name)) {
if (a.isVisitor()) {
ClassReader cr = new ClassReader(modified);
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
ClassVisitor cv = a.newInstance(cw);
cr.accept(cv, ClassReader.EXPAND_FRAMES);
modified = cw.toByteArray();
}
modified = a.transform(modified);
}
}
return modified;
}
@Override
public String[] getASMTransformerClass() {
return new String[]{ HFTransformer.class.getName() };
}
@Override
public String getModContainerClass() {
return null;
}
@Override
public String getSetupClass() {
return null;
}
@Override
public void injectData(Map<String, Object> data) {
HFTransformer.isObfuscated = ((Boolean) data.get("runtimeDeobfuscationEnabled"));
}
@Override
public String getAccessTransformerClass() {
return null;
}
}