diff --git a/src/main/java/resonantinduction/mechanical/fluid/pipe/BlockPipe.java b/src/main/java/resonantinduction/mechanical/fluid/pipe/BlockPipe.java index 40d727219..c3d908e1e 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/pipe/BlockPipe.java +++ b/src/main/java/resonantinduction/mechanical/fluid/pipe/BlockPipe.java @@ -14,7 +14,7 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.fluids.FluidTankInfo; -import resonantinduction.core.prefab.block.BlockRI; +import resonantinduction.mechanical.fluid.prefab.BlockFluidNetwork; import resonantinduction.mechanical.render.MechanicalBlockRenderingHandler; import universalelectricity.api.vector.Vector3; import calclavia.lib.utility.FluidHelper; @@ -23,13 +23,13 @@ import cpw.mods.fml.relauncher.SideOnly; import dark.lib.helpers.ColorCode; import dark.lib.helpers.ColorCode.IColorCoded; -public class BlockPipe extends BlockRI +public class BlockPipe extends BlockFluidNetwork { public static int waterFlowRate = 3000; public BlockPipe() { - super("fluidPipe", Material.iron); + super("fluidPipe"); this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F); this.setHardness(1f); this.setResistance(3f); diff --git a/src/main/java/resonantinduction/mechanical/fluid/pipe/FluidContainerMaterial.java b/src/main/java/resonantinduction/mechanical/fluid/pipe/FluidContainerMaterial.java index 60fdd86c0..dd0436212 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/pipe/FluidContainerMaterial.java +++ b/src/main/java/resonantinduction/mechanical/fluid/pipe/FluidContainerMaterial.java @@ -8,7 +8,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; import resonantinduction.mechanical.Mechanical; -import resonantinduction.mechanical.fluid.prefab.TileFluidNetworkTile; +import resonantinduction.mechanical.fluid.prefab.TileFluidNetwork; import dark.lib.helpers.ColorCode; /** @@ -160,9 +160,9 @@ public enum FluidContainerMaterial int meta = world.getBlockMetadata(x, y, z); TileEntity ent = world.getBlockTileEntity(x, y, z); meta *= spacing; - if (ent instanceof TileFluidNetworkTile) + if (ent instanceof TileFluidNetwork) { - meta += ((TileFluidNetworkTile) ent).getSubID(); + meta += ((TileFluidNetwork) ent).getSubID(); } return meta; } diff --git a/src/main/java/resonantinduction/mechanical/fluid/pipe/ItemBlockFluidContainer.java b/src/main/java/resonantinduction/mechanical/fluid/pipe/ItemBlockFluidContainer.java index 7fa0d1adb..3f3c3921e 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/pipe/ItemBlockFluidContainer.java +++ b/src/main/java/resonantinduction/mechanical/fluid/pipe/ItemBlockFluidContainer.java @@ -15,7 +15,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.fluids.FluidStack; import resonantinduction.mechanical.Mechanical; -import resonantinduction.mechanical.fluid.prefab.TileFluidNetworkTile; +import resonantinduction.mechanical.fluid.prefab.TileFluidNetwork; import resonantinduction.mechanical.fluid.tank.TileTank; import universalelectricity.api.energy.UnitDisplay; import universalelectricity.api.energy.UnitDisplay.Unit; @@ -111,12 +111,12 @@ public class ItemBlockFluidContainer extends ItemBlock if (super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, (stack.getItemDamage() / FluidContainerMaterial.spacing))) { TileEntity tile = world.getBlockTileEntity(x, y, z); - if (tile instanceof TileFluidNetworkTile) + if (tile instanceof TileFluidNetwork) { - ((TileFluidNetworkTile) tile).setSubID(stack.getItemDamage()); + ((TileFluidNetwork) tile).setSubID(stack.getItemDamage()); if (stack.getTagCompound() != null && stack.getTagCompound().hasKey("fluid")) { - ((TileFluidNetworkTile) tile).fill(ForgeDirection.UNKNOWN, FluidStack.loadFluidStackFromNBT(stack.getTagCompound().getCompoundTag("fluid")), true); + ((TileFluidNetwork) tile).fill(ForgeDirection.UNKNOWN, FluidStack.loadFluidStackFromNBT(stack.getTagCompound().getCompoundTag("fluid")), true); } } return true; diff --git a/src/main/java/resonantinduction/mechanical/fluid/pipe/RenderPipe.java b/src/main/java/resonantinduction/mechanical/fluid/pipe/RenderPipe.java index a4448adda..dd3f9e7ad 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/pipe/RenderPipe.java +++ b/src/main/java/resonantinduction/mechanical/fluid/pipe/RenderPipe.java @@ -14,7 +14,7 @@ import org.lwjgl.opengl.GL11; import resonantinduction.core.Reference; import resonantinduction.core.render.RenderFluidHelper; -import resonantinduction.mechanical.fluid.prefab.TileFluidNetworkTile; +import resonantinduction.mechanical.fluid.prefab.TileFluidNetwork; import resonantinduction.old.client.model.ModelOpenTrough; import resonantinduction.old.client.model.ModelPipe; @@ -34,8 +34,6 @@ public class RenderPipe extends TileEntitySpecialRenderer @Override public void renderTileEntityAt(TileEntity te, double d, double d1, double d2, float f) { - // Texture file - FluidContainerMaterial mat = FluidContainerMaterial.IRON; if (te.getBlockMetadata() < FluidContainerMaterial.values().length) { @@ -165,28 +163,27 @@ public class RenderPipe extends TileEntitySpecialRenderer } else { - System.out.println(Integer.toBinaryString(side)); - if (TileFluidNetworkTile.canRenderSide(side,ForgeDirection.DOWN)) + if (TileFluidNetwork.canRenderSide(side, ForgeDirection.DOWN)) { MODEL_PIPE.renderBottom(); } - if (TileFluidNetworkTile.canRenderSide(side,ForgeDirection.UP)) + if (TileFluidNetwork.canRenderSide(side, ForgeDirection.UP)) { MODEL_PIPE.renderTop(); } - if (TileFluidNetworkTile.canRenderSide(side,ForgeDirection.NORTH)) + if (TileFluidNetwork.canRenderSide(side, ForgeDirection.NORTH)) { MODEL_PIPE.renderBack(); } - if (TileFluidNetworkTile.canRenderSide(side,ForgeDirection.SOUTH)) + if (TileFluidNetwork.canRenderSide(side, ForgeDirection.SOUTH)) { MODEL_PIPE.renderFront(); } - if (TileFluidNetworkTile.canRenderSide(side, ForgeDirection.WEST)) + if (TileFluidNetwork.canRenderSide(side, ForgeDirection.WEST)) { MODEL_PIPE.renderLeft(); } - if (TileFluidNetworkTile.canRenderSide(side, ForgeDirection.EAST)) + if (TileFluidNetwork.canRenderSide(side, ForgeDirection.EAST)) { MODEL_PIPE.renderRight(); } diff --git a/src/main/java/resonantinduction/mechanical/fluid/pipe/TilePipe.java b/src/main/java/resonantinduction/mechanical/fluid/pipe/TilePipe.java index 05b10d2fe..25d11cb48 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/pipe/TilePipe.java +++ b/src/main/java/resonantinduction/mechanical/fluid/pipe/TilePipe.java @@ -9,19 +9,19 @@ import resonantinduction.api.fluid.INetworkPipe; import resonantinduction.core.tilenetwork.ITileConnector; import resonantinduction.core.tilenetwork.ITileNetwork; import resonantinduction.mechanical.fluid.network.NetworkPipes; -import resonantinduction.mechanical.fluid.prefab.TileFluidNetworkTile; +import resonantinduction.mechanical.fluid.prefab.TileFluidNetwork; import universalelectricity.api.vector.Vector3; import calclavia.lib.utility.FluidHelper; import dark.lib.helpers.ColorCode; import dark.lib.helpers.ColorCode.IColorCoded; -public class TilePipe extends TileFluidNetworkTile implements IColorCoded, INetworkPipe +public class TilePipe extends TileFluidNetwork implements IColorCoded, INetworkPipe { /** gets the current color mark of the pipe */ @Override public ColorCode getColor() { - return EnumPipeType.getColorCode(this.subID); + return EnumPipeType.getColorCode(this.colorID); } /** sets the current color mark of the pipe */ @@ -30,9 +30,9 @@ public class TilePipe extends TileFluidNetworkTile implements IColorCoded, INetw { if (!worldObj.isRemote) { - int p = this.subID; - this.subID = EnumPipeType.getUpdatedID(subID, ColorCode.get(cc)); - return p != this.subID; + int p = this.colorID; + this.colorID = EnumPipeType.getUpdatedID(colorID, ColorCode.get(cc)); + return p != this.colorID; } return false; } diff --git a/src/main/java/resonantinduction/mechanical/fluid/prefab/BlockFluidNetwork.java b/src/main/java/resonantinduction/mechanical/fluid/prefab/BlockFluidNetwork.java new file mode 100644 index 000000000..4f61c29ed --- /dev/null +++ b/src/main/java/resonantinduction/mechanical/fluid/prefab/BlockFluidNetwork.java @@ -0,0 +1,29 @@ +package resonantinduction.mechanical.fluid.prefab; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import resonantinduction.core.prefab.block.BlockRI; + +/** + * @author Calclavia + * + */ +public class BlockFluidNetwork extends BlockRI +{ + public BlockFluidNetwork(String name) + { + super(name); + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, int par5) + { + TileEntity tile = world.getBlockTileEntity(x, y, z); + + if (tile instanceof TileFluidNetwork) + { + ((TileFluidNetwork) tile).refresh(); + } + } + +} diff --git a/src/main/java/resonantinduction/mechanical/fluid/prefab/TileFluidNetworkTile.java b/src/main/java/resonantinduction/mechanical/fluid/prefab/TileFluidNetwork.java similarity index 91% rename from src/main/java/resonantinduction/mechanical/fluid/prefab/TileFluidNetworkTile.java rename to src/main/java/resonantinduction/mechanical/fluid/prefab/TileFluidNetwork.java index 243a2b362..06c49c7f6 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/prefab/TileFluidNetworkTile.java +++ b/src/main/java/resonantinduction/mechanical/fluid/prefab/TileFluidNetwork.java @@ -34,7 +34,7 @@ import com.google.common.io.ByteArrayDataInput; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public abstract class TileFluidNetworkTile extends TileEntityFluidDevice implements INetworkFluidPart, IPacketReceiver +public abstract class TileFluidNetwork extends TileEntityFluidDevice implements INetworkFluidPart, IPacketReceiver { private int updateTick = 1; public static int refreshRate = 10; @@ -43,7 +43,7 @@ public abstract class TileFluidNetworkTile extends TileEntityFluidDevice impleme protected List connectedBlocks = new ArrayList(); protected int heat = 0, maxHeat = 20000; protected int damage = 0, maxDamage = 1000; - protected int subID = 0; + protected int colorID = 0; protected int tankCap; protected FluidStack prevStack = null; protected NetworkFluidTiles network; @@ -55,12 +55,12 @@ public abstract class TileFluidNetworkTile extends TileEntityFluidDevice impleme /** Bitmask **/ public byte renderSides = 0b0; - public TileFluidNetworkTile() + public TileFluidNetwork() { this(1); } - public TileFluidNetworkTile(int tankCap) + public TileFluidNetwork(int tankCap) { if (tankCap <= 0) { @@ -85,14 +85,10 @@ public abstract class TileFluidNetworkTile extends TileEntityFluidDevice impleme public void updateEntity() { super.updateEntity(); + if (!worldObj.isRemote) { - if (ticks % this.updateTick == 0) - { - this.updateTick = this.worldObj.rand.nextInt(5) * 40 + 20; - this.refresh(); - } - if (ticks % TileFluidNetworkTile.refreshRate == 0) + if (ticks % TileFluidNetwork.refreshRate == 0) { if (this.getTank().getFluid() == null && this.prevStack == null) { @@ -102,6 +98,7 @@ public abstract class TileFluidNetworkTile extends TileEntityFluidDevice impleme { this.sendTankUpdate(0); } + this.prevStack = this.tank.getFluid(); } } @@ -187,7 +184,7 @@ public abstract class TileFluidNetworkTile extends TileEntityFluidDevice impleme } /** Only send packet updates if visuallyConnected changed. */ - if (previousConnections == renderSides) + if (previousConnections != renderSides) { this.sendRenderUpdate(); } @@ -359,7 +356,7 @@ public abstract class TileFluidNetworkTile extends TileEntityFluidDevice impleme super.readFromNBT(nbt); this.damage = nbt.getInteger("damage"); this.heat = nbt.getInteger("heat"); - this.subID = nbt.getInteger("subID"); + this.colorID = nbt.getInteger("subID"); if (nbt.hasKey("stored")) { NBTTagCompound tag = nbt.getCompoundTag("stored"); @@ -386,7 +383,7 @@ public abstract class TileFluidNetworkTile extends TileEntityFluidDevice impleme super.writeToNBT(nbt); nbt.setInteger("damage", this.damage); nbt.setInteger("heat", this.heat); - nbt.setInteger("subID", this.subID); + nbt.setInteger("subID", this.colorID); nbt.setCompoundTag("FluidTank", this.getTank().writeToNBT(new NBTTagCompound())); } @@ -401,7 +398,7 @@ public abstract class TileFluidNetworkTile extends TileEntityFluidDevice impleme if (readInt == PACKET_DESCRIPTION) { - this.subID = data.readInt(); + this.colorID = data.readInt(); this.renderSides = data.readByte(); this.tank = new FluidTank(data.readInt()); this.getTank().readFromNBT(PacketHandler.readNBTTagCompound(data)); @@ -409,7 +406,7 @@ public abstract class TileFluidNetworkTile extends TileEntityFluidDevice impleme } else if (readInt == PACKET_RENDER) { - this.subID = data.readInt(); + this.colorID = data.readInt(); this.renderSides = data.readByte(); } else if (readInt == PACKET_TANK) @@ -429,27 +426,19 @@ public abstract class TileFluidNetworkTile extends TileEntityFluidDevice impleme @Override public Packet getDescriptionPacket() { - Object[] data = new Object[9]; - data[0] = this.subID; - data[1] = this.renderSides; - data[7] = this.getTank().getCapacity(); - data[8] = this.getTank().writeToNBT(new NBTTagCompound()); - return ResonantInduction.PACKET_TILE.getPacket(this, "DescriptionPacket", data); + return ResonantInduction.PACKET_TILE.getPacket(this, PACKET_DESCRIPTION, this.colorID, this.renderSides, this.getTank().getCapacity(), this.getTank().writeToNBT(new NBTTagCompound())); } public void sendRenderUpdate() { - Object[] data = new Object[7]; - data[0] = this.subID; - data[1] = this.renderSides; - PacketHandler.sendPacketToClients(ResonantInduction.PACKET_TILE.getPacket(this, "RenderPacket", data)); + PacketHandler.sendPacketToClients(ResonantInduction.PACKET_TILE.getPacket(this, PACKET_RENDER, this.colorID, this.renderSides)); } public void sendTankUpdate(int index) { if (this.getTank() != null && index == 0) { - PacketHandler.sendPacketToClients(ResonantInduction.PACKET_TILE.getPacket(this, "SingleTank", this.getTank().getCapacity(), this.getTank().writeToNBT(new NBTTagCompound())), this.worldObj, new Vector3(this), 60); + PacketHandler.sendPacketToClients(ResonantInduction.PACKET_TILE.getPacket(this, PACKET_TANK, this.getTank().getCapacity(), this.getTank().writeToNBT(new NBTTagCompound())), this.worldObj, new Vector3(this), 60); } } @@ -472,12 +461,12 @@ public abstract class TileFluidNetworkTile extends TileEntityFluidDevice impleme public int getSubID() { - return this.subID; + return this.colorID; } public void setSubID(int id) { - this.subID = id; + this.colorID = id; } public static boolean canRenderSide(byte renderSides, ForgeDirection direction) diff --git a/src/main/java/resonantinduction/mechanical/fluid/tank/BlockTank.java b/src/main/java/resonantinduction/mechanical/fluid/tank/BlockTank.java index 24df37736..737632abf 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/tank/BlockTank.java +++ b/src/main/java/resonantinduction/mechanical/fluid/tank/BlockTank.java @@ -9,10 +9,10 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; -import resonantinduction.core.prefab.block.BlockRI; import resonantinduction.mechanical.fluid.pipe.FluidContainerMaterial; import resonantinduction.mechanical.fluid.pipe.ItemBlockFluidContainer; import resonantinduction.mechanical.fluid.pipe.TilePipe; +import resonantinduction.mechanical.fluid.prefab.BlockFluidNetwork; import resonantinduction.mechanical.render.MechanicalBlockRenderingHandler; import universalelectricity.api.vector.Vector3; import calclavia.lib.utility.FluidHelper; @@ -20,7 +20,7 @@ import calclavia.lib.utility.HelperMethods; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public class BlockTank extends BlockRI +public class BlockTank extends BlockFluidNetwork { public static int tankVolume = 16; diff --git a/src/main/java/resonantinduction/mechanical/fluid/tank/RenderTank.java b/src/main/java/resonantinduction/mechanical/fluid/tank/RenderTank.java index b78246fc0..c1b68bd63 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/tank/RenderTank.java +++ b/src/main/java/resonantinduction/mechanical/fluid/tank/RenderTank.java @@ -9,7 +9,7 @@ import net.minecraftforge.fluids.FluidStack; import org.lwjgl.opengl.GL11; import resonantinduction.core.render.RenderFluidHelper; -import resonantinduction.mechanical.fluid.prefab.TileFluidNetworkTile; +import resonantinduction.mechanical.fluid.prefab.TileFluidNetwork; import resonantinduction.old.client.model.ModelTankSide; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -30,15 +30,15 @@ public class RenderTank extends TileEntitySpecialRenderer public void renderTank(TileEntity tileEntity, double x, double y, double z, int meta, FluidStack liquid) { - byte renderSudes = 0; + byte renderSides = 0; if (tileEntity instanceof TileTank) { - renderSudes = ((TileTank) tileEntity).renderSides; + renderSides = ((TileTank) tileEntity).renderSides; } + if (liquid != null && liquid.amount > 100) { - int[] displayList = RenderFluidHelper.getFluidDisplayLists(liquid, tileEntity.worldObj, false); GL11.glPushMatrix(); @@ -59,18 +59,11 @@ public class RenderTank extends TileEntitySpecialRenderer GL11.glPopMatrix(); } - boolean bot = TileFluidNetworkTile.canRenderSide(renderSudes, ForgeDirection.getOrientation(1)); - boolean top = TileFluidNetworkTile.canRenderSide(renderSudes, ForgeDirection.getOrientation(0)); - boolean north = TileFluidNetworkTile.canRenderSide(renderSudes, ForgeDirection.getOrientation(2)); - boolean south = TileFluidNetworkTile.canRenderSide(renderSudes, ForgeDirection.getOrientation(3)); - boolean east = TileFluidNetworkTile.canRenderSide(renderSudes, ForgeDirection.getOrientation(5)); - boolean west = TileFluidNetworkTile.canRenderSide(renderSudes, ForgeDirection.getOrientation(4)); - for (int i = 0; i < 4; i++) { ForgeDirection dir = ForgeDirection.getOrientation(i + 2); - if (!TileFluidNetworkTile.canRenderSide(renderSudes, dir.getOpposite())) + if (!TileFluidNetwork.canRenderSide(renderSides, dir.getOpposite())) { GL11.glPushMatrix(); @@ -83,28 +76,23 @@ public class RenderTank extends TileEntitySpecialRenderer { case NORTH: GL11.glRotatef(180f, 0f, 1f, 0f); - left = west; - right = east; break; case SOUTH: GL11.glRotatef(0f, 0f, 1f, 0f); - left = east; - right = west; break; case WEST: GL11.glRotatef(90f, 0f, 1f, 0f); - left = south; - right = north; break; case EAST: GL11.glRotatef(270f, 0f, 1f, 0f); - left = north; - right = south; break; } + left = TileFluidNetwork.canRenderSide(renderSides, dir.getRotation(ForgeDirection.UP)); + right = TileFluidNetwork.canRenderSide(renderSides, dir.getRotation(ForgeDirection.DOWN)); + bindTexture(RenderTank.getTexture(tileEntity.getBlockType().blockID, tileEntity.getBlockMetadata())); - MODEL.render(0.0625F, left, right, top, bot); + MODEL.render(0.0625F, left, right, TileFluidNetwork.canRenderSide(renderSides, ForgeDirection.UP), TileFluidNetwork.canRenderSide(renderSides, ForgeDirection.DOWN)); GL11.glPopMatrix(); } } diff --git a/src/main/java/resonantinduction/mechanical/fluid/tank/TileTank.java b/src/main/java/resonantinduction/mechanical/fluid/tank/TileTank.java index 2d216e2f4..e5c5f1e03 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/tank/TileTank.java +++ b/src/main/java/resonantinduction/mechanical/fluid/tank/TileTank.java @@ -6,9 +6,9 @@ import resonantinduction.api.fluid.INetworkFluidPart; import resonantinduction.core.tilenetwork.INetworkPart; import resonantinduction.core.tilenetwork.ITileNetwork; import resonantinduction.mechanical.fluid.network.NetworkFluidContainers; -import resonantinduction.mechanical.fluid.prefab.TileFluidNetworkTile; +import resonantinduction.mechanical.fluid.prefab.TileFluidNetwork; -public class TileTank extends TileFluidNetworkTile +public class TileTank extends TileFluidNetwork { public TileTank() {