From 64877994d4a4f10a51f6452163eb80095d60ab6a Mon Sep 17 00:00:00 2001 From: Robert Seifert Date: Mon, 3 Jun 2013 04:26:18 -0400 Subject: [PATCH] Worked on tank and edits for network --- .../dark/fluid/client/render/RenderTank.java | 2 +- .../dark/fluid/common/FluidMech.java | 2 +- .../dark/fluid/common/machines/BlockTank.java | 27 ++- .../fluid/common/machines/TileEntityTank.java | 217 ++++++------------ .../fluid/common/pipes/TileEntityPipe.java | 14 +- .../pipes/addon/TileEntityPipeWindow.java | 2 +- 6 files changed, 106 insertions(+), 158 deletions(-) diff --git a/src/minecraft/dark/fluid/client/render/RenderTank.java b/src/minecraft/dark/fluid/client/render/RenderTank.java index 2bc3b4a5..6ed3ae6c 100644 --- a/src/minecraft/dark/fluid/client/render/RenderTank.java +++ b/src/minecraft/dark/fluid/client/render/RenderTank.java @@ -29,7 +29,7 @@ public class RenderTank extends TileEntitySpecialRenderer { int meta = te.getBlockMetadata(); int guageMeta = meta; - LiquidStack stack = te.getStoredLiquid(); + LiquidStack stack = te.getTank().getLiquid(); int pos = 0; if (stack != null) { diff --git a/src/minecraft/dark/fluid/common/FluidMech.java b/src/minecraft/dark/fluid/common/FluidMech.java index 79dbddb4..e2944647 100644 --- a/src/minecraft/dark/fluid/common/FluidMech.java +++ b/src/minecraft/dark/fluid/common/FluidMech.java @@ -130,7 +130,7 @@ public class FluidMech extends DummyModContainer public static Item itemParts; public static Item itemGauge; - @SidedProxy(clientSide = "fluidmech.client.ClientProxy", serverSide = "fluidmech.common.CommonProxy") + @SidedProxy(clientSide = "dark.fluid.client.ClientProxy", serverSide = "dark.fluid.common.CommonProxy") public static CommonProxy proxy; @Instance(FluidMech.MOD_NAME) diff --git a/src/minecraft/dark/fluid/common/machines/BlockTank.java b/src/minecraft/dark/fluid/common/machines/BlockTank.java index 5902a37c..a84cb080 100644 --- a/src/minecraft/dark/fluid/common/machines/BlockTank.java +++ b/src/minecraft/dark/fluid/common/machines/BlockTank.java @@ -1,6 +1,7 @@ package dark.fluid.common.machines; import hydraulic.api.FluidRestrictionHandler; +import hydraulic.api.INetworkPipe; import hydraulic.helpers.FluidHelper; import java.util.List; @@ -97,7 +98,7 @@ public class BlockTank extends BlockAdvanced else { - LiquidStack stack = tank.getStoredLiquid(); + LiquidStack stack = tank.getTank().getLiquid(); if (stack != null) { ItemStack liquidItem = LiquidContainerRegistry.fillLiquidContainer(stack, current); @@ -166,4 +167,28 @@ public class BlockTank extends BlockAdvanced } } } + + @Override + public void onBlockAdded(World world, int x, int y, int z) + { + super.onBlockAdded(world, x, y, z); + + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + + if (tileEntity instanceof INetworkPipe) + { + ((INetworkPipe) tileEntity).updateNetworkConnections(); + } + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, int blockID) + { + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + + if (tileEntity instanceof INetworkPipe) + { + ((INetworkPipe) tileEntity).updateNetworkConnections(); + } + } } diff --git a/src/minecraft/dark/fluid/common/machines/TileEntityTank.java b/src/minecraft/dark/fluid/common/machines/TileEntityTank.java index aacec2ed..1360c3d4 100644 --- a/src/minecraft/dark/fluid/common/machines/TileEntityTank.java +++ b/src/minecraft/dark/fluid/common/machines/TileEntityTank.java @@ -2,15 +2,13 @@ package dark.fluid.common.machines; import hydraulic.api.ColorCode; import hydraulic.api.IColorCoded; +import hydraulic.api.INetworkFluidPart; import hydraulic.api.INetworkPipe; -import hydraulic.api.ITileConnector; import hydraulic.api.IReadOut; -import hydraulic.helpers.FluidHelper; -import hydraulic.network.PipeNetwork; +import hydraulic.network.FluidNetwork; +import hydraulic.network.TileNetwork; +import hydraulic.prefab.tile.TileEntityFluidDevice; import hydraulic.prefab.tile.TileEntityFluidStorage; - -import java.util.Random; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.INetworkManager; @@ -27,8 +25,6 @@ import net.minecraftforge.liquids.LiquidTank; import org.bouncycastle.util.Arrays; -import universalelectricity.core.vector.Vector3; -import universalelectricity.core.vector.VectorHelper; import universalelectricity.prefab.network.IPacketReceiver; import universalelectricity.prefab.network.PacketManager; @@ -37,26 +33,17 @@ import com.google.common.io.ByteArrayDataInput; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import dark.fluid.common.FluidMech; -import dark.fluid.common.pipes.TileEntityPipe; -public class TileEntityTank extends TileEntityFluidStorage implements ITankContainer, IReadOut, IColorCoded, INetworkPipe, IPacketReceiver +public class TileEntityTank extends TileEntityFluidDevice implements ITankContainer, IReadOut, IColorCoded, INetworkFluidPart, IPacketReceiver { - /* TANK TO FAKE OTHER TILES INTO BELIVING THIS HAS AN INTERNAL STORAGE */ - protected LiquidTank fakeTank = new LiquidTank(LiquidContainerRegistry.BUCKET_VOLUME); /* CURRENTLY CONNECTED TILE ENTITIES TO THIS */ private TileEntity[] connectedBlocks = new TileEntity[6]; public int[] renderConnection = new int[6]; - /* RANDOM INSTANCE USED BY THE UPDATE TICK */ - private Random random = new Random(); + + private LiquidTank tank = new LiquidTank(this.getTankSize()); + /* NETWORK INSTANCE THAT THIS PIPE USES */ - private PipeNetwork pipeNetwork; - - private boolean shouldAutoDrain = false; - - public enum PacketID - { - PIPE_CONNECTIONS, EXTENTION_CREATE, EXTENTION_UPDATE; - } + private FluidNetwork fluidNetwork; @Override public void initiate() @@ -91,10 +78,10 @@ public class TileEntityTank extends TileEntityFluidStorage implements ITankConta @Override public void handlePacketData(INetworkManager network, int type, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) { - PacketID id = PacketID.values()[dataStream.readInt()]; if (this.worldObj.isRemote) { - if (id == PacketID.PIPE_CONNECTIONS) + int id = dataStream.readInt(); + if (id == 0) { this.renderConnection[0] = dataStream.readInt(); this.renderConnection[1] = dataStream.readInt(); @@ -109,34 +96,7 @@ public class TileEntityTank extends TileEntityFluidStorage implements ITankConta @Override public Packet getDescriptionPacket() { - return PacketManager.getPacket(FluidMech.CHANNEL, this, PacketID.PIPE_CONNECTIONS.ordinal(), this.renderConnection[0], this.renderConnection[1], this.renderConnection[2], this.renderConnection[3], this.renderConnection[4], this.renderConnection[5]); - } - - /** - * Reads a tile entity from NBT. - */ - @Override - public void readFromNBT(NBTTagCompound nbt) - { - super.readFromNBT(nbt); - LiquidStack liquid = LiquidStack.loadLiquidStackFromNBT(nbt.getCompoundTag("tank")); - if (liquid != null) - { - this.fakeTank.setLiquid(liquid); - } - } - - /** - * Writes a tile entity to NBT. - */ - @Override - public void writeToNBT(NBTTagCompound nbt) - { - super.writeToNBT(nbt); - if (this.fakeTank.containsValidLiquid()) - { - nbt.setTag("stored", this.fakeTank.getLiquid().writeToNBT(new NBTTagCompound())); - } + return PacketManager.getPacket(FluidMech.CHANNEL, this, 0, this.renderConnection[0], this.renderConnection[1], this.renderConnection[2], this.renderConnection[3], this.renderConnection[4], this.renderConnection[5]); } /** @@ -158,35 +118,20 @@ public class TileEntityTank extends TileEntityFluidStorage implements ITankConta @Override public void setColor(Object cc) { - ColorCode code = ColorCode.get(cc); - if (!worldObj.isRemote && code != this.getColor()) - { - this.worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, code.ordinal(), 3); - } } @Override public String getMeterReading(EntityPlayer user, ForgeDirection side) { /* DEBUG CODE ACTIVATERS */ - boolean testConnections = false; - boolean testNetwork = false; - boolean testSubs = false; + boolean testNetwork = true; /* NORMAL OUTPUT */ - String string = this.getTileNetwork().pressureProduced + "p " + this.getTileNetwork().getNetworkFluid() + " Extra"; + String string = "Fluid>" + (this.getTileNetwork() instanceof FluidNetwork ? ((FluidNetwork) this.getTileNetwork()).getNetworkFluid() : "Error"); - /* DEBUG CODE */ - if (testConnections) - { - for (int i = 0; i < 6; i++) - { - string += ":" + this.renderConnection[i] + (this.getNetworkConnections()[i] != null ? "T" : "F"); - } - } if (testNetwork) { - string += " " + this.getTileNetwork().toString(); + string += "|NetID>" + this.getTileNetwork().toString(); } return string; @@ -195,12 +140,7 @@ public class TileEntityTank extends TileEntityFluidStorage implements ITankConta @Override public int fill(ForgeDirection from, LiquidStack resource, boolean doFill) { - if (resource == null || !this.getColor().isValidLiquid(resource)) - { - return 0; - } - TileEntity tile = VectorHelper.getTileEntityFromSide(this.worldObj, new Vector3(this), from); - return this.getTileNetwork().addFluidToNetwork(tile, resource, doFill); + return this.fill(0, resource, doFill); } @Override @@ -210,25 +150,25 @@ public class TileEntityTank extends TileEntityFluidStorage implements ITankConta { return 0; } - return this.getTileNetwork().addFluidToNetwork(this, resource, doFill); + return ((FluidNetwork) this.getTileNetwork()).storeFluidInSystem(resource, doFill); } @Override public LiquidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { - return null; + return this.drain(0, maxDrain, doDrain); } @Override public LiquidStack drain(int tankIndex, int maxDrain, boolean doDrain) { - return null; + return ((FluidNetwork) this.getTileNetwork()).drainFluidFromSystem(maxDrain, doDrain); } @Override public ILiquidTank[] getTanks(ForgeDirection direction) { - return new ILiquidTank[] { this.fakeTank }; + return new ILiquidTank[] { this.tank }; } @Override @@ -236,7 +176,7 @@ public class TileEntityTank extends TileEntityFluidStorage implements ITankConta { if (this.getColor().isValidLiquid(type)) { - return this.fakeTank; + return this.tank; } return null; } @@ -249,37 +189,21 @@ public class TileEntityTank extends TileEntityFluidStorage implements ITankConta */ public void validateConnectionSide(TileEntity tileEntity, ForgeDirection side) { - if (!this.worldObj.isRemote && tileEntity != null) + if (!this.worldObj.isRemote) { - if (tileEntity instanceof ITileConnector) + this.renderConnection[side.ordinal()] = tileEntity instanceof TileEntityTank ? 2 : (tileEntity instanceof INetworkPipe ? 1 : tileEntity != null ? 3 : 0); + + if (tileEntity != null) { - if (((ITileConnector) tileEntity).canPipeConnect(this, side)) + if (tileEntity instanceof TileEntityTank) { - if (tileEntity instanceof INetworkPipe) - { - if (((INetworkPipe) tileEntity).getColor() == this.getColor()) - { - this.getTileNetwork().merge(((INetworkPipe) tileEntity).getTileNetwork()); - connectedBlocks[side.ordinal()] = tileEntity; - } - } - else + if (((TileEntityTank) tileEntity).getColor() == this.getColor()) { + this.getTileNetwork().merge(((TileEntityTank) tileEntity).getTileNetwork(), this); connectedBlocks[side.ordinal()] = tileEntity; } } } - else if (tileEntity instanceof IColorCoded) - { - if (this.getColor() == ColorCode.NONE || this.getColor() == ((IColorCoded) tileEntity).getColor()) - { - connectedBlocks[side.ordinal()] = tileEntity; - } - } - else if (tileEntity instanceof ITankContainer) - { - connectedBlocks[side.ordinal()] = tileEntity; - } } } @@ -289,24 +213,15 @@ public class TileEntityTank extends TileEntityFluidStorage implements ITankConta if (this.worldObj != null && !this.worldObj.isRemote) { - int[] previousConnections = this.renderConnection.clone(); this.connectedBlocks = new TileEntity[6]; - for (int i = 0; i < 6; i++) + for (int i = 2; i < 6; i++) { ForgeDirection dir = ForgeDirection.getOrientation(i); this.validateConnectionSide(this.worldObj.getBlockTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ), dir); - this.renderConnection[i] = this.connectedBlocks[i] instanceof TileEntityTank ? 2 : (this.connectedBlocks[i] instanceof INetworkPipe ? 1 : this.connectedBlocks[i] != null ? 3 : 0); - - if (this.connectedBlocks[i] instanceof TileEntityTank) - { - ITankContainer tankContainer = (ITankContainer) this.connectedBlocks[i]; - this.getTileNetwork().addEntity(tankContainer); - } } - /** * Only send packet updates if visuallyConnected changed. */ @@ -318,48 +233,28 @@ public class TileEntityTank extends TileEntityFluidStorage implements ITankConta } @Override - public boolean canPipeConnect(TileEntity entity, ForgeDirection dir) + public boolean canTileConnect(TileEntity entity, ForgeDirection dir) { - return entity != null; + return entity != null && entity instanceof ITankContainer; } @Override - public double getMaxPressure(ForgeDirection side) + public TileNetwork getTileNetwork() { - return 350; - } - - @Override - public PipeNetwork getTileNetwork() - { - if (this.pipeNetwork == null) + if (this.fluidNetwork == null) { - this.setNetwork(new PipeNetwork(this.getColor(), this)); + this.setTileNetwork(new FluidNetwork(this.getColor(), this)); } - return this.pipeNetwork; + return this.fluidNetwork; } @Override - public void setNetwork(PipeNetwork network) + public void setTileNetwork(TileNetwork network) { - this.pipeNetwork = network; - } - - @Override - public int getMaxFlowRate(LiquidStack stack, ForgeDirection side) - { - return FluidHelper.getDefaultFlowRate(stack) * 3; - } - - @Override - public boolean onOverPressure(Boolean damageAllowed) - { - if (damageAllowed) + if (network instanceof FluidNetwork) { - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, yCoord, 0, 0); - return true; + this.fluidNetwork = ((FluidNetwork) network); } - return false; } @SideOnly(Side.CLIENT) @@ -375,21 +270,49 @@ public class TileEntityTank extends TileEntityFluidStorage implements ITankConta } @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + LiquidStack liquid = LiquidStack.loadLiquidStackFromNBT(nbt.getCompoundTag("stored")); + if (liquid != null) + { + tank.setLiquid(liquid); + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + if (this.tank.containsValidLiquid()) + { + nbt.setTag("stored", this.tank.getLiquid().writeToNBT(new NBTTagCompound())); + } + } + public int getTankSize() { - return LiquidContainerRegistry.BUCKET_VOLUME * 3; + return LiquidContainerRegistry.BUCKET_VOLUME * 8; } @Override public ILiquidTank getTank() { - return this.fakeTank; + if (this.tank == null) + { + this.tank = new LiquidTank(this.getTankSize()); + } + return this.tank; } @Override public void setTankContent(LiquidStack stack) { - this.fakeTank.setLiquid(stack); - + if (this.tank == null) + { + this.tank = new LiquidTank(this.getTankSize()); + } + this.tank.setLiquid(stack); } } diff --git a/src/minecraft/dark/fluid/common/pipes/TileEntityPipe.java b/src/minecraft/dark/fluid/common/pipes/TileEntityPipe.java index 5fa3b39b..9869b134 100644 --- a/src/minecraft/dark/fluid/common/pipes/TileEntityPipe.java +++ b/src/minecraft/dark/fluid/common/pipes/TileEntityPipe.java @@ -201,7 +201,7 @@ public class TileEntityPipe extends TileEntityAdvanced implements ITankContainer public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); - LiquidStack liquid = LiquidStack.loadLiquidStackFromNBT(nbt.getCompoundTag("tank")); + LiquidStack liquid = LiquidStack.loadLiquidStackFromNBT(nbt.getCompoundTag("stored")); if (liquid != null) { this.fakeTank.setLiquid(liquid); @@ -356,7 +356,7 @@ public class TileEntityPipe extends TileEntityAdvanced implements ITankContainer boolean testSubs = false; /* NORMAL OUTPUT */ - String string = ((PipeNetwork)this.getTileNetwork()).pressureProduced + "p " + ((PipeNetwork)this.getTileNetwork()).getNetworkFluid() + " Extra"; + String string = ((PipeNetwork) this.getTileNetwork()).pressureProduced + "p " + ((PipeNetwork) this.getTileNetwork()).getNetworkFluid() + " Extra"; /* DEBUG CODE */ if (testConnections) @@ -398,7 +398,7 @@ public class TileEntityPipe extends TileEntityAdvanced implements ITankContainer return 0; } TileEntity tile = VectorHelper.getTileEntityFromSide(this.worldObj, new Vector3(this), from); - return ((PipeNetwork)this.getTileNetwork()).addFluidToNetwork(tile, resource, doFill); + return ((PipeNetwork) this.getTileNetwork()).addFluidToNetwork(tile, resource, doFill); } @Override @@ -408,7 +408,7 @@ public class TileEntityPipe extends TileEntityAdvanced implements ITankContainer { return 0; } - return ((PipeNetwork)this.getTileNetwork()).addFluidToNetwork(this, resource, doFill); + return ((PipeNetwork) this.getTileNetwork()).addFluidToNetwork(this, resource, doFill); } @Override @@ -462,7 +462,7 @@ public class TileEntityPipe extends TileEntityAdvanced implements ITankContainer { if (((INetworkPipe) tileEntity).getColor() == this.getColor()) { - this.getTileNetwork().merge(((INetworkPipe) tileEntity).getTileNetwork()); + this.getTileNetwork().merge(((INetworkPipe) tileEntity).getTileNetwork(), this); connectedBlocks[side.ordinal()] = tileEntity; } } @@ -513,7 +513,7 @@ public class TileEntityPipe extends TileEntityAdvanced implements ITankContainer LiquidStack stack = tankContainer.drain(dir, LiquidContainerRegistry.BUCKET_VOLUME, false); if (stack != null && stack.amount > 0) { - int fill = ((PipeNetwork)this.getTileNetwork()).addFluidToNetwork((TileEntity) tankContainer, stack, true); + int fill = ((PipeNetwork) this.getTileNetwork()).addFluidToNetwork((TileEntity) tankContainer, stack, true); tankContainer.drain(dir, fill, true); } } @@ -598,7 +598,7 @@ public class TileEntityPipe extends TileEntityAdvanced implements ITankContainer @Override public void setTankContent(LiquidStack stack) { - if(this.fakeTank == null) + if (this.fakeTank == null) { this.fakeTank = new LiquidTank(LiquidContainerRegistry.BUCKET_VOLUME); } diff --git a/src/minecraft/dark/fluid/common/pipes/addon/TileEntityPipeWindow.java b/src/minecraft/dark/fluid/common/pipes/addon/TileEntityPipeWindow.java index 517fec80..e4a6034b 100644 --- a/src/minecraft/dark/fluid/common/pipes/addon/TileEntityPipeWindow.java +++ b/src/minecraft/dark/fluid/common/pipes/addon/TileEntityPipeWindow.java @@ -30,7 +30,7 @@ public class TileEntityPipeWindow extends TileEntityPipeExtention { if (pipe != null) { - stack = ((PipeNetwork) pipe.getTileNetwork()).getNetworkTank().getLiquid(); + stack = ((PipeNetwork) pipe.getTileNetwork()).combinedStorage().getLiquid(); worldObj.setBlockMetadataWithNotify(xCoord, yCoord + 1, yCoord, 0, 0); } }