diff --git a/src/main/java/resonantinduction/api/fluid/IFluidConnector.java b/src/main/java/resonantinduction/api/fluid/IFluidConnector.java index cde88141..b38ecc3d 100644 --- a/src/main/java/resonantinduction/api/fluid/IFluidConnector.java +++ b/src/main/java/resonantinduction/api/fluid/IFluidConnector.java @@ -4,14 +4,16 @@ import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.IFluidHandler; import universalelectricity.api.net.IConnector; -/** Generic interface for any tile that acts as part of a fluid network. Generally network assume +/** + * Generic interface for any tile that acts as part of a fluid network. Generally network assume * that each part can only support one fluid tank internally * - * @author DarkGuardsman */ + * @author DarkGuardsman + */ public interface IFluidConnector extends IConnector, IFluidHandler { - /** FluidTank that the network will have access to fill or drain */ - public FluidTank getInternalTank(); - - public void onFluidChanged(); + /** FluidTank that the network will have access to fill or drain */ + public FluidTank getInternalTank(); + + public void onFluidChanged(); } diff --git a/src/main/java/resonantinduction/mechanical/fluid/pipe/TilePipe.java b/src/main/java/resonantinduction/mechanical/fluid/pipe/TilePipe.java index c2f2388f..0fd88ec6 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/pipe/TilePipe.java +++ b/src/main/java/resonantinduction/mechanical/fluid/pipe/TilePipe.java @@ -13,140 +13,140 @@ import calclavia.lib.render.ColorCode.IColorCoded; public class TilePipe extends TileFluidNetwork implements IColorCoded, IFluidPipe { - /** gets the current color mark of the pipe */ - @Override - public ColorCode getColor() - { - return EnumPipeType.getColorCode(this.colorID); - } + /** gets the current color mark of the pipe */ + @Override + public ColorCode getColor() + { + return EnumPipeType.getColorCode(this.colorID); + } - /** sets the current color mark of the pipe */ - @Override - public boolean setColor(Object cc) - { - if (!worldObj.isRemote) - { - int p = this.colorID; - this.colorID = EnumPipeType.getUpdatedID(colorID, ColorCode.get(cc)); - return p != this.colorID; - } - return false; - } + /** sets the current color mark of the pipe */ + @Override + public boolean setColor(Object cc) + { + if (!worldObj.isRemote) + { + int p = this.colorID; + this.colorID = EnumPipeType.getUpdatedID(colorID, ColorCode.get(cc)); + return p != this.colorID; + } + return false; + } - @Override - public void validateConnectionSide(TileEntity tileEntity, ForgeDirection side) - { - int meta = new Vector3(this).getBlockMetadata(this.worldObj); - if (meta < FluidContainerMaterial.values().length) - { - FluidContainerMaterial pipeMat = FluidContainerMaterial.values()[meta]; - if (pipeMat == FluidContainerMaterial.WOOD || pipeMat == FluidContainerMaterial.STONE) - { - if (side == ForgeDirection.UP) - { - return; - } - } - } - if (tileEntity instanceof TilePipe) - { - int metaOther = new Vector3(tileEntity).getBlockMetadata(this.worldObj); - if (meta < FluidContainerMaterial.values().length && metaOther < FluidContainerMaterial.values().length) - { - FluidContainerMaterial pipeMat = FluidContainerMaterial.values()[meta]; - FluidContainerMaterial pipeMatOther = FluidContainerMaterial.values()[metaOther]; - // Same pipe types can connect - if (pipeMat == pipeMatOther) - { - this.getNetwork().merge(((IFluidPipe) tileEntity).getNetwork()); - connectedBlocks[side.ordinal()] = tileEntity; - setRenderSide(side, true); - } - else if ((pipeMat == FluidContainerMaterial.WOOD || pipeMat == FluidContainerMaterial.STONE) && (pipeMatOther == FluidContainerMaterial.WOOD || pipeMatOther == FluidContainerMaterial.STONE)) - { - // Wood and stone pipes can connect to each other but not other pipe types since - // they are more like a trough than a pipe - this.getNetwork().merge(((IFluidPipe) tileEntity).getNetwork()); - connectedBlocks[side.ordinal()] = tileEntity; - setRenderSide(side, true); - } - else if (pipeMat != FluidContainerMaterial.WOOD && pipeMat != FluidContainerMaterial.STONE && pipeMatOther != FluidContainerMaterial.WOOD && pipeMatOther != FluidContainerMaterial.STONE && pipeMat != FluidContainerMaterial.GLASS && pipeMatOther != FluidContainerMaterial.GLASS) - { - /* - * Any other pipe can connect to each other as long as the color matches except - * for glass which only works with itself at the moment - */ - this.getNetwork().merge(((IFluidPipe) tileEntity).getNetwork()); - connectedBlocks[side.ordinal()] = tileEntity; - setRenderSide(side, true); - } - } - } - else if (tileEntity instanceof IFluidHandler) - { - connectedBlocks[side.ordinal()] = tileEntity; - setRenderSide(side, true); - } + @Override + public void validateConnectionSide(TileEntity tileEntity, ForgeDirection side) + { + int meta = new Vector3(this).getBlockMetadata(this.worldObj); + if (meta < FluidContainerMaterial.values().length) + { + FluidContainerMaterial pipeMat = FluidContainerMaterial.values()[meta]; + if (pipeMat == FluidContainerMaterial.WOOD || pipeMat == FluidContainerMaterial.STONE) + { + if (side == ForgeDirection.UP) + { + return; + } + } + } + if (tileEntity instanceof TilePipe) + { + int metaOther = new Vector3(tileEntity).getBlockMetadata(this.worldObj); + if (meta < FluidContainerMaterial.values().length && metaOther < FluidContainerMaterial.values().length) + { + FluidContainerMaterial pipeMat = FluidContainerMaterial.values()[meta]; + FluidContainerMaterial pipeMatOther = FluidContainerMaterial.values()[metaOther]; + // Same pipe types can connect + if (pipeMat == pipeMatOther) + { + this.getNetwork().merge(((IFluidPipe) tileEntity).getNetwork()); + connectedBlocks[side.ordinal()] = tileEntity; + setRenderSide(side, true); + } + else if ((pipeMat == FluidContainerMaterial.WOOD || pipeMat == FluidContainerMaterial.STONE) && (pipeMatOther == FluidContainerMaterial.WOOD || pipeMatOther == FluidContainerMaterial.STONE)) + { + // Wood and stone pipes can connect to each other but not other pipe types since + // they are more like a trough than a pipe + this.getNetwork().merge(((IFluidPipe) tileEntity).getNetwork()); + connectedBlocks[side.ordinal()] = tileEntity; + setRenderSide(side, true); + } + else if (pipeMat != FluidContainerMaterial.WOOD && pipeMat != FluidContainerMaterial.STONE && pipeMatOther != FluidContainerMaterial.WOOD && pipeMatOther != FluidContainerMaterial.STONE && pipeMat != FluidContainerMaterial.GLASS && pipeMatOther != FluidContainerMaterial.GLASS) + { + /* + * Any other pipe can connect to each other as long as the color matches except + * for glass which only works with itself at the moment + */ + this.getNetwork().merge(((IFluidPipe) tileEntity).getNetwork()); + connectedBlocks[side.ordinal()] = tileEntity; + setRenderSide(side, true); + } + } + } + else if (tileEntity instanceof IFluidHandler) + { + connectedBlocks[side.ordinal()] = tileEntity; + setRenderSide(side, true); + } - } + } - @Override - public PipeNetwork getNetwork() - { - if (this.network == null) - { - this.network = new PipeNetwork(); - this.network.addConnector(this); - } - return (PipeNetwork) this.network; - } + @Override + public IFluidNetwork getNetwork() + { + if (this.network == null) + { + this.network = new PipeNetwork(); + this.network.addConnector(this); + } + return this.network; + } - @Override - public void setNetwork(IFluidNetwork network) - { - if (network instanceof PipeNetwork) - { - this.network = (PipeNetwork) network; - } - } + @Override + public void setNetwork(IFluidNetwork network) + { + if (network instanceof PipeNetwork) + { + this.network = (PipeNetwork) network; + } + } - @Override - public void sendTankUpdate() - { - if (this.getBlockMetadata() == FluidContainerMaterial.WOOD.ordinal() || this.getBlockMetadata() == FluidContainerMaterial.STONE.ordinal()) - { - super.sendTankUpdate(); - } - } + @Override + public void sendTankUpdate() + { + if (this.getBlockMetadata() == FluidContainerMaterial.WOOD.ordinal() || this.getBlockMetadata() == FluidContainerMaterial.STONE.ordinal()) + { + super.sendTankUpdate(); + } + } - @Override - public boolean canDrain(ForgeDirection from, Fluid fluid) - { - return false; - } + @Override + public boolean canDrain(ForgeDirection from, Fluid fluid) + { + return false; + } - @Override - public int getPressureIn(ForgeDirection side) - { - return this.getMaxPressure(); - } + @Override + public int getPressureIn(ForgeDirection side) + { + return this.getMaxPressure(); + } - @Override - public void onWrongPressure(ForgeDirection side, int pressure) - { - // TODO Auto-generated method stub + @Override + public void onWrongPressure(ForgeDirection side, int pressure) + { + // TODO Auto-generated method stub - } + } - @Override - public int getMaxPressure() - { - return 10000; - } + @Override + public int getMaxPressure() + { + return 10000; + } - @Override - public int getMaxFlowRate() - { - return 1000; - } + @Override + public int getMaxFlowRate() + { + return 1000; + } } diff --git a/src/main/java/resonantinduction/mechanical/fluid/prefab/TileEntityFluidDevice.java b/src/main/java/resonantinduction/mechanical/fluid/prefab/TileEntityFluidDevice.java deleted file mode 100644 index efa6ba50..00000000 --- a/src/main/java/resonantinduction/mechanical/fluid/prefab/TileEntityFluidDevice.java +++ /dev/null @@ -1,18 +0,0 @@ -package resonantinduction.mechanical.fluid.prefab; - -import java.util.Random; - -import resonantinduction.core.tilenetwork.prefab.NetworkTileEntities; -import calclavia.lib.prefab.tile.TileAdvanced; - -public abstract class TileEntityFluidDevice extends TileAdvanced -{ - public Random random = new Random(); - - @Override - public void invalidate() - { - super.invalidate(); - NetworkTileEntities.invalidate(this); - } -} diff --git a/src/main/java/resonantinduction/mechanical/fluid/prefab/TileEntityFluidStorage.java b/src/main/java/resonantinduction/mechanical/fluid/prefab/TileEntityFluidStorage.java deleted file mode 100644 index b4bccbbd..00000000 --- a/src/main/java/resonantinduction/mechanical/fluid/prefab/TileEntityFluidStorage.java +++ /dev/null @@ -1,116 +0,0 @@ -package resonantinduction.mechanical.fluid.prefab; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; -import calclavia.lib.render.ColorCode.IColorCoded; -import calclavia.lib.utility.FluidUtility; - -public abstract class TileEntityFluidStorage extends TileEntityFluidDevice implements IFluidHandler, IColorCoded -{ - - public FluidTank fluidTank; - - - @Override - public int fill(ForgeDirection from, FluidStack resource, boolean doFill) - { - if (resource == null || resource.getFluid() == null) - { - return 0; - } - else if (this.getTank().getFluid() != null && !resource.isFluidEqual(this.getTank().getFluid())) - { - return 0; - } - return this.getTank().fill(resource, doFill); - } - - @Override - public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) - { - if (this.getTank().getFluid() == null) - { - return null; - } - FluidStack stack = this.getTank().getFluid(); - if (maxDrain < stack.amount) - { - stack = FluidUtility.getStack(stack, maxDrain); - } - return this.getTank().drain(maxDrain, doDrain); - } - - @Override - public FluidTankInfo[] getTankInfo(ForgeDirection from) - { - if (this.getTank() != null) - { - return new FluidTankInfo[] { new FluidTankInfo(this.getTank()) }; - } - return new FluidTankInfo[1]; - } - - @Override - public void readFromNBT(NBTTagCompound nbt) - { - super.readFromNBT(nbt); - if (nbt.hasKey("stored")) - { - NBTTagCompound tag = nbt.getCompoundTag("stored"); - String name = tag.getString("LiquidName"); - int amount = nbt.getInteger("Amount"); - Fluid fluid = FluidRegistry.getFluid(name); - if (fluid != null) - { - FluidStack liquid = new FluidStack(fluid, amount); - getTank().setFluid(liquid); - } - } - else - { - // System.out.println("Loading fluid tank"); - getTank().readFromNBT(nbt.getCompoundTag("FluidTank")); - // System.out.println("Tank: "+ (getTank().getFluid() != null ? - // getTank().getFluid().fluidID +"@"+getTank().getFluid().amount+"mb" : "Empty")); - - } - } - - @Override - public void writeToNBT(NBTTagCompound nbt) - { - super.writeToNBT(nbt); - if (this.getTank() != null) - { - // System.out.println("Saving fluid tank"); - // System.out.println("Tank: "+ (getTank().getFluid() != null ? - // getTank().getFluid().fluidID +"@"+getTank().getFluid().amount+"mb" : "Empty")); - nbt.setCompoundTag("FluidTank", this.getTank().writeToNBT(new NBTTagCompound())); - } - } - - /** Is the internal tank full */ - public boolean isFull() - { - return this.getTank().getFluidAmount() >= this.getTank().getCapacity(); - } - - public FluidTank getTank() - { - if (this.fluidTank == null) - { - this.fluidTank = new FluidTank(this.getTankSize()); - } - return this.fluidTank; - } - - /** gets the max storage limit of the tank */ - public abstract int getTankSize(); - -} diff --git a/src/main/java/resonantinduction/mechanical/fluid/prefab/TileFluidNetwork.java b/src/main/java/resonantinduction/mechanical/fluid/prefab/TileFluidNetwork.java index e18d731e..16b9ae64 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/prefab/TileFluidNetwork.java +++ b/src/main/java/resonantinduction/mechanical/fluid/prefab/TileFluidNetwork.java @@ -13,14 +13,14 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.FluidTankInfo; import resonantinduction.api.IReadOut; -import resonantinduction.api.fluid.IFluidNetwork; import resonantinduction.api.fluid.IFluidConnector; +import resonantinduction.api.fluid.IFluidNetwork; import resonantinduction.core.ResonantInduction; import resonantinduction.mechanical.Mechanical; -import resonantinduction.mechanical.fluid.network.FluidNetwork; import universalelectricity.api.vector.Vector3; import calclavia.lib.network.IPacketReceiverWithID; import calclavia.lib.network.PacketHandler; +import calclavia.lib.prefab.tile.TileAdvanced; import calclavia.lib.utility.FluidUtility; import com.google.common.io.ByteArrayDataInput; @@ -34,9 +34,8 @@ import cpw.mods.fml.relauncher.SideOnly; * @author DarkCow * */ -public abstract class TileFluidNetwork extends TileEntityFluidDevice implements IFluidConnector, IPacketReceiverWithID, IReadOut +public abstract class TileFluidNetwork extends TileAdvanced implements IFluidConnector, IPacketReceiverWithID, IReadOut { - public static int refreshRate = 10; protected FluidTank tank = new FluidTank(1 * FluidContainerRegistry.BUCKET_VOLUME); protected Object[] connectedBlocks = new Object[6]; protected int colorID = 0; @@ -45,7 +44,7 @@ public abstract class TileFluidNetwork extends TileEntit protected FluidStack prevStack = null; /** Network used to link all parts together */ - protected N network; + protected IFluidNetwork network; public static final int PACKET_DESCRIPTION = Mechanical.contentRegistry.getNextPacketID(); public static final int PACKET_RENDER = Mechanical.contentRegistry.getNextPacketID(); @@ -61,7 +60,8 @@ public abstract class TileFluidNetwork extends TileEntit public void initiate() { super.initiate(); - this.refresh(); + refresh(); + getNetwork().reconstruct(); } @Override @@ -71,7 +71,7 @@ public abstract class TileFluidNetwork extends TileEntit if (!worldObj.isRemote) { - if (this.updateFluidRender && ticks % TileFluidNetwork.refreshRate == 0) + if (this.updateFluidRender) { if (!FluidUtility.matchExact(prevStack, this.getInternalTank().getFluid())) { diff --git a/src/main/java/resonantinduction/mechanical/fluid/pump/TileGrate.java b/src/main/java/resonantinduction/mechanical/fluid/pump/TileGrate.java index cdfcb893..49b31ade 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/pump/TileGrate.java +++ b/src/main/java/resonantinduction/mechanical/fluid/pump/TileGrate.java @@ -15,13 +15,13 @@ import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; import resonantinduction.api.fluid.IDrain; -import resonantinduction.mechanical.fluid.prefab.TileEntityFluidDevice; import universalelectricity.api.vector.Vector3; +import calclavia.lib.prefab.tile.TileAdvanced; import calclavia.lib.utility.FluidUtility; import com.builtbroken.common.Pair; -public class TileGrate extends TileEntityFluidDevice implements IFluidHandler, IDrain +public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain { /* MAX BLOCKS DRAINED PER 1/2 SECOND */ public static int MAX_WORLD_EDITS_PER_PROCESS = 50; diff --git a/src/main/java/resonantinduction/mechanical/fluid/tank/TileTank.java b/src/main/java/resonantinduction/mechanical/fluid/tank/TileTank.java index 7bc03eda..ad28f5b9 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/tank/TileTank.java +++ b/src/main/java/resonantinduction/mechanical/fluid/tank/TileTank.java @@ -3,51 +3,51 @@ package resonantinduction.mechanical.fluid.tank; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.fluids.FluidContainerRegistry; -import resonantinduction.api.fluid.IFluidNetwork; import resonantinduction.api.fluid.IFluidConnector; +import resonantinduction.api.fluid.IFluidNetwork; import resonantinduction.mechanical.fluid.prefab.TileFluidNetwork; public class TileTank extends TileFluidNetwork { - public static final int VOLUME = 16; + public static final int VOLUME = 16; - public TileTank() - { - this.getInternalTank().setCapacity(VOLUME * FluidContainerRegistry.BUCKET_VOLUME); - } + public TileTank() + { + this.getInternalTank().setCapacity(VOLUME * FluidContainerRegistry.BUCKET_VOLUME); + } - @Override - public TankNetwork getNetwork() - { - if (this.network == null) - { - this.network = new TankNetwork(); - this.network.addConnector(this); - } - return (TankNetwork) this.network; - } + @Override + public IFluidNetwork getNetwork() + { + if (this.network == null) + { + this.network = new TankNetwork(); + this.network.addConnector(this); + } + return this.network; + } - @Override - public void setNetwork(IFluidNetwork network) - { - if (network instanceof TankNetwork) - { - this.network = (TankNetwork) network; - } - } + @Override + public void setNetwork(IFluidNetwork network) + { + if (network instanceof TankNetwork) + { + this.network = (TankNetwork) network; + } + } - @Override - public void validateConnectionSide(TileEntity tileEntity, ForgeDirection side) - { - if (!this.worldObj.isRemote) - { - if (tileEntity instanceof TileTank) - { - this.getNetwork().merge(((IFluidConnector) tileEntity).getNetwork()); - this.setRenderSide(side, true); - connectedBlocks[side.ordinal()] = tileEntity; - } - } - } + @Override + public void validateConnectionSide(TileEntity tileEntity, ForgeDirection side) + { + if (!this.worldObj.isRemote) + { + if (tileEntity instanceof TileTank) + { + this.getNetwork().merge(((IFluidConnector) tileEntity).getNetwork()); + this.setRenderSide(side, true); + connectedBlocks[side.ordinal()] = tileEntity; + } + } + } } diff --git a/src/main/java/resonantinduction/mechanical/fluid/valve/TileReleaseValve.java b/src/main/java/resonantinduction/mechanical/fluid/valve/TileReleaseValve.java index 38e2f738..de8c4d19 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/valve/TileReleaseValve.java +++ b/src/main/java/resonantinduction/mechanical/fluid/valve/TileReleaseValve.java @@ -9,10 +9,10 @@ import net.minecraftforge.fluids.IFluidHandler; import resonantinduction.api.IReadOut; import resonantinduction.api.fluid.IFluidPipe; import resonantinduction.core.tilenetwork.ITileConnector; -import resonantinduction.mechanical.fluid.prefab.TileEntityFluidDevice; +import resonantinduction.mechanical.fluid.pipe.TilePipe; import calclavia.lib.utility.WorldUtility; -public class TileReleaseValve extends TileEntityFluidDevice implements ITileConnector, IReadOut +public class TileReleaseValve extends TilePipe implements ITileConnector, IReadOut { public TileEntity[] connected = new TileEntity[6];