diff --git a/src/main/java/steamcraft/common/tiles/TileInjector.java b/src/main/java/steamcraft/common/tiles/TileInjector.java index a4750193..a3a1ce63 100644 --- a/src/main/java/steamcraft/common/tiles/TileInjector.java +++ b/src/main/java/steamcraft/common/tiles/TileInjector.java @@ -24,6 +24,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; +import net.minecraftforge.oredict.OreDictionary; import boilerplate.api.IOpenableGUI; import boilerplate.common.baseclasses.BaseTileWithInventory; @@ -37,30 +38,27 @@ import steamcraft.common.tiles.container.ContainerInjector; */ public class TileInjector extends BaseTileWithInventory implements IOpenableGUI, IFluidHandler { - protected static final int fluidPerTick = 20; - public FluidTank inBuffer; - public FluidTank outBuffer; + public FluidTank buffer; public TileInjector() { super(2); + this.buffer = new FluidTank(10000); } @Override public void readFromNBT(NBTTagCompound tag) { super.readFromNBT(tag); - this.inBuffer.readFromNBT(tag); - this.outBuffer.readFromNBT(tag); + this.buffer.readFromNBT(tag); } @Override public void writeToNBT(NBTTagCompound tag) { super.writeToNBT(tag); - this.inBuffer.writeToNBT(tag); - this.outBuffer.readFromNBT(tag); + this.buffer.writeToNBT(tag); } @Override @@ -70,11 +68,26 @@ public class TileInjector extends BaseTileWithInventory implements IOpenableGUI, if (!this.worldObj.isRemote) { - // Drain fluidcontainers into in buffer if (this.inventory[0] != null) - this.inventory[0] = FluidUtils.drainFluidContainer(inBuffer, this.inventory[0]); + { + ItemStack stack = FluidUtils.drainFluidContainer(buffer, this.inventory[0]); + if ((this.inventory[0] != null) && OreDictionary.itemMatches(this.inventory[0], stack, true)) + this.inventory[0].stackSize += stack.stackSize; + else if (this.inventory[0] == null) + this.inventory[0] = stack.copy(); + this.decrStackSize(0, stack.stackSize); + } if (this.inventory[1] != null) - this.inventory[1] = FluidUtils.fillFluidContainer(outBuffer, this.inventory[1]); + { + ItemStack stack = FluidUtils.fillFluidContainer(buffer, this.inventory[1]); + if (stack != null) + { + if ((this.inventory[1] != null) && OreDictionary.itemMatches(this.inventory[1], stack, true)) + this.inventory[1].stackSize += stack.stackSize; + else if (this.inventory[1] == null) + this.inventory[1] = stack.copy(); + } + } } } @@ -93,19 +106,19 @@ public class TileInjector extends BaseTileWithInventory implements IOpenableGUI, @Override public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { - return this.inBuffer.fill(resource, doFill); + return this.buffer.fill(resource, doFill); } @Override public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { - return this.outBuffer.drain(resource.amount, doDrain); + return this.buffer.drain(resource.amount, doDrain); } @Override public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { - return this.outBuffer.drain(maxDrain, doDrain); + return this.buffer.drain(maxDrain, doDrain); } @Override @@ -123,7 +136,7 @@ public class TileInjector extends BaseTileWithInventory implements IOpenableGUI, @Override public FluidTankInfo[] getTankInfo(ForgeDirection from) { - return new FluidTankInfo[] { this.inBuffer.getInfo(), this.outBuffer.getInfo() }; + return new FluidTankInfo[] { this.buffer.getInfo() }; } @Override diff --git a/src/main/java/steamcraft/common/tiles/TileLiquidBoiler.java b/src/main/java/steamcraft/common/tiles/TileLiquidBoiler.java index 398c339c..667d195c 100644 --- a/src/main/java/steamcraft/common/tiles/TileLiquidBoiler.java +++ b/src/main/java/steamcraft/common/tiles/TileLiquidBoiler.java @@ -28,8 +28,10 @@ import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.oredict.OreDictionary; import boilerplate.api.IOpenableGUI; +import boilerplate.common.utils.FluidUtils; import steamcraft.api.RecipeAPI; import steamcraft.client.gui.GuiLiquidBoiler; import steamcraft.common.blocks.machines.BlockBaseBoiler; @@ -135,13 +137,27 @@ public class TileLiquidBoiler extends TileBaseBoiler implements IOpenableGUI } } // Steam Draining - if ((this.inventory[2] != null) && (this.inventory[2].getItem() instanceof ItemCanister)) + if ((this.inventory[2] != null)) { - ItemCanister canister = (ItemCanister) this.inventory[2].getItem(); - if ((this.steamTank.getFluidAmount() >= steamPerTick) && (canister.getFluidAmount(this.inventory[2]) != canister.maxSteam)) + if ((this.inventory[2].getItem() instanceof ItemCanister)) { - canister.fill(this.inventory[2], new FluidStack(FluidRegistry.getFluid("steam"), steamPerTick), true); - this.steamTank.drain(steamPerTick, true); + ItemCanister canister = (ItemCanister) this.inventory[2].getItem(); + if ((this.steamTank.getFluidAmount() >= steamPerTick) && (canister.getFluidAmount(this.inventory[2]) != canister.maxSteam)) + { + canister.fill(this.inventory[2], new FluidStack(FluidRegistry.getFluid("steam"), steamPerTick), true); + this.steamTank.drain(steamPerTick, true); + } + } + else + { + ItemStack filledContainer = FluidUtils.fillFluidContainer(this.steamTank, this.inventory[2]); + if (filledContainer != null) + { + if ((this.inventory[2] != null) && OreDictionary.itemMatches(this.inventory[2], filledContainer, true)) + this.inventory[2].stackSize += filledContainer.stackSize; + else if (this.inventory[2] == null) + this.inventory[2] = filledContainer.copy(); + } } } // Burn fuel