Patched grate drain functionality
This commit is contained in:
parent
30c094765f
commit
de39d2df09
1 changed files with 23 additions and 19 deletions
|
@ -212,12 +212,10 @@ class TileGrate extends TileFluidProvider(Material.rock) with IRotatable
|
|||
TileGrate.this.resetPath()
|
||||
return 0
|
||||
}
|
||||
val didFill = FluidUtility.fillBlock(TileGrate.this.worldObj, next.position, new FluidStack(fluidType,
|
||||
amount), true)
|
||||
|
||||
val didFill = FluidUtility.fillBlock(TileGrate.this.worldObj, next.position, new FluidStack(fluidType, amount), true)
|
||||
filled += didFill
|
||||
if (FluidUtility.getFluidAmountFromBlock(TileGrate.this.worldObj, next.position) >
|
||||
0 ||
|
||||
didFill > 0)
|
||||
if (FluidUtility.getFluidAmountFromBlock(TileGrate.this.worldObj, next.position) > 0 || didFill > 0)
|
||||
{
|
||||
addNextFill(next)
|
||||
}
|
||||
|
@ -243,6 +241,17 @@ class TileGrate extends TileFluidProvider(Material.rock) with IRotatable
|
|||
}
|
||||
}
|
||||
|
||||
def isConnected(check: Vector3): Boolean =
|
||||
{
|
||||
return true
|
||||
/*
|
||||
if (check == this.start)
|
||||
{
|
||||
return true
|
||||
}
|
||||
return false*/
|
||||
}
|
||||
|
||||
def startDrain(start: Vector3): Boolean =
|
||||
{
|
||||
fluidType = null
|
||||
|
@ -281,7 +290,6 @@ class TileGrate extends TileFluidProvider(Material.rock) with IRotatable
|
|||
}
|
||||
}
|
||||
}
|
||||
println("done")
|
||||
return drainNodes.size > 0
|
||||
}
|
||||
|
||||
|
@ -307,17 +315,21 @@ class TileGrate extends TileFluidProvider(Material.rock) with IRotatable
|
|||
var drainedAmount = 0
|
||||
var break = false
|
||||
|
||||
//Check all the potential drain coordinates
|
||||
while (!drainNodes.isEmpty && !break)
|
||||
{
|
||||
val fluidCoord = drainNodes.peek()
|
||||
|
||||
if (!isConnected(fluidCoord.position))
|
||||
{
|
||||
//The coordinate is not connected with the starting coordinate, therefore, we will not drain this.
|
||||
TileGrate.this.resetPath()
|
||||
return new FluidStack(fluidType, drainedAmount)
|
||||
}
|
||||
|
||||
if (FluidUtility.getFluidFromBlock(TileGrate.this.worldObj, fluidCoord.position) == null || this.fluidType.getID != FluidUtility.getFluidFromBlock(TileGrate.this.worldObj, fluidCoord.position).getID)
|
||||
{
|
||||
this.drainNodes.poll()
|
||||
drainNodes.poll()
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -327,12 +339,13 @@ class TileGrate extends TileFluidProvider(Material.rock) with IRotatable
|
|||
{
|
||||
if (checkAmount == 0)
|
||||
{
|
||||
this.drainNodes.poll()
|
||||
drainNodes.poll()
|
||||
}
|
||||
else
|
||||
{
|
||||
val fluidStack = FluidUtility.drainBlock(TileGrate.this.worldObj, fluidCoord.position, doDrain)
|
||||
this.drainNodes.poll()
|
||||
val fluidStack = FluidUtility.drainBlock(TileGrate.this.worldObj, fluidCoord.position, doDrain, 2)
|
||||
//TODO: Do a delayed block update!
|
||||
drainNodes.poll()
|
||||
if (fluidStack != null)
|
||||
{
|
||||
drainedAmount += fluidStack.amount
|
||||
|
@ -356,15 +369,6 @@ class TileGrate extends TileFluidProvider(Material.rock) with IRotatable
|
|||
}
|
||||
null
|
||||
}
|
||||
|
||||
def isConnected(check: Vector3): Boolean =
|
||||
{
|
||||
if (check == this.start)
|
||||
{
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
class ComparableVector(var position: Vector3, var iterations: Int) extends Comparable[ComparableVector]
|
||||
|
|
Loading…
Reference in a new issue