Merged network pipe with old pipe
Now that the new network pipes function up to the same level as the old pipes its time to retire the old pipe. Only thing left too do with the new pipes after this is too refine the code, add PSI methods, and make it more compatible with other mods. Though as far as i can tell it should work with other mods. However, if a mod doesn't use some methods right then the pipes will not fill them as fast.
This commit is contained in:
parent
6eaaa91849
commit
24e4f1f853
9 changed files with 339 additions and 825 deletions
|
@ -7,7 +7,7 @@ import fluidmech.client.render.BlockRenderHelper;
|
||||||
import fluidmech.client.render.ItemRenderHelper;
|
import fluidmech.client.render.ItemRenderHelper;
|
||||||
import fluidmech.client.render.RenderGearRod;
|
import fluidmech.client.render.RenderGearRod;
|
||||||
import fluidmech.client.render.RenderGenerator;
|
import fluidmech.client.render.RenderGenerator;
|
||||||
import fluidmech.client.render.RenderNetworkPipe;
|
import fluidmech.client.render.RenderPipe;
|
||||||
import fluidmech.client.render.RenderPipe;
|
import fluidmech.client.render.RenderPipe;
|
||||||
import fluidmech.client.render.RenderPump;
|
import fluidmech.client.render.RenderPump;
|
||||||
import fluidmech.client.render.RenderReleaseValve;
|
import fluidmech.client.render.RenderReleaseValve;
|
||||||
|
@ -21,7 +21,7 @@ import fluidmech.common.machines.TileEntitySink;
|
||||||
import fluidmech.common.machines.TileEntityTank;
|
import fluidmech.common.machines.TileEntityTank;
|
||||||
import fluidmech.common.machines.mech.TileEntityGenerator;
|
import fluidmech.common.machines.mech.TileEntityGenerator;
|
||||||
import fluidmech.common.machines.mech.TileEntityRod;
|
import fluidmech.common.machines.mech.TileEntityRod;
|
||||||
import fluidmech.common.machines.pipes.TileEntityNetworkPipe;
|
import fluidmech.common.machines.pipes.TileEntityPipe;
|
||||||
import fluidmech.common.machines.pipes.TileEntityPipe;
|
import fluidmech.common.machines.pipes.TileEntityPipe;
|
||||||
|
|
||||||
public class ClientProxy extends CommonProxy
|
public class ClientProxy extends CommonProxy
|
||||||
|
@ -36,7 +36,7 @@ public class ClientProxy extends CommonProxy
|
||||||
public void Init()
|
public void Init()
|
||||||
{
|
{
|
||||||
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPipe.class, new RenderPipe());
|
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPipe.class, new RenderPipe());
|
||||||
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityNetworkPipe.class, new RenderNetworkPipe());
|
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPipe.class, new RenderPipe());
|
||||||
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMinorPump.class, new RenderPump());
|
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMinorPump.class, new RenderPump());
|
||||||
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRod.class, new RenderGearRod());
|
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRod.class, new RenderGearRod());
|
||||||
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityGenerator.class, new RenderGenerator());
|
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityGenerator.class, new RenderGenerator());
|
||||||
|
|
|
@ -1,84 +0,0 @@
|
||||||
package fluidmech.client.render;
|
|
||||||
|
|
||||||
import hydraulic.api.ColorCode;
|
|
||||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
|
|
||||||
import org.lwjgl.opengl.GL11;
|
|
||||||
|
|
||||||
import fluidmech.client.model.ModelLargePipe;
|
|
||||||
import fluidmech.common.FluidMech;
|
|
||||||
import fluidmech.common.machines.pipes.TileEntityNetworkPipe;
|
|
||||||
import fluidmech.common.machines.pipes.TileEntityPipe;
|
|
||||||
|
|
||||||
public class RenderNetworkPipe extends TileEntitySpecialRenderer
|
|
||||||
{
|
|
||||||
private ModelLargePipe SixPipe;
|
|
||||||
private boolean[] renderSide = new boolean[6];
|
|
||||||
|
|
||||||
public RenderNetworkPipe()
|
|
||||||
{
|
|
||||||
SixPipe = new ModelLargePipe();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void renderAModelAt(TileEntity te, double d, double d1, double d2, float f)
|
|
||||||
{
|
|
||||||
// Texture file
|
|
||||||
GL11.glPushMatrix();
|
|
||||||
GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F);
|
|
||||||
GL11.glScalef(1.0F, -1F, -1F);
|
|
||||||
|
|
||||||
int meta = 0;
|
|
||||||
|
|
||||||
if (te instanceof TileEntityNetworkPipe)
|
|
||||||
{
|
|
||||||
meta = te.getBlockMetadata();
|
|
||||||
this.renderSide = ((TileEntityNetworkPipe) te).renderConnection;
|
|
||||||
}
|
|
||||||
this.render(meta, renderSide);
|
|
||||||
GL11.glPopMatrix();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getPipeTexture(int meta)
|
|
||||||
{
|
|
||||||
return FluidMech.MODEL_TEXTURE_DIRECTORY + "pipes/" + ColorCode.get(meta).getName() + "Pipe.png";
|
|
||||||
}
|
|
||||||
|
|
||||||
public void render(int meta, boolean[] side)
|
|
||||||
{
|
|
||||||
bindTextureByName(this.getPipeTexture(meta));
|
|
||||||
if (side[0])
|
|
||||||
{
|
|
||||||
SixPipe.renderBottom();
|
|
||||||
}
|
|
||||||
if (side[1])
|
|
||||||
{
|
|
||||||
SixPipe.renderTop();
|
|
||||||
}
|
|
||||||
if (side[3])
|
|
||||||
{
|
|
||||||
SixPipe.renderFront();
|
|
||||||
}
|
|
||||||
if (side[2])
|
|
||||||
{
|
|
||||||
SixPipe.renderBack();
|
|
||||||
}
|
|
||||||
if (side[5])
|
|
||||||
{
|
|
||||||
SixPipe.renderRight();
|
|
||||||
}
|
|
||||||
if (side[4])
|
|
||||||
{
|
|
||||||
SixPipe.renderLeft();
|
|
||||||
}
|
|
||||||
SixPipe.renderMiddle();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8)
|
|
||||||
{
|
|
||||||
this.renderAModelAt(tileEntity, var2, var4, var6, var8);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -9,60 +9,76 @@ import org.lwjgl.opengl.GL11;
|
||||||
import fluidmech.client.model.ModelLargePipe;
|
import fluidmech.client.model.ModelLargePipe;
|
||||||
import fluidmech.common.FluidMech;
|
import fluidmech.common.FluidMech;
|
||||||
import fluidmech.common.machines.pipes.TileEntityPipe;
|
import fluidmech.common.machines.pipes.TileEntityPipe;
|
||||||
|
import fluidmech.common.machines.pipes.TileEntityPipe;
|
||||||
|
|
||||||
public class RenderPipe extends TileEntitySpecialRenderer
|
public class RenderPipe extends TileEntitySpecialRenderer
|
||||||
{
|
{
|
||||||
private ModelLargePipe SixPipe;
|
private ModelLargePipe SixPipe;
|
||||||
private TileEntity[] ents = new TileEntity[6];
|
private boolean[] renderSide = new boolean[6];
|
||||||
|
|
||||||
public RenderPipe()
|
public RenderPipe()
|
||||||
{
|
{
|
||||||
SixPipe = new ModelLargePipe();
|
SixPipe = new ModelLargePipe();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renderAModelAt(TileEntity te, double d, double d1, double d2, float f)
|
public void renderAModelAt(TileEntity te, double d, double d1, double d2, float f)
|
||||||
{
|
{
|
||||||
// Texture file
|
// Texture file
|
||||||
GL11.glPushMatrix();
|
GL11.glPushMatrix();
|
||||||
GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F);
|
GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F);
|
||||||
GL11.glScalef(1.0F, -1F, -1F);
|
GL11.glScalef(1.0F, -1F, -1F);
|
||||||
int meta = 0;
|
|
||||||
if (te instanceof TileEntityPipe)
|
|
||||||
{
|
|
||||||
meta = te.getBlockMetadata();
|
|
||||||
ents = ((TileEntityPipe) te).connectedBlocks;
|
|
||||||
}
|
|
||||||
this.render(meta, ents);
|
|
||||||
GL11.glPopMatrix();
|
|
||||||
|
|
||||||
}
|
int meta = 0;
|
||||||
public static String getPipeTexture(int meta)
|
|
||||||
{
|
|
||||||
return FluidMech.MODEL_TEXTURE_DIRECTORY + "pipes/"+ColorCode.get(meta).getName()+"Pipe.png";
|
|
||||||
}
|
|
||||||
public void render(int meta, TileEntity[] ents)
|
|
||||||
{
|
|
||||||
bindTextureByName(this.getPipeTexture(meta));
|
|
||||||
if (ents[0] != null)
|
|
||||||
SixPipe.renderBottom();
|
|
||||||
if (ents[1] != null)
|
|
||||||
SixPipe.renderTop();
|
|
||||||
if (ents[3] != null)
|
|
||||||
SixPipe.renderFront();
|
|
||||||
if (ents[2] != null)
|
|
||||||
SixPipe.renderBack();
|
|
||||||
if (ents[5] != null)
|
|
||||||
SixPipe.renderRight();
|
|
||||||
if (ents[4] != null)
|
|
||||||
SixPipe.renderLeft();
|
|
||||||
SixPipe.renderMiddle();
|
|
||||||
|
|
||||||
}
|
if (te instanceof TileEntityPipe)
|
||||||
|
{
|
||||||
|
meta = te.getBlockMetadata();
|
||||||
|
this.renderSide = ((TileEntityPipe) te).renderConnection;
|
||||||
|
}
|
||||||
|
this.render(meta, renderSide);
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
|
||||||
@Override
|
}
|
||||||
public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8)
|
|
||||||
{
|
public static String getPipeTexture(int meta)
|
||||||
this.renderAModelAt((TileEntityPipe) tileEntity, var2, var4, var6, var8);
|
{
|
||||||
}
|
return FluidMech.MODEL_TEXTURE_DIRECTORY + "pipes/" + ColorCode.get(meta).getName() + "Pipe.png";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void render(int meta, boolean[] side)
|
||||||
|
{
|
||||||
|
bindTextureByName(this.getPipeTexture(meta));
|
||||||
|
if (side[0])
|
||||||
|
{
|
||||||
|
SixPipe.renderBottom();
|
||||||
|
}
|
||||||
|
if (side[1])
|
||||||
|
{
|
||||||
|
SixPipe.renderTop();
|
||||||
|
}
|
||||||
|
if (side[3])
|
||||||
|
{
|
||||||
|
SixPipe.renderFront();
|
||||||
|
}
|
||||||
|
if (side[2])
|
||||||
|
{
|
||||||
|
SixPipe.renderBack();
|
||||||
|
}
|
||||||
|
if (side[5])
|
||||||
|
{
|
||||||
|
SixPipe.renderRight();
|
||||||
|
}
|
||||||
|
if (side[4])
|
||||||
|
{
|
||||||
|
SixPipe.renderLeft();
|
||||||
|
}
|
||||||
|
SixPipe.renderMiddle();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8)
|
||||||
|
{
|
||||||
|
this.renderAModelAt(tileEntity, var2, var4, var6, var8);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -20,9 +20,9 @@ import fluidmech.common.machines.mech.BlockGenerator;
|
||||||
import fluidmech.common.machines.mech.BlockRod;
|
import fluidmech.common.machines.mech.BlockRod;
|
||||||
import fluidmech.common.machines.mech.TileEntityGenerator;
|
import fluidmech.common.machines.mech.TileEntityGenerator;
|
||||||
import fluidmech.common.machines.mech.TileEntityRod;
|
import fluidmech.common.machines.mech.TileEntityRod;
|
||||||
import fluidmech.common.machines.pipes.BlockNetworkPipe;
|
|
||||||
import fluidmech.common.machines.pipes.BlockPipe;
|
import fluidmech.common.machines.pipes.BlockPipe;
|
||||||
import fluidmech.common.machines.pipes.TileEntityNetworkPipe;
|
import fluidmech.common.machines.pipes.BlockPipe;
|
||||||
|
import fluidmech.common.machines.pipes.TileEntityPipe;
|
||||||
import fluidmech.common.machines.pipes.TileEntityPipe;
|
import fluidmech.common.machines.pipes.TileEntityPipe;
|
||||||
import hydraulic.api.ColorCode;
|
import hydraulic.api.ColorCode;
|
||||||
import hydraulic.core.liquidNetwork.LiquidHandler;
|
import hydraulic.core.liquidNetwork.LiquidHandler;
|
||||||
|
@ -92,7 +92,6 @@ public class FluidMech extends DummyModContainer
|
||||||
public final static int ITEM_ID_PREFIX = 13200;
|
public final static int ITEM_ID_PREFIX = 13200;
|
||||||
|
|
||||||
public static Block blockPipe;
|
public static Block blockPipe;
|
||||||
public static Block blockNetPipe;
|
|
||||||
public static Block blockTank;
|
public static Block blockTank;
|
||||||
public static Block blockMachine;
|
public static Block blockMachine;
|
||||||
public static Block blockRod;
|
public static Block blockRod;
|
||||||
|
@ -128,7 +127,6 @@ public class FluidMech extends DummyModContainer
|
||||||
|
|
||||||
// Blocks
|
// Blocks
|
||||||
blockPipe = new BlockPipe(this.CONFIGURATION.getBlock("Pipes", BLOCK_ID_PREFIX).getInt());
|
blockPipe = new BlockPipe(this.CONFIGURATION.getBlock("Pipes", BLOCK_ID_PREFIX).getInt());
|
||||||
blockNetPipe = new BlockNetworkPipe(this.CONFIGURATION.getBlock("HydraPipes", BLOCK_ID_PREFIX+9).getInt());
|
|
||||||
blockMachine = new BlockPumpMachine(this.CONFIGURATION.getBlock("Machines", BLOCK_ID_PREFIX + 1).getInt());
|
blockMachine = new BlockPumpMachine(this.CONFIGURATION.getBlock("Machines", BLOCK_ID_PREFIX + 1).getInt());
|
||||||
blockRod = new BlockRod(this.CONFIGURATION.getBlock("Mechanical Rod", BLOCK_ID_PREFIX + 3).getInt());
|
blockRod = new BlockRod(this.CONFIGURATION.getBlock("Mechanical Rod", BLOCK_ID_PREFIX + 3).getInt());
|
||||||
blockGenerator = new BlockGenerator((this.CONFIGURATION.getBlock("Generator", BLOCK_ID_PREFIX + 4).getInt()));
|
blockGenerator = new BlockGenerator((this.CONFIGURATION.getBlock("Generator", BLOCK_ID_PREFIX + 4).getInt()));
|
||||||
|
@ -149,7 +147,6 @@ public class FluidMech extends DummyModContainer
|
||||||
|
|
||||||
// block registry
|
// block registry
|
||||||
GameRegistry.registerBlock(blockPipe, ItemBlockPipe.class, "lmPipe");
|
GameRegistry.registerBlock(blockPipe, ItemBlockPipe.class, "lmPipe");
|
||||||
GameRegistry.registerBlock(blockNetPipe, ItemBlockPipe.class, "lmNPipe");
|
|
||||||
GameRegistry.registerBlock(blockReleaseValve, ItemBlockReleaseValve.class, "eValve");
|
GameRegistry.registerBlock(blockReleaseValve, ItemBlockReleaseValve.class, "eValve");
|
||||||
GameRegistry.registerBlock(blockRod, "mechRod");
|
GameRegistry.registerBlock(blockRod, "mechRod");
|
||||||
GameRegistry.registerBlock(blockGenerator, "lmGen");
|
GameRegistry.registerBlock(blockGenerator, "lmGen");
|
||||||
|
@ -166,7 +163,6 @@ public class FluidMech extends DummyModContainer
|
||||||
proxy.Init();
|
proxy.Init();
|
||||||
// TileEntities
|
// TileEntities
|
||||||
GameRegistry.registerTileEntity(TileEntityPipe.class, "lmPipeTile");
|
GameRegistry.registerTileEntity(TileEntityPipe.class, "lmPipeTile");
|
||||||
GameRegistry.registerTileEntity(TileEntityNetworkPipe.class, "lmNPipeTile");
|
|
||||||
GameRegistry.registerTileEntity(TileEntityMinorPump.class, "lmPumpTile");
|
GameRegistry.registerTileEntity(TileEntityMinorPump.class, "lmPumpTile");
|
||||||
GameRegistry.registerTileEntity(TileEntityRod.class, "lmRodTile");
|
GameRegistry.registerTileEntity(TileEntityRod.class, "lmRodTile");
|
||||||
GameRegistry.registerTileEntity(TileEntityReleaseValve.class, "lmeValve");
|
GameRegistry.registerTileEntity(TileEntityReleaseValve.class, "lmeValve");
|
||||||
|
|
|
@ -18,6 +18,7 @@ import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
import net.minecraftforge.liquids.ILiquidTank;
|
import net.minecraftforge.liquids.ILiquidTank;
|
||||||
import net.minecraftforge.liquids.ITankContainer;
|
import net.minecraftforge.liquids.ITankContainer;
|
||||||
|
import net.minecraftforge.liquids.LiquidContainerRegistry;
|
||||||
import net.minecraftforge.liquids.LiquidStack;
|
import net.minecraftforge.liquids.LiquidStack;
|
||||||
import universalelectricity.prefab.tile.TileEntityAdvanced;
|
import universalelectricity.prefab.tile.TileEntityAdvanced;
|
||||||
|
|
||||||
|
@ -65,7 +66,7 @@ public class TileEntityReleaseValve extends TileEntityAdvanced implements IPsiCr
|
||||||
{
|
{
|
||||||
for (ITankContainer drainedTank : input)
|
for (ITankContainer drainedTank : input)
|
||||||
{
|
{
|
||||||
LiquidStack stack = drainedTank.drain(ForgeDirection.UNKNOWN, TileEntityPipe.maxVolume, false);
|
LiquidStack stack = drainedTank.drain(ForgeDirection.UNKNOWN, LiquidContainerRegistry.BUCKET_VOLUME, false);
|
||||||
if (stack != null && stack.amount > 0)
|
if (stack != null && stack.amount > 0)
|
||||||
{
|
{
|
||||||
TileEntityPipe inputPipe = this.findValidPipe(stack);
|
TileEntityPipe inputPipe = this.findValidPipe(stack);
|
||||||
|
|
|
@ -1,100 +0,0 @@
|
||||||
package fluidmech.common.machines.pipes;
|
|
||||||
|
|
||||||
import hydraulic.api.IFluidNetworkPart;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import net.minecraft.block.material.Material;
|
|
||||||
import net.minecraft.creativetab.CreativeTabs;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
import net.minecraft.util.MovingObjectPosition;
|
|
||||||
import net.minecraft.world.World;
|
|
||||||
import universalelectricity.core.block.IConductor;
|
|
||||||
import universalelectricity.prefab.block.BlockAdvanced;
|
|
||||||
import fluidmech.common.FluidMech;
|
|
||||||
import fluidmech.common.TabFluidMech;
|
|
||||||
|
|
||||||
public class BlockNetworkPipe extends BlockAdvanced
|
|
||||||
{
|
|
||||||
public BlockNetworkPipe(int id)
|
|
||||||
{
|
|
||||||
super(id, Material.iron);
|
|
||||||
this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F);
|
|
||||||
this.setHardness(1f);
|
|
||||||
this.setCreativeTab(TabFluidMech.INSTANCE);
|
|
||||||
this.setUnlocalizedName("lmNPipe");
|
|
||||||
this.setResistance(3f);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isOpaqueCube()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean renderAsNormalBlock()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int damageDropped(int par1)
|
|
||||||
{
|
|
||||||
return par1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getRenderType()
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBlockAdded(World world, int x, int y, int z)
|
|
||||||
{
|
|
||||||
super.onBlockAdded(world, x, y, z);
|
|
||||||
|
|
||||||
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
|
|
||||||
|
|
||||||
if (tileEntity instanceof IFluidNetworkPart)
|
|
||||||
{
|
|
||||||
((IFluidNetworkPart) tileEntity).updateAdjacentConnections();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNeighborBlockChange(World world, int x, int y, int z, int blockID)
|
|
||||||
{
|
|
||||||
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
|
|
||||||
|
|
||||||
if (tileEntity instanceof IFluidNetworkPart)
|
|
||||||
{
|
|
||||||
((IFluidNetworkPart) tileEntity).updateAdjacentConnections();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TileEntity createNewTileEntity(World var1)
|
|
||||||
{
|
|
||||||
return new TileEntityNetworkPipe();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z)
|
|
||||||
{
|
|
||||||
int meta = world.getBlockMetadata(x, y, z);
|
|
||||||
return new ItemStack(FluidMech.blockNetPipe, 1, meta);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < 16; i++)
|
|
||||||
{
|
|
||||||
par3List.add(new ItemStack(par1, 1, i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +1,7 @@
|
||||||
package fluidmech.common.machines.pipes;
|
package fluidmech.common.machines.pipes;
|
||||||
|
|
||||||
|
import hydraulic.api.IFluidNetworkPart;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
|
@ -8,78 +10,91 @@ import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.MovingObjectPosition;
|
import net.minecraft.util.MovingObjectPosition;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import universalelectricity.core.block.IConductor;
|
||||||
import universalelectricity.prefab.block.BlockAdvanced;
|
import universalelectricity.prefab.block.BlockAdvanced;
|
||||||
import fluidmech.common.FluidMech;
|
import fluidmech.common.FluidMech;
|
||||||
import fluidmech.common.TabFluidMech;
|
import fluidmech.common.TabFluidMech;
|
||||||
|
|
||||||
public class BlockPipe extends BlockAdvanced
|
public class BlockPipe extends BlockAdvanced
|
||||||
{
|
{
|
||||||
public BlockPipe(int id)
|
public BlockPipe(int id)
|
||||||
{
|
{
|
||||||
super(id, Material.iron);
|
super(id, Material.iron);
|
||||||
this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F);
|
this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F);
|
||||||
this.setHardness(1f);
|
this.setHardness(1f);
|
||||||
this.setCreativeTab(TabFluidMech.INSTANCE);
|
this.setCreativeTab(TabFluidMech.INSTANCE);
|
||||||
this.setUnlocalizedName("lmPipe");
|
this.setUnlocalizedName("lmPipe");
|
||||||
this.setResistance(3f);
|
this.setResistance(3f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isOpaqueCube()
|
public boolean isOpaqueCube()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean renderAsNormalBlock()
|
public boolean renderAsNormalBlock()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int damageDropped(int par1)
|
public int damageDropped(int par1)
|
||||||
{
|
{
|
||||||
return par1;
|
return par1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getRenderType()
|
public int getRenderType()
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4)
|
public void onBlockAdded(World world, int x, int y, int z)
|
||||||
{
|
{
|
||||||
int var5 = par1World.getBlockId(par2, par3, par4);
|
super.onBlockAdded(world, x, y, z);
|
||||||
return var5 == 0 || blocksList[var5].blockMaterial.isReplaceable();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
|
||||||
public boolean canPlaceBlockOnSide(World par1World, int par2, int par3, int par4, int par5)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
if (tileEntity instanceof IFluidNetworkPart)
|
||||||
public TileEntity createNewTileEntity(World var1)
|
{
|
||||||
{
|
((IFluidNetworkPart) tileEntity).updateAdjacentConnections();
|
||||||
return new TileEntityPipe();
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z)
|
|
||||||
{
|
|
||||||
int meta = world.getBlockMetadata(x, y, z);
|
|
||||||
return new ItemStack(FluidMech.blockPipe, 1, meta);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List)
|
public void onNeighborBlockChange(World world, int x, int y, int z, int blockID)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 16; i++)
|
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
|
||||||
{
|
|
||||||
par3List.add(new ItemStack(par1, 1, i));
|
if (tileEntity instanceof IFluidNetworkPart)
|
||||||
}
|
{
|
||||||
}
|
((IFluidNetworkPart) tileEntity).updateAdjacentConnections();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TileEntity createNewTileEntity(World var1)
|
||||||
|
{
|
||||||
|
return new TileEntityPipe();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z)
|
||||||
|
{
|
||||||
|
int meta = world.getBlockMetadata(x, y, z);
|
||||||
|
return new ItemStack(FluidMech.blockPipe, 1, meta);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
par3List.add(new ItemStack(par1, 1, i));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,329 +0,0 @@
|
||||||
package fluidmech.common.machines.pipes;
|
|
||||||
|
|
||||||
import fluidmech.common.FluidMech;
|
|
||||||
import hydraulic.api.ColorCode;
|
|
||||||
import hydraulic.api.IColorCoded;
|
|
||||||
import hydraulic.api.IPipeConnection;
|
|
||||||
import hydraulic.api.IFluidNetworkPart;
|
|
||||||
import hydraulic.api.IReadOut;
|
|
||||||
import hydraulic.core.liquidNetwork.HydraulicNetwork;
|
|
||||||
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
|
||||||
import net.minecraft.network.INetworkManager;
|
|
||||||
import net.minecraft.network.packet.Packet;
|
|
||||||
import net.minecraft.network.packet.Packet250CustomPayload;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
import net.minecraft.util.AxisAlignedBB;
|
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
|
||||||
import net.minecraftforge.liquids.ILiquidTank;
|
|
||||||
import net.minecraftforge.liquids.ITankContainer;
|
|
||||||
import net.minecraftforge.liquids.LiquidContainerRegistry;
|
|
||||||
import net.minecraftforge.liquids.LiquidStack;
|
|
||||||
import net.minecraftforge.liquids.LiquidTank;
|
|
||||||
|
|
||||||
import org.bouncycastle.util.Arrays;
|
|
||||||
|
|
||||||
import universalelectricity.prefab.network.IPacketReceiver;
|
|
||||||
import universalelectricity.prefab.network.PacketManager;
|
|
||||||
import universalelectricity.prefab.tile.TileEntityAdvanced;
|
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
|
||||||
|
|
||||||
import cpw.mods.fml.relauncher.Side;
|
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
|
||||||
|
|
||||||
public class TileEntityNetworkPipe extends TileEntityAdvanced implements ITankContainer, IReadOut, IColorCoded, IFluidNetworkPart, IPacketReceiver
|
|
||||||
{
|
|
||||||
/* TANK TO FAKE OTHER TILES INTO BELIVING THIS HAS AN INTERNAL STORAGE */
|
|
||||||
private LiquidTank fakeTank = new LiquidTank(LiquidContainerRegistry.BUCKET_VOLUME);
|
|
||||||
/* CURRENTLY CONNECTED TILE ENTITIES TO THIS */
|
|
||||||
private TileEntity[] connectedBlocks = new TileEntity[6];
|
|
||||||
public boolean[] renderConnection = new boolean[6];
|
|
||||||
/* RANDOM INSTANCE USED BY THE UPDATE TICK */
|
|
||||||
private Random random = new Random();
|
|
||||||
/* NETWORK INSTANCE THAT THIS PIPE USES */
|
|
||||||
private HydraulicNetwork pipeNetwork;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateEntity()
|
|
||||||
{
|
|
||||||
super.updateEntity();
|
|
||||||
if (!worldObj.isRemote && ticks % ((int) random.nextInt(10) * 80 + 20) == 0)
|
|
||||||
{
|
|
||||||
this.updateAdjacentConnections();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void initiate()
|
|
||||||
{
|
|
||||||
this.updateAdjacentConnections();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void invalidate()
|
|
||||||
{
|
|
||||||
if (!this.worldObj.isRemote)
|
|
||||||
{
|
|
||||||
this.getNetwork().splitNetwork(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
super.invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handlePacketData(INetworkManager network, int type, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream)
|
|
||||||
{
|
|
||||||
if (this.worldObj.isRemote)
|
|
||||||
{
|
|
||||||
System.out.print("packet");
|
|
||||||
this.renderConnection[0] = dataStream.readBoolean();
|
|
||||||
this.renderConnection[1] = dataStream.readBoolean();
|
|
||||||
this.renderConnection[2] = dataStream.readBoolean();
|
|
||||||
this.renderConnection[3] = dataStream.readBoolean();
|
|
||||||
this.renderConnection[4] = dataStream.readBoolean();
|
|
||||||
this.renderConnection[5] = dataStream.readBoolean();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Packet getDescriptionPacket()
|
|
||||||
{
|
|
||||||
return PacketManager.getPacket(FluidMech.CHANNEL, this, this.renderConnection[0], this.renderConnection[1], this.renderConnection[2], this.renderConnection[3], this.renderConnection[4], this.renderConnection[5]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gets the current color mark of the pipe
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public ColorCode getColor()
|
|
||||||
{
|
|
||||||
return ColorCode.get(worldObj.getBlockMetadata(xCoord, yCoord, zCoord));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sets the current color mark of the pipe
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void setColor(Object cc)
|
|
||||||
{
|
|
||||||
ColorCode code = ColorCode.get(cc);
|
|
||||||
if (!worldObj.isRemote && code != this.getColor())
|
|
||||||
{
|
|
||||||
this.worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, code.ordinal() & 15, 3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getMeterReading(EntityPlayer user, ForgeDirection side)
|
|
||||||
{
|
|
||||||
/* DEBUG CODE ACTIVATERS */
|
|
||||||
boolean testConnections = false;
|
|
||||||
boolean testNetwork = false;
|
|
||||||
|
|
||||||
/* NORMAL OUTPUT */
|
|
||||||
String string = this.getNetwork().pressureProduced + "p ";
|
|
||||||
|
|
||||||
/* DEBUG CODE */
|
|
||||||
if (testConnections)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
string += ":" + (this.renderConnection[i] ? "T" : "F") + (this.getAdjacentConnections()[i] != null ? "T" : "F");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (testNetwork)
|
|
||||||
{
|
|
||||||
string += " " + this.getNetwork().toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
return string;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int fill(ForgeDirection from, LiquidStack resource, boolean doFill)
|
|
||||||
{
|
|
||||||
if (resource == null || !this.getColor().isValidLiquid(resource))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return this.fill(0, resource, doFill);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int fill(int tankIndex, LiquidStack resource, boolean doFill)
|
|
||||||
{
|
|
||||||
if (tankIndex != 0 || resource == null || !this.getColor().isValidLiquid(resource))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return this.getNetwork().addFluidToNetwork(resource, 0, doFill);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public LiquidStack drain(ForgeDirection from, int maxDrain, boolean doDrain)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public LiquidStack drain(int tankIndex, int maxDrain, boolean doDrain)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ILiquidTank[] getTanks(ForgeDirection direction)
|
|
||||||
{
|
|
||||||
return new ILiquidTank[] { this.fakeTank };
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ILiquidTank getTank(ForgeDirection direction, LiquidStack type)
|
|
||||||
{
|
|
||||||
if (this.getColor().isValidLiquid(type))
|
|
||||||
{
|
|
||||||
return this.fakeTank;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to make sure the connection is valid to the tileEntity
|
|
||||||
*
|
|
||||||
* @param tileEntity - the tileEntity being checked
|
|
||||||
* @param side - side the connection is too
|
|
||||||
*/
|
|
||||||
public void validateConnectionSide(TileEntity tileEntity, ForgeDirection side)
|
|
||||||
{
|
|
||||||
if (!this.worldObj.isRemote && tileEntity != null)
|
|
||||||
{
|
|
||||||
if (tileEntity instanceof IPipeConnection)
|
|
||||||
{
|
|
||||||
if (((IPipeConnection) tileEntity).canConnect(this, side))
|
|
||||||
{
|
|
||||||
if (tileEntity instanceof IFluidNetworkPart)
|
|
||||||
{
|
|
||||||
if (((IFluidNetworkPart) tileEntity).getColor() == this.getColor())
|
|
||||||
{
|
|
||||||
this.getNetwork().mergeNetworks(((IFluidNetworkPart) tileEntity).getNetwork());
|
|
||||||
connectedBlocks[side.ordinal()] = tileEntity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
connectedBlocks[side.ordinal()] = tileEntity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (tileEntity instanceof IColorCoded)
|
|
||||||
{
|
|
||||||
if (this.getColor() == ColorCode.NONE || this.getColor() == ((IColorCoded) tileEntity).getColor())
|
|
||||||
{
|
|
||||||
connectedBlocks[side.ordinal()] = tileEntity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (tileEntity instanceof ITankContainer)
|
|
||||||
{
|
|
||||||
connectedBlocks[side.ordinal()] = tileEntity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateAdjacentConnections()
|
|
||||||
{
|
|
||||||
|
|
||||||
if (this.worldObj != null && !this.worldObj.isRemote)
|
|
||||||
{
|
|
||||||
boolean[] previousConnections = this.renderConnection.clone();
|
|
||||||
this.connectedBlocks = new TileEntity[6];
|
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
ForgeDirection dir = ForgeDirection.getOrientation(i);
|
|
||||||
this.validateConnectionSide(this.worldObj.getBlockTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ), dir);
|
|
||||||
|
|
||||||
this.renderConnection[i] = this.connectedBlocks[i] != null;
|
|
||||||
if (this.renderConnection[i] && this.connectedBlocks[i] instanceof ITankContainer && !(this.connectedBlocks[i] instanceof IFluidNetworkPart))
|
|
||||||
{
|
|
||||||
this.getNetwork().addEntity((ITankContainer) this.connectedBlocks[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Only send packet updates if visuallyConnected changed.
|
|
||||||
*/
|
|
||||||
if (!Arrays.areEqual(previousConnections, this.renderConnection))
|
|
||||||
{
|
|
||||||
this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canConnect(TileEntity entity, ForgeDirection dir)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public double getMaxPressure(ForgeDirection side)
|
|
||||||
{
|
|
||||||
return 350;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HydraulicNetwork getNetwork()
|
|
||||||
{
|
|
||||||
if (this.pipeNetwork == null)
|
|
||||||
{
|
|
||||||
this.setNetwork(new HydraulicNetwork(this.getColor(), this));
|
|
||||||
}
|
|
||||||
return this.pipeNetwork;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setNetwork(HydraulicNetwork network)
|
|
||||||
{
|
|
||||||
this.pipeNetwork = network;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxFlowRate(LiquidStack stack, ForgeDirection side)
|
|
||||||
{
|
|
||||||
return LiquidContainerRegistry.BUCKET_VOLUME * 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onOverPressure(Boolean damageAllowed)
|
|
||||||
{
|
|
||||||
if (damageAllowed)
|
|
||||||
{
|
|
||||||
worldObj.setBlockAndMetadataWithNotify(xCoord, yCoord, yCoord, 0, 0, 3);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SideOnly(Side.CLIENT)
|
|
||||||
public AxisAlignedBB getRenderBoundingBox()
|
|
||||||
{
|
|
||||||
return AxisAlignedBB.getAABBPool().getAABB(this.xCoord, this.yCoord, this.zCoord, this.xCoord + 1, this.yCoord + 1, this.zCoord + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TileEntity[] getAdjacentConnections()
|
|
||||||
{
|
|
||||||
return this.connectedBlocks;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canConnect(ForgeDirection dir)
|
|
||||||
{
|
|
||||||
return worldObj.getBlockTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetZ, zCoord + dir.offsetY) instanceof IFluidNetworkPart;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,123 +1,96 @@
|
||||||
package fluidmech.common.machines.pipes;
|
package fluidmech.common.machines.pipes;
|
||||||
|
|
||||||
import fluidmech.common.machines.TileEntityTank;
|
import fluidmech.common.FluidMech;
|
||||||
import hydraulic.api.ColorCode;
|
import hydraulic.api.ColorCode;
|
||||||
import hydraulic.api.IColorCoded;
|
import hydraulic.api.IColorCoded;
|
||||||
import hydraulic.api.IPipeConnection;
|
import hydraulic.api.IPipeConnection;
|
||||||
import hydraulic.api.IPsiCreator;
|
import hydraulic.api.IFluidNetworkPart;
|
||||||
import hydraulic.api.IReadOut;
|
import hydraulic.api.IReadOut;
|
||||||
import hydraulic.core.liquidNetwork.LiquidHandler;
|
import hydraulic.core.liquidNetwork.HydraulicNetwork;
|
||||||
import hydraulic.helpers.connectionHelper;
|
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.network.INetworkManager;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.network.packet.Packet;
|
||||||
|
import net.minecraft.network.packet.Packet250CustomPayload;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.AxisAlignedBB;
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
import net.minecraftforge.liquids.ILiquidTank;
|
import net.minecraftforge.liquids.ILiquidTank;
|
||||||
import net.minecraftforge.liquids.ITankContainer;
|
import net.minecraftforge.liquids.ITankContainer;
|
||||||
import net.minecraftforge.liquids.LiquidContainerRegistry;
|
import net.minecraftforge.liquids.LiquidContainerRegistry;
|
||||||
import net.minecraftforge.liquids.LiquidStack;
|
import net.minecraftforge.liquids.LiquidStack;
|
||||||
import net.minecraftforge.liquids.LiquidTank;
|
import net.minecraftforge.liquids.LiquidTank;
|
||||||
|
|
||||||
|
import org.bouncycastle.util.Arrays;
|
||||||
|
|
||||||
|
import universalelectricity.prefab.network.IPacketReceiver;
|
||||||
|
import universalelectricity.prefab.network.PacketManager;
|
||||||
import universalelectricity.prefab.tile.TileEntityAdvanced;
|
import universalelectricity.prefab.tile.TileEntityAdvanced;
|
||||||
|
|
||||||
public class TileEntityPipe extends TileEntityAdvanced implements ITankContainer, IReadOut, IColorCoded
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
|
|
||||||
|
import cpw.mods.fml.relauncher.Side;
|
||||||
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
|
public class TileEntityPipe extends TileEntityAdvanced implements ITankContainer, IReadOut, IColorCoded, IFluidNetworkPart, IPacketReceiver
|
||||||
{
|
{
|
||||||
private ColorCode color = ColorCode.NONE;
|
/* TANK TO FAKE OTHER TILES INTO BELIVING THIS HAS AN INTERNAL STORAGE */
|
||||||
|
private LiquidTank fakeTank = new LiquidTank(LiquidContainerRegistry.BUCKET_VOLUME);
|
||||||
private int presure = 0;
|
/* CURRENTLY CONNECTED TILE ENTITIES TO THIS */
|
||||||
|
private TileEntity[] connectedBlocks = new TileEntity[6];
|
||||||
public boolean converted = false;
|
public boolean[] renderConnection = new boolean[6];
|
||||||
public boolean isUniversal = false;
|
/* RANDOM INSTANCE USED BY THE UPDATE TICK */
|
||||||
|
private Random random = new Random();
|
||||||
public TileEntity[] connectedBlocks = new TileEntity[6];
|
/* NETWORK INSTANCE THAT THIS PIPE USES */
|
||||||
|
private HydraulicNetwork pipeNetwork;
|
||||||
public static final int maxVolume = LiquidContainerRegistry.BUCKET_VOLUME * 2;
|
|
||||||
|
|
||||||
private LiquidTank tank = new LiquidTank(maxVolume);
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateEntity()
|
public void updateEntity()
|
||||||
{
|
{
|
||||||
|
super.updateEntity();
|
||||||
this.validataConnections();
|
if (!worldObj.isRemote && ticks % ((int) random.nextInt(10) * 80 + 20) == 0)
|
||||||
this.color = ColorCode.get(worldObj.getBlockMetadata(xCoord, yCoord, zCoord));
|
|
||||||
if (ticks % 20 == 0)
|
|
||||||
{
|
{
|
||||||
this.updatePressure();
|
this.updateAdjacentConnections();
|
||||||
|
|
||||||
LiquidStack stack = tank.getLiquid();
|
|
||||||
if (!worldObj.isRemote && stack != null && stack.amount >= 0)
|
|
||||||
{
|
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
ForgeDirection dir = ForgeDirection.getOrientation(i);
|
|
||||||
|
|
||||||
if (connectedBlocks[i] instanceof ITankContainer)
|
|
||||||
{
|
|
||||||
if (connectedBlocks[i] instanceof TileEntityPipe)
|
|
||||||
{
|
|
||||||
if (((TileEntityPipe) connectedBlocks[i]).presure < this.presure)
|
|
||||||
{
|
|
||||||
tank.drain(((TileEntityPipe) connectedBlocks[i]).fill(dir, stack, true), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (connectedBlocks[i] instanceof TileEntityTank && ((TileEntityTank) connectedBlocks[i]).getColor() == this.color)
|
|
||||||
{
|
|
||||||
if (dir == ForgeDirection.UP && !color.getLiquidData().getCanFloat())
|
|
||||||
{
|
|
||||||
/* do nothing */
|
|
||||||
}
|
|
||||||
else if (dir == ForgeDirection.DOWN && color.getLiquidData().getCanFloat())
|
|
||||||
{
|
|
||||||
/* do nothing */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tank.drain(((ITankContainer) connectedBlocks[i]).fill(dir.getOpposite(), stack, true), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tank.drain(((ITankContainer) connectedBlocks[i]).fill(dir.getOpposite(), stack, true), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stack == null || stack.amount <= 0)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void randomDisplayTick()
|
@Override
|
||||||
|
public void initiate()
|
||||||
{
|
{
|
||||||
Random random = new Random();
|
this.updateAdjacentConnections();
|
||||||
LiquidStack stack = tank.getLiquid();
|
}
|
||||||
if (stack != null && random.nextInt(10) == 0)
|
|
||||||
{
|
|
||||||
// TODO align this with the pipe model so not to drip where there is
|
|
||||||
// no pipe
|
|
||||||
double xx = (double) ((float) xCoord + random.nextDouble());
|
|
||||||
double zz = (double) yCoord + .3D;
|
|
||||||
double yy = (double) ((float) zCoord + random.nextDouble());
|
|
||||||
|
|
||||||
if (ColorCode.get(stack) != ColorCode.RED)
|
@Override
|
||||||
{
|
public void invalidate()
|
||||||
worldObj.spawnParticle("dripWater", xx, zz, yy, 0.0D, 0.0D, 0.0D);
|
{
|
||||||
}
|
if (!this.worldObj.isRemote)
|
||||||
else
|
{
|
||||||
{
|
this.getNetwork().splitNetwork(this);
|
||||||
worldObj.spawnParticle("dripLava", xx, zz, yy, 0.0D, 0.0D, 0.0D);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
super.invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handlePacketData(INetworkManager network, int type, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream)
|
||||||
|
{
|
||||||
|
if (this.worldObj.isRemote)
|
||||||
|
{
|
||||||
|
this.renderConnection[0] = dataStream.readBoolean();
|
||||||
|
this.renderConnection[1] = dataStream.readBoolean();
|
||||||
|
this.renderConnection[2] = dataStream.readBoolean();
|
||||||
|
this.renderConnection[3] = dataStream.readBoolean();
|
||||||
|
this.renderConnection[4] = dataStream.readBoolean();
|
||||||
|
this.renderConnection[5] = dataStream.readBoolean();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Packet getDescriptionPacket()
|
||||||
|
{
|
||||||
|
return PacketManager.getPacket(FluidMech.CHANNEL, this, this.renderConnection[0], this.renderConnection[1], this.renderConnection[2], this.renderConnection[3], this.renderConnection[4], this.renderConnection[5]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -126,7 +99,7 @@ public class TileEntityPipe extends TileEntityAdvanced implements ITankContainer
|
||||||
@Override
|
@Override
|
||||||
public ColorCode getColor()
|
public ColorCode getColor()
|
||||||
{
|
{
|
||||||
return this.color;
|
return ColorCode.get(worldObj.getBlockMetadata(xCoord, yCoord, zCoord));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -135,92 +108,57 @@ public class TileEntityPipe extends TileEntityAdvanced implements ITankContainer
|
||||||
@Override
|
@Override
|
||||||
public void setColor(Object cc)
|
public void setColor(Object cc)
|
||||||
{
|
{
|
||||||
this.color = ColorCode.get(cc);
|
ColorCode code = ColorCode.get(cc);
|
||||||
}
|
if (!worldObj.isRemote && code != this.getColor())
|
||||||
|
|
||||||
/**
|
|
||||||
* sets the current color mark of the pipe
|
|
||||||
*/
|
|
||||||
public void setColor(int i)
|
|
||||||
{
|
|
||||||
if (i < ColorCode.values().length)
|
|
||||||
{
|
{
|
||||||
this.color = ColorCode.values()[i];
|
this.worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, code.ordinal() & 15, 3);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads a tile entity from NBT.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void readFromNBT(NBTTagCompound nbt)
|
|
||||||
{
|
|
||||||
super.readFromNBT(nbt);
|
|
||||||
|
|
||||||
LiquidStack liquid = new LiquidStack(0, 0, 0);
|
|
||||||
liquid.readFromNBT(nbt.getCompoundTag("stored"));
|
|
||||||
if (Item.itemsList[liquid.itemID] != null && liquid.amount > 0)
|
|
||||||
{
|
|
||||||
this.tank.setLiquid(liquid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes a tile entity to NBT.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void writeToNBT(NBTTagCompound nbt)
|
|
||||||
{
|
|
||||||
super.writeToNBT(nbt);
|
|
||||||
if (tank.getLiquid() != null)
|
|
||||||
{
|
|
||||||
nbt.setTag("stored", tank.getLiquid().writeToNBT(new NBTTagCompound()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getMeterReading(EntityPlayer user, ForgeDirection side)
|
public String getMeterReading(EntityPlayer user, ForgeDirection side)
|
||||||
{
|
{
|
||||||
LiquidStack stack = this.tank.getLiquid();
|
/* DEBUG CODE ACTIVATERS */
|
||||||
if (stack != null)
|
boolean testConnections = false;
|
||||||
|
boolean testNetwork = false;
|
||||||
|
|
||||||
|
/* NORMAL OUTPUT */
|
||||||
|
String string = this.getNetwork().pressureProduced + "p ";
|
||||||
|
|
||||||
|
/* DEBUG CODE */
|
||||||
|
if (testConnections)
|
||||||
{
|
{
|
||||||
return (stack.amount / LiquidContainerRegistry.BUCKET_VOLUME) + "/" + (this.tank.getCapacity() / LiquidContainerRegistry.BUCKET_VOLUME) + " " + LiquidHandler.get(stack).getName() + " @ " + this.presure + "p";
|
for (int i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
string += ":" + (this.renderConnection[i] ? "T" : "F") + (this.getAdjacentConnections()[i] != null ? "T" : "F");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (testNetwork)
|
||||||
|
{
|
||||||
|
string += " " + this.getNetwork().toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
return "Empty" + " @ " + this.presure + "p";
|
return string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int fill(ForgeDirection from, LiquidStack resource, boolean doFill)
|
public int fill(ForgeDirection from, LiquidStack resource, boolean doFill)
|
||||||
{
|
{
|
||||||
if (resource == null)
|
if (resource == null || !this.getColor().isValidLiquid(resource))
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
LiquidStack stack = tank.getLiquid();
|
return this.fill(0, resource, doFill);
|
||||||
if (this.color.isValidLiquid(resource))
|
|
||||||
{
|
|
||||||
if (stack == null || (stack != null && stack.isLiquidEqual(resource)))
|
|
||||||
{
|
|
||||||
return this.fill(0, resource, doFill);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// return this.causeMix(stack, resource);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int fill(int tankIndex, LiquidStack resource, boolean doFill)
|
public int fill(int tankIndex, LiquidStack resource, boolean doFill)
|
||||||
{
|
{
|
||||||
if (tankIndex != 0 || resource == null)
|
if (tankIndex != 0 || resource == null || !this.getColor().isValidLiquid(resource))
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return tank.fill(resource, doFill);
|
return this.getNetwork().addFluidToNetwork(resource, 0, doFill);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -238,92 +176,153 @@ public class TileEntityPipe extends TileEntityAdvanced implements ITankContainer
|
||||||
@Override
|
@Override
|
||||||
public ILiquidTank[] getTanks(ForgeDirection direction)
|
public ILiquidTank[] getTanks(ForgeDirection direction)
|
||||||
{
|
{
|
||||||
return new ILiquidTank[] { this.tank };
|
return new ILiquidTank[] { this.fakeTank };
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ILiquidTank getTank(ForgeDirection direction, LiquidStack type)
|
public ILiquidTank getTank(ForgeDirection direction, LiquidStack type)
|
||||||
{
|
{
|
||||||
if (this.color.isValidLiquid(type))
|
if (this.getColor().isValidLiquid(type))
|
||||||
{
|
{
|
||||||
return this.tank;
|
return this.fakeTank;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* collects and sorts the surrounding TE for valid connections
|
* Checks to make sure the connection is valid to the tileEntity
|
||||||
|
*
|
||||||
|
* @param tileEntity - the tileEntity being checked
|
||||||
|
* @param side - side the connection is too
|
||||||
*/
|
*/
|
||||||
public void validataConnections()
|
public void validateConnectionSide(TileEntity tileEntity, ForgeDirection side)
|
||||||
{
|
{
|
||||||
this.connectedBlocks = connectionHelper.getSurroundingTileEntities(worldObj, xCoord, yCoord, zCoord);
|
if (!this.worldObj.isRemote && tileEntity != null)
|
||||||
|
|
||||||
for (int side = 0; side < 6; side++)
|
|
||||||
{
|
{
|
||||||
ForgeDirection direction = ForgeDirection.getOrientation(side);
|
if (tileEntity instanceof IPipeConnection)
|
||||||
TileEntity tileEntity = connectedBlocks[side];
|
|
||||||
|
|
||||||
if (tileEntity instanceof ITankContainer)
|
|
||||||
{
|
{
|
||||||
if (tileEntity instanceof TileEntityPipe && this.color != ((TileEntityPipe) tileEntity).getColor())
|
if (((IPipeConnection) tileEntity).canConnect(this, side))
|
||||||
{
|
{
|
||||||
connectedBlocks[side] = null;
|
if (tileEntity instanceof IFluidNetworkPart)
|
||||||
}
|
{
|
||||||
// TODO switch side catch for IPressure
|
if (((IFluidNetworkPart) tileEntity).getColor() == this.getColor())
|
||||||
if (this.color != ColorCode.NONE && tileEntity instanceof TileEntityTank && ((TileEntityTank) tileEntity).getColor() != ColorCode.NONE && color != ((TileEntityTank) tileEntity).getColor())
|
{
|
||||||
{
|
this.getNetwork().mergeNetworks(((IFluidNetworkPart) tileEntity).getNetwork());
|
||||||
connectedBlocks[side] = null;
|
connectedBlocks[side.ordinal()] = tileEntity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
connectedBlocks[side.ordinal()] = tileEntity;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (tileEntity instanceof IPipeConnection)
|
else if (tileEntity instanceof IColorCoded)
|
||||||
{
|
{
|
||||||
if (!((IPipeConnection) tileEntity).canConnect(this, direction))
|
if (this.getColor() == ColorCode.NONE || this.getColor() == ((IColorCoded) tileEntity).getColor())
|
||||||
{
|
{
|
||||||
connectedBlocks[side] = null;
|
connectedBlocks[side.ordinal()] = tileEntity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if (tileEntity instanceof ITankContainer)
|
||||||
{
|
{
|
||||||
connectedBlocks[side] = null;
|
connectedBlocks[side.ordinal()] = tileEntity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* updates this units pressure level using the pipe/machines around it
|
public void updateAdjacentConnections()
|
||||||
*/
|
|
||||||
public void updatePressure()
|
|
||||||
{
|
{
|
||||||
int highestPressure = 0;
|
|
||||||
this.presure = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++)
|
if (this.worldObj != null && !this.worldObj.isRemote)
|
||||||
{
|
{
|
||||||
ForgeDirection dir = ForgeDirection.getOrientation(i);
|
boolean[] previousConnections = this.renderConnection.clone();
|
||||||
|
this.connectedBlocks = new TileEntity[6];
|
||||||
|
|
||||||
if (connectedBlocks[i] instanceof TileEntityPipe)
|
for (int i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
if (((TileEntityPipe) connectedBlocks[i]).getPressure() > highestPressure)
|
ForgeDirection dir = ForgeDirection.getOrientation(i);
|
||||||
|
this.validateConnectionSide(this.worldObj.getBlockTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ), dir);
|
||||||
|
|
||||||
|
this.renderConnection[i] = this.connectedBlocks[i] != null;
|
||||||
|
if (this.renderConnection[i] && this.connectedBlocks[i] instanceof ITankContainer && !(this.connectedBlocks[i] instanceof IFluidNetworkPart))
|
||||||
{
|
{
|
||||||
highestPressure = ((TileEntityPipe) connectedBlocks[i]).getPressure();
|
this.getNetwork().addEntity((ITankContainer) this.connectedBlocks[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (connectedBlocks[i] instanceof IPsiCreator && ((IPipeConnection) connectedBlocks[i]).canConnect(this, dir))
|
|
||||||
|
/**
|
||||||
|
* Only send packet updates if visuallyConnected changed.
|
||||||
|
*/
|
||||||
|
if (!Arrays.areEqual(previousConnections, this.renderConnection))
|
||||||
{
|
{
|
||||||
|
this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
|
||||||
int p = ((IPsiCreator) connectedBlocks[i]).getPressureOut(color.getLiquidData().getStack(), dir);
|
|
||||||
|
|
||||||
if (p > highestPressure)
|
|
||||||
{
|
|
||||||
highestPressure = p;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.presure = highestPressure - 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPressure()
|
@Override
|
||||||
|
public boolean canConnect(TileEntity entity, ForgeDirection dir)
|
||||||
{
|
{
|
||||||
return this.presure;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getMaxPressure(ForgeDirection side)
|
||||||
|
{
|
||||||
|
return 350;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HydraulicNetwork getNetwork()
|
||||||
|
{
|
||||||
|
if (this.pipeNetwork == null)
|
||||||
|
{
|
||||||
|
this.setNetwork(new HydraulicNetwork(this.getColor(), this));
|
||||||
|
}
|
||||||
|
return this.pipeNetwork;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setNetwork(HydraulicNetwork network)
|
||||||
|
{
|
||||||
|
this.pipeNetwork = network;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxFlowRate(LiquidStack stack, ForgeDirection side)
|
||||||
|
{
|
||||||
|
return LiquidContainerRegistry.BUCKET_VOLUME * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOverPressure(Boolean damageAllowed)
|
||||||
|
{
|
||||||
|
if (damageAllowed)
|
||||||
|
{
|
||||||
|
worldObj.setBlockAndMetadataWithNotify(xCoord, yCoord, yCoord, 0, 0, 3);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
public AxisAlignedBB getRenderBoundingBox()
|
||||||
|
{
|
||||||
|
return AxisAlignedBB.getAABBPool().getAABB(this.xCoord, this.yCoord, this.zCoord, this.xCoord + 1, this.yCoord + 1, this.zCoord + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TileEntity[] getAdjacentConnections()
|
||||||
|
{
|
||||||
|
return this.connectedBlocks;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canConnect(ForgeDirection dir)
|
||||||
|
{
|
||||||
|
return worldObj.getBlockTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetZ, zCoord + dir.offsetY) instanceof IFluidNetworkPart;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue