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.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);
|
||||||
|
|
||||||
|
|
|
@ -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.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;
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
Loading…
Reference in a new issue