From 62be2b5b1dd563bc9c8495aabeac6803b28067da Mon Sep 17 00:00:00 2001 From: Calclavia Date: Sun, 19 Jan 2014 17:25:43 +0800 Subject: [PATCH] Merged release valve with the tank --- .../archaic/trough/EnumPipeMaterial.java | 142 ++++++++++++++++ .../mechanical/ClientProxy.java | 3 - .../mechanical/Mechanical.java | 3 - .../fluid/network/FluidNetwork.java | 6 +- .../fluid/pipe/EnumPipeMaterial.java | 23 --- .../mechanical/fluid/pipe/ItemPipe.java | 19 +++ .../fluid/pipe/ItemPipeRenderer.java | 14 +- .../mechanical/fluid/pipe/PartPipe.java | 46 ++++-- .../mechanical/fluid/pipe/RenderPipe.java | 99 +++++------- .../mechanical/fluid/pipe/TilePipe.java | 153 ------------------ .../mechanical/fluid/tank/BlockTank.java | 3 +- .../languages/en_US.properties | 2 +- 12 files changed, 243 insertions(+), 270 deletions(-) create mode 100644 src/main/java/resonantinduction/archaic/trough/EnumPipeMaterial.java delete mode 100644 src/main/java/resonantinduction/mechanical/fluid/pipe/TilePipe.java diff --git a/src/main/java/resonantinduction/archaic/trough/EnumPipeMaterial.java b/src/main/java/resonantinduction/archaic/trough/EnumPipeMaterial.java new file mode 100644 index 00000000..d96fdc15 --- /dev/null +++ b/src/main/java/resonantinduction/archaic/trough/EnumPipeMaterial.java @@ -0,0 +1,142 @@ +package resonantinduction.archaic.trough; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import resonantinduction.mechanical.Mechanical; +import resonantinduction.mechanical.fluid.prefab.TileFluidNetwork; +import calclavia.lib.render.ColorCode; + +/** + * Enum to hold info about each pipe material. Values are by default and some can change with pipe + * upgrades. + * + * @Note unsupportedFluids should only be used by filters. All pipes should allow all fluid types. + * However, pipes that can't support the fluid should have an effect. Eg no gas support should cause + * the pipe to leak. No molten support should cause the pipe to take damage. + * + * @author DarkGuardsman + */ +public enum EnumPipeMaterial +{ + /** Simple water only pipe. Should render open toped when it can */ + WOOD("wood", false, true, false, -1, 200), + /** Another version of the wooden pipe */ + STONE("stone", false, true, false, -1, 1000); + + public String matName = "material"; + List unsupportedFluids = new ArrayList(); + public boolean canSupportGas = false; + public boolean canSupportFluids = false; + public boolean canSupportMoltenFluids = false; + public int maxPressure = 1000; + public int maxVolume = 2000; + /** + * Materials are stored as meta were there sub types are stored by NBT. Item versions of the + * pipes are still meta so there is a set spacing to allow for a large but defined range of sub + * pipes + */ + public static int spacing = 1000; + + private EnumPipeMaterial() + { + this.canSupportGas = true; + this.canSupportFluids = true; + canSupportMoltenFluids = true; + } + + private EnumPipeMaterial(String name, boolean gas, boolean fluid, boolean molten, String... strings) + { + this.matName = name; + this.canSupportGas = gas; + this.canSupportFluids = fluid; + this.canSupportMoltenFluids = molten; + } + + private EnumPipeMaterial(String name, boolean gas, boolean fluid, boolean molten, int pressure, int volume, String... strings) + { + this(name, gas, fluid, molten, strings); + this.maxPressure = pressure; + this.maxVolume = volume; + } + + public static EnumPipeMaterial get(World world, int x, int y, int z) + { + return get(world.getBlockMetadata(x, y, z)); + } + + public static EnumPipeMaterial get(int i) + { + if (i < EnumPipeMaterial.values().length) + { + return EnumPipeMaterial.values()[i]; + } + return null; + } + + public static EnumPipeMaterial get(ItemStack stack) + { + if (stack != null) + { + return getFromItemMeta(stack.getItemDamage()); + } + return null; + } + + public static EnumPipeMaterial getFromItemMeta(int meta) + { + meta = meta / spacing; + if (meta < EnumPipeMaterial.values().length) + { + return EnumPipeMaterial.values()[meta]; + } + return EnumPipeMaterial.WOOD; + } + + public int getMeta(int typeID) + { + return (this.ordinal() * spacing) + typeID; + } + + public int getMeta() + { + return this.getMeta(0); + } + + public static int getType(int meta) + { + return meta / spacing; + } + + public static int getDropItemMeta(World world, int x, int y, int z) + { + int meta = world.getBlockMetadata(x, y, z); + TileEntity ent = world.getBlockTileEntity(x, y, z); + meta *= spacing; + if (ent instanceof TileFluidNetwork) + { + meta += ((TileFluidNetwork) ent).getSubID(); + } + return meta; + } + + public boolean canSupport(FluidStack fluid) + { + if (fluid != null && fluid.getFluid() != null) + { + if (fluid.getFluid().isGaseous(fluid) && this.canSupportGas) + { + return true; + } + else if (!fluid.getFluid().isGaseous(fluid) && this.canSupportFluids) + { + return true; + } + } + return false; + } +} diff --git a/src/main/java/resonantinduction/mechanical/ClientProxy.java b/src/main/java/resonantinduction/mechanical/ClientProxy.java index 9ff5d1f9..13a5f7aa 100644 --- a/src/main/java/resonantinduction/mechanical/ClientProxy.java +++ b/src/main/java/resonantinduction/mechanical/ClientProxy.java @@ -3,8 +3,6 @@ package resonantinduction.mechanical; import net.minecraftforge.client.MinecraftForgeClient; import resonantinduction.core.render.RenderRIItem; import resonantinduction.mechanical.fluid.pipe.ItemPipeRenderer; -import resonantinduction.mechanical.fluid.pipe.RenderPipe; -import resonantinduction.mechanical.fluid.pipe.TilePipe; import resonantinduction.mechanical.fluid.tank.ItemTankRenderer; import resonantinduction.mechanical.fluid.tank.RenderTank; import resonantinduction.mechanical.fluid.tank.TileTank; @@ -23,7 +21,6 @@ public class ClientProxy extends CommonProxy { MinecraftForgeClient.registerItemRenderer(Mechanical.blockTank.blockID, new ItemTankRenderer()); MinecraftForgeClient.registerItemRenderer(Mechanical.itemPipe.itemID, new ItemPipeRenderer()); - MinecraftForgeClient.registerItemRenderer(Mechanical.blockReleaseValve.blockID, new ItemPipeRenderer()); ClientRegistry.bindTileEntitySpecialRenderer(TileTank.class, RenderTank.INSTANCE); } } diff --git a/src/main/java/resonantinduction/mechanical/Mechanical.java b/src/main/java/resonantinduction/mechanical/Mechanical.java index 837c4110..c68c0714 100644 --- a/src/main/java/resonantinduction/mechanical/Mechanical.java +++ b/src/main/java/resonantinduction/mechanical/Mechanical.java @@ -16,8 +16,6 @@ import resonantinduction.mechanical.fluid.pump.TileGrate; import resonantinduction.mechanical.fluid.pump.TilePump; import resonantinduction.mechanical.fluid.tank.BlockTank; import resonantinduction.mechanical.fluid.tank.TileTank; -import resonantinduction.mechanical.fluid.valve.BlockReleaseValve; -import resonantinduction.mechanical.fluid.valve.TileReleaseValve; import resonantinduction.mechanical.gear.ItemGear; import resonantinduction.mechanical.item.ItemPipeGauge; import resonantinduction.mechanical.logistic.BlockDetector; @@ -96,7 +94,6 @@ public class Mechanical blockTank = contentRegistry.createBlock(BlockTank.class, ItemBlockFluidContainer.class, TileTank.class); blockGrate = contentRegistry.createTile(BlockGrate.class, TileGrate.class); blockPump = contentRegistry.createTile(BlockPump.class, TilePump.class); - blockReleaseValve = contentRegistry.createTile(BlockReleaseValve.class, TileReleaseValve.class); itemPipeGuage = contentRegistry.createItem(ItemPipeGauge.class); itemPipe = contentRegistry.createItem(ItemPipe.class); diff --git a/src/main/java/resonantinduction/mechanical/fluid/network/FluidNetwork.java b/src/main/java/resonantinduction/mechanical/fluid/network/FluidNetwork.java index 00028b3c..d6cb8b21 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/network/FluidNetwork.java +++ b/src/main/java/resonantinduction/mechanical/fluid/network/FluidNetwork.java @@ -49,7 +49,11 @@ public abstract class FluidNetwork extends Network implements IFluidConnector, TSlottedPart, JNormalOcclusion, IHollowConnect, JIconHitEffects { - /** Client Side Connection Check */ - private ForgeDirection testingSide; - - public Object[] connections = new Object[6]; - - /** Network used to link all parts together */ - protected IFluidNetwork network; protected FluidTank tank = new FluidTank(1 * FluidContainerRegistry.BUCKET_VOLUME); - - /** - * Bitmask connections - */ - public byte currentWireConnections = 0x00; - public byte currentAcceptorConnections = 0x00; + private boolean isExtracting = false; public PartPipe() { @@ -55,6 +46,35 @@ public class PartPipe extends PartFramedConnection, ResourceLocation> TEXTURES = new HashMap, ResourceLocation>(); + private static HashMap TEXTURES = new HashMap(); public static ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "pipe/iron.png"); public void render(PartPipe part, double x, double y, double z, float f) @@ -32,80 +32,61 @@ public class RenderPipe GL11.glPushMatrix(); GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F); GL11.glScalef(1.0F, -1F, -1F); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(getTexture(material, 0)); - render(material, part.getMaterialID(), part.getAllCurrentConnections()); + FMLClientHandler.instance().getClient().renderEngine.bindTexture(getTexture(material)); + render(material, part.getAllCurrentConnections()); GL11.glPopMatrix(); } - public static ResourceLocation getTexture(EnumPipeMaterial mat, int pipeID) + public static ResourceLocation getTexture(EnumPipeMaterial material) { - if (mat != null) + if (material != null) { - Pair index = new Pair(mat, pipeID); - - if (!TEXTURES.containsKey(index)) + if (!TEXTURES.containsKey(material)) { - String pipeName = ""; - if (EnumPipeType.get(pipeID) != null) - { - pipeName = EnumPipeType.get(pipeID).getName(pipeID); - } - TEXTURES.put(index, new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "pipe/" + mat.matName + ".png")); + TEXTURES.put(material, new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "pipe/" + material.matName + ".png")); } - return TEXTURES.get(index); + + return TEXTURES.get(material); } return TEXTURE; } - public static ResourceLocation getTexture(int meta) + public static void render(EnumPipeMaterial mat, byte side) { - return getTexture(EnumPipeMaterial.getFromItemMeta(meta), EnumPipeMaterial.getType(meta)); - } + if (TileFluidNetwork.canRenderSide(side, ForgeDirection.DOWN)) + { + MODEL_PIPE.renderBottom(); + } + if (TileFluidNetwork.canRenderSide(side, ForgeDirection.UP)) + { + MODEL_PIPE.renderTop(); + } + if (TileFluidNetwork.canRenderSide(side, ForgeDirection.NORTH)) + { + MODEL_PIPE.renderBack(); + } + if (TileFluidNetwork.canRenderSide(side, ForgeDirection.SOUTH)) + { + MODEL_PIPE.renderFront(); + } + if (TileFluidNetwork.canRenderSide(side, ForgeDirection.WEST)) + { + MODEL_PIPE.renderLeft(); + } + if (TileFluidNetwork.canRenderSide(side, ForgeDirection.EAST)) + { + MODEL_PIPE.renderRight(); + } - public static void render(EnumPipeMaterial mat, int pipeID, byte side) - { - if (mat == EnumPipeMaterial.WOOD) - { - MODEL_TROUGH_PIPE.render(side, false); - } - else if (mat == EnumPipeMaterial.STONE) - { - MODEL_TROUGH_PIPE.render(side, true); - } - else - { - if (TileFluidNetwork.canRenderSide(side, ForgeDirection.DOWN)) - { - MODEL_PIPE.renderBottom(); - } - if (TileFluidNetwork.canRenderSide(side, ForgeDirection.UP)) - { - MODEL_PIPE.renderTop(); - } - if (TileFluidNetwork.canRenderSide(side, ForgeDirection.NORTH)) - { - MODEL_PIPE.renderBack(); - } - if (TileFluidNetwork.canRenderSide(side, ForgeDirection.SOUTH)) - { - MODEL_PIPE.renderFront(); - } - if (TileFluidNetwork.canRenderSide(side, ForgeDirection.WEST)) - { - MODEL_PIPE.renderLeft(); - } - if (TileFluidNetwork.canRenderSide(side, ForgeDirection.EAST)) - { - MODEL_PIPE.renderRight(); - } - - MODEL_PIPE.renderMiddle(); - } + MODEL_PIPE.renderMiddle(); } public static void render(int meta, byte sides) { - render(EnumPipeMaterial.getFromItemMeta(meta), EnumPipeMaterial.getType(meta), sides); + if (meta < EnumPipeMaterial.values().length) + { + FMLClientHandler.instance().getClient().renderEngine.bindTexture(getTexture(EnumPipeMaterial.values()[meta])); + render(EnumPipeMaterial.values()[meta], sides); + } } - } \ No newline at end of file diff --git a/src/main/java/resonantinduction/mechanical/fluid/pipe/TilePipe.java b/src/main/java/resonantinduction/mechanical/fluid/pipe/TilePipe.java deleted file mode 100644 index b472442b..00000000 --- a/src/main/java/resonantinduction/mechanical/fluid/pipe/TilePipe.java +++ /dev/null @@ -1,153 +0,0 @@ -package resonantinduction.mechanical.fluid.pipe; - -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.IFluidHandler; -import resonantinduction.api.fluid.IFluidNetwork; -import resonantinduction.api.fluid.IFluidPipe; -import resonantinduction.mechanical.fluid.network.PipeNetwork; -import resonantinduction.mechanical.fluid.prefab.TileFluidNetwork; -import universalelectricity.api.vector.Vector3; -import calclavia.lib.render.ColorCode; -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); - } - - /** 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 < EnumPipeMaterial.values().length) - { - EnumPipeMaterial pipeMat = EnumPipeMaterial.values()[meta]; - if (pipeMat == EnumPipeMaterial.WOOD || pipeMat == EnumPipeMaterial.STONE) - { - if (side == ForgeDirection.UP) - { - return; - } - } - } - if (tileEntity instanceof TilePipe) - { - int metaOther = new Vector3(tileEntity).getBlockMetadata(this.worldObj); - if (meta < EnumPipeMaterial.values().length && metaOther < EnumPipeMaterial.values().length) - { - EnumPipeMaterial pipeMat = EnumPipeMaterial.values()[meta]; - EnumPipeMaterial pipeMatOther = EnumPipeMaterial.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 == EnumPipeMaterial.WOOD || pipeMat == EnumPipeMaterial.STONE) && (pipeMatOther == EnumPipeMaterial.WOOD || pipeMatOther == EnumPipeMaterial.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 != EnumPipeMaterial.WOOD && pipeMat != EnumPipeMaterial.STONE && pipeMatOther != EnumPipeMaterial.WOOD && pipeMatOther != EnumPipeMaterial.STONE && pipeMat != EnumPipeMaterial.GLASS && pipeMatOther != EnumPipeMaterial.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 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 sendTankUpdate() - { - if (this.getBlockMetadata() == EnumPipeMaterial.WOOD.ordinal() || this.getBlockMetadata() == EnumPipeMaterial.STONE.ordinal()) - { - super.sendTankUpdate(); - } - } - - @Override - public boolean canDrain(ForgeDirection from, Fluid fluid) - { - return false; - } - - @Override - public int getPressureIn(ForgeDirection side) - { - return this.getMaxPressure(); - } - - @Override - public void onWrongPressure(ForgeDirection side, int pressure) - { - // TODO Auto-generated method stub - - } - - @Override - public int getMaxPressure() - { - return 10000; - } - - @Override - public int getMaxFlowRate() - { - return 1000; - } -} diff --git a/src/main/java/resonantinduction/mechanical/fluid/tank/BlockTank.java b/src/main/java/resonantinduction/mechanical/fluid/tank/BlockTank.java index a7ce1fd8..5e408aae 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/tank/BlockTank.java +++ b/src/main/java/resonantinduction/mechanical/fluid/tank/BlockTank.java @@ -13,7 +13,6 @@ import net.minecraft.world.World; import resonantinduction.core.render.RIBlockRenderingHandler; import resonantinduction.mechanical.fluid.pipe.EnumPipeMaterial; import resonantinduction.mechanical.fluid.pipe.ItemBlockFluidContainer; -import resonantinduction.mechanical.fluid.pipe.TilePipe; import resonantinduction.mechanical.fluid.prefab.BlockFluidNetwork; import universalelectricity.api.vector.Vector3; import calclavia.lib.utility.FluidUtility; @@ -97,7 +96,7 @@ public class BlockTank extends BlockFluidNetwork { ArrayList ret = new ArrayList(); TileEntity entity = world.getBlockTileEntity(x, y, z); - if (entity instanceof TilePipe) + if (entity instanceof TileTank) { ret.add(new ItemStack(this, 1, EnumPipeMaterial.getDropItemMeta(world, x, y, z))); } diff --git a/src/main/resources/assets/resonantinduction/languages/en_US.properties b/src/main/resources/assets/resonantinduction/languages/en_US.properties index 7438861b..11fb920b 100644 --- a/src/main/resources/assets/resonantinduction/languages/en_US.properties +++ b/src/main/resources/assets/resonantinduction/languages/en_US.properties @@ -52,7 +52,7 @@ tile.resonantinduction\:manipulator.name=Manipulator tile.resonantinduction\:rejector.name=Rejector # Fluid pipes -tile.resonantinduction\:fluidPipe.2.name=Red Wood Trough +item.resonantinduction\:pipe.name=Pipe tile.resonantinduction\:fluidPipe.3.name=Green Wood Trough tile.resonantinduction\:fluidPipe.4.name=Brown Wood Trough tile.resonantinduction\:fluidPipe.5.name=Blue Wood Trough