Implemented gutter gravity system
This commit is contained in:
parent
33df875a9b
commit
b51029e578
6 changed files with 73 additions and 103 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
Loading…
Reference in a new issue