Implemented gutter gravity system

This commit is contained in:
Calclavia 2014-03-08 14:12:17 -08:00
parent 33df875a9b
commit b51029e578
6 changed files with 73 additions and 103 deletions

View file

@ -18,7 +18,6 @@ import resonantinduction.archaic.firebox.BlockFirebox;
import resonantinduction.archaic.firebox.BlockHotPlate; import resonantinduction.archaic.firebox.BlockHotPlate;
import resonantinduction.archaic.firebox.TileFirebox; import resonantinduction.archaic.firebox.TileFirebox;
import resonantinduction.archaic.firebox.TileHotPlate; import resonantinduction.archaic.firebox.TileHotPlate;
import resonantinduction.archaic.fluid.grate.BlockGrate;
import resonantinduction.archaic.fluid.grate.TileGrate; import resonantinduction.archaic.fluid.grate.TileGrate;
import resonantinduction.archaic.fluid.gutter.TileGutter; import resonantinduction.archaic.fluid.gutter.TileGutter;
import resonantinduction.archaic.fluid.tank.TileTank; import resonantinduction.archaic.fluid.tank.TileTank;
@ -107,7 +106,7 @@ public class Archaic
blockMillstone = contentRegistry.createTile(BlockMillstone.class, TileMillstone.class); blockMillstone = contentRegistry.createTile(BlockMillstone.class, TileMillstone.class);
blockCast = contentRegistry.createTile(BlockCastingMold.class, TileCastingMold.class); blockCast = contentRegistry.createTile(BlockCastingMold.class, TileCastingMold.class);
blockGutter = contentRegistry.newBlock(TileGutter.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); blockFilter = contentRegistry.createTile(BlockFilter.class, TileFilter.class);
blockTank = contentRegistry.newBlock(TileTank.class); blockTank = contentRegistry.newBlock(TileTank.class);

View file

@ -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;
}
}

View file

@ -5,6 +5,10 @@ import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.PriorityQueue; 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.common.ForgeDirection;
import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidContainerRegistry;
@ -12,16 +16,51 @@ import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.FluidTankInfo; 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 universalelectricity.api.vector.Vector3;
import calclavia.lib.prefab.tile.TileAdvanced; import calclavia.lib.prefab.tile.IRotatable;
import calclavia.lib.utility.FluidUtility; 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; 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 @Override
public boolean canUpdate() public boolean canUpdate()
{ {
@ -61,17 +100,17 @@ public class TileGrate extends TileAdvanced implements IFluidHandler
@Override @Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill) 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) if (gratePath == null)
{ {
gratePath = new GratePathfinder(true); 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; return 0;

View file

@ -83,11 +83,14 @@ public class RenderGutter extends TileEntitySpecialRenderer implements ISimpleIt
if (tileEntity.worldObj != null) if (tileEntity.worldObj != null)
{ {
GL11.glPushMatrix();
GL11.glScaled(0.99, 0.99, 0.99);
FluidTank tank = ((TileGutter) tileEntity).getInternalTank(); FluidTank tank = ((TileGutter) tileEntity).getInternalTank();
double percentageFilled = (double) tank.getFluidAmount() / (double) tank.getCapacity(); double percentageFilled = (double) tank.getFluidAmount() / (double) tank.getCapacity();
if (percentageFilled > 0.1)
{
GL11.glPushMatrix();
GL11.glScaled(0.95, 0.95, 0.95);
double ySouthEast = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.EAST); 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 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 ySouthWest = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.WEST);
@ -96,6 +99,7 @@ public class RenderGutter extends TileEntitySpecialRenderer implements ISimpleIt
FluidRenderUtility.renderFluidTesselation(tank, ySouthEast, yNorthEast, ySouthWest, yNorthWest); FluidRenderUtility.renderFluidTesselation(tank, ySouthEast, yNorthEast, ySouthWest, yNorthWest);
GL11.glPopMatrix(); GL11.glPopMatrix();
} }
}
GL11.glPopMatrix(); GL11.glPopMatrix();
} }

View file

@ -13,8 +13,9 @@ import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidHandler; import net.minecraftforge.fluids.IFluidHandler;
import resonantinduction.archaic.fluid.grate.TileGrate;
import resonantinduction.core.ResonantInduction; 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.IPressureNodeProvider;
import resonantinduction.core.grid.fluid.PressureNode; import resonantinduction.core.grid.fluid.PressureNode;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
@ -28,7 +29,7 @@ import calclavia.lib.utility.WorldUtility;
* @author Calclavia * @author Calclavia
* *
*/ */
public class TileGutter extends TilePressurizedNode public class TileGutter extends TilePressureNode
{ {
public TileGutter() public TileGutter()
{ {
@ -69,6 +70,11 @@ public class TileGutter extends TilePressurizedNode
else else
{ {
connections.put(tile, dir); 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) public int getPressure(ForgeDirection dir)
{ {
if (dir == ForgeDirection.UP) if (dir == ForgeDirection.UP)
return -3; return -1;
if (dir == ForgeDirection.DOWN) if (dir == ForgeDirection.DOWN)
return +3; return 2;
return pressure; return 0;
} }
@Override @Override

View file

@ -16,11 +16,11 @@ import calclavia.lib.network.IPacketReceiverWithID;
* *
* @author DarkGuardsman * @author DarkGuardsman
*/ */
public abstract class TilePressurizedNode extends TileFluidNode implements IPressureNodeProvider, IPacketReceiverWithID public abstract class TilePressureNode extends TileFluidNode implements IPressureNodeProvider, IPacketReceiverWithID
{ {
protected PressureNode node; protected PressureNode node;
public TilePressurizedNode(Material material) public TilePressureNode(Material material)
{ {
super(material); super(material);
getInternalTank().setCapacity(FluidContainerRegistry.BUCKET_VOLUME); getInternalTank().setCapacity(FluidContainerRegistry.BUCKET_VOLUME);