diff --git a/archaic/src/main/java/resonantinduction/archaic/Archaic.java b/archaic/src/main/java/resonantinduction/archaic/Archaic.java index 38a004d4..1f90c630 100644 --- a/archaic/src/main/java/resonantinduction/archaic/Archaic.java +++ b/archaic/src/main/java/resonantinduction/archaic/Archaic.java @@ -18,7 +18,6 @@ import resonantinduction.archaic.firebox.BlockFirebox; import resonantinduction.archaic.firebox.BlockHotPlate; import resonantinduction.archaic.firebox.TileFirebox; import resonantinduction.archaic.firebox.TileHotPlate; -import resonantinduction.archaic.fluid.grate.BlockGrate; import resonantinduction.archaic.fluid.grate.TileGrate; import resonantinduction.archaic.fluid.gutter.TileGutter; import resonantinduction.archaic.fluid.tank.TileTank; @@ -107,7 +106,7 @@ public class Archaic blockMillstone = contentRegistry.createTile(BlockMillstone.class, TileMillstone.class); blockCast = contentRegistry.createTile(BlockCastingMold.class, TileCastingMold.class); blockGutter = contentRegistry.newBlock(TileGutter.class); - blockGrate = contentRegistry.createTile(BlockGrate.class, TileGrate.class); + blockGrate = contentRegistry.newBlock(TileGrate.class); blockFilter = contentRegistry.createTile(BlockFilter.class, TileFilter.class); blockTank = contentRegistry.newBlock(TileTank.class); diff --git a/archaic/src/main/java/resonantinduction/archaic/fluid/grate/BlockGrate.java b/archaic/src/main/java/resonantinduction/archaic/fluid/grate/BlockGrate.java deleted file mode 100644 index 455c2b3b..00000000 --- a/archaic/src/main/java/resonantinduction/archaic/fluid/grate/BlockGrate.java +++ /dev/null @@ -1,78 +0,0 @@ -package resonantinduction.archaic.fluid.grate; - -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IconRegister; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.Icon; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.common.ForgeDirection; -import resonantinduction.core.Reference; -import calclavia.lib.prefab.block.BlockRotatable; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class BlockGrate extends BlockRotatable -{ - private Icon iconFront; - - public BlockGrate(int id) - { - super(id, Material.iron); - rotationMask = Byte.parseByte("111111", 2); - } - - @Override - public TileEntity createNewTileEntity(World var1) - { - return new TileGrate(); - } - - @Override - public void registerIcons(IconRegister iconRegister) - { - iconFront = iconRegister.registerIcon(Reference.PREFIX + "grate_front"); - super.registerIcons(iconRegister); - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean renderAsNormalBlock() - { - return false; - } - - @Override - public Icon getIcon(int side, int metadata) - { - if (side == 1) - { - return iconFront; - } - - return blockIcon; - } - - @Override - public Icon getBlockTexture(IBlockAccess world, int x, int y, int z, int side) - { - TileEntity entity = world.getBlockTileEntity(x, y, z); - ForgeDirection dir = ForgeDirection.getOrientation(side); - - if (entity instanceof TileGrate) - { - if (dir == ((TileGrate) entity).getDirection()) - { - return iconFront; - } - } - - return blockIcon; - } -} diff --git a/archaic/src/main/java/resonantinduction/archaic/fluid/grate/TileGrate.java b/archaic/src/main/java/resonantinduction/archaic/fluid/grate/TileGrate.java index 5e094309..da1670ff 100644 --- a/archaic/src/main/java/resonantinduction/archaic/fluid/grate/TileGrate.java +++ b/archaic/src/main/java/resonantinduction/archaic/fluid/grate/TileGrate.java @@ -5,6 +5,10 @@ import java.util.Comparator; import java.util.HashMap; import java.util.PriorityQueue; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IconRegister; +import net.minecraft.util.Icon; +import net.minecraft.world.IBlockAccess; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidContainerRegistry; @@ -12,16 +16,51 @@ 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 resonantinduction.core.Reference; +import resonantinduction.core.fluid.TilePressureNode; +import resonantinduction.core.grid.fluid.PressureNode; import universalelectricity.api.vector.Vector3; -import calclavia.lib.prefab.tile.TileAdvanced; +import calclavia.lib.prefab.tile.IRotatable; import calclavia.lib.utility.FluidUtility; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; -public class TileGrate extends TileAdvanced implements IFluidHandler +public class TileGrate extends TilePressureNode implements IRotatable { - protected FluidTank tank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME); + @SideOnly(Side.CLIENT) + private static Icon iconFront, iconSide; + private GratePathfinder gratePath; + public TileGrate() + { + super(Material.rock); + isOpaqueCube = false; + normalRender = true; + rotationMask = Byte.parseByte("111111", 2); + node = new PressureNode(this); + } + + @Override + public Icon getIcon(IBlockAccess world, int side) + { + return side == getDirection().ordinal() ? iconFront : iconSide; + } + + @Override + public Icon getIcon(int side, int metadata) + { + return side == 1 ? iconFront : iconSide; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IconRegister iconRegister) + { + iconFront = iconRegister.registerIcon(Reference.PREFIX + "grate_front"); + iconSide = iconRegister.registerIcon(Reference.PREFIX + "grate"); + } + @Override public boolean canUpdate() { @@ -61,17 +100,17 @@ public class TileGrate extends TileAdvanced implements IFluidHandler @Override public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { - tank.fill(resource, doFill); + getPressureTank().fill(resource, doFill); - if (tank.getFluidAmount() > 0) + if (getPressureTank().getFluidAmount() > 0) { if (gratePath == null) { gratePath = new GratePathfinder(true); - gratePath.startFill(new Vector3(this), tank.getFluid().getFluid().getID()); + gratePath.startFill(new Vector3(this), getPressureTank().getFluid().getFluid().getID()); } - return tank.drain(gratePath.tryFill(tank.getFluidAmount(), 2000), true).amount; + return getPressureTank().drain(gratePath.tryFill(getPressureTank().getFluidAmount(), 2000), true).amount; } return 0; diff --git a/archaic/src/main/java/resonantinduction/archaic/fluid/gutter/RenderGutter.java b/archaic/src/main/java/resonantinduction/archaic/fluid/gutter/RenderGutter.java index cc14a3a5..aaa03e86 100644 --- a/archaic/src/main/java/resonantinduction/archaic/fluid/gutter/RenderGutter.java +++ b/archaic/src/main/java/resonantinduction/archaic/fluid/gutter/RenderGutter.java @@ -83,18 +83,22 @@ public class RenderGutter extends TileEntitySpecialRenderer implements ISimpleIt if (tileEntity.worldObj != null) { - GL11.glPushMatrix(); - GL11.glScaled(0.99, 0.99, 0.99); FluidTank tank = ((TileGutter) tileEntity).getInternalTank(); double percentageFilled = (double) tank.getFluidAmount() / (double) tank.getCapacity(); - double ySouthEast = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.EAST); - double yNorthEast = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.NORTH, ForgeDirection.EAST); - double ySouthWest = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.WEST); - double yNorthWest = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.NORTH, ForgeDirection.WEST); + if (percentageFilled > 0.1) + { + GL11.glPushMatrix(); + GL11.glScaled(0.95, 0.95, 0.95); - FluidRenderUtility.renderFluidTesselation(tank, ySouthEast, yNorthEast, ySouthWest, yNorthWest); - GL11.glPopMatrix(); + double ySouthEast = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.EAST); + double yNorthEast = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.NORTH, ForgeDirection.EAST); + double ySouthWest = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.WEST); + double yNorthWest = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.NORTH, ForgeDirection.WEST); + + FluidRenderUtility.renderFluidTesselation(tank, ySouthEast, yNorthEast, ySouthWest, yNorthWest); + GL11.glPopMatrix(); + } } GL11.glPopMatrix(); diff --git a/archaic/src/main/java/resonantinduction/archaic/fluid/gutter/TileGutter.java b/archaic/src/main/java/resonantinduction/archaic/fluid/gutter/TileGutter.java index 90c5a67f..c21e8769 100644 --- a/archaic/src/main/java/resonantinduction/archaic/fluid/gutter/TileGutter.java +++ b/archaic/src/main/java/resonantinduction/archaic/fluid/gutter/TileGutter.java @@ -13,8 +13,9 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidHandler; +import resonantinduction.archaic.fluid.grate.TileGrate; import resonantinduction.core.ResonantInduction; -import resonantinduction.core.fluid.TilePressurizedNode; +import resonantinduction.core.fluid.TilePressureNode; import resonantinduction.core.grid.fluid.IPressureNodeProvider; import resonantinduction.core.grid.fluid.PressureNode; import universalelectricity.api.vector.Vector3; @@ -28,7 +29,7 @@ import calclavia.lib.utility.WorldUtility; * @author Calclavia * */ -public class TileGutter extends TilePressurizedNode +public class TileGutter extends TilePressureNode { public TileGutter() { @@ -69,6 +70,11 @@ public class TileGutter extends TilePressurizedNode else { connections.put(tile, dir); + + if (tile instanceof TileGrate) + { + renderSides = WorldUtility.setEnableSide(renderSides, dir, true); + } } } } @@ -85,12 +91,12 @@ public class TileGutter extends TilePressurizedNode public int getPressure(ForgeDirection dir) { if (dir == ForgeDirection.UP) - return -3; + return -1; if (dir == ForgeDirection.DOWN) - return +3; + return 2; - return pressure; + return 0; } @Override diff --git a/src/main/java/resonantinduction/core/fluid/TilePressurizedNode.java b/src/main/java/resonantinduction/core/fluid/TilePressureNode.java similarity index 92% rename from src/main/java/resonantinduction/core/fluid/TilePressurizedNode.java rename to src/main/java/resonantinduction/core/fluid/TilePressureNode.java index 09cbaa4c..474fde63 100644 --- a/src/main/java/resonantinduction/core/fluid/TilePressurizedNode.java +++ b/src/main/java/resonantinduction/core/fluid/TilePressureNode.java @@ -16,11 +16,11 @@ import calclavia.lib.network.IPacketReceiverWithID; * * @author DarkGuardsman */ -public abstract class TilePressurizedNode extends TileFluidNode implements IPressureNodeProvider, IPacketReceiverWithID +public abstract class TilePressureNode extends TileFluidNode implements IPressureNodeProvider, IPacketReceiverWithID { protected PressureNode node; - public TilePressurizedNode(Material material) + public TilePressureNode(Material material) { super(material); getInternalTank().setCapacity(FluidContainerRegistry.BUCKET_VOLUME);