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:
DarkGuardsman 2013-09-19 02:12:06 -04:00
parent 375950606e
commit 925c7fc165
21 changed files with 81 additions and 590 deletions

View file

@ -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
{

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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();

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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)

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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