diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java | 193 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GT_MetaTileEntity_TieredTank.java | 4 |
2 files changed, 115 insertions, 82 deletions
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java index 6f5f642456..80c1dcb2bc 100644 --- a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java +++ b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java @@ -2,6 +2,7 @@ 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.Random; @@ -48,7 +49,7 @@ public class Preloader_ClassTransformer2 { 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; @@ -182,83 +183,9 @@ public class Preloader_ClassTransformer2 { 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."); - } - NBTTagCompound mItemStorageNBT = (NBTTagCompound) ReflectionUtils.getField(customTransformer2, "mItemStorageNBT").get(o); - - MetaTileEntity tMetaTileEntity = (MetaTileEntity) ReflectionUtils.getField(customTransformer2, "mMetaTileEntity").get(o); - //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("GT.ItemNBT", 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.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()){ - ((MetaTileEntity) tMetaTileEntity).setItemNBT(tNBT); //Valid? Idk - } - else { - try { - Logger.REFLECTION("Trying to set NBT data to Itemstack from invalid tile, World might explode."); - ((MetaTileEntity) tMetaTileEntity).setItemNBT(tNBT); //Valid? Idk - } - catch (Throwable t){ - Logger.REFLECTION("getDropsHack1"); - t.printStackTrace(); - } - }*/ - - //Set stack NBT + tNBT = generateGetDropsNBT(o); if (!tNBT.hasNoTags()) rStack.setTagCompound(tNBT); return new ArrayList<ItemStack>(Arrays.asList(rStack)); } @@ -280,14 +207,36 @@ public class Preloader_ClassTransformer2 { 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) { + fffff.set(tGregTechTileEntity.getMetaTileEntity(), tNBT); + Logger.REFLECTION("Hopefully injected field data."); + } + else { + Logger.REFLECTION("Injected field is not null."); + } + } + 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)) { - - //Try inject this - tGregTechTileEntity.getMetaTileEntity().setItemNBT((NBTTagCompound) tItem.getTagCompound().copy()); - Logger.INFO("Hopefully saved ItemNBT data."); - + + + final EntityItem tItemEntity = new EntityItem(aWorld, (double) (aX + tRandom.nextFloat() * 0.8f + 0.1f), (double) (aY + tRandom.nextFloat() * 0.8f + 0.1f), @@ -317,4 +266,86 @@ public class Preloader_ClassTransformer2 { } } + public static NBTTagCompound generateGetDropsNBT(IGregTechTileEntity iGregTechTileEntity) { + Logger.INFO("DROP!"); + 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 = new NBTTagCompound(); + } + } + + //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()) { + return tNBT; + } + } + catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException a){ + Logger.REFLECTION("getDropsHack2"); + a.printStackTrace(); + } + return new NBTTagCompound(); + } + } diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GT_MetaTileEntity_TieredTank.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GT_MetaTileEntity_TieredTank.java index a177cf76ae..66ce69ffca 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GT_MetaTileEntity_TieredTank.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GT_MetaTileEntity_TieredTank.java @@ -133,11 +133,13 @@ public class GT_MetaTileEntity_TieredTank extends GT_MetaTileEntity_BasicTank { @Override public void setItemNBT(NBTTagCompound aNBT) { - Logger.INFO("Setting item nbt"); super.setItemNBT(aNBT); if (mFluid != null){ Logger.INFO("Setting item fluid nbt"); aNBT.setTag("mFluid", mFluid.writeToNBT(new NBTTagCompound())); + if (aNBT.hasKey("mFluid")) { + Logger.INFO("Set mFluid to NBT."); + } } } |