Reworked pipes a bit
Removed pipe addons, they will be re-added later but in a more refined non-tileEntity way Changed how color code is saved.
This commit is contained in:
parent
375950606e
commit
925c7fc165
21 changed files with 81 additions and 590 deletions
|
@ -3,8 +3,8 @@ package dark.api.fluid;
|
|||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.IFluidHandler;
|
||||
import net.minecraftforge.fluids.IFluidTank;
|
||||
import dark.api.ColorCode.IColorCoded;
|
||||
import dark.api.parts.INetworkPart;
|
||||
import dark.core.interfaces.ColorCode.IColorCoded;
|
||||
|
||||
public interface INetworkFluidPart extends IColorCoded, IFluidHandler, INetworkPart
|
||||
{
|
||||
|
|
|
@ -6,9 +6,9 @@ import java.util.List;
|
|||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.IFluidHandler;
|
||||
import dark.api.ColorCode;
|
||||
import dark.api.fluid.INetworkFluidPart;
|
||||
import dark.api.parts.INetworkPart;
|
||||
import dark.core.interfaces.ColorCode;
|
||||
import dark.core.prefab.helpers.FluidHelper;
|
||||
import dark.core.prefab.tilenetwork.NetworkTileEntities;
|
||||
|
||||
|
|
|
@ -9,9 +9,9 @@ import net.minecraftforge.fluids.FluidContainerRegistry;
|
|||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.FluidTank;
|
||||
import net.minecraftforge.fluids.IFluidHandler;
|
||||
import dark.api.ColorCode;
|
||||
import dark.api.fluid.INetworkFluidPart;
|
||||
import dark.api.parts.INetworkPart;
|
||||
import dark.core.interfaces.ColorCode;
|
||||
import dark.core.prefab.helpers.FluidHelper;
|
||||
import dark.core.prefab.tilenetwork.NetworkTileEntities;
|
||||
|
||||
|
@ -23,7 +23,7 @@ public class NetworkFluidTiles extends NetworkTileEntities
|
|||
public FluidTank sharedTank;
|
||||
|
||||
/** Color code of the network, mainly used for connection rules */
|
||||
public ColorCode color = ColorCode.NONE;
|
||||
public ColorCode color = ColorCode.UNKOWN;
|
||||
/** Has the collective tank been loaded yet */
|
||||
protected boolean loadedLiquids = false;
|
||||
|
||||
|
|
|
@ -9,9 +9,9 @@ import net.minecraftforge.common.ForgeDirection;
|
|||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.FluidTankInfo;
|
||||
import net.minecraftforge.fluids.IFluidHandler;
|
||||
import dark.api.ColorCode;
|
||||
import dark.api.fluid.INetworkPipe;
|
||||
import dark.api.parts.INetworkPart;
|
||||
import dark.core.interfaces.ColorCode;
|
||||
import dark.core.prefab.helpers.ConnectionHelper;
|
||||
import dark.core.prefab.helpers.FluidHelper;
|
||||
import dark.core.prefab.tilenetwork.NetworkTileEntities;
|
||||
|
|
|
@ -7,8 +7,8 @@ import org.lwjgl.opengl.GL11;
|
|||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import dark.api.ColorCode;
|
||||
import dark.core.client.renders.RenderTileMachine;
|
||||
import dark.core.interfaces.ColorCode;
|
||||
import dark.core.prefab.ModPrefab;
|
||||
import dark.fluid.client.model.ModelLargePipe;
|
||||
import dark.fluid.client.model.ModelReleaseValve;
|
||||
|
|
|
@ -9,9 +9,9 @@ import org.lwjgl.opengl.GL11;
|
|||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import dark.api.ColorCode;
|
||||
import dark.core.client.renders.RenderBlockFluid;
|
||||
import dark.core.client.renders.RenderTileMachine;
|
||||
import dark.core.interfaces.ColorCode;
|
||||
import dark.fluid.client.model.ModelTankSide;
|
||||
import dark.fluid.common.machines.TileEntityTank;
|
||||
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
package dark.fluid.client.render.pipe;
|
||||
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import universalelectricity.core.vector.Vector3;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import dark.fluid.common.pipes.TileEntityPipe;
|
||||
|
||||
/** Class for TileEntity Renders that extend the pipe class to use instead of extending
|
||||
* TileEntitySpecialRender
|
||||
*
|
||||
* @author Rseifert */
|
||||
@SideOnly(Side.CLIENT)
|
||||
public interface IPipeExtentionRender
|
||||
{
|
||||
/** Renders the pipe extension just like a normal tileEntity render however this is called and
|
||||
* process threw the RenderPipe.class so you don't need to do all the GL11 calls for scaling,
|
||||
* translation, etc
|
||||
*
|
||||
* @param renderPipe - render instance that is calling this method
|
||||
* @param pipe - TileEntity this extension is attached too
|
||||
* @param location - position too be rendered from the players plane
|
||||
* @param size - This should be the size of the render, correct me if wrong
|
||||
* @param facingDirection - Facing direction of the extension in relation to its pipe frame */
|
||||
public void renderAModelAt(RenderPipe renderPipe, TileEntityPipe pipe, Vector3 location, float size, ForgeDirection facingDirection);
|
||||
}
|
|
@ -2,23 +2,20 @@ package dark.fluid.client.render.pipe;
|
|||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import universalelectricity.core.vector.Vector3;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import dark.api.ColorCode;
|
||||
import dark.core.client.renders.RenderTileMachine;
|
||||
import dark.core.interfaces.ColorCode;
|
||||
import dark.core.prefab.ModPrefab;
|
||||
import dark.core.prefab.helpers.FluidHelper;
|
||||
import dark.fluid.client.model.ModelLargePipe;
|
||||
import dark.fluid.common.FMRecipeLoader;
|
||||
import dark.fluid.common.FluidMech;
|
||||
import dark.fluid.common.pipes.TileEntityPipe;
|
||||
import dark.fluid.common.pipes.addon.IPipeExtention;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderPipe extends RenderTileMachine
|
||||
|
@ -49,34 +46,6 @@ public class RenderPipe extends RenderTileMachine
|
|||
TileEntityPipe pipe = ((TileEntityPipe) te);
|
||||
this.renderSide = pipe.renderConnection;
|
||||
|
||||
// Pipes extension rendering
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
IPipeExtention extention = pipe.subEntities[i];
|
||||
if (extention != null)
|
||||
{
|
||||
Object ob;
|
||||
try
|
||||
{
|
||||
ob = extention.getExtentionRenderClass().newInstance();
|
||||
|
||||
if (ob instanceof IPipeExtentionRender)
|
||||
{
|
||||
IPipeExtentionRender render = (IPipeExtentionRender) ob;
|
||||
if (render != null)
|
||||
{
|
||||
System.out.println("Rendering Pipe Addon side " + i);
|
||||
render.renderAModelAt(this, pipe, new Vector3(0, 0, 0), f, ForgeDirection.getOrientation(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.out.println("Failed to render a pipe extention");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
this.render(blockID, meta, renderSide);
|
||||
GL11.glPopMatrix();
|
||||
|
|
|
@ -1,54 +0,0 @@
|
|||
package dark.fluid.client.render.pipe;
|
||||
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import universalelectricity.core.vector.Vector3;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import dark.fluid.client.model.ModelLargePipe;
|
||||
import dark.fluid.common.pipes.TileEntityPipe;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderPipeWindow implements IPipeExtentionRender
|
||||
{
|
||||
private ModelLargePipe SixPipe;
|
||||
|
||||
public RenderPipeWindow()
|
||||
{
|
||||
SixPipe = new ModelLargePipe();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderAModelAt(RenderPipe renderPipe, TileEntityPipe pipe, Vector3 location, float size, ForgeDirection facingDirection)
|
||||
{
|
||||
//renderPipe.bindTextureForPipe(RenderPipe.getPipeTexture(0, false));
|
||||
this.render(facingDirection.ordinal());
|
||||
System.out.println("Rendered Window Pipe");
|
||||
|
||||
}
|
||||
|
||||
public void render(int side)
|
||||
{
|
||||
switch (side)
|
||||
{
|
||||
case 0:
|
||||
SixPipe.renderBottom();
|
||||
break;
|
||||
case 1:
|
||||
SixPipe.renderTop();
|
||||
break;
|
||||
case 3:
|
||||
SixPipe.renderFront();
|
||||
break;
|
||||
case 2:
|
||||
SixPipe.renderBack();
|
||||
break;
|
||||
case 5:
|
||||
SixPipe.renderRight();
|
||||
break;
|
||||
case 4:
|
||||
SixPipe.renderLeft();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -5,10 +5,10 @@ import net.minecraft.item.Item;
|
|||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.oredict.ShapedOreRecipe;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import dark.api.ColorCode;
|
||||
import dark.core.common.CoreRecipeLoader;
|
||||
import dark.core.common.RecipeLoader;
|
||||
import dark.core.common.items.ItemParts.Parts;
|
||||
import dark.core.interfaces.ColorCode;
|
||||
|
||||
public class FMRecipeLoader extends RecipeLoader
|
||||
{
|
||||
|
@ -79,11 +79,11 @@ public class FMRecipeLoader extends RecipeLoader
|
|||
// lava tank
|
||||
new RecipeGrid(new ItemStack(blockTank, 4, ColorCode.RED.ordinal())).setRowOne(Block.netherrack, Block.obsidian, Block.netherrack).setRowTwo(Block.obsidian, null, Block.obsidian).setRowThree(Block.netherrack, Block.obsidian, Block.netherrack).RegisterRecipe();
|
||||
// water tank
|
||||
GameRegistry.addShapelessRecipe(new ItemStack(blockTank, 1, ColorCode.BLUE.ordinal()), new Object[] { new ItemStack(blockTank, 4, ColorCode.NONE.ordinal()), new ItemStack(Item.dyePowder, 1, ColorCode.BLUE.ordinal()) });
|
||||
GameRegistry.addShapelessRecipe(new ItemStack(blockTank, 1, ColorCode.BLUE.ordinal()), new Object[] { new ItemStack(blockTank, 4, 15), new ItemStack(Item.dyePowder, 1, ColorCode.BLUE.ordinal()) });
|
||||
// milk tank
|
||||
new RecipeGrid(new ItemStack(blockTank, 4, ColorCode.WHITE.ordinal())).setRowOne(Block.planks, Block.glass, Block.planks).setRowTwo(Block.glass, null, Block.glass).setRowThree(Block.planks, Block.glass, Block.planks).RegisterRecipe();
|
||||
// generic Tank
|
||||
new RecipeGrid(new ItemStack(blockTank, 4, ColorCode.NONE.ordinal())).setRowOne(Item.ingotIron, Block.glass, Item.ingotIron).setRowTwo(Block.glass, null, Block.glass).setRowThree(Item.ingotIron, Block.glass, Item.ingotIron).RegisterRecipe();
|
||||
new RecipeGrid(new ItemStack(blockTank, 4, 15)).setRowOne(Item.ingotIron, Block.glass, Item.ingotIron).setRowTwo(Block.glass, null, Block.glass).setRowThree(Item.ingotIron, Block.glass, Item.ingotIron).RegisterRecipe();
|
||||
}
|
||||
|
||||
public void registerPipes()
|
||||
|
@ -106,7 +106,7 @@ public class FMRecipeLoader extends RecipeLoader
|
|||
// generic pipe crafting
|
||||
for (int pipeMeta = 0; pipeMeta < 15; pipeMeta++)
|
||||
{
|
||||
if (pipeMeta != ColorCode.WHITE.ordinal() && pipeMeta != ColorCode.NONE.ordinal())
|
||||
if (pipeMeta != ColorCode.WHITE.ordinal() && pipeMeta != 15)
|
||||
{
|
||||
new RecipeGrid(new ItemStack(blockGenPipe, 4, pipeMeta)).setRowOne(null, blockGenPipe, null).setRowTwo(blockGenPipe, new ItemStack(Item.dyePowder, 1, pipeMeta), blockGenPipe).setRowOne(null, blockGenPipe, null).RegisterRecipe();
|
||||
}
|
||||
|
|
|
@ -10,8 +10,8 @@ import net.minecraftforge.fluids.FluidTank;
|
|||
import net.minecraftforge.fluids.FluidTankInfo;
|
||||
import net.minecraftforge.fluids.IFluidHandler;
|
||||
import net.minecraftforge.fluids.IFluidTank;
|
||||
import dark.api.ColorCode;
|
||||
import dark.api.fluid.INetworkFluidPart;
|
||||
import dark.core.interfaces.ColorCode;
|
||||
import dark.core.prefab.tilenetwork.NetworkTileEntities;
|
||||
import dark.fluid.common.prefab.TileEntityFluidDevice;
|
||||
|
||||
|
|
|
@ -11,11 +11,11 @@ import net.minecraftforge.fluids.FluidContainerRegistry;
|
|||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.IFluidHandler;
|
||||
import universalelectricity.core.vector.Vector3;
|
||||
import dark.api.ColorCode;
|
||||
import dark.api.IToolReadOut;
|
||||
import dark.api.ColorCode.IColorCoded;
|
||||
import dark.api.fluid.INetworkPipe;
|
||||
import dark.api.parts.ITileConnector;
|
||||
import dark.core.interfaces.ColorCode;
|
||||
import dark.core.interfaces.ColorCode.IColorCoded;
|
||||
import dark.core.prefab.helpers.ConnectionHelper;
|
||||
import dark.core.prefab.tilenetwork.fluid.NetworkPipes;
|
||||
import dark.fluid.common.prefab.TileEntityFluidDevice;
|
||||
|
|
|
@ -14,8 +14,8 @@ import universalelectricity.prefab.network.IPacketReceiver;
|
|||
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
|
||||
import dark.api.ColorCode;
|
||||
import dark.core.common.DarkMain;
|
||||
import dark.core.interfaces.ColorCode;
|
||||
import dark.core.network.PacketHandler;
|
||||
import dark.fluid.common.prefab.TileEntityFluidStorage;
|
||||
|
||||
|
|
|
@ -30,12 +30,12 @@ import com.google.common.io.ByteArrayDataInput;
|
|||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import dark.api.ColorCode;
|
||||
import dark.api.IToolReadOut;
|
||||
import dark.api.ColorCode.IColorCoded;
|
||||
import dark.api.fluid.INetworkFluidPart;
|
||||
import dark.api.fluid.INetworkPipe;
|
||||
import dark.core.common.DarkMain;
|
||||
import dark.core.interfaces.ColorCode;
|
||||
import dark.core.interfaces.ColorCode.IColorCoded;
|
||||
import dark.core.network.PacketHandler;
|
||||
import dark.core.prefab.helpers.FluidHelper;
|
||||
import dark.core.prefab.tilenetwork.NetworkTileEntities;
|
||||
|
@ -137,7 +137,7 @@ public class TileEntityTank extends TileEntityFluidStorage implements IFluidHand
|
|||
{
|
||||
if (this.worldObj == null)
|
||||
{
|
||||
return ColorCode.NONE;
|
||||
return ColorCode.UNKOWN;
|
||||
}
|
||||
return ColorCode.get(worldObj.getBlockMetadata(xCoord, yCoord, zCoord));
|
||||
}
|
||||
|
@ -202,7 +202,7 @@ public class TileEntityTank extends TileEntityFluidStorage implements IFluidHand
|
|||
}
|
||||
|
||||
/** 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)
|
||||
|
|
|
@ -14,6 +14,8 @@ import net.minecraftforge.common.ForgeDirection;
|
|||
import net.minecraftforge.fluids.IFluidTank;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import dark.api.ColorCode;
|
||||
import dark.api.ColorCode.IColorCoded;
|
||||
import dark.api.fluid.INetworkPipe;
|
||||
import dark.core.prefab.helpers.FluidHelper;
|
||||
import dark.core.prefab.helpers.Pair;
|
||||
|
@ -138,12 +140,9 @@ public class BlockPipe extends BlockFM
|
|||
{
|
||||
if (this.blockID == FMRecipeLoader.blockGenPipe.blockID)
|
||||
{
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
if (meta != colour)
|
||||
if (world.getBlockTileEntity(x, y, z) instanceof IColorCoded)
|
||||
{
|
||||
world.setBlockMetadataWithNotify(x, y, z, colour, 3);
|
||||
this.onNeighborBlockChange(world, x, y, z, world.getBlockId(x, y, z));
|
||||
return true;
|
||||
((IColorCoded) world.getBlockTileEntity(x, y, z)).setColor(ColorCode.get(colour));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -7,7 +7,7 @@ import net.minecraftforge.fluids.FluidContainerRegistry;
|
|||
import net.minecraftforge.fluids.FluidStack;
|
||||
import universalelectricity.core.vector.Vector3;
|
||||
import universalelectricity.core.vector.VectorHelper;
|
||||
import dark.core.interfaces.ColorCode;
|
||||
import dark.api.ColorCode;
|
||||
import dark.core.prefab.tilenetwork.fluid.NetworkPipes;
|
||||
|
||||
public class TileEntityGenericPipe extends TileEntityPipe
|
||||
|
@ -48,6 +48,6 @@ public class TileEntityGenericPipe extends TileEntityPipe
|
|||
@Override
|
||||
public ColorCode getColor()
|
||||
{
|
||||
return ColorCode.NONE;
|
||||
return ColorCode.UNKOWN;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
package dark.fluid.common.pipes;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
@ -32,121 +30,67 @@ import com.google.common.io.ByteArrayDataInput;
|
|||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import dark.api.ColorCode;
|
||||
import dark.api.ColorCode.IColorCoded;
|
||||
import dark.api.IToolReadOut;
|
||||
import dark.api.fluid.INetworkPipe;
|
||||
import dark.api.parts.ITileConnector;
|
||||
import dark.core.common.DarkMain;
|
||||
import dark.core.interfaces.ColorCode;
|
||||
import dark.core.interfaces.ColorCode.IColorCoded;
|
||||
import dark.core.network.PacketHandler;
|
||||
import dark.core.prefab.helpers.FluidHelper;
|
||||
import dark.core.prefab.tilenetwork.NetworkTileEntities;
|
||||
import dark.core.prefab.tilenetwork.fluid.NetworkPipes;
|
||||
import dark.fluid.common.pipes.addon.IPipeExtention;
|
||||
|
||||
public class TileEntityPipe extends TileEntityAdvanced implements IFluidHandler, IToolReadOut, IColorCoded, INetworkPipe, IPacketReceiver
|
||||
{
|
||||
/** Pipe temp tank storage, main storage is thought of as the collective network tank */
|
||||
protected FluidTank tank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME);
|
||||
|
||||
/* TANK TO FAKE OTHER TILES INTO BELIVING THIS HAS AN INTERNAL STORAGE */
|
||||
protected FluidTank fakeTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME);
|
||||
/* CURRENTLY CONNECTED TILE ENTITIES TO THIS */
|
||||
/** TileEntities that this pipe has connections too */
|
||||
private List<TileEntity> connectedBlocks = new ArrayList<TileEntity>();
|
||||
|
||||
/** Should render connections on side */
|
||||
public boolean[] renderConnection = new boolean[6];
|
||||
public IPipeExtention[] subEntities = new IPipeExtention[6];
|
||||
/* RANDOM INSTANCE USED BY THE UPDATE TICK */
|
||||
private Random random = new Random();
|
||||
/* NETWORK INSTANCE THAT THIS PIPE USES */
|
||||
|
||||
/** Network that links the collective pipes together to work */
|
||||
private NetworkPipes pipeNetwork;
|
||||
|
||||
private boolean shouldAutoDrain = false;
|
||||
protected ColorCode colorCode = ColorCode.UNKOWN;
|
||||
|
||||
public enum PacketID
|
||||
protected boolean flagForColorCodeUpdate = false;
|
||||
|
||||
protected int updateTick = 1;
|
||||
|
||||
public enum PipePacketID
|
||||
{
|
||||
PIPE_CONNECTIONS,
|
||||
EXTENTION_CREATE,
|
||||
EXTENTION_UPDATE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initiate()
|
||||
{
|
||||
this.refresh();
|
||||
if (this.subEntities[0] == null)
|
||||
{
|
||||
// this.addNewExtention(0, TileEntityPipeWindow.class);
|
||||
}
|
||||
if (!worldObj.isRemote)
|
||||
{
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
TileEntity entity = (TileEntity) this.subEntities[i];
|
||||
if (entity != null)
|
||||
{
|
||||
this.initSubTile(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateEntity()
|
||||
{
|
||||
super.updateEntity();
|
||||
if (ticks > 1)
|
||||
{
|
||||
this.updateSubEntities();
|
||||
}
|
||||
if (!worldObj.isRemote)
|
||||
{
|
||||
if (ticks % (random.nextInt(5) * 40 + 20) == 0)
|
||||
if (ticks % this.updateTick == 0)
|
||||
{
|
||||
this.updateTick = this.worldObj.rand.nextInt(5) * 40 + 20;
|
||||
this.refresh();
|
||||
}
|
||||
if (ticks % (random.nextInt(5) * 60 + 20) == 0)
|
||||
{
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
if (this.subEntities[i] != null)
|
||||
{
|
||||
this.initSubTile(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Builds and sends data to client for all PipeExtentions */
|
||||
private void updateSubEntities()
|
||||
{
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
if (subEntities[i] instanceof IPipeExtention && subEntities[i] instanceof TileEntity)
|
||||
{
|
||||
IPipeExtention extention = subEntities[i];
|
||||
if (this.ticks % extention.updateTick() == 0)
|
||||
{
|
||||
((TileEntity) extention).updateEntity();
|
||||
if (extention.shouldSendPacket(!this.worldObj.isRemote) && extention.getExtentionPacketData(!this.worldObj.isRemote) != null)
|
||||
{
|
||||
Packet packet = PacketHandler.instance().getPacket(DarkMain.CHANNEL, this, PacketID.EXTENTION_UPDATE.ordinal(), ForgeDirection.getOrientation(i), extention.getExtentionPacketData(!this.worldObj.isRemote));
|
||||
PacketHandler.instance().sendPacketToClients(packet, worldObj, new Vector3(this), 50);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidate()
|
||||
{
|
||||
super.invalidate();
|
||||
if (!this.worldObj.isRemote)
|
||||
{
|
||||
this.getTileNetwork().splitNetwork(this.worldObj, this);
|
||||
}
|
||||
|
||||
super.invalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -154,37 +98,18 @@ public class TileEntityPipe extends TileEntityAdvanced implements IFluidHandler,
|
|||
{
|
||||
try
|
||||
{
|
||||
PacketID id = PacketID.values()[dataStream.readInt()];
|
||||
if (this.worldObj.isRemote)
|
||||
{
|
||||
if (id == PacketID.PIPE_CONNECTIONS)
|
||||
{
|
||||
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();
|
||||
}
|
||||
else if (id == PacketID.EXTENTION_CREATE)
|
||||
{
|
||||
System.out.println("Handling Packet for Pipe addon");
|
||||
int side = dataStream.readInt();
|
||||
NBTTagCompound tag = PacketHandler.instance().readNBTTagCompound(dataStream);
|
||||
this.loadOrCreateSubTile(side, tag);
|
||||
|
||||
}
|
||||
else if (id == PacketID.EXTENTION_UPDATE)
|
||||
{
|
||||
int side = dataStream.readInt();
|
||||
if (this.subEntities[side] instanceof IPipeExtention)
|
||||
{
|
||||
this.subEntities[side].handlePacketData(network, type, packet, player, dataStream);
|
||||
}
|
||||
}
|
||||
this.colorCode = ColorCode.get(dataStream.readInt());
|
||||
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();
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
catch (Exception e)
|
||||
{
|
||||
System.out.print("Error with reading packet for TileEntityPipe");
|
||||
e.printStackTrace();
|
||||
|
@ -194,7 +119,7 @@ public class TileEntityPipe extends TileEntityAdvanced implements IFluidHandler,
|
|||
@Override
|
||||
public Packet getDescriptionPacket()
|
||||
{
|
||||
return PacketHandler.instance().getPacket(DarkMain.CHANNEL, this, PacketID.PIPE_CONNECTIONS.ordinal(), this.renderConnection[0], this.renderConnection[1], this.renderConnection[2], this.renderConnection[3], this.renderConnection[4], this.renderConnection[5]);
|
||||
return PacketHandler.instance().getPacket(DarkMain.CHANNEL, this, this.colorCode.ordinal(), this.renderConnection[0], this.renderConnection[1], this.renderConnection[2], this.renderConnection[3], this.renderConnection[4], this.renderConnection[5]);
|
||||
}
|
||||
|
||||
/** Reads a tile entity from NBT. */
|
||||
|
@ -202,6 +127,17 @@ public class TileEntityPipe extends TileEntityAdvanced implements IFluidHandler,
|
|||
public void readFromNBT(NBTTagCompound nbt)
|
||||
{
|
||||
super.readFromNBT(nbt);
|
||||
//Load color code from nbt
|
||||
if (nbt.hasKey("ColorCode"))
|
||||
{
|
||||
this.colorCode = ColorCode.get(nbt.getInteger("ColorCode"));
|
||||
}
|
||||
else
|
||||
{
|
||||
this.flagForColorCodeUpdate = true;
|
||||
}
|
||||
|
||||
//Load fluid tank
|
||||
FluidStack liquid = FluidStack.loadFluidStackFromNBT(nbt.getCompoundTag("FluidTank"));
|
||||
if (nbt.hasKey("stored"))
|
||||
{
|
||||
|
@ -216,14 +152,7 @@ public class TileEntityPipe extends TileEntityAdvanced implements IFluidHandler,
|
|||
}
|
||||
if (liquid != null)
|
||||
{
|
||||
this.fakeTank.setFluid(liquid);
|
||||
}
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
if (nbt.hasKey("Addon" + i))
|
||||
{
|
||||
this.loadOrCreateSubTile(i, nbt.getCompoundTag("Addon" + i));
|
||||
}
|
||||
this.tank.setFluid(liquid);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -232,122 +161,27 @@ public class TileEntityPipe extends TileEntityAdvanced implements IFluidHandler,
|
|||
public void writeToNBT(NBTTagCompound nbt)
|
||||
{
|
||||
super.writeToNBT(nbt);
|
||||
if (this.fakeTank != null && this.fakeTank.getFluid() != null)
|
||||
nbt.setInteger("ColorCode", this.colorCode.ordinal());
|
||||
if (this.tank != null && this.tank.getFluid() != null)
|
||||
{
|
||||
nbt.setTag("FluidTank", this.fakeTank.getFluid().writeToNBT(new NBTTagCompound()));
|
||||
nbt.setTag("FluidTank", this.tank.getFluid().writeToNBT(new NBTTagCompound()));
|
||||
}
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
if (this.subEntities[i] != null)
|
||||
{
|
||||
NBTTagCompound tag = new NBTTagCompound();
|
||||
((TileEntity) this.subEntities[i]).writeToNBT(tag);
|
||||
nbt.setTag("Addon" + i, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean addNewExtention(int side, Class<? extends TileEntity> partClass)
|
||||
{
|
||||
if (partClass == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
try
|
||||
{
|
||||
TileEntity tile = partClass.newInstance();
|
||||
if (tile instanceof IPipeExtention)
|
||||
{
|
||||
this.subEntities[side] = (IPipeExtention) tile;
|
||||
this.initSubTile(side);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.out.print("Failed to add a Pipe Extention using Class " + partClass.toString());
|
||||
e.printStackTrace();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void loadOrCreateSubTile(int side, NBTTagCompound tag)
|
||||
{
|
||||
if (tag != null && tag.hasKey("id"))
|
||||
{
|
||||
TileEntity tile = TileEntity.createAndLoadEntity(tag);
|
||||
if (tile instanceof IPipeExtention)
|
||||
{
|
||||
this.subEntities[side] = (IPipeExtention) tile;
|
||||
this.initSubTile(side);
|
||||
if (worldObj != null)
|
||||
{
|
||||
System.out.println("Creating addon " + (worldObj.isRemote ? "Client" : "Server"));
|
||||
}
|
||||
else
|
||||
{
|
||||
System.out.println("Creating addon Unkown side");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void initSubTile(int side)
|
||||
{
|
||||
if (this.subEntities[side] instanceof TileEntity)
|
||||
{
|
||||
TileEntity tile = (TileEntity) subEntities[side];
|
||||
((IPipeExtention) tile).setPipe(this);
|
||||
((IPipeExtention) tile).setDirection(ForgeDirection.getOrientation(side));
|
||||
tile.worldObj = this.worldObj;
|
||||
tile.xCoord = this.xCoord;
|
||||
tile.yCoord = this.yCoord;
|
||||
tile.zCoord = this.zCoord;
|
||||
|
||||
this.sendExtentionToClient(side);
|
||||
}
|
||||
}
|
||||
|
||||
/** Sends the save data for the tileEntity too the client */
|
||||
public void sendExtentionToClient(int side)
|
||||
{
|
||||
if (worldObj != null && !worldObj.isRemote && this.subEntities[side] instanceof TileEntity)
|
||||
{
|
||||
NBTTagCompound tag = new NBTTagCompound();
|
||||
((TileEntity) this.subEntities[side]).writeToNBT(tag);
|
||||
if (tag != null && tag.hasKey("id"))
|
||||
{
|
||||
System.out.println("Sending TileEntity to Client");
|
||||
Packet packet = PacketHandler.instance().getPacket(DarkMain.CHANNEL, this, PacketID.EXTENTION_CREATE.ordinal(), ForgeDirection.getOrientation(side), tag);
|
||||
PacketHandler.instance().sendPacketToClients(packet, this.worldObj, new Vector3(this), 50);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public TileEntity getEntitySide(ForgeDirection side)
|
||||
{
|
||||
return (TileEntity) this.subEntities[side.ordinal() & 5];
|
||||
|
||||
}
|
||||
|
||||
/** gets the current color mark of the pipe */
|
||||
@Override
|
||||
public ColorCode getColor()
|
||||
{
|
||||
if (this.worldObj == null)
|
||||
{
|
||||
return ColorCode.NONE;
|
||||
}
|
||||
return ColorCode.get(worldObj.getBlockMetadata(xCoord, yCoord, zCoord));
|
||||
return this.colorCode;
|
||||
}
|
||||
|
||||
/** 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())
|
||||
if (!worldObj.isRemote)
|
||||
{
|
||||
this.worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, code.ordinal(), 3);
|
||||
this.colorCode = ColorCode.get(cc);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -355,9 +189,7 @@ public class TileEntityPipe extends TileEntityAdvanced implements IFluidHandler,
|
|||
public String getMeterReading(EntityPlayer user, ForgeDirection side, EnumTools tool)
|
||||
{
|
||||
/* DEBUG CODE ACTIVATERS */
|
||||
boolean testConnections = false;
|
||||
boolean testNetwork = true;
|
||||
boolean testSubs = false;
|
||||
boolean testConnections = false, testNetwork = true;
|
||||
|
||||
/* NORMAL OUTPUT */
|
||||
String string = ((NetworkPipes) this.getTileNetwork()).pressureProduced + "p " + ((NetworkPipes) this.getTileNetwork()).getNetworkFluid() + " Extra";
|
||||
|
@ -374,22 +206,6 @@ public class TileEntityPipe extends TileEntityAdvanced implements IFluidHandler,
|
|||
{
|
||||
string += " " + this.getTileNetwork().toString();
|
||||
}
|
||||
if (testSubs)
|
||||
{
|
||||
string += " ";
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
if (this.subEntities[i] == null)
|
||||
{
|
||||
string += ":" + "Null";
|
||||
}
|
||||
else
|
||||
{
|
||||
string += ":" + this.subEntities[i].toString();
|
||||
}
|
||||
}
|
||||
string += " ";
|
||||
}
|
||||
|
||||
return string;
|
||||
}
|
||||
|
@ -418,7 +234,7 @@ public class TileEntityPipe extends TileEntityAdvanced implements IFluidHandler,
|
|||
}
|
||||
|
||||
/** Checks to make sure the connection is valid to the tileEntity
|
||||
*
|
||||
*
|
||||
* @param tileEntity - the tileEntity being checked
|
||||
* @param side - side the connection is too
|
||||
* @return */
|
||||
|
@ -426,10 +242,6 @@ public class TileEntityPipe extends TileEntityAdvanced implements IFluidHandler,
|
|||
{
|
||||
if (!this.worldObj.isRemote && tileEntity != null)
|
||||
{
|
||||
if (this.subEntities[side.ordinal()] != null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (tileEntity instanceof ITileConnector)
|
||||
{
|
||||
if (((ITileConnector) tileEntity).canTileConnect(Connection.NETWORK, side.getOpposite()))
|
||||
|
@ -451,7 +263,7 @@ public class TileEntityPipe extends TileEntityAdvanced implements IFluidHandler,
|
|||
}
|
||||
else if (tileEntity instanceof IColorCoded)
|
||||
{
|
||||
if (this.getColor() == ColorCode.NONE || this.getColor() == ((IColorCoded) tileEntity).getColor())
|
||||
if (this.getColor() == ColorCode.UNKOWN || this.getColor() == ((IColorCoded) tileEntity).getColor())
|
||||
{
|
||||
return connectedBlocks.add(tileEntity);
|
||||
}
|
||||
|
@ -507,8 +319,7 @@ public class TileEntityPipe extends TileEntityAdvanced implements IFluidHandler,
|
|||
@Override
|
||||
public boolean canTileConnect(Connection type, ForgeDirection dir)
|
||||
{
|
||||
TileEntity entity = new Vector3(this).modifyPositionFromSide(dir).getTileEntity(this.worldObj);
|
||||
return entity != null && this.subEntities[dir.ordinal()] == null;
|
||||
return new Vector3(this).modifyPositionFromSide(dir).getTileEntity(this.worldObj) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -570,11 +381,11 @@ public class TileEntityPipe extends TileEntityAdvanced implements IFluidHandler,
|
|||
@Override
|
||||
public FluidTank getTank(int index)
|
||||
{
|
||||
if (this.fakeTank == null)
|
||||
if (this.tank == null)
|
||||
{
|
||||
this.fakeTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME);
|
||||
this.tank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME);
|
||||
}
|
||||
return this.fakeTank;
|
||||
return this.tank;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -607,20 +418,18 @@ public class TileEntityPipe extends TileEntityAdvanced implements IFluidHandler,
|
|||
@Override
|
||||
public boolean canFill(ForgeDirection from, Fluid fluid)
|
||||
{
|
||||
return this.subEntities[from.ordinal()] == null;
|
||||
return this.canTileConnect(Connection.FLUIDS, from);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canDrain(ForgeDirection from, Fluid fluid)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
return this.canTileConnect(Connection.FLUIDS, from);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mergeDamage(String result)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
package dark.fluid.common.pipes.addon;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import universalelectricity.prefab.network.IPacketReceiver;
|
||||
import dark.fluid.common.pipes.TileEntityPipe;
|
||||
|
||||
public interface IPipeExtention extends IPacketReceiver
|
||||
{
|
||||
public boolean canBePlacedOnPipe(TileEntityPipe pipe, int side);
|
||||
|
||||
public TileEntityPipe getPipe();
|
||||
|
||||
public void setPipe(TileEntityPipe pipe);
|
||||
|
||||
/** how many ticks before next update */
|
||||
public int updateTick();
|
||||
|
||||
/** if this sub tile needs a packet update
|
||||
*
|
||||
* @param */
|
||||
public boolean shouldSendPacket(boolean server);
|
||||
|
||||
/** data that will be sent to this extension */
|
||||
public NBTTagCompound getExtentionPacketData(boolean server);
|
||||
|
||||
/** render class to be used to render this pipe extension of the face of the main pipe */
|
||||
public Class<?> getExtentionRenderClass();
|
||||
|
||||
public void setDirection(ForgeDirection dir);
|
||||
|
||||
public ForgeDirection getDirection();
|
||||
|
||||
}
|
|
@ -1,71 +0,0 @@
|
|||
package dark.fluid.common.pipes.addon;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.network.INetworkManager;
|
||||
import net.minecraft.network.packet.Packet250CustomPayload;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import universalelectricity.prefab.network.IPacketReceiver;
|
||||
import universalelectricity.prefab.tile.TileEntityAdvanced;
|
||||
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
|
||||
import dark.fluid.common.pipes.TileEntityPipe;
|
||||
|
||||
/** Pipe Extension for the TileEntityPipe.class is a sub TileEntity and is not loaded the same way as
|
||||
* a normal TileEntity
|
||||
*
|
||||
* @author Rseifert */
|
||||
public abstract class TileEntityPipeExtention extends TileEntityAdvanced implements IPipeExtention, IPacketReceiver
|
||||
{
|
||||
|
||||
private TileEntityPipe masterPipe = null;
|
||||
public ForgeDirection direction = ForgeDirection.UNKNOWN;
|
||||
|
||||
@Override
|
||||
public void initiate()
|
||||
{
|
||||
if (this.masterPipe != null)
|
||||
{
|
||||
System.out.println("Sending TileEntity to Client from extention.class");
|
||||
masterPipe.sendExtentionToClient(direction.ordinal());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntityPipe getPipe()
|
||||
{
|
||||
return this.masterPipe;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPipe(TileEntityPipe pipe)
|
||||
{
|
||||
this.masterPipe = pipe;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDirection(ForgeDirection dir)
|
||||
{
|
||||
this.direction = dir;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ForgeDirection getDirection()
|
||||
{
|
||||
return this.direction;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "PipeExtention";
|
||||
}
|
||||
}
|
|
@ -1,101 +0,0 @@
|
|||
package dark.fluid.common.pipes.addon;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.INetworkManager;
|
||||
import net.minecraft.network.packet.Packet250CustomPayload;
|
||||
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
|
||||
import dark.fluid.client.render.pipe.RenderPipeWindow;
|
||||
import dark.fluid.common.pipes.TileEntityPipe;
|
||||
|
||||
public class TileEntityPipeWindow extends TileEntityPipeExtention
|
||||
{
|
||||
|
||||
private TileEntityPipe pipe = null;
|
||||
private boolean shouldUpdate = false;
|
||||
|
||||
@Override
|
||||
public void updateEntity()
|
||||
{
|
||||
// TODO replace the updateEntity method with updateAddon(TileEntityPipe pipe)
|
||||
super.updateEntity();
|
||||
|
||||
if (!worldObj.isRemote)
|
||||
{
|
||||
if (pipe != null)
|
||||
{
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
System.out.println("Updating side Client");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream)
|
||||
{
|
||||
|
||||
if (pipe != null && worldObj.isRemote)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldSendPacket(boolean server)
|
||||
{
|
||||
return shouldUpdate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound getExtentionPacketData(boolean server)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBePlacedOnPipe(TileEntityPipe pipe, int side)
|
||||
{
|
||||
if (pipe != null && pipe.subEntities[side] == null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntityPipe getPipe()
|
||||
{
|
||||
return pipe;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPipe(TileEntityPipe pipe)
|
||||
{
|
||||
this.pipe = pipe;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateTick()
|
||||
{
|
||||
return 20;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getExtentionRenderClass()
|
||||
{
|
||||
return RenderPipeWindow.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "PipeWindow";
|
||||
}
|
||||
|
||||
}
|
|
@ -12,7 +12,7 @@ import net.minecraftforge.fluids.FluidTank;
|
|||
import net.minecraftforge.fluids.FluidTankInfo;
|
||||
import net.minecraftforge.fluids.IFluidHandler;
|
||||
import universalelectricity.core.vector.Vector3;
|
||||
import dark.core.interfaces.ColorCode.IColorCoded;
|
||||
import dark.api.ColorCode.IColorCoded;
|
||||
import dark.core.prefab.helpers.FluidHelper;
|
||||
|
||||
public abstract class TileEntityFluidStorage extends TileEntityFluidDevice implements IFluidHandler, IColorCoded
|
||||
|
|
Loading…
Add table
Reference in a new issue