diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Java/gtPlusPlus/core/recipe/RECIPES_Machines.java | 2 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GT_MetaTileEntity_TieredTank.java | 271 |
2 files changed, 208 insertions, 65 deletions
diff --git a/src/Java/gtPlusPlus/core/recipe/RECIPES_Machines.java b/src/Java/gtPlusPlus/core/recipe/RECIPES_Machines.java index cd74a1d312..c866b66e98 100644 --- a/src/Java/gtPlusPlus/core/recipe/RECIPES_Machines.java +++ b/src/Java/gtPlusPlus/core/recipe/RECIPES_Machines.java @@ -504,7 +504,7 @@ public class RECIPES_Machines { RECIPE_IronPlatedBricks); //Add recycle recipes for the Iron Plated Bricks - GT_ModHandler.addPulverisationRecipe(RECIPE_IronPlatedBricks, ItemUtils.getItemStackOfAmountFromOreDictNoBroken("dustIron", 6), ItemUtils.getItemStackOfAmountFromOreDictNoBroken("dustClay", 2)); + GT_ModHandler.addPulverisationRecipe(RECIPE_IronPlatedBricks, ItemUtils.getItemStackOfAmountFromOreDictNoBroken("dustIron", 6), ItemUtils.getItemStackOfAmountFromOreDictNoBroken("dustClay", 2), true); GT_Values.RA.addArcFurnaceRecipe(RECIPE_IronPlatedBricks, new ItemStack[]{ItemUtils.getItemStackOfAmountFromOreDictNoBroken("ingotWroughtIron", 6), ItemUtils.getItemStackOfAmountFromOreDictNoBroken("dustAsh", 2)}, new int[]{0}, 32*20, 32); /*//Electrolyzer Frame Casing 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 6e3acc93fa..2d7e4472f0 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 @@ -12,15 +12,28 @@ import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.fluid.FluidUtils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; public class GT_MetaTileEntity_TieredTank extends GT_MetaTileEntity_BasicTank { - private NBTTagCompound mRecipeStuff; + @Override + public void closeInventory() { + tryForceNBTUpdate(); + super.closeInventory(); + } + + @Override + public boolean onWrenchRightClick(byte aSide, byte aWrenchingSide, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + tryForceNBTUpdate(); + return super.onWrenchRightClick(aSide, aWrenchingSide, aPlayer, aX, aY, aZ); + } + private String mFluidName; private int mFluidAmount; - private FluidStack mInternalTank; + private NBTTagCompound internalCraftingComponentsTag; public GT_MetaTileEntity_TieredTank(int aID, String aName, String aNameRegional, int aTier) { super(aID, aName, aNameRegional, aTier, 3, "Stores " + ((int) (Math.pow(2, aTier) * 32000)) + "L of fluid"); @@ -40,91 +53,129 @@ extends GT_MetaTileEntity_BasicTank { return aSide == 1 ? new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_POTIONBREWER_ACTIVE)} : new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_POTIONBREWER)}; } - - private boolean setVars(){ - if (mRecipeStuff == null){ - mRecipeStuff = new NBTTagCompound(); - } - Utils.LOG_INFO("setting Vars."); - if (mFluidName.equals("") || !mFluidName.equals(null)){ - if (mFluid != null) mFluidName = mFluid.getFluid().getName(); + @Override + public String[] getDescription() { + //setVars(); + if ((mFluidName.equals("Empty")||mFluidName.equals("")) || mFluidAmount <= 0){ + return new String[] {mDescription, CORE.GT_Tooltip}; } - else{ - if (mFluid != null){ - mInternalTank = mFluid; - if (!mFluidName.equalsIgnoreCase(mFluid.getFluid().getName())){ - mFluidName = mFluid.getFluid().getName(); + return new String[] {mDescription, "Stored Fluid: "+mFluidName, "Stored Amount: "+mFluidAmount+"l", CORE.GT_Tooltip}; + } + + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + //Utils.LOG_INFO(mFluidName+" Amxount: "+mFluidAmount+"L"); + //aNBT.setTag("GT.CraftingComponents", lRecipeStuff); + NBTTagCompound gtCraftingComponentsTag = aNBT.getCompoundTag("GT.CraftingComponents"); + + if (gtCraftingComponentsTag != null){ + Utils.LOG_INFO("Got Crafting Tag"); + if (gtCraftingComponentsTag.hasNoTags()){ + Utils.LOG_INFO("Crafting Tag has no tags"); + if (mFluid != null){ + Utils.LOG_INFO("mFluid was not null, Saving TileEntity NBT data."); + gtCraftingComponentsTag.setInteger("xAmount", mFluid.amount); + gtCraftingComponentsTag.setString("xFluid", mFluid.getFluid().getName()); + + //Backup the current tag + gtCraftingComponentsTag.setTag("backupTag", internalCraftingComponentsTag); + internalCraftingComponentsTag = gtCraftingComponentsTag; + + aNBT.setTag("GT.CraftingComponents", gtCraftingComponentsTag); } } else { - // Leave Values Blank. - return false; + Utils.LOG_INFO("Crafting Tag has tags"); + if (mFluid != null){ + Utils.LOG_INFO("mFluid was not null, Saving TileEntity NBT data."); + gtCraftingComponentsTag.setInteger("xAmount", mFluid.amount); + gtCraftingComponentsTag.setString("xFluid", mFluid.getFluid().getName()); + + //Backup the current tag + gtCraftingComponentsTag.setTag("backupTag", internalCraftingComponentsTag); + internalCraftingComponentsTag = gtCraftingComponentsTag; + + aNBT.setTag("GT.CraftingComponents", gtCraftingComponentsTag); + } } } - if (mFluidAmount <= 0){ - if (mFluid != null) mFluidAmount = mFluid.amount; + + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + NBTTagCompound gtCraftingComponentsTag = aNBT.getCompoundTag("GT.CraftingComponents"); + String xFluid = null; + int xAmount = 0; + if (gtCraftingComponentsTag.hasNoTags()){ + if (mFluid != null){ + Utils.LOG_INFO("mFluid was not null, Creating TileEntity NBT data."); + gtCraftingComponentsTag.setInteger("xAmount", mFluid.amount); + gtCraftingComponentsTag.setString("xFluid", mFluid.getFluid().getName()); + aNBT.setTag("GT.CraftingComponents", gtCraftingComponentsTag); + } } else { - if (mFluid != null){ - if (mFluidAmount != mFluid.amount){ - mFluidAmount = mFluid.amount; - } + + internalCraftingComponentsTag = gtCraftingComponentsTag.getCompoundTag("backupTag"); + + if (gtCraftingComponentsTag.hasKey("xFluid")){ + Utils.LOG_INFO("xFluid was not null, Loading TileEntity NBT data."); + xFluid = gtCraftingComponentsTag.getString("xFluid"); } - else { - // Leave Values Blank. - return false; + if (gtCraftingComponentsTag.hasKey("xAmount")){ + Utils.LOG_INFO("xAmount was not null, Loading TileEntity NBT data."); + xAmount = gtCraftingComponentsTag.getInteger("xAmount"); + } + if (xFluid != null && xAmount != 0){ + Utils.LOG_INFO("Setting Internal Tank, loading "+xAmount+"L of "+xFluid); + setInternalTank(xFluid, xAmount); } } - return true; + } - - @Override - public String[] getDescription() { - //setVars(); - if ((mFluidName.equals("Empty")||mFluidName.equals("")) || mFluidAmount <= 0){ - return new String[] {mDescription, CORE.GT_Tooltip}; + private boolean setInternalTank(String fluidName, int amount){ + FluidStack temp = FluidUtils.getFluidStack(fluidName, amount); + if (temp != null){ + if (mFluid == null){ + mFluid = temp; + Utils.LOG_INFO(temp.getFluid().getName()+" Amount: "+temp.amount+"L"); + } + else{ + Utils.LOG_INFO("Retained Fluid."); + Utils.LOG_INFO(mFluid.getFluid().getName()+" Amxount: "+mFluid.amount+"L"); + } + markDirty(); + return true; } - return new String[] {mDescription, "Stored Fluid: "+mFluidName, "Stored Amount: "+mFluidAmount+"l", CORE.GT_Tooltip}; - } + return false; + } + @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - setVars(); - NBTTagCompound lRecipeStuff = new NBTTagCompound(); - if (lRecipeStuff != null){ - lRecipeStuff.setString("mFluidName", mFluidName); - lRecipeStuff.setInteger("mFluidAmount", mFluidAmount); - Utils.LOG_INFO(mFluidName+" Amount: "+mFluidAmount+"L"); - - } - //Utils.LOG_INFO(mFluidName+" Amxount: "+mFluidAmount+"L"); - aNBT.setTag("GT.CraftingComponents", lRecipeStuff); + public FluidStack drain(int maxDrain, boolean doDrain) { + tryForceNBTUpdate(); + return super.drain(maxDrain, doDrain); } @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mRecipeStuff = aNBT.getCompoundTag("GT.CraftingComponents"); - mFluidName = mRecipeStuff.getString("mFluidName"); - mFluidAmount = mRecipeStuff.getInteger("mFluidAmount"); - //mInternalTank = mFluid; - mFluid = FluidUtils.getFluidStack(mFluidName, mFluidAmount); - setItemNBT(aNBT); + public int fill(FluidStack aFluid, boolean doFill) { + tryForceNBTUpdate(); + return super.fill(aFluid, doFill); } @Override public void setItemNBT(NBTTagCompound aNBT) { super.setItemNBT(aNBT); - NBTTagCompound lRecipeStuff = new NBTTagCompound(); - if (lRecipeStuff != null){ - lRecipeStuff.setString("mFluidName", mFluidName); - lRecipeStuff.setInteger("mFluidAmount", mFluidAmount); - } - aNBT.setTag("GT.CraftingComponents", lRecipeStuff); + Utils.LOG_INFO("setItemNBT"); + //aNBT.setTag("GT.CraftingComponents", lRecipeStuff); + } @@ -135,11 +186,17 @@ extends GT_MetaTileEntity_BasicTank { return true; } aBaseMetaTileEntity.openGUI(aPlayer); - setVars(); + tryForceNBTUpdate(); return true; } @Override + public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + super.onLeftclick(aBaseMetaTileEntity, aPlayer); + tryForceNBTUpdate(); + } + + @Override public boolean isSimpleMachine() { return true; } @@ -230,14 +287,100 @@ extends GT_MetaTileEntity_BasicTank { @Override public void onMachineBlockUpdate() { - this.getBaseMetaTileEntity().markDirty(); + tryForceNBTUpdate(); super.onMachineBlockUpdate(); } @Override public void onRemoval() { - this.getBaseMetaTileEntity().markDirty(); + tryForceNBTUpdate(); super.onRemoval(); } + @Override + public void onCloseGUI() { + super.onCloseGUI(); + tryForceNBTUpdate(); + } + + @Override + public FluidStack drain(ForgeDirection aSide, FluidStack aFluid, boolean doDrain) { + tryForceNBTUpdate(); + return super.drain(aSide, aFluid, doDrain); + } + + @Override + public FluidStack drain(ForgeDirection aSide, int maxDrain, boolean doDrain) { + tryForceNBTUpdate(); + return super.drain(aSide, maxDrain, doDrain); + } + + @Override + public int fill(ForgeDirection arg0, FluidStack arg1, boolean arg2) { + tryForceNBTUpdate(); + return super.fill(arg0, arg1, arg2); + } + + @Override + public int fill_default(ForgeDirection aSide, FluidStack aFluid, boolean doFill) { + tryForceNBTUpdate(); + return super.fill_default(aSide, aFluid, doFill); + } + + private static int mInternalSaveClock = 0; + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + + if (mInternalSaveClock != 20){ + mInternalSaveClock++; + } + else { + mInternalSaveClock = 0; + //tryForceNBTUpdate(); + } + + } + + private void tryForceNBTUpdate(){ + + //Block is invalid. + if (this == null || this.getBaseMetaTileEntity() == null){ + Utils.LOG_INFO("Block was not valid for saving data."); + return; + } + + //Don't need this to run clientside. + if (!this.getBaseMetaTileEntity().isServerSide()) { + return; + } + + //Internal Tag was not valid. + if (internalCraftingComponentsTag.hasNoTags() || internalCraftingComponentsTag == null){ + Utils.LOG_INFO("Internal NBT data tag was not valid."); + return; + } + + //Internal tag was valid and contains tags. + if (!this.internalCraftingComponentsTag.hasNoTags()){ + Utils.LOG_INFO("Found tags to save."); + saveNBTData(internalCraftingComponentsTag); + } + //Internal tag has no tags. + else { + Utils.LOG_INFO("Found no tags to save."); + } + + //Mark block for update + int x,y,z = 0; + x = this.getBaseMetaTileEntity().getXCoord(); + y = this.getBaseMetaTileEntity().getYCoord(); + z = this.getBaseMetaTileEntity().getZCoord(); + this.getBaseMetaTileEntity().getWorld().markBlockForUpdate(x, y, z); + + //Mark block dirty, let chunk know it's data has changed and it must be saved to disk. (Albeit slowly) + this.getBaseMetaTileEntity().markDirty(); + } + }
\ No newline at end of file |