More work to fix issues with tanks being filled by a bucket

This commit is contained in:
Robert S 2014-05-16 14:41:11 -04:00
parent 0e5633fcd0
commit ae3cba60f6
3 changed files with 135 additions and 127 deletions

View file

@ -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() > 0)
{
IFluidDistribution tank = ((IFluidDistribution) getConnectors().toArray()[0]);
if (!((TileEntity) tank).getWorldObj().isRemote)
System.out.println(this.toString());
if (getConnectors().size() == 1)
{
IFluidDistribution tank = ((IFluidDistribution) getConnectors().toArray()[0]);
tank.getInternalTank().setFluid(networkTankFluid);
tank.onFluidChanged();
needsUpdate = false;
return;
}
else if (getConnectors().size() > 0)
{
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))
{
@ -133,8 +141,8 @@ public class TankNetwork extends FluidDistributionetwork
connector.onFluidChanged();
}
}
needsUpdate = false;
}
needsUpdate = false;
}
@Override

View file

@ -9,12 +9,9 @@ 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);
@ -47,7 +44,8 @@ public abstract class FluidDistributionetwork extends NodeNetwork<FluidDistribut
@Override
public void reconstruct()
{
this.tank = new FluidTank(0);
this.tank.setCapacity(0);
this.tank.setFluid(null);
super.reconstruct();
needsUpdate = true;
NetworkTickHandler.addNetwork(this);
@ -85,7 +83,10 @@ public abstract class FluidDistributionetwork extends NodeNetwork<FluidDistribut
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;
@ -118,7 +119,6 @@ public abstract class FluidDistributionetwork extends NodeNetwork<FluidDistribut
{
this.tank = new FluidTank(0);
}
return this.tank;
}

View file

@ -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();
}
}