Grates are now passive and rely on pipe network

This commit is contained in:
Calclavia 2014-01-24 18:20:35 +08:00
parent 38c1e70a59
commit 89c32f1744
2 changed files with 14 additions and 52 deletions

View file

@ -76,25 +76,6 @@ public class BlockGrate extends BlockRIRotatable
} }
} }
return ((TileGrate) entity).canDrain() ? drainIcon : fillIcon; return drainIcon;
}
@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;
} }
} }

View file

@ -37,13 +37,7 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain
private LiquidPathFinder pathFill; private LiquidPathFinder pathFill;
private Vector3 lastDrainOrigin; private Vector3 lastDrainOrigin;
public boolean markDrain = false;
public boolean canDrain = true;
public boolean canDrain()
{
return canDrain;
}
public LiquidPathFinder getFillFinder() 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); 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 we can drain, do the drain action.
*/ */
if (canDrain()) if (markDrain)
{ {
drainAroundArea(worldObj, new Vector3(this), 3); drainAroundArea(worldObj, new Vector3(this), 3);
markDrain = false;
} }
} }
} }
@ -132,6 +126,7 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain
TileEntity originTile = null; TileEntity originTile = null;
Set<Vector3> drainList = null; Set<Vector3> drainList = null;
if (drain instanceof IDrain) if (drain instanceof IDrain)
{ {
if (!((IDrain) drain).canDrain(((IDrain) drain).getDirection())) if (!((IDrain) drain).canDrain(((IDrain) drain).getDirection()))
@ -179,12 +174,13 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain
Vector3 drainLocation = fluidList.next(); Vector3 drainLocation = fluidList.next();
FluidStack drainStack = FluidUtility.drainBlock(world, drainLocation, false, 3); 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. */ /* Remove the block that we drained. */
FluidUtility.drainBlock(this.worldObj, drainLocation, true, update); FluidUtility.drainBlock(this.worldObj, drainLocation, true, update);
this.fill(null, drainStack, true); FluidUtility.fillTanksAllSides(worldObj, new Vector3(this), drainStack, true);
this.currentWorldEdits++; this.currentWorldEdits++;
fluidList.remove(); fluidList.remove();
@ -314,7 +310,7 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain
@Override @Override
public boolean canFill(ForgeDirection from, Fluid fluid) public boolean canFill(ForgeDirection from, Fluid fluid)
{ {
return this.getDirection() != from && !this.canDrain(); return this.getDirection() != from;
} }
@Override @Override
@ -325,11 +321,6 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain
return 0; return 0;
} }
if (canDrain())
{
return FluidUtility.fillTanksAllSides(worldObj, new Vector3(this), resource, doFill);
}
return this.fillArea(resource, doFill); return this.fillArea(resource, doFill);
} }
@ -342,12 +333,15 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain
@Override @Override
public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain)
{ {
if (resource != null)
return drain(from, resource.amount, doDrain);
return null; return null;
} }
@Override @Override
public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain)
{ {
markDrain = true;
return null; return null;
} }
@ -360,13 +354,13 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain
@Override @Override
public boolean canDrain(ForgeDirection direction) 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 @Override
public boolean canFill(ForgeDirection direction) 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 @Override
@ -375,17 +369,4 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain
this.currentWorldEdits++; 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);
}
} }