diff options
Diffstat (limited to 'src/Java/gtPlusPlus/preloader/asm/transformers')
-rw-r--r-- | src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java | 427 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java | 23 |
2 files changed, 320 insertions, 130 deletions
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java index 89c41452d5..c6edd94238 100644 --- a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java +++ b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java @@ -2,168 +2,108 @@ package gtPlusPlus.preloader.asm.transformers; import static org.objectweb.asm.Opcodes.*; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; import org.apache.logging.log4j.Level; import org.objectweb.asm.*; -import org.objectweb.asm.commons.GeneratorAdapter; import cpw.mods.fml.relauncher.FMLRelaunchLog; import gregtech.api.GregTech_API; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.common.blocks.GT_Block_Machines; import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.XSTR; +import gtPlusPlus.core.util.array.BlockPos; import gtPlusPlus.core.util.item.ItemUtils; +import gtPlusPlus.core.util.nbt.NBTUtils; import gtPlusPlus.core.util.reflect.ReflectionUtils; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; +import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fluids.FluidStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; public class Preloader_ClassTransformer2 { - private final static Class<BaseMetaTileEntity> customTransformer2 = BaseMetaTileEntity.class; + /** + * + * So what I'd try is something like patch a new field into BaseMetaTileEntity to hold the ItemNBT, + * then patch GT_Block_Machines.breakBlock to store the ItemNBT into that field by calling setItemNBT, + * and then patch BaseMetaTileEntity.getDrops to retrieve that field instead of calling setItemNBT + * But there's probably a simpler solution if all you want to do is fix this + * for your super tanks rather than for all GT machines + * (which would only include saving the output count for chest buffers and item distributors...) + * + */ - public static ArrayList<ItemStack> getDrops(BaseMetaTileEntity o) { - Logger.INFO("DROP!"); - try { - short tID = (short) ReflectionUtils.getField(customTransformer2, "mID").get(o); - NBTTagCompound tRecipeStuff = (NBTTagCompound) ReflectionUtils.getField(customTransformer2, "mRecipeStuff").get(o); - boolean tMuffler = (boolean) ReflectionUtils.getField(customTransformer2, "mMuffler").get(o); - boolean tLockUpgrade = (boolean) ReflectionUtils.getField(customTransformer2, "mLockUpgrade").get(o); - boolean tSteamConverter = (boolean) ReflectionUtils.getField(customTransformer2, "mSteamConverter").get(o); - byte tColor = (byte) ReflectionUtils.getField(customTransformer2, "mColor").get(o); - byte tOtherUpgrades = (byte) ReflectionUtils.getField(customTransformer2, "mOtherUpgrades").get(o); - byte tStrongRedstone = (byte) ReflectionUtils.getField(customTransformer2, "mStrongRedstone").get(o); - int[] tCoverSides = (int[]) ReflectionUtils.getField(customTransformer2, "mCoverSides").get(o); - int[] tCoverData = (int[]) ReflectionUtils.getField(customTransformer2, "mCoverData").get(o); - FluidStack tFluid = null; - if (GT_MetaTileEntity_BasicTank.class.isInstance(o)) { - try { - tFluid = (FluidStack) ReflectionUtils.getField(GT_MetaTileEntity_BasicTank.class, "mFluid").get(o); - } - catch (Throwable t) { - Logger.REFLECTION("mFluid was not set."); - } - } - else { - Logger.REFLECTION("mFluid was not found."); - } - BaseMetaTileEntity tMetaTileEntity = o; - - Logger.REFLECTION("tID: "+(tID != 0)); - Logger.REFLECTION("tRecipeStuff: "+(tRecipeStuff != null)); - Logger.REFLECTION("tMuffler: "+(tMuffler != false)); - Logger.REFLECTION("tLockUpgrade: "+(tLockUpgrade != false)); - Logger.REFLECTION("tSteamConverter: "+(tSteamConverter != false)); - Logger.REFLECTION("tColor: "+(tColor != 0)); - Logger.REFLECTION("tOtherUpgrades: "+(tOtherUpgrades != 0)); - Logger.REFLECTION("tCoverSides: "+(tCoverSides != null)); - Logger.REFLECTION("tCoverData: "+(tCoverData != null)); - Logger.REFLECTION("tMetaTileEntity: "+(tMetaTileEntity != null)); - - ItemStack rStack = new ItemStack(GregTech_API.sBlockMachines, 1, tID); - NBTTagCompound tNBT = new NBTTagCompound(); - if (tRecipeStuff != null && !tRecipeStuff.hasNoTags()) tNBT.setTag("GT.CraftingComponents", tRecipeStuff); - if (tMuffler) tNBT.setBoolean("mMuffler", tMuffler); - if (tLockUpgrade) tNBT.setBoolean("mLockUpgrade", tLockUpgrade); - if (tSteamConverter) tNBT.setBoolean("mSteamConverter", tSteamConverter); - if (tColor > 0) tNBT.setByte("mColor", tColor); - //if (tFluid != null) tFluid.writeToNBT(tNBT); - if (tFluid != null) tNBT.setTag("mFluid", tFluid.tag); - if (tOtherUpgrades > 0) tNBT.setByte("mOtherUpgrades", tOtherUpgrades); - if (tStrongRedstone > 0) tNBT.setByte("mStrongRedstone", tStrongRedstone); - for (byte i = 0; i < tCoverSides.length; i++) { - if (tCoverSides[i] != 0) { - tNBT.setIntArray("mCoverData", tCoverData); - tNBT.setIntArray("mCoverSides", tCoverSides); - break; - } - } - - //Set Item NBT - if (!o.isInvalid()){ - ((IMetaTileEntity) tMetaTileEntity).setItemNBT(tNBT); //Valid? Idk - } - else { - try { - Logger.REFLECTION("Trying to set NBT data to Itemstack from invalid tile, World might explode."); - ((IMetaTileEntity) tMetaTileEntity).setItemNBT(tNBT); //Valid? Idk - } - catch (Throwable t){ - Logger.REFLECTION("getDropsHack1"); - t.printStackTrace(); - } - } - - //Set stack NBT - if (!tNBT.hasNoTags()) rStack.setTagCompound(tNBT); - return new ArrayList<ItemStack>(Arrays.asList(rStack)); - } - catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException a){ - Logger.REFLECTION("getDropsHack2"); - a.printStackTrace(); - } - ArrayList<ItemStack> u = new ArrayList<ItemStack>(Arrays.asList(new ItemStack[]{ItemUtils.getSimpleStack(Blocks.bedrock)})); - return u; - } + public static boolean mHasSetField = false; + private final static Class<BaseMetaTileEntity> customTransformer2 = BaseMetaTileEntity.class; public static final class GT_MetaTile_Visitor extends ClassVisitor { + private boolean isGt_Block_Machines = false; - public GT_MetaTile_Visitor(ClassVisitor cv) { + public GT_MetaTile_Visitor(ClassVisitor cv, boolean isGt_Block_Machines) { super(ASM5, cv); + this.isGt_Block_Machines = isGt_Block_Machines; + } + + @Override + public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { + FieldVisitor j = super.visitField(access, name, desc, signature, value); + if (!mHasSetField && !isGt_Block_Machines) { + mHasSetField = true; + FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Injecting field 'mItemStorageNBT' into BaseMetaTileEntity.java. Access OpCode: "+access); + j = cv.visitField(0, "mItemStorageNBT", "Lnet/minecraft/nbt/NBTTagCompound;", null, null); + j.visitEnd(); + } + return j; } @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - MethodVisitor methodVisitor = super.visitMethod(access, name, desc, signature, exceptions); - if(name.equals("getDrops") && desc.equals("()Ljava/util/ArrayList;")) { - FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Found target method. Access OpCode: "+access); - //return new TrySwapMethod(methodVisitor, access, name, desc); - return new SwapTwo(methodVisitor); + MethodVisitor methodVisitor = super.visitMethod(access, name, desc, signature, exceptions); + + if (isGt_Block_Machines) { //Lnet/minecraft/world/World;IIILnet/minecraft/block/Block;I)V + if(name.equals("breakBlock") && desc.equals("(Lnet/minecraft/world/World;IIILnet/minecraft/block/Block;I)V")) { + FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Found target method 'breakBlock' [Unobfuscated]. Access OpCode: "+access); + return new swapBreakBlock(methodVisitor); + } + else if (name.equals("breakBlock") && !desc.equals("(Lnet/minecraft/world/World;IIILnet/minecraft/block/Block;I)V")) { + FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Found target method 'breakBlock' [Obfuscated]. Access OpCode: "+access); + return new swapBreakBlock(methodVisitor); + } } + else { + if(name.equals("getDrops") && desc.equals("()Ljava/util/ArrayList;")) { + FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Found target method 'getDrops'. Access OpCode: "+access); + return new swapGetDrops(methodVisitor); + } + } return methodVisitor; } } - /*private static final class TrySwapMethod extends GeneratorAdapter { - public TrySwapMethod(MethodVisitor mv, int access, String name, String desc) { - super(Opcodes.ASM5, mv, access, name, desc); - FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Created method swapper for '"+name+"' in 'gregtech/api/metatileentity/BaseMetaTileEntity'. Desc: "+desc); - } - - @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { - //gtPlusPlus.preloader.asm.transformers.Preloader_ClassTransformer2 - if(opcode==INVOKESPECIAL && owner.equals("net/minecraft/item/ItemStack") - && name.equals("<init>") && desc.equals("(Lnet/minecraft/block/Block;II)V")) { - FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Trying to proccess '"+name+"' | Opcode: "+opcode+" | Desc: "+desc+" | Owner: "+owner); - FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Fixing Greg & Blood's poor attempt at setItemNBT()."); - // not relaying the original instruction to super effectively removes the original - // instruction, instead we're producing a different instruction: - super.visitVarInsn(ALOAD, 0); - super.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2", - "getDrops", "()Ljava/util/ArrayList;", false); - FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Method should now be replaced."); - } - else { // relaying to super will reproduce the same instruction - //FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Original method call."); - super.visitMethodInsn(opcode, owner, name, desc, itf); - } - } - // all other, not overridden visit methods reproduce the original instructions - }*/ - private static final class SwapTwo extends MethodVisitor { + private static final class swapGetDrops extends MethodVisitor { - public SwapTwo(MethodVisitor mv) { + public swapGetDrops(MethodVisitor mv) { super(ASM5, mv); } @@ -174,7 +114,7 @@ public class Preloader_ClassTransformer2 { //ALOAD 0 //INVOKESTATIC gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2 getDrops (Lgregtech/api/metatileentity/BaseMetaTileEntity;)Ljava/util/ArrayList; //ARETURN - + super.visitVarInsn(ALOAD, 0); super.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2", @@ -188,4 +128,243 @@ public class Preloader_ClassTransformer2 { } + private static final class swapBreakBlock extends MethodVisitor { + + public swapBreakBlock(MethodVisitor mv) { + super(ASM5, mv); + } + + @Override + public void visitCode() { + FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Fixing breakBlock() in GT_Block_Machines.class"); + super.visitCode(); + //super.visitVarInsn(ALOAD, 0); + + super.visitVarInsn(ALOAD, 1); + super.visitVarInsn(ILOAD, 2); + super.visitVarInsn(ILOAD, 3); + super.visitVarInsn(ILOAD, 4); + super.visitVarInsn(ALOAD, 5); + super.visitVarInsn(ILOAD, 6); + + super.visitMethodInsn(INVOKESTATIC, + "gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2", + "breakBlock", + "(Lnet/minecraft/world/World;IIILnet/minecraft/block/Block;I)V", + false); + FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Method should now be replaced."); + super.visitInsn(RETURN); + } + + } + + + + + + + + + + + + + + + + + + + + + + + + + public static ArrayList<ItemStack> getDrops(BaseMetaTileEntity o) { + Logger.INFO("BaseMetaTileEntity.getDrops(BaseMetaTileEntity(this))"); + try { + short tID = (short) ReflectionUtils.getField(customTransformer2, "mID").get(o); + ItemStack rStack = new ItemStack(GregTech_API.sBlockMachines, 1, tID); + + NBTTagCompound i = new NBTTagCompound(); + + i = stupidFuckingNBTMap.get(new BlockPos(o.xCoord, o.yCoord, o.zCoord)); + Logger.INFO("Got NBT Tag Value from map."); + + NBTTagCompound tNBT = i; + if (tNBT == null) { + Logger.INFO("Map tag was null."); + tNBT = generateGetDropsNBT(o); + } + if (!tNBT.hasNoTags()) { + rStack.setTagCompound(tNBT); + Logger.INFO("Iterating rStack NBT."); + NBTUtils.tryIterateNBTData(rStack); + } + return new ArrayList<ItemStack>(Arrays.asList(rStack)); + } + catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException a){ + Logger.REFLECTION("getDropsHack2"); + a.printStackTrace(); + } + ArrayList<ItemStack> u = new ArrayList<ItemStack>(Arrays.asList(new ItemStack[]{ItemUtils.getSimpleStack(Blocks.bedrock)})); + return u; + } + + public static Map<BlockPos, NBTTagCompound> stupidFuckingNBTMap = new HashMap<BlockPos, NBTTagCompound>(); + public static void breakBlock(final World aWorld, final int aX, final int aY, final int aZ, final Block block, + final int meta) { + Logger.INFO("GT_Block_Machines.breakBlock()"); + GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity) { + final IGregTechTileEntity tGregTechTileEntity = (IGregTechTileEntity) tTileEntity; + final Random tRandom = new XSTR(); + GT_Block_Machines.mTemporaryTileEntity.set(tGregTechTileEntity); + + //Try inject this + Logger.INFO("Hopefully saving ItemNBT data."); + + NBTTagCompound tNBT = new NBTTagCompound(); + tNBT = generateGetDropsNBT(tGregTechTileEntity.getMetaTileEntity().getBaseMetaTileEntity()); + tGregTechTileEntity.getMetaTileEntity().setItemNBT(tNBT); + Field fffff; + try { + fffff = ReflectionUtils.getField(tGregTechTileEntity.getClass(), "mItemStorageNBT"); + if (fffff == null) { + Logger.REFLECTION("Injected field is null."); + } + else { + fffff.set(tGregTechTileEntity.getMetaTileEntity().getBaseMetaTileEntity(), tNBT); + Logger.REFLECTION("Hopefully injected field data."); + stupidFuckingNBTMap.put(new BlockPos(aX, aY, aZ), tNBT); + Logger.INFO("Set NBT Tag Value to map."); + } + } + catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + } + + for (int i = 0; i < tGregTechTileEntity.getSizeInventory(); ++i) { + final ItemStack tItem = tGregTechTileEntity.getStackInSlot(i); + if (tItem != null && tItem.stackSize > 0 && tGregTechTileEntity.isValidSlot(i)) { + + + + final EntityItem tItemEntity = new EntityItem(aWorld, + (double) (aX + tRandom.nextFloat() * 0.8f + 0.1f), + (double) (aY + tRandom.nextFloat() * 0.8f + 0.1f), + (double) (aZ + tRandom.nextFloat() * 0.8f + 0.1f), + new ItemStack(tItem.getItem(), tItem.stackSize, tItem.getItemDamage())); + if (tItem.hasTagCompound()) { + tItemEntity.getEntityItem().setTagCompound((NBTTagCompound) tItem.getTagCompound().copy()); + } + tItemEntity.motionX = tRandom.nextGaussian() * 0.0500000007450581; + tItemEntity.motionY = tRandom.nextGaussian() * 0.0500000007450581 + 0.2000000029802322; + tItemEntity.motionZ = tRandom.nextGaussian() * 0.0500000007450581; + aWorld.spawnEntityInWorld((Entity) tItemEntity); + tItem.stackSize = 0; + tGregTechTileEntity.setInventorySlotContents(i, (ItemStack) null); + } + } + } + + //gtPlusPlus.preloader.asm.transformers.Preloader_ClassTransformer2.breakBlockWorld(aWorld, aX, aY, aZ, block, meta); + aWorld.removeTileEntity(aX, aY, aZ); + } + + public static void breakBlockWorld(World world, int aX, int aY, int aZ, Block block, int meta){ + if (block.hasTileEntity(meta) && !(block instanceof BlockContainer)) + { + world.removeTileEntity(aX, aY, aZ); + } + } + + public static NBTTagCompound generateGetDropsNBT(IGregTechTileEntity iGregTechTileEntity) { + Logger.INFO("generateGetDropsNBT()"); + try { + short tID = (short) ReflectionUtils.getField(customTransformer2, "mID").get(iGregTechTileEntity); + NBTTagCompound tRecipeStuff = (NBTTagCompound) ReflectionUtils.getField(customTransformer2, "mRecipeStuff").get(iGregTechTileEntity); + boolean tMuffler = (boolean) ReflectionUtils.getField(customTransformer2, "mMuffler").get(iGregTechTileEntity); + boolean tLockUpgrade = (boolean) ReflectionUtils.getField(customTransformer2, "mLockUpgrade").get(iGregTechTileEntity); + boolean tSteamConverter = (boolean) ReflectionUtils.getField(customTransformer2, "mSteamConverter").get(iGregTechTileEntity); + byte tColor = (byte) ReflectionUtils.getField(customTransformer2, "mColor").get(iGregTechTileEntity); + byte tOtherUpgrades = (byte) ReflectionUtils.getField(customTransformer2, "mOtherUpgrades").get(iGregTechTileEntity); + byte tStrongRedstone = (byte) ReflectionUtils.getField(customTransformer2, "mStrongRedstone").get(iGregTechTileEntity); + int[] tCoverSides = (int[]) ReflectionUtils.getField(customTransformer2, "mCoverSides").get(iGregTechTileEntity); + int[] tCoverData = (int[]) ReflectionUtils.getField(customTransformer2, "mCoverData").get(iGregTechTileEntity); + + NBTTagCompound mItemStorageNBT; + MetaTileEntity tMetaTileEntity = (MetaTileEntity) ReflectionUtils.getField(customTransformer2, "mMetaTileEntity").get(iGregTechTileEntity); + Field fffff = ReflectionUtils.getField(customTransformer2, "mItemStorageNBT"); + if (fffff == null) { + Logger.REFLECTION("Injected field is null."); + mItemStorageNBT = new NBTTagCompound(); + } + else { + Logger.REFLECTION("Injected field exists."); + if (fffff.get(iGregTechTileEntity) != null) { + Logger.REFLECTION("Injected field has value."); + mItemStorageNBT = (NBTTagCompound) fffff.get(iGregTechTileEntity); + } + else { + Logger.REFLECTION("Injected field has no value."); + mItemStorageNBT = null; + } + } + + //BaseMetaTileEntity tMetaTileEntity = o; + + Logger.REFLECTION("tID: "+(tID != 0)); + Logger.REFLECTION("tRecipeStuff: "+(tRecipeStuff != null)); + Logger.REFLECTION("tMuffler: "+(tMuffler != false)); + Logger.REFLECTION("tLockUpgrade: "+(tLockUpgrade != false)); + Logger.REFLECTION("tSteamConverter: "+(tSteamConverter != false)); + Logger.REFLECTION("tColor: "+(tColor != 0)); + Logger.REFLECTION("tOtherUpgrades: "+(tOtherUpgrades != 0)); + Logger.REFLECTION("tCoverSides: "+(tCoverSides != null)); + Logger.REFLECTION("tCoverData: "+(tCoverData != null)); + Logger.REFLECTION("tMetaTileEntity: "+(tMetaTileEntity != null)); + Logger.REFLECTION("mItemStorageNBT: "+(mItemStorageNBT != null)); + + //mItemStorageNBT + + ItemStack rStack = new ItemStack(GregTech_API.sBlockMachines, 1, tID); + NBTTagCompound tNBT = new NBTTagCompound(); + + if (tRecipeStuff != null && !tRecipeStuff.hasNoTags()) tNBT.setTag("GT.CraftingComponents", tRecipeStuff); + if (mItemStorageNBT != null && !mItemStorageNBT.hasNoTags()) tNBT.setTag("mItemStorageNBT", mItemStorageNBT); + if (tMuffler) tNBT.setBoolean("mMuffler", tMuffler); + if (tLockUpgrade) tNBT.setBoolean("mLockUpgrade", tLockUpgrade); + if (tSteamConverter) tNBT.setBoolean("mSteamConverter", tSteamConverter); + if (tColor > 0) tNBT.setByte("mColor", tColor); + //if (tFluid != null) tFluid.writeToNBT(tNBT); + //if (tFluid != null) tNBT.setTag("mFluid", tFluid); + if (tOtherUpgrades > 0) tNBT.setByte("mOtherUpgrades", tOtherUpgrades); + if (tStrongRedstone > 0) tNBT.setByte("mStrongRedstone", tStrongRedstone); + for (byte i = 0; i < tCoverSides.length; i++) { + if (tCoverSides[i] != 0) { + tNBT.setIntArray("mCoverData", tCoverData); + tNBT.setIntArray("mCoverSides", tCoverSides); + break; + } + } + + //Set stack NBT + if (!tNBT.hasNoTags()) { + Logger.INFO("Returning Valid NBT data"); + return tNBT; + } + else { + Logger.INFO("Returning Invalid NBT data"); + } + } + catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException a){ + Logger.REFLECTION("getDropsHack2"); + a.printStackTrace(); + } + return new NBTTagCompound(); + } + } diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java index 723061f998..9163b54709 100644 --- a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java +++ b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java @@ -11,6 +11,8 @@ import net.minecraft.launchwrapper.IClassTransformer; public class Preloader_Transformer_Handler implements IClassTransformer { + private final boolean mEnabled = false; + public byte[] transform(String name, String transformedName, byte[] basicClass) { if(transformedName.equals("net.minecraftforge.oredict.OreDictionary")) { FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Transforming %s", transformedName); @@ -18,12 +20,21 @@ public class Preloader_Transformer_Handler implements IClassTransformer { new ClassReader(basicClass).accept(new OreDictionaryVisitor(classWriter), 0); return classWriter.toByteArray(); } - if(transformedName.equals("gregtech.api.metatileentity.BaseMetaTileEntity")) { - FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Transforming %s", transformedName); - ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES); - ClassReader x = new ClassReader(basicClass); - x.accept(new GT_MetaTile_Visitor(classWriter), ClassReader.EXPAND_FRAMES); - return classWriter.toByteArray(); + if (mEnabled) { + if(transformedName.equals("gregtech.api.metatileentity.BaseMetaTileEntity")) { + FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Transforming %s", transformedName); + ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES); + ClassReader x = new ClassReader(basicClass); + x.accept(new GT_MetaTile_Visitor(classWriter, false), ClassReader.EXPAND_FRAMES); + return classWriter.toByteArray(); + } + if(transformedName.equals("gregtech.common.blocks.GT_Block_Machines")) { + FMLRelaunchLog.log("[GT++ ASM] NBTFixer", Level.INFO, "Transforming %s", transformedName); + ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES); + ClassReader x = new ClassReader(basicClass); + x.accept(new GT_MetaTile_Visitor(classWriter, true), ClassReader.EXPAND_FRAMES); + return classWriter.toByteArray(); + } } return basicClass; } |