diff --git a/src/main/java/resonantinduction/mechanical/fluid/pump/BlockGrate.java b/src/main/java/resonantinduction/mechanical/fluid/pump/BlockGrate.java index 363ace14..a24d28a3 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/pump/BlockGrate.java +++ b/src/main/java/resonantinduction/mechanical/fluid/pump/BlockGrate.java @@ -76,25 +76,6 @@ public class BlockGrate extends BlockRIRotatable } } - return ((TileGrate) entity).canDrain() ? drainIcon : fillIcon; - } - - @Override - public boolean onSneakUseWrench(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ) - { - if (!world.isRemote) - { - TileEntity tile = world.getBlockTileEntity(x, y, z); - - if (tile instanceof TileGrate) - { - ((TileGrate) tile).canDrain = !((TileGrate) tile).canDrain; - entityPlayer.sendChatToPlayer(ChatMessageComponent.createFromText("Drain fluid mode: " + ((TileGrate) tile).canDrain())); - } - - return true; - } - - return true; + return drainIcon; } } diff --git a/src/main/java/resonantinduction/mechanical/fluid/pump/TileGrate.java b/src/main/java/resonantinduction/mechanical/fluid/pump/TileGrate.java index d84f951e..a1776724 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/pump/TileGrate.java +++ b/src/main/java/resonantinduction/mechanical/fluid/pump/TileGrate.java @@ -37,13 +37,7 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain private LiquidPathFinder pathFill; private Vector3 lastDrainOrigin; - - public boolean canDrain = true; - - public boolean canDrain() - { - return canDrain; - } + public boolean markDrain = false; public LiquidPathFinder getFillFinder() { @@ -95,13 +89,13 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain { this.getFillFinder().refresh().start(new Vector3(this).translate(this.getDirection()), TileGrate.MAX_WORLD_EDITS_PER_PROCESS, true); } - /** * If we can drain, do the drain action. */ - if (canDrain()) + if (markDrain) { drainAroundArea(worldObj, new Vector3(this), 3); + markDrain = false; } } } @@ -132,6 +126,7 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain TileEntity originTile = null; Set drainList = null; + if (drain instanceof IDrain) { if (!((IDrain) drain).canDrain(((IDrain) drain).getDirection())) @@ -179,12 +174,13 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain Vector3 drainLocation = fluidList.next(); FluidStack drainStack = FluidUtility.drainBlock(world, drainLocation, false, 3); + int filled = FluidUtility.fillTanksAllSides(worldObj, new Vector3(this), drainStack, false); - if (drainStack != null && this.fill(null, drainStack, false) >= drainStack.amount) + if (drainStack != null && filled >= drainStack.amount) { /* Remove the block that we drained. */ FluidUtility.drainBlock(this.worldObj, drainLocation, true, update); - this.fill(null, drainStack, true); + FluidUtility.fillTanksAllSides(worldObj, new Vector3(this), drainStack, true); this.currentWorldEdits++; fluidList.remove(); @@ -314,7 +310,7 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain @Override public boolean canFill(ForgeDirection from, Fluid fluid) { - return this.getDirection() != from && !this.canDrain(); + return this.getDirection() != from; } @Override @@ -325,11 +321,6 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain return 0; } - if (canDrain()) - { - return FluidUtility.fillTanksAllSides(worldObj, new Vector3(this), resource, doFill); - } - return this.fillArea(resource, doFill); } @@ -342,12 +333,15 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain @Override public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { + if (resource != null) + return drain(from, resource.amount, doDrain); return null; } @Override public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { + markDrain = true; return null; } @@ -360,13 +354,13 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain @Override public boolean canDrain(ForgeDirection direction) { - return direction == this.getDirection() && !this.worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord) && this.canDrain(); + return direction == this.getDirection() && !this.worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord); } @Override public boolean canFill(ForgeDirection direction) { - return direction == this.getDirection() && !this.worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord) && !this.canDrain(); + return direction == this.getDirection() && !this.worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord); } @Override @@ -375,17 +369,4 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain this.currentWorldEdits++; } - @Override - public void readFromNBT(NBTTagCompound nbt) - { - super.readFromNBT(nbt); - canDrain = nbt.getBoolean("canDrain"); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) - { - super.writeToNBT(nbt); - nbt.setBoolean("canDrain", canDrain); - } }