From ae3cba60f6c6fe9bd1fc9562675d3fa87629f5b2 Mon Sep 17 00:00:00 2001 From: Robert S Date: Fri, 16 May 2014 14:41:11 -0400 Subject: [PATCH] More work to fix issues with tanks being filled by a bucket --- .../archaic/fluid/tank/TankNetwork.java | 30 ++- .../core/fluid/FluidDistributionetwork.java | 218 +++++++++--------- .../core/fluid/TileFluidDistribution.java | 14 +- 3 files changed, 135 insertions(+), 127 deletions(-) diff --git a/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TankNetwork.java b/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TankNetwork.java index 20fbccffb..130f4fafb 100644 --- a/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TankNetwork.java +++ b/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TankNetwork.java @@ -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 diff --git a/src/main/scala/resonantinduction/core/fluid/FluidDistributionetwork.java b/src/main/scala/resonantinduction/core/fluid/FluidDistributionetwork.java index f749f3424..677d9fe63 100644 --- a/src/main/scala/resonantinduction/core/fluid/FluidDistributionetwork.java +++ b/src/main/scala/resonantinduction/core/fluid/FluidDistributionetwork.java @@ -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 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(); + } } diff --git a/src/main/scala/resonantinduction/core/fluid/TileFluidDistribution.java b/src/main/scala/resonantinduction/core/fluid/TileFluidDistribution.java index 380d8bcce..51f97cf57 100644 --- a/src/main/scala/resonantinduction/core/fluid/TileFluidDistribution.java +++ b/src/main/scala/resonantinduction/core/fluid/TileFluidDistribution.java @@ -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(); } }