Fixed grate spamming fluid

This commit is contained in:
Calclavia 2014-01-25 20:48:06 +08:00
parent dcc1a0caf5
commit 11b8227fea
5 changed files with 57 additions and 23 deletions

View file

@ -52,7 +52,7 @@ public class PartPipe extends PartFramedConnection<EnumPipeMaterial, IFluidPipe,
{ {
if (!world().isRemote) if (!world().isRemote)
{ {
if (isExtracting) if (isExtracting && getNetwork().getTank().getFluidAmount() < getNetwork().getTank().getCapacity())
{ {
for (int i = 0; i < this.getConnections().length; i++) for (int i = 0; i < this.getConnections().length; i++)
{ {
@ -71,15 +71,15 @@ public class PartPipe extends PartFramedConnection<EnumPipeMaterial, IFluidPipe,
@Override @Override
public boolean activate(EntityPlayer player, MovingObjectPosition part, ItemStack item) public boolean activate(EntityPlayer player, MovingObjectPosition part, ItemStack item)
{ {
if (!world().isRemote) if (BlockAdvanced.isUsableWrench(player, player.getCurrentEquippedItem(), x(), y(), z()))
{ {
if (BlockAdvanced.isUsableWrench(player, player.getCurrentEquippedItem(), x(), y(), z())) if (!world().isRemote)
{ {
isExtracting = !isExtracting; isExtracting = !isExtracting;
player.addChatMessage("Pipe extraction mode: " + isExtracting); player.addChatMessage("Pipe extraction mode: " + isExtracting);
BlockAdvanced.damageWrench(player, player.getCurrentEquippedItem(), x(), y(), z()); BlockAdvanced.damageWrench(player, player.getCurrentEquippedItem(), x(), y(), z());
return true;
} }
return true;
} }
return super.activate(player, part, item); return super.activate(player, part, item);
@ -121,7 +121,7 @@ public class PartPipe extends PartFramedConnection<EnumPipeMaterial, IFluidPipe,
@Override @Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill) public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
{ {
return this.getNetwork().fill(this, from, resource, doFill); return getNetwork().fill(this, from, resource, doFill);
} }
@Override @Override

View file

@ -327,7 +327,6 @@ public class LiquidPathFinder
} }
catch (Exception e) catch (Exception e)
{ {
System.out.println("FluidMech>>>BlockDrain>>FillArea>>Error>>CollectionSorter");
e.printStackTrace(); e.printStackTrace();
} }
} }

View file

@ -17,7 +17,9 @@ import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler; import net.minecraftforge.fluids.IFluidHandler;
import resonantinduction.api.fluid.IDrain; import resonantinduction.api.fluid.IDrain;
import universalelectricity.api.net.IUpdate;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
import universalelectricity.core.net.NetworkTickHandler;
import calclavia.lib.prefab.tile.TileAdvanced; import calclavia.lib.prefab.tile.TileAdvanced;
import calclavia.lib.utility.FluidUtility; import calclavia.lib.utility.FluidUtility;
@ -116,7 +118,8 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain
return 0; return 0;
} }
if (currentWorldEdits < MAX_FLUID_MODIFY_RATE) if (currentWorldEdits < MAX_FLUID_MODIFY_RATE)
{ int remainingVolume = resource.amount; {
int remainingVolume = resource.amount;
/* ID LIQUID BLOCK AND SET VARS FOR BLOCK PLACEMENT */ /* ID LIQUID BLOCK AND SET VARS FOR BLOCK PLACEMENT */
if (resource == null || resource.amount < FluidContainerRegistry.BUCKET_VOLUME) if (resource == null || resource.amount < FluidContainerRegistry.BUCKET_VOLUME)
@ -128,7 +131,6 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain
List<Vector3> blocks = new ArrayList<Vector3>(); List<Vector3> blocks = new ArrayList<Vector3>();
List<Vector3> filled = new ArrayList<Vector3>(); List<Vector3> filled = new ArrayList<Vector3>();
if (getFillList() == null || getFillList().size() == 0) if (getFillList() == null || getFillList().size() == 0)
{ {
doPathfinding(); doPathfinding();
@ -233,26 +235,56 @@ public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain
break; break;
} }
Vector3 drainLocation = iterator.next(); final Vector3 drainLocation = iterator.next();
FluidStack drainStack = FluidUtility.drainBlock(worldObj, drainLocation, false, 3); FluidStack drainStack = FluidUtility.drainBlock(worldObj, drainLocation, false, 3);
if (resultStack == null) if (resultStack == null)
{ {
drainStack = FluidUtility.drainBlock(worldObj, drainLocation, doDrain, 3); drainStack = FluidUtility.drainBlock(worldObj, drainLocation, doDrain, 2);
resultStack = drainStack; resultStack = drainStack;
} }
else if (resultStack.equals(drainStack)) else if (resultStack.equals(drainStack))
{ {
drainStack = FluidUtility.drainBlock(worldObj, drainLocation, doDrain, 3); drainStack = FluidUtility.drainBlock(worldObj, drainLocation, doDrain, 2);
resultStack.amount += drainStack.amount; resultStack.amount += drainStack.amount;
} }
if (doDrain) if (doDrain)
{ {
currentWorldEdits++; /**
iterator.remove(); * Add a delayed notify event to prevent infinite fluids from reconstructing
* quickly.
*/
NetworkTickHandler.addNetwork(new IUpdate()
{
int wait = 60;
@Override
public void update()
{
if (--wait <= 0)
{
worldObj.notifyBlocksOfNeighborChange(drainLocation.intX(), drainLocation.intY(), drainLocation.intZ(), worldObj.getBlockId(drainLocation.intX(), drainLocation.intY(), drainLocation.intZ()), 20);
}
}
@Override
public boolean canUpdate()
{
return true;
}
@Override
public boolean continueUpdate()
{
return wait > 0;
}
});
} }
currentWorldEdits++;
iterator.remove();
if (resultStack.amount >= maxDrain) if (resultStack.amount >= maxDrain)
{ {
break; break;

View file

@ -117,11 +117,8 @@ public class TilePump extends TileMachine implements IReadOut, ITileConnector, I
Set<Vector3> drainList = null; Set<Vector3> drainList = null;
if (drain instanceof IDrain) if (drain instanceof IDrain)
{ {
if (!((IDrain) drain).canDrain(((IDrain) drain).getDirection()))
{ origin = vec.modifyPositionFromSide(((IDrain) drain).getDirection());
return;
}
origin = vec.modifyPositionFromSide(((IDrain) drain).getDirection());
entity = origin.getTileEntity(world); entity = origin.getTileEntity(world);
if (entity instanceof IFluidHandler) if (entity instanceof IFluidHandler)
{ {

View file

@ -50,4 +50,10 @@ public class TileTank extends TileFluidNetwork
} }
} }
@Override
public boolean canFlow()
{
return false;
}
} }