More work to fix issues with tanks being filled by a bucket
This commit is contained in:
parent
0e5633fcd0
commit
ae3cba60f6
3 changed files with 135 additions and 127 deletions
|
@ -5,7 +5,6 @@ import java.util.LinkedList;
|
|||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import resonant.lib.utility.FluidUtility;
|
||||
import resonantinduction.core.fluid.FluidDistributionetwork;
|
||||
import resonantinduction.core.fluid.IFluidDistribution;
|
||||
|
||||
|
@ -23,22 +22,30 @@ public class TankNetwork extends FluidDistributionetwork
|
|||
@Override
|
||||
public void update()
|
||||
{
|
||||
System.out.println("\nTankNetwork>Tank: " + getTank());
|
||||
System.out.println("TankNetwork>Fluid: " + getTank().getFluid());
|
||||
System.out.println("TankNetwork>Tank: " + getTank().getFluidAmount());
|
||||
final FluidStack networkTankFluid = getTank().getFluid();
|
||||
int lowestY = 255;
|
||||
int highestY = 0;
|
||||
int connectorCount = 0;
|
||||
int totalFluid = networkTankFluid != null ? networkTankFluid.amount : 0;
|
||||
boolean didChange = false;
|
||||
|
||||
//If we only have one tank only fill one tank
|
||||
if (getConnectors().size() == 1)
|
||||
|
||||
if (getConnectors().size() > 0)
|
||||
{
|
||||
|
||||
IFluidDistribution tank = ((IFluidDistribution) getConnectors().toArray()[0]);
|
||||
tank.getInternalTank().setFluid(networkTankFluid);
|
||||
tank.onFluidChanged();
|
||||
}
|
||||
else if (getConnectors().size() > 0)
|
||||
{
|
||||
if (!((TileEntity) tank).getWorldObj().isRemote)
|
||||
System.out.println(this.toString());
|
||||
if (getConnectors().size() == 1)
|
||||
{
|
||||
tank.getInternalTank().setFluid(networkTankFluid);
|
||||
tank.onFluidChanged();
|
||||
needsUpdate = false;
|
||||
return;
|
||||
}
|
||||
if (networkTankFluid != null)
|
||||
{
|
||||
//If fluid is gaseous fill all tanks equally
|
||||
|
@ -97,7 +104,8 @@ public class TankNetwork extends FluidDistributionetwork
|
|||
|
||||
if (connectorCount <= 0)
|
||||
continue;
|
||||
|
||||
if (!((TileEntity) tank).getWorldObj().isRemote)
|
||||
System.out.println("Filling Y: " + yLevel + " Tanks: " + connectorCount);
|
||||
//Loop threw tanks in each level
|
||||
for (IFluidDistribution connector : heightMap.get(yLevel))
|
||||
{
|
||||
|
@ -114,7 +122,7 @@ public class TankNetwork extends FluidDistributionetwork
|
|||
connector.getInternalTank().setFluid(null);
|
||||
totalFluid -= connector.getInternalTank().fill(input, true);
|
||||
connector.onFluidChanged();
|
||||
|
||||
|
||||
if (connectorCount > 1)
|
||||
connectorCount--;
|
||||
|
||||
|
@ -133,8 +141,8 @@ public class TankNetwork extends FluidDistributionetwork
|
|||
connector.onFluidChanged();
|
||||
}
|
||||
}
|
||||
needsUpdate = false;
|
||||
}
|
||||
needsUpdate = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,133 +9,133 @@ import universalelectricity.api.net.IUpdate;
|
|||
import universalelectricity.core.net.NetworkTickHandler;
|
||||
import universalelectricity.core.net.NodeNetwork;
|
||||
|
||||
/**
|
||||
* The fluid network for instantaneous equal distribution between all nodes. Used for tanks.
|
||||
/** The fluid network for instantaneous equal distribution between all nodes. Used for tanks.
|
||||
*
|
||||
* @author DarkCow, Calclavia
|
||||
*
|
||||
*/
|
||||
* @author DarkCow, Calclavia */
|
||||
public abstract class FluidDistributionetwork extends NodeNetwork<FluidDistributionetwork, IFluidDistribution, IFluidHandler> implements IUpdate
|
||||
{
|
||||
protected FluidTank tank = new FluidTank(0);
|
||||
public boolean needsUpdate = false;
|
||||
protected FluidTank tank = new FluidTank(0);
|
||||
public boolean needsUpdate = false;
|
||||
|
||||
public FluidDistributionetwork()
|
||||
{
|
||||
super(IFluidDistribution.class);
|
||||
}
|
||||
public FluidDistributionetwork()
|
||||
{
|
||||
super(IFluidDistribution.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addConnector(IFluidDistribution connector)
|
||||
{
|
||||
super.addConnector(connector);
|
||||
NetworkTickHandler.addNetwork(this);
|
||||
}
|
||||
@Override
|
||||
public void addConnector(IFluidDistribution connector)
|
||||
{
|
||||
super.addConnector(connector);
|
||||
NetworkTickHandler.addNetwork(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUpdate()
|
||||
{
|
||||
return needsUpdate && getConnectors().size() > 0;
|
||||
}
|
||||
@Override
|
||||
public boolean canUpdate()
|
||||
{
|
||||
return needsUpdate && getConnectors().size() > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean continueUpdate()
|
||||
{
|
||||
return canUpdate();
|
||||
}
|
||||
@Override
|
||||
public boolean continueUpdate()
|
||||
{
|
||||
return canUpdate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reconstruct()
|
||||
{
|
||||
this.tank = new FluidTank(0);
|
||||
super.reconstruct();
|
||||
needsUpdate = true;
|
||||
NetworkTickHandler.addNetwork(this);
|
||||
}
|
||||
@Override
|
||||
public void reconstruct()
|
||||
{
|
||||
this.tank.setCapacity(0);
|
||||
this.tank.setFluid(null);
|
||||
super.reconstruct();
|
||||
needsUpdate = true;
|
||||
NetworkTickHandler.addNetwork(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reconstructConnector(IFluidDistribution connector)
|
||||
{
|
||||
if (connector.getNetwork() instanceof FluidDistributionetwork)
|
||||
connector.setNetwork(this);
|
||||
@Override
|
||||
public void reconstructConnector(IFluidDistribution connector)
|
||||
{
|
||||
if (connector.getNetwork() instanceof FluidDistributionetwork)
|
||||
connector.setNetwork(this);
|
||||
|
||||
FluidTank connectorTank = connector.getInternalTank();
|
||||
FluidTank connectorTank = connector.getInternalTank();
|
||||
|
||||
if (connectorTank != null)
|
||||
{
|
||||
tank.setCapacity(tank.getCapacity() + connectorTank.getCapacity());
|
||||
if (connectorTank != null)
|
||||
{
|
||||
tank.setCapacity(tank.getCapacity() + connectorTank.getCapacity());
|
||||
|
||||
if (connectorTank.getFluid() != null)
|
||||
{
|
||||
if (tank.getFluid() == null)
|
||||
{
|
||||
tank.setFluid(connectorTank.getFluid().copy());
|
||||
}
|
||||
else if (tank.getFluid().isFluidEqual(connectorTank.getFluid()))
|
||||
{
|
||||
tank.getFluid().amount += connectorTank.getFluidAmount();
|
||||
}
|
||||
else if (tank.getFluid() != null)
|
||||
{
|
||||
// TODO: Cause a mixing event
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (connectorTank.getFluid() != null)
|
||||
{
|
||||
if (tank.getFluid() == null)
|
||||
{
|
||||
tank.setFluid(connectorTank.getFluid().copy());
|
||||
}
|
||||
else if (tank.getFluid().isFluidEqual(connectorTank.getFluid()))
|
||||
{
|
||||
tank.getFluid().amount += connectorTank.getFluidAmount();
|
||||
}
|
||||
else if (tank.getFluid() != null)
|
||||
{
|
||||
// TODO: Cause a mixing event
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int fill(IFluidDistribution source, ForgeDirection from, FluidStack resource, boolean doFill)
|
||||
{
|
||||
int fill = this.getTank().fill(resource.copy(), doFill);
|
||||
needsUpdate = true;
|
||||
NetworkTickHandler.addNetwork(this);
|
||||
return fill;
|
||||
}
|
||||
public int fill(IFluidDistribution source, ForgeDirection from, FluidStack resource, boolean doFill)
|
||||
{
|
||||
System.out.println("FluidDistributionNetwork: Filling " + resource + " Tank: " + this.getTank().getFluidAmount());
|
||||
System.out.println("FluidDistributionNetwork: Tank Contains Fluid: " + getTank().getFluid() + " Tank: " + this.getTank().getFluidAmount());
|
||||
int fill = this.getTank().fill(resource.copy(), doFill);
|
||||
System.out.println("FluidDistributionNetwork: Filled " + fill + " Tank: " + this.getTank().getFluidAmount());
|
||||
needsUpdate = true;
|
||||
NetworkTickHandler.addNetwork(this);
|
||||
return fill;
|
||||
}
|
||||
|
||||
public FluidStack drain(IFluidDistribution source, ForgeDirection from, FluidStack resource, boolean doDrain)
|
||||
{
|
||||
if (resource != null && resource.isFluidEqual(getTank().getFluid()))
|
||||
{
|
||||
FluidStack drain = getTank().drain(resource.amount, doDrain);
|
||||
needsUpdate = true;
|
||||
NetworkTickHandler.addNetwork(this);
|
||||
return drain;
|
||||
}
|
||||
public FluidStack drain(IFluidDistribution source, ForgeDirection from, FluidStack resource, boolean doDrain)
|
||||
{
|
||||
if (resource != null && resource.isFluidEqual(getTank().getFluid()))
|
||||
{
|
||||
FluidStack drain = getTank().drain(resource.amount, doDrain);
|
||||
needsUpdate = true;
|
||||
NetworkTickHandler.addNetwork(this);
|
||||
return drain;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public FluidStack drain(IFluidDistribution source, ForgeDirection from, int resource, boolean doDrain)
|
||||
{
|
||||
FluidStack drain = getTank().drain(resource, doDrain);
|
||||
needsUpdate = true;
|
||||
NetworkTickHandler.addNetwork(this);
|
||||
return drain;
|
||||
}
|
||||
public FluidStack drain(IFluidDistribution source, ForgeDirection from, int resource, boolean doDrain)
|
||||
{
|
||||
FluidStack drain = getTank().drain(resource, doDrain);
|
||||
needsUpdate = true;
|
||||
NetworkTickHandler.addNetwork(this);
|
||||
return drain;
|
||||
}
|
||||
|
||||
public FluidTank getTank()
|
||||
{
|
||||
if (this.tank == null)
|
||||
{
|
||||
this.tank = new FluidTank(0);
|
||||
}
|
||||
public FluidTank getTank()
|
||||
{
|
||||
if (this.tank == null)
|
||||
{
|
||||
this.tank = new FluidTank(0);
|
||||
}
|
||||
return this.tank;
|
||||
}
|
||||
|
||||
return this.tank;
|
||||
}
|
||||
@Override
|
||||
public Class getConnectorClass()
|
||||
{
|
||||
return IFluidDistribution.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class getConnectorClass()
|
||||
{
|
||||
return IFluidDistribution.class;
|
||||
}
|
||||
public FluidTankInfo[] getTankInfo()
|
||||
{
|
||||
return new FluidTankInfo[] { getTank().getInfo() };
|
||||
}
|
||||
|
||||
public FluidTankInfo[] getTankInfo()
|
||||
{
|
||||
return new FluidTankInfo[] { getTank().getInfo() };
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return super.toString() + " Volume: " + this.tank.getFluidAmount();
|
||||
}
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return super.toString() + " Volume: " + this.tank.getFluidAmount();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,29 +14,28 @@ import universalelectricity.api.vector.Vector3;
|
|||
* @author DarkGuardsman */
|
||||
public abstract class TileFluidDistribution extends TileFluidNode implements IFluidDistribution
|
||||
{
|
||||
public TileFluidDistribution(Material material, int tankSize)
|
||||
{
|
||||
super(material, tankSize);
|
||||
}
|
||||
|
||||
protected Object[] connectedBlocks = new Object[6];
|
||||
|
||||
/** Network used to link all parts together */
|
||||
protected FluidDistributionetwork network;
|
||||
|
||||
public TileFluidDistribution(Material material, int tankSize)
|
||||
{
|
||||
super(material, tankSize);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initiate()
|
||||
{
|
||||
super.initiate();
|
||||
refresh();
|
||||
getNetwork().reconstruct();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onNeighborChanged()
|
||||
{
|
||||
refresh();
|
||||
getNetwork().reconstruct();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -104,8 +103,9 @@ public abstract class TileFluidDistribution extends TileFluidNode implements IFl
|
|||
/** Only send packet updates if visuallyConnected changed. */
|
||||
if (previousConnections != renderSides)
|
||||
{
|
||||
sendRenderUpdate();
|
||||
getNetwork().update();
|
||||
getNetwork().reconstruct();
|
||||
sendRenderUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue