more changes of the last

Still working on moving everything over to my new system. So far i've
got it mostly done for the tank and pipe though i have no way to test
them yet.

I would list the change but meh its break time, i'm tired and the code
says everything

Things that are still broken
*Lang file
*release Valve
*pipe
*Tank
*Some crafting
This commit is contained in:
Rseifert 2013-01-05 15:05:53 -05:00
parent 30c461bbea
commit b9833f6327
44 changed files with 743 additions and 1175 deletions

View file

@ -21,8 +21,4 @@ public interface IPressure
* @return
*/
public boolean canPressureToo(LiquidData type, ForgeDirection dir);
/**
* gets the LiquidData linked to the TE
*/
public LiquidData getLiquidType();
}

View file

@ -3,7 +3,7 @@ package liquidmechanics.api.helpers;
import liquidmechanics.common.handlers.LiquidData;
import liquidmechanics.common.handlers.LiquidHandler;
public enum Colors
public enum PipeColor
{
BLACK, RED, GREEN, BROWN, BLUE, PURPLE, CYAN, SILVER, GREY, PINK, LIME, YELLOW, LIGHTBLUE, MAGENTA, ORANGE, NONE;
@ -24,7 +24,7 @@ public enum Colors
/**
* gets a color based on liquid Data
*/
public static Colors get(LiquidData data)
public static PipeColor get(LiquidData data)
{
if (data == LiquidHandler.lava) { return RED; }
if (data == LiquidHandler.steam) { return ORANGE; }
@ -34,11 +34,11 @@ public enum Colors
/**
* gets a color based on number(0-15)
*/
public static Colors get(int num)
public static PipeColor get(int num)
{
if(num < Colors.values().length)
if(num < PipeColor.values().length)
{
return Colors.values()[num];
return PipeColor.values()[num];
}
return NONE;
}

View file

@ -1,130 +0,0 @@
package liquidmechanics.api.helpers;
import liquidmechanics.common.handlers.LiquidData;
import liquidmechanics.common.handlers.LiquidHandler;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.liquids.ILiquidTank;
import net.minecraftforge.liquids.ITankContainer;
import net.minecraftforge.liquids.LiquidStack;
import universalelectricity.core.vector.Vector3;
public class TankHelper
{
/**
* Used to find all tileEntities sounding the location you will have to filter for selective
* tileEntities
*
* @param world - the world being searched threw
* @param x
* @param y
* @param z
* @return an array of up to 6 tileEntities
*/
public static TileEntity[] getSurroundings(World world, int x, int y, int z)
{
TileEntity[] list = new TileEntity[] { null, null, null, null, null, null };
for (int i = 0; i < 6; i++)
{
ForgeDirection d = ForgeDirection.getOrientation(i);
TileEntity aEntity = world.getBlockTileEntity(x + d.offsetX, y + d.offsetY, z + d.offsetZ);
if (aEntity instanceof TileEntity)
{
list[i] = aEntity;
}
}
return list;
}
/**
*
* @param world - world
* @param center - location of center of trade
* @param tank - liquid tank to be drained/filled
* @return ammount removed from tank
*/
public static int shareLiquid(World world, Vector3 center, LiquidStack resource)
{
if (resource == null)
return 0;
LiquidStack liquid = resource.copy();
TileEntity[] connected = TankHelper.getSurroundings(world, center.intX(), center.intY(), center.intZ());
LiquidData type = LiquidHandler.get(liquid);
ForgeDirection firstTrade = ForgeDirection.UP;
if (!type.getCanFloat())
firstTrade = ForgeDirection.DOWN;
for (int i = 0; i < 6; i++)
{
ForgeDirection dir = ForgeDirection.getOrientation(i);
if (connected[i] instanceof ITankContainer)
{
ITankContainer cont = ((ITankContainer) connected[i]);
ILiquidTank[] tanks = cont.getTanks(dir);
boolean validTank = false;
for (int t = 0; t < tanks.length; t++)
{
if (tanks[t].getLiquid() != null && LiquidHandler.isEqual(tanks[t].getLiquid(), liquid))
{
validTank = true;
break;
}
}
if (!validTank)
connected[i] = null;
}
else
{
connected[i] = null;
}
}
int filled = 0;
if (connected[firstTrade.ordinal()] instanceof ITankContainer && liquid != null && liquid.amount <= 0)
{
int f = ((ITankContainer) connected[firstTrade.ordinal()]).fill(firstTrade, liquid, true);
liquid.amount -= f;
filled += f;
}
if (connected[firstTrade.getOpposite().ordinal()] instanceof ITankContainer && liquid != null && liquid.amount <= 0)
{
int f = ((ITankContainer) connected[firstTrade.getOpposite().ordinal()]).fill(firstTrade, liquid, true);
liquid.amount -= f;
filled += f;
}
for (int i = 2; i < 6; i++)
{
ForgeDirection dir = ForgeDirection.getOrientation(i);
if (liquid == null || liquid.amount <= 0)
break;
if (connected[i] instanceof ITankContainer)
{
int f = ((ITankContainer) connected[i]).fill(dir, liquid, true);
liquid.amount -= f;
filled += f;
}
}
return filled;
}
/**
*
* @param entity - entity in question
* @return 1-4 if corner 0 if not a corner you have to figure out which is which depending on
* what your using this for 1 should be north east 2 south east
*/
public static int corner(TileEntity entity)
{
TileEntity[] en = getSurroundings(entity.worldObj, entity.xCoord, entity.yCoord, entity.zCoord);
if (en[4] != null && en[2] != null && en[5] == null && en[3] == null) { return 3; }
if (en[2] != null && en[5] != null && en[3] == null && en[4] == null) { return 4; }
if (en[5] != null && en[3] != null && en[4] == null && en[2] == null) { return 1; }
if (en[3] != null && en[4] != null && en[2] == null && en[5] == null) { return 2; }
return 0;
}
}

View file

@ -0,0 +1,56 @@
package liquidmechanics.api.helpers;
import liquidmechanics.common.handlers.LiquidData;
import liquidmechanics.common.handlers.LiquidHandler;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.liquids.ILiquidTank;
import net.minecraftforge.liquids.ITankContainer;
import net.minecraftforge.liquids.LiquidStack;
import universalelectricity.core.vector.Vector3;
public class connectionHelper
{
/**
* Used to find all tileEntities sounding the location you will have to filter for selective
* tileEntities
*
* @param world - the world being searched threw
* @param x
* @param y
* @param z
* @return an array of up to 6 tileEntities
*/
public static TileEntity[] getSurroundings(World world, int x, int y, int z)
{
TileEntity[] list = new TileEntity[] { null, null, null, null, null, null };
for (int i = 0; i < 6; i++)
{
ForgeDirection d = ForgeDirection.getOrientation(i);
TileEntity aEntity = world.getBlockTileEntity(x + d.offsetX, y + d.offsetY, z + d.offsetZ);
if (aEntity instanceof TileEntity)
{
list[i] = aEntity;
}
}
return list;
}
/**
* Used to find which of 4 Corners this block is in a group of blocks
* 0 = not a corner
* 1-4 = a corner of some direction
*/
public static int corner(TileEntity entity)
{
TileEntity[] en = getSurroundings(entity.worldObj, entity.xCoord, entity.yCoord, entity.zCoord);
if (en[4] != null && en[2] != null && en[5] == null && en[3] == null) { return 3; }
if (en[2] != null && en[5] != null && en[3] == null && en[4] == null) { return 4; }
if (en[5] != null && en[3] != null && en[4] == null && en[2] == null) { return 1; }
if (en[3] != null && en[4] != null && en[2] == null && en[5] == null) { return 2; }
return 0;
}
}

View file

@ -1,7 +1,6 @@
package liquidmechanics.client;
import liquidmechanics.client.render.BlockRenderHelper;
import liquidmechanics.client.render.ItemRenderHelper;
import liquidmechanics.client.render.RenderGearRod;
import liquidmechanics.client.render.RenderGenerator;
import liquidmechanics.client.render.RenderPipe;
@ -36,8 +35,6 @@ public class ClientProxy extends CommonProxy
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityGenerator.class, new RenderGenerator());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTank.class, new RenderTank());
RenderingRegistry.registerBlockHandler(new BlockRenderHelper());
MinecraftForgeClient.registerItemRenderer(LiquidMechanics.itemPipes.shiftedIndex, new ItemRenderHelper());
MinecraftForgeClient.registerItemRenderer(LiquidMechanics.itemTank.shiftedIndex, new ItemRenderHelper());
}
@Override

View file

@ -1,122 +0,0 @@
package liquidmechanics.client.model;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
public class ModelPipe extends ModelBase
{
// fields
ModelRenderer Middle;
ModelRenderer Right;
ModelRenderer Left;
ModelRenderer Back;
ModelRenderer Front;
ModelRenderer Top;
ModelRenderer Bottom;
public ModelPipe()
{
textureWidth = 64;
textureHeight = 32;
Middle = new ModelRenderer(this, 0, 0);
Middle.addBox(-1F, -1F, -1F, 4, 4, 4);
Middle.setRotationPoint(-1F, 15F, -1F);
Middle.setTextureSize(64, 32);
Middle.mirror = true;
setRotation(Middle, 0F, 0F, 0F);
Right = new ModelRenderer(this, 21, 0);
Right.addBox(0F, 0F, 0F, 6, 4, 4);
Right.setRotationPoint(2F, 14F, -2F);
Right.setTextureSize(64, 32);
Right.mirror = true;
setRotation(Right, 0F, 0F, 0F);
Left = new ModelRenderer(this, 21, 0);
Left.addBox(0F, 0F, 0F, 6, 4, 4);
Left.setRotationPoint(-8F, 14F, -2F);
Left.setTextureSize(64, 32);
Left.mirror = true;
setRotation(Left, 0F, 0F, 0F);
Back = new ModelRenderer(this, 0, 11);
Back.addBox(0F, 0F, 0F, 4, 4, 6);
Back.setRotationPoint(-2F, 14F, 2F);
Back.setTextureSize(64, 32);
Back.mirror = true;
setRotation(Back, 0F, 0F, 0F);
Front = new ModelRenderer(this, 0, 11);
Front.addBox(0F, 0F, 0F, 4, 4, 6);
Front.setRotationPoint(-2F, 14F, -8F);
Front.setTextureSize(64, 32);
Front.mirror = true;
setRotation(Front, 0F, 0F, 0F);
Top = new ModelRenderer(this, 21, 11);
Top.addBox(0F, 0F, 0F, 4, 6, 4);
Top.setRotationPoint(-2F, 8F, -2F);
Top.setTextureSize(64, 32);
Top.mirror = true;
setRotation(Top, 0F, 0F, 0F);
Bottom = new ModelRenderer(this, 21, 11);
Bottom.addBox(0F, 0F, 0F, 4, 6, 4);
Bottom.setRotationPoint(-2F, 18F, -2F);
Bottom.setTextureSize(64, 32);
Bottom.mirror = true;
setRotation(Bottom, 0F, 0F, 0F);
}
public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5)
{
super.render(entity, f, f1, f2, f3, f4, f5);
super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
this.renderMiddle();
this.renderBottom();
this.renderTop();
this.renderLeft();
this.renderRight();
this.renderBack();
this.renderFront();
}
public void renderMiddle()
{
Middle.render(0.0625F);
}
public void renderBottom()
{
Bottom.render(0.0625F);
}
public void renderTop()
{
Top.render(0.0625F);
}
public void renderLeft()
{
Left.render(0.0625F);
}
public void renderRight()
{
Right.render(0.0625F);
}
public void renderBack()
{
Back.render(0.0625F);
}
public void renderFront()
{
Front.render(0.0625F);
}
private void setRotation(ModelRenderer model, float x, float y, float z)
{
model.rotateAngleX = x;
model.rotateAngleY = y;
model.rotateAngleZ = z;
}
}

View file

@ -2,6 +2,8 @@ package liquidmechanics.client.render;
import liquidmechanics.client.model.ModelGearRod;
import liquidmechanics.client.model.ModelGenerator;
import liquidmechanics.client.model.ModelLargePipe;
import liquidmechanics.client.model.ModelLiquidTank;
import liquidmechanics.client.model.ModelPump;
import liquidmechanics.common.LiquidMechanics;
import net.minecraft.block.Block;
@ -16,64 +18,92 @@ import cpw.mods.fml.client.registry.RenderingRegistry;
public class BlockRenderHelper implements ISimpleBlockRenderingHandler
{
public static BlockRenderHelper instance = new BlockRenderHelper();
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
private ModelPump modelPump = new ModelPump();
private ModelGearRod modelRod = new ModelGearRod();
private ModelGenerator modelGen = new ModelGenerator();
public static BlockRenderHelper instance = new BlockRenderHelper();
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
private ModelPump modelPump = new ModelPump();
private ModelGearRod modelRod = new ModelGearRod();
private ModelGenerator modelGen = new ModelGenerator();
private ModelLargePipe SixPipe = new ModelLargePipe();
private ModelLiquidTank tank = new ModelLiquidTank();
@Override
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer)
{
if (block.blockID == LiquidMechanics.blockMachine.blockID && metadata < 4)
{
GL11.glPushMatrix();
GL11.glTranslatef((float) 0.0F, (float) 1.1F, (float) 0.0F);
GL11.glRotatef(180f, 0f, 0f, 1f);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(LiquidMechanics.RESOURCE_PATH + "pumps/Pump.png"));
modelPump.renderMain(0.0725F);
modelPump.renderC1(0.0725F);
modelPump.renderC2(0.0725F);
modelPump.renderC3(0.0725F);
GL11.glPopMatrix();
}
if (block.blockID == LiquidMechanics.blockPipe.blockID)
{
@Override
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer)
{
if (block.blockID == LiquidMechanics.blockMachine.blockID && metadata < 4)
{
GL11.glPushMatrix();
GL11.glTranslatef((float) 0.0F, (float) 1.1F, (float) 0.0F);
GL11.glRotatef(180f, 0f, 0f, 1f);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(LiquidMechanics.RESOURCE_PATH + "pumps/Pump.png"));
modelPump.renderMain(0.0725F);
modelPump.renderC1(0.0725F);
modelPump.renderC2(0.0725F);
modelPump.renderC3(0.0725F);
GL11.glPopMatrix();
}
if (block.blockID == LiquidMechanics.blockPipe.blockID)
{
this.renderPipeItem(renderer, metadata);
}
if (block.blockID == LiquidMechanics.blockTank.blockID)
{
GL11.glPushMatrix();
GL11.glTranslatef((float) 0.0F, (float) 1.1F, (float) 0.0F);
GL11.glRotatef(180f, 0f, 0f, 1f);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(RenderTank.getTankTexture(metadata)));
tank.renderMain(0.0625F);
tank.renderMeter(null, 0.0625F);
GL11.glPopMatrix();
}
if (block.blockID == LiquidMechanics.blockRod.blockID)
{
GL11.glPushMatrix();
GL11.glTranslatef((float) 0.0F, (float) 1.5F, (float) 0.0F);
GL11.glRotatef(180f, 0f, 0f, 1f);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(LiquidMechanics.RESOURCE_PATH + "mechanical/GearRod.png"));
modelRod.render(0.0825F, 0);
GL11.glPopMatrix();
}
if (block.blockID == LiquidMechanics.blockGenerator.blockID)
{
GL11.glPushMatrix();
GL11.glTranslatef((float) 0.0F, (float) 1.3F, (float) 0.0F);
GL11.glRotatef(180f, 0f, 0f, 1f);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(LiquidMechanics.RESOURCE_PATH + "mechanical/Generator.png"));
modelGen.render(null);
GL11.glPopMatrix();
}
}
}
if (block.blockID == LiquidMechanics.blockRod.blockID)
{
GL11.glPushMatrix();
GL11.glTranslatef((float) 0.0F, (float) 1.5F, (float) 0.0F);
GL11.glRotatef(180f, 0f, 0f, 1f);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(LiquidMechanics.RESOURCE_PATH + "mechanical/GearRod.png"));
modelRod.render(0.0825F, 0);
GL11.glPopMatrix();
}
if (block.blockID == LiquidMechanics.blockGenerator.blockID)
{
GL11.glPushMatrix();
GL11.glTranslatef((float) 0.0F, (float) 1.3F, (float) 0.0F);
GL11.glRotatef(180f, 0f, 0f, 1f);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(LiquidMechanics.RESOURCE_PATH + "mechanical/Generator.png"));
modelGen.render(null);
GL11.glPopMatrix();
}
}
public void renderPipeItem(RenderBlocks renderer, int meta)
{
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)
{
return false;
}
GL11.glPushMatrix();
public boolean shouldRender3DInInventory()
{
GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(RenderPipe.getPipeTexture(meta)));
return true;
}
GL11.glTranslatef(0.5F, -0.5F, 0.5F);
SixPipe.renderRight();
SixPipe.renderLeft();
SixPipe.renderMiddle();
public int getRenderId()
{
return renderID;
}
GL11.glPopMatrix();
}
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)
{
return false;
}
public boolean shouldRender3DInInventory()
{
return true;
}
public int getRenderId()
{
return renderID;
}
}

View file

@ -1,116 +0,0 @@
package liquidmechanics.client.render;
import liquidmechanics.client.model.ModelLargePipe;
import liquidmechanics.client.model.ModelLiquidTank;
import liquidmechanics.common.LiquidMechanics;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.item.ItemStack;
import net.minecraftforge.client.IItemRenderer;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.client.FMLClientHandler;
/**
* special tanks to Mekanism github
*/
public class ItemRenderHelper implements IItemRenderer
{
static final ModelLiquidTank model = new ModelLiquidTank();
static final ModelLargePipe SixPipe = new ModelLargePipe();
@Override
public boolean handleRenderType(ItemStack item, ItemRenderType type)
{
return true;
}
@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper)
{
return true;
}
@Override
public void renderItem(ItemRenderType type, ItemStack item, Object... data)
{
if (item.itemID == LiquidMechanics.itemPipes.shiftedIndex)
{
this.renderPipeItem((RenderBlocks) data[0], item.getItemDamage(), type == ItemRenderType.EQUIPPED);
}
if (item.itemID == LiquidMechanics.itemTank.shiftedIndex)
{
this.rendertankItem((RenderBlocks) data[0], item.getItemDamage(), type == ItemRenderType.EQUIPPED);
}
}
public void renderPipeItem(RenderBlocks renderer, int meta, boolean equ)
{
GL11.glPushMatrix();
String file = LiquidMechanics.RESOURCE_PATH + "pipes/";
switch (meta)
{
case 0:
file += "SixSteamPipe.png";
break;
case 1:
file += "SixWaterPipe.png";
break;
case 2:
file += "SixLavaPipe.png";
break;
case 3:
file += "SixOilPipe.png";
break;
default:
file += "DefaultPipe.png";
break;
}
GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(file));
if (!equ)
{
GL11.glTranslatef(0.5F, -0.5F, 0.5F);
SixPipe.renderRight();
SixPipe.renderLeft();
SixPipe.renderMiddle();
}
else
{
GL11.glTranslatef(0.5F, -0.5F, 0.5F);
SixPipe.renderFront();
SixPipe.renderBack();
SixPipe.renderMiddle();
}
GL11.glPopMatrix();
}
public void rendertankItem(RenderBlocks renderer, int meta, boolean equ)
{
GL11.glPushMatrix();
String file = LiquidMechanics.RESOURCE_PATH + "tanks/";
switch (meta)
{
default:
file += "LiquidTank.png";
break;
}
GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(file));
if (!equ)
{
GL11.glTranslatef(0.5F, -0.5F, 0.5F);
}
else
{
GL11.glTranslatef(0.5F, -0.5F, 0.5F);
}
model.renderMain(0.0625F);
model.renderMeter(null, 0.0625F);
GL11.glPopMatrix();
}
}

View file

@ -1,10 +1,7 @@
package liquidmechanics.client.render;
import liquidmechanics.client.model.ModelLargePipe;
import liquidmechanics.client.model.ModelPipe;
import liquidmechanics.common.LiquidMechanics;
import liquidmechanics.common.handlers.LiquidData;
import liquidmechanics.common.handlers.LiquidHandler;
import liquidmechanics.common.tileentity.TileEntityPipe;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
@ -13,14 +10,11 @@ import org.lwjgl.opengl.GL11;
public class RenderPipe extends TileEntitySpecialRenderer
{
private LiquidData type = LiquidHandler.water;
private ModelPipe fourPipe;
private ModelLargePipe SixPipe;
private TileEntity[] ents = new TileEntity[6];
public RenderPipe()
{
fourPipe = new ModelPipe();
SixPipe = new ModelLargePipe();
}
@ -30,35 +24,42 @@ public class RenderPipe extends TileEntitySpecialRenderer
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 TileEntityPipe)
{
type = ((TileEntityPipe) te).getType();
meta = te.getBlockMetadata();
ents = ((TileEntityPipe) te).connectedBlocks;
}
this.render(type, ents);
this.render(meta, ents);
GL11.glPopMatrix();
}
public void render(LiquidData type2, TileEntity[] ents)
public static String getPipeTexture(int meta)
{
if (type2 == LiquidHandler.water)
switch(meta)
{
bindTextureByName(LiquidMechanics.RESOURCE_PATH + "pipes/SixWaterPipe.png");
}
else if (type2 == LiquidHandler.lava)
{
bindTextureByName(LiquidMechanics.RESOURCE_PATH + "pipes/SixLavaPipe.png");
}
else if (type2 == LiquidHandler.steam)
{
bindTextureByName(LiquidMechanics.RESOURCE_PATH + "pipes/SixSteamPipe.png");
}
else
{
bindTextureByName(LiquidMechanics.RESOURCE_PATH + "pipes/SixOilPipe.png");
case 0:
case 1:return LiquidMechanics.RESOURCE_PATH + "pipes/SixLavaPipe.png";
case 2:
case 3:
case 4:return LiquidMechanics.RESOURCE_PATH + "pipes/SixWaterPipe.png";
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:return LiquidMechanics.RESOURCE_PATH + "pipes/SixSteamPipe.png";
case 15:
default:return LiquidMechanics.RESOURCE_PATH + "pipes/SixOilPipe.png";
}
}
public void render(int meta, TileEntity[] ents)
{
bindTextureByName(this.getPipeTexture(meta));
if (ents[0] != null)
SixPipe.renderBottom();
if (ents[1] != null)

View file

@ -1,6 +1,6 @@
package liquidmechanics.client.render;
import liquidmechanics.api.helpers.TankHelper;
import liquidmechanics.api.helpers.connectionHelper;
import liquidmechanics.client.model.ModelLiquidTank;
import liquidmechanics.client.model.ModelLiquidTankCorner;
import liquidmechanics.common.LiquidMechanics;
@ -28,19 +28,17 @@ public class RenderTank extends TileEntitySpecialRenderer
public void renderAModelAt(TileEntityTank te, double d, double d1, double d2, float f)
{
type = te.getType();
if (te.tank.getLiquid() != null)
pos = Math.min((te.tank.getLiquid().amount / LiquidContainerRegistry.BUCKET_VOLUME), 4);
int meta = te.getBlockMetadata();
pos = Math.min((te.volume / LiquidContainerRegistry.BUCKET_VOLUME), 4);
GL11.glPushMatrix();
GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F);
GL11.glScalef(1.0F, -1F, -1F);
if (TankHelper.corner(te) > 0)
if (connectionHelper.corner(te) > 0)
{
if (type == LiquidHandler.water)
{
bindTextureByName(LiquidMechanics.RESOURCE_PATH + "tanks/LiquidTankCornerWater.png");
}
int corner = TankHelper.corner(te);
bindTextureByName(this.getCornerTexture(meta));
int corner = connectionHelper.corner(te);
switch (corner)
{
case 2:
@ -60,20 +58,105 @@ public class RenderTank extends TileEntitySpecialRenderer
}
else
{
switch (LiquidHandler.getMeta(type))
{
// case 0:
// bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixSteamPipe.png");break;
default:bindTextureByName(LiquidMechanics.RESOURCE_PATH + "tanks/LiquidTank" + pos + ".png");break;
}
bindTextureByName(this.getTankTexture(meta));
model.renderMain(0.0625F);
bindTextureByName(this.getGuageTexture(meta, pos));
model.renderMeter(te, 0.0625F);
}
GL11.glPopMatrix();
}
public static String getTankTexture(int meta)
{
String type = "";
switch (meta)
{
case 0:
case 1:
case 2:
case 3:
case 4:// default
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
default:
type = "";
break;
}
return LiquidMechanics.RESOURCE_PATH + "tanks/" + type + "Tank.png";
}
public static String getGuageTexture(int meta, int pos)
{
String type = "";
switch (meta)
{
case 0:
case 1:
case 2:
case 3:
case 4:// default
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
default:
type = "";
break;
}
return LiquidMechanics.RESOURCE_PATH + "tanks/guage/" + pos + type + ".png";
}
public static String getCornerTexture(int meta)
{
String type = "";
switch (meta)
{
case 0:
case 1:
case 2:
case 3:
case 4:
type = "Water";
break;
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
default:
type = "";
break;
}
return LiquidMechanics.RESOURCE_PATH + "tanks/Corner" + type + "png";
}
@Override
public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8)
{

View file

@ -2,18 +2,17 @@ package liquidmechanics.common;
import java.io.File;
import liquidmechanics.api.helpers.PipeColor;
import liquidmechanics.common.block.BlockGenerator;
import liquidmechanics.common.block.BlockLiquidMachine;
import liquidmechanics.common.block.BlockPipe;
import liquidmechanics.common.block.BlockReleaseValve;
import liquidmechanics.common.block.BlockRod;
import liquidmechanics.common.block.BlockSteam;
import liquidmechanics.common.block.BlockTank;
import liquidmechanics.common.handlers.LiquidHandler;
import liquidmechanics.common.item.ItemGuage;
import liquidmechanics.common.item.ItemParts;
import liquidmechanics.common.item.ItemParts.Parts;
import liquidmechanics.common.item.ItemPipe;
import liquidmechanics.common.item.ItemTank;
import liquidmechanics.common.tileentity.TileEntityGenerator;
import liquidmechanics.common.tileentity.TileEntityPipe;
import liquidmechanics.common.tileentity.TileEntityPump;
@ -25,8 +24,6 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraftforge.common.Configuration;
import net.minecraftforge.liquids.LiquidContainerRegistry;
import net.minecraftforge.liquids.LiquidDictionary;
import net.minecraftforge.liquids.LiquidStack;
import net.minecraftforge.oredict.OreDictionary;
import net.minecraftforge.oredict.ShapedOreRecipe;
@ -68,8 +65,8 @@ public class LiquidMechanics extends DummyModContainer
public static final String BLOCK_TEXTURE_FILE = RESOURCE_PATH + "blocks.png";
public static final String ITEM_TEXTURE_FILE = RESOURCE_PATH + "items.png";
public static final String LANGUAGE_PATH = RESOURCE_PATH + "lang/";
private static final String[] LANGUAGES_SUPPORTED = new String[] { "en_US"};
private static final String[] LANGUAGES_SUPPORTED = new String[] { "en_US" };
public static final Configuration CONFIGURATION = new Configuration(new File(Loader.instance().getConfigDir() + "/UniversalElectricity/", NAME + ".cfg"));
@ -78,19 +75,17 @@ public class LiquidMechanics extends DummyModContainer
public final static int ITEM_ID_PREFIX = 13200;
public static Block blockPipe;
public static Block blockTank;
public static Block blockMachine;
public static Block blockRod;
public static Block blockGenerator;
public static Block blockReleaseValve;
public static Block blockSteamBlock;
public static LiquidStack liquidSteam;
public static Item itemParts;
public static Item itemPipes;
// public static Item itemPipes;
public static Item itemGauge;
public static Item itemOilBucket;
public static Item itemTank;
@SidedProxy(clientSide = "liquidmechanics.client.ClientProxy", serverSide = "liquidmechanics.common.CommonProxy")
public static CommonProxy proxy;
@ -111,31 +106,27 @@ public class LiquidMechanics extends DummyModContainer
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()));
blockReleaseValve = new BlockReleaseValve((this.CONFIGURATION.getBlock("Release Valve", BLOCK_ID_PREFIX + 5).getInt()));
// Liquid Blocks
blockSteamBlock = new BlockSteam(this.CONFIGURATION.getBlock("SteamBlock", LIQUID_ID_PREFIX).getInt());
blockTank = new BlockTank(this.CONFIGURATION.getBlock("Tank", BLOCK_ID_PREFIX + 6).getInt());
// Items
itemParts = new ItemParts(this.CONFIGURATION.getItem("Parts", ITEM_ID_PREFIX).getInt());
itemPipes = new ItemPipe(this.CONFIGURATION.getItem("PipeItem", ITEM_ID_PREFIX + 1).getInt());
// itemPipes = new ItemPipe(this.CONFIGURATION.getItem("PipeItem",
// ITEM_ID_PREFIX + 1).getInt());
// Valve item
itemGauge = new ItemGuage(this.CONFIGURATION.getItem("PipeGuage", ITEM_ID_PREFIX + 3).getInt());
itemTank = new ItemTank(this.CONFIGURATION.getItem("TankItem", ITEM_ID_PREFIX + 5).getInt());
// Liquid Registry
liquidSteam = LiquidDictionary.getOrCreateLiquid("Steam", new LiquidStack(blockSteamBlock, LiquidContainerRegistry.BUCKET_VOLUME));
CONFIGURATION.save();
proxy.preInit();
// block registry
GameRegistry.registerBlock(blockPipe, "lmPipe");
GameRegistry.registerBlock(blockReleaseValve,"eValve");
GameRegistry.registerBlock(blockReleaseValve, "eValve");
GameRegistry.registerBlock(blockRod, "mechRod");
GameRegistry.registerBlock(blockGenerator, "lmGen");
GameRegistry.registerBlock(blockMachine, "lmMachines");
GameRegistry.registerBlock(blockSteamBlock, "lmSteam");
GameRegistry.registerBlock(blockTank, "lmTank");
}
@Init
@ -151,106 +142,98 @@ public class LiquidMechanics extends DummyModContainer
GameRegistry.registerTileEntity(TileEntityGenerator.class, "lmGen");
System.out.println("Fluid Mechanics Loaded: " + TranslationHelper.loadLanguages(LANGUAGE_PATH, LANGUAGES_SUPPORTED) + " Languages.");
}
@PostInit
public void PostInit(FMLPostInitializationEvent event)
{
proxy.postInit();
TabLiquidMechanics.setItemStack(new ItemStack(itemPipes, 1, 1));
TabLiquidMechanics.setItemStack(new ItemStack(blockPipe, 1, 4));
// generator
CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(this.blockGenerator, 1), new Object[] {
"@T@", "OVO", "@T@",
'T', new ItemStack(LiquidMechanics.blockRod, 1),
'@', "plateSteel",
'O', "basicCircuit",
'V', "motor" }));
CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(this.blockGenerator, 1), new Object[] {
"@T@", "OVO", "@T@",
'T', new ItemStack(LiquidMechanics.blockRod, 1),
'@', "plateSteel",
'O', "basicCircuit",
'V', "motor" }));
// pipe gauge
GameRegistry.addRecipe(new ItemStack(this.itemGauge, 1, 0), new Object[] {
"TVT", " T ",
'V', new ItemStack(itemParts, 1, 7),
'T', new ItemStack(itemParts, 1, Parts.Iron.ordinal()) });
GameRegistry.addRecipe(new ItemStack(this.itemGauge, 1, 0), new Object[] {
"TVT", " T ",
'V', new ItemStack(itemParts, 1, 7),
'T', new ItemStack(itemParts, 1, Parts.Iron.ordinal()) });
// iron tube
GameRegistry.addRecipe(new ItemStack(itemParts, 2, Parts.Iron.ordinal()), new Object[] {
"@@@",
'@', Item.ingotIron });
GameRegistry.addRecipe(new ItemStack(itemParts, 2, Parts.Iron.ordinal()), new Object[] {
"@@@",
'@', Item.ingotIron });
// bronze tube
CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(itemParts, 2, Parts.Bronze.ordinal()), new Object[] {
"@@@",
'@', "ingotBronze" }));
CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(itemParts, 2, Parts.Bronze.ordinal()), new Object[] {
"@@@",
'@', "ingotBronze" }));
// obby tube
GameRegistry.addRecipe(new ItemStack(itemParts, 2, Parts.Obby.ordinal()), new Object[] {
"@@@",
'@', Block.obsidian });
GameRegistry.addRecipe(new ItemStack(itemParts, 2, Parts.Obby.ordinal()), new Object[] {
"@@@",
'@', Block.obsidian });
// nether tube
GameRegistry.addRecipe(new ItemStack(itemParts, 2, Parts.Nether.ordinal()), new Object[] {
"N@N",
'N', Block.netherrack,
'@', new ItemStack(itemParts, 2, Parts.Obby.ordinal()) });
GameRegistry.addRecipe(new ItemStack(itemParts, 2, Parts.Nether.ordinal()), new Object[] {
"N@N",
'N', Block.netherrack,
'@', new ItemStack(itemParts, 2, Parts.Obby.ordinal()) });
// seal
GameRegistry.addRecipe(new ItemStack(itemParts, 2, Parts.Seal.ordinal()), new Object[] {
"@@", "@@",
'@', Item.leather });
GameRegistry.addRecipe(new ItemStack(itemParts, 2, Parts.Seal.ordinal()), new Object[] {
"@@", "@@",
'@', Item.leather });
// slime steal
GameRegistry.addShapelessRecipe(new ItemStack(itemParts, 1, Parts.SlimeSeal.ordinal()), new Object[] {
new ItemStack(itemParts, 1, Parts.Seal.ordinal()),
new ItemStack(Item.slimeBall, 1) });
new ItemStack(itemParts, 1, Parts.Seal.ordinal()),
new ItemStack(Item.slimeBall, 1) });
// part valve
GameRegistry.addRecipe(new ItemStack(itemParts, 1, Parts.Valve.ordinal()), new Object[] {
"T@T",
'T', new ItemStack(itemParts, 1, Parts.Iron.ordinal()),
'@', Block.lever });
GameRegistry.addRecipe(new ItemStack(itemParts, 1, Parts.Valve.ordinal()), new Object[] {
"T@T",
'T', new ItemStack(itemParts, 1, Parts.Iron.ordinal()),
'@', Block.lever });
// unfinished tank
GameRegistry.addRecipe(new ItemStack(itemParts, 1, Parts.Tank.ordinal()), new Object[] {
" @ ", "@ @", " @ ",
'@', Item.ingotIron });
GameRegistry.addRecipe(new ItemStack(itemParts, 1, Parts.Tank.ordinal()), new Object[] {
" @ ", "@ @", " @ ",
'@', Item.ingotIron });
// mechanical rod
GameRegistry.addRecipe(new ItemStack(blockRod, 1), new Object[] {
"I@I",
'I', Item.ingotIron,
'@', new ItemStack(itemParts, 1, Parts.Iron.ordinal()) });
GameRegistry.addRecipe(new ItemStack(blockRod, 1), new Object[] {
"I@I",
'I', Item.ingotIron,
'@', new ItemStack(itemParts, 1, Parts.Iron.ordinal()) });
// Iron Pipe
GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 0), new Object[] {
new ItemStack(itemParts, 1, Parts.Iron.ordinal()),
new ItemStack(itemParts, 1, Parts.Seal.ordinal()) });
GameRegistry.addShapelessRecipe(new ItemStack(blockPipe, 1, 15), new Object[] {
new ItemStack(itemParts, 1, Parts.Iron.ordinal()),
new ItemStack(itemParts, 1, Parts.Seal.ordinal()) });
// steam tank
GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 0), new Object[] {
new ItemStack(itemParts, 1, Parts.Tank.ordinal()),
new ItemStack(itemParts, 1, Parts.Seal.ordinal()),
new ItemStack(Item.dyePowder, 1, 15) });
GameRegistry.addShapelessRecipe(new ItemStack(blockTank, 1, PipeColor.ORANGE.ordinal()), new Object[] {
new ItemStack(itemParts, 1, Parts.Tank.ordinal()),
new ItemStack(itemParts, 1, Parts.Seal.ordinal()),
new ItemStack(Item.dyePowder, 1, PipeColor.ORANGE.ordinal()) });
// lava tank
GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 2), new Object[] {
new ItemStack(itemParts, 1, Parts.Tank.ordinal()),
Block.obsidian,
Block.obsidian,
Block.obsidian,
Block.obsidian });
GameRegistry.addRecipe(new ItemStack(blockTank, 1, PipeColor.RED.ordinal()), new Object[] {
" @ ", "@T@", " @ ",
'T', new ItemStack(itemParts, 1, Parts.Tank.ordinal()),
'@', Block.obsidian, });
// pump
GameRegistry.addRecipe(new ItemStack(blockMachine, 1, 0), new Object[] {
"@T@", "BPB", "@P@",
'@', new ItemStack(Item.ingotIron, 2),
'B', new ItemStack(itemParts, 1, Parts.Valve.ordinal()),
'P', new ItemStack(Block.pistonBase),
'T', new ItemStack(itemParts, 1, Parts.Tank.ordinal()) });
"@T@", "BPB", "@P@",
'@', new ItemStack(Item.ingotIron, 2),
'B', new ItemStack(itemParts, 1, Parts.Valve.ordinal()),
'P', new ItemStack(Block.pistonBase),
'T', new ItemStack(itemParts, 1, Parts.Tank.ordinal()) });
// eVavles
for (int i = 0; i < LiquidHandler.allowedLiquids.size() - 1; i++)
{
GameRegistry.addRecipe(new ItemStack(blockMachine, 1, i), new Object[] {
" P ", "PVP", " P ",
'P', new ItemStack(itemPipes, 1, i),
'V', new ItemStack(itemParts, 1, Parts.Valve.ordinal()), });
}
//reg ore directory for parts
// release valve
GameRegistry.addRecipe(new ItemStack(blockMachine, 1), new Object[] {
"RPR", "PVP", "RPR", " P ",
'P', new ItemStack(blockPipe, 1, 15),
'V', new ItemStack(itemParts, 1, Parts.Valve.ordinal()),
'R', Item.redstone });
// reg ore directory for parts
OreDictionary.registerOre("bronzeTube", new ItemStack(itemParts, 1, Parts.Bronze.ordinal()));
OreDictionary.registerOre("ironTube", new ItemStack(itemParts, 1, Parts.Iron.ordinal()));
OreDictionary.registerOre("netherTube", new ItemStack(itemParts, 1, Parts.Nether.ordinal()));
@ -260,7 +243,8 @@ public class LiquidMechanics extends DummyModContainer
OreDictionary.registerOre("valvePart", new ItemStack(itemParts, 1, Parts.Valve.ordinal()));
OreDictionary.registerOre("bronzeTube", new ItemStack(itemParts, 1, Parts.Bronze.ordinal()));
OreDictionary.registerOre("unfinishedTank", new ItemStack(itemParts, 1, Parts.Tank.ordinal()));
//add Default Liquids to current list, done last to let other mods use there liquid data first if used
// add Default Liquids to current list, done last to let other mods use
// there liquid data first if used
LiquidHandler.addDefaultLiquids();
}
}

View file

@ -28,11 +28,17 @@ public class BlockLiquidMachine extends BlockMachine
public BlockLiquidMachine(int id)
{
super("lmMachines", id, Material.iron, TabLiquidMechanics.INSTANCE);
this.blockIndexInTexture = 26;
this.setHardness(1f);
this.setResistance(5f);
}
public void onBlockAdded(World world, int x, int y, int z)
{
int meta = world.getBlockMetadata(x, y, z);
if(MetaGroup.getGrouping(meta) == 1)
{
world.setBlockAndMetadata(x, y, z, LiquidMechanics.blockTank.blockID, 15);
}
}
@Override
public boolean isOpaqueCube()
{
@ -45,75 +51,6 @@ public class BlockLiquidMachine extends BlockMachine
return false;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityplayer, int side, float hitX, float hitY, float hitZ)
{
ItemStack current = entityplayer.inventory.getCurrentItem();
if (current != null)
{
LiquidStack liquid = LiquidContainerRegistry.getLiquidForFilledItem(current);
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
if (tileEntity instanceof TileEntityTank)
{
TileEntityTank tank = (TileEntityTank) tileEntity;
// Handle filled containers
if (liquid != null)
{
int filled = tank.fill(ForgeDirection.UNKNOWN, liquid, true);
if (filled != 0 && !entityplayer.capabilities.isCreativeMode)
{
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, LiquidHandler.consumeItem(current));
}
return true;
// Handle empty containers
}
else
{
LiquidStack stack = tank.tank.getLiquid();
if (stack != null)
{
ItemStack liquidItem = LiquidContainerRegistry.fillLiquidContainer(stack, current);
liquid = LiquidContainerRegistry.getLiquidForFilledItem(liquidItem);
if (liquid != null)
{
if (!entityplayer.capabilities.isCreativeMode)
{
if (current.stackSize > 1)
{
if (!entityplayer.inventory.addItemStackToInventory(liquidItem)) return false;
else
{
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, LiquidHandler.consumeItem(current));
}
}
else
{
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, LiquidHandler.consumeItem(current));
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, liquidItem);
}
}
tank.tank.drain(liquid.amount, true);
return true;
}
}
}
}
}
return false;
}
@Override
public int getRenderType()
{
@ -137,7 +74,7 @@ public class BlockLiquidMachine extends BlockMachine
{
new ItemStack(LiquidMechanics.blockMachine, 1, 0);
}
if (ent instanceof TileEntityTank) { return new ItemStack(LiquidMechanics.itemTank, 1, LiquidHandler.getMeta(((TileEntityTank) ent).type)); }
return null;
}
@ -147,10 +84,8 @@ public class BlockLiquidMachine extends BlockMachine
int meta = world.getBlockMetadata(x, y, z);
int angle = MathHelper.floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
TileEntity ent = world.getBlockTileEntity(x, y, z);
if (MetaGroup.getGrouping(meta) != 1)
{
world.setBlockMetadata(x, y, z, angle + MetaGroup.getGroupStartMeta(MetaGroup.getGrouping(meta)));
}
world.setBlockMetadata(x, y, z, angle + MetaGroup.getGroupStartMeta(MetaGroup.getGrouping(meta)));
if (ent instanceof TileEntityAdvanced)
{
((TileEntityAdvanced) world.getBlockTileEntity(x, y, z)).initiate();
@ -171,7 +106,7 @@ public class BlockLiquidMachine extends BlockMachine
}
else if (meta >= 4)
{
return new TileEntityTank();
}
else
{

View file

@ -2,7 +2,11 @@ package liquidmechanics.common.block;
import java.util.Random;
import universalelectricity.prefab.BlockMachine;
import liquidmechanics.client.render.BlockRenderHelper;
import liquidmechanics.common.LiquidMechanics;
import liquidmechanics.common.TabLiquidMechanics;
import liquidmechanics.common.handlers.LiquidHandler;
import liquidmechanics.common.tileentity.TileEntityPipe;
@ -14,12 +18,11 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
public class BlockPipe extends BlockContainer
public class BlockPipe extends BlockMachine
{
public BlockPipe(int id)
{
super(id, Material.iron);
this.setBlockName("Pipe");
super("Pipe",id, Material.iron,TabLiquidMechanics.INSTANCE);
this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F);
this.setHardness(1f);
this.setResistance(3f);
@ -40,19 +43,7 @@ public class BlockPipe extends BlockContainer
@Override
public int getRenderType()
{
return -1;
}
@Override
public int idDropped(int par1, Random par2Random, int par3)
{
return 0;
}
@Override
public void onBlockAdded(World world, int x, int y, int z)
{
super.onBlockAdded(world, x, y, z);
return BlockRenderHelper.renderID;
}
/**
@ -82,43 +73,13 @@ public class BlockPipe extends BlockContainer
@Override
public TileEntity createNewTileEntity(World var1)
{
// TODO Auto-generated method stub
return new TileEntityPipe();
}
@Override
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z)
{
TileEntity ent = world.getBlockTileEntity(x, y, z);
int meta = 0;
if (ent instanceof TileEntityPipe)
{
TileEntityPipe pipe = (TileEntityPipe) ent;
meta = LiquidHandler.getMeta(pipe.type);
}
return new ItemStack(LiquidMechanics.itemPipes, 1, 0);
}
@Override
public void breakBlock(World world, int x, int y, int z, int par5, int par6)
{
super.breakBlock(world, x, y, z, par5, par6);
TileEntity ent = world.getBlockTileEntity(x, y, z);
Random furnaceRand = new Random();
if (ent instanceof TileEntityPipe)
{
TileEntityPipe pipe = (TileEntityPipe) ent;
int meta = LiquidHandler.getMeta(pipe.type);
float var8 = furnaceRand.nextFloat() * 0.8F + 0.1F;
float var9 = furnaceRand.nextFloat() * 0.8F + 0.1F;
float var10 = furnaceRand.nextFloat() * 0.8F + 0.1F;
EntityItem var12 = new EntityItem(world, (double) ((float) x + var8), (double) ((float) y + var9), (double) ((float) z + var10), new ItemStack(LiquidMechanics.itemPipes, 1, meta));
float var13 = 0.05F;
var12.motionX = (double) ((float) furnaceRand.nextGaussian() * var13);
var12.motionY = (double) ((float) furnaceRand.nextGaussian() * var13 + 0.2F);
var12.motionZ = (double) ((float) furnaceRand.nextGaussian() * var13);
world.spawnEntityInWorld(var12);
}
int meta = world.getBlockMetadata(x, y, z);
return new ItemStack(LiquidMechanics.blockPipe, 1, meta);
}
}

View file

@ -1,35 +0,0 @@
package liquidmechanics.common.block;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraftforge.liquids.ILiquid;
public class BlockSteam extends Block implements ILiquid
{
public static int blockID;
public BlockSteam(int par1)
{
super(par1, Material.air);
blockID = par1;
}
@Override
public int stillLiquidId()
{
return blockID;
}
@Override
public boolean isMetaSensitive()
{
return false;
}
@Override
public int stillLiquidMeta()
{
return 0;
}
}

View file

@ -0,0 +1,137 @@
package liquidmechanics.common.block;
import liquidmechanics.client.render.BlockRenderHelper;
import liquidmechanics.common.LiquidMechanics;
import liquidmechanics.common.TabLiquidMechanics;
import liquidmechanics.common.handlers.LiquidHandler;
import liquidmechanics.common.tileentity.TileEntityPump;
import liquidmechanics.common.tileentity.TileEntityTank;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.liquids.LiquidContainerRegistry;
import net.minecraftforge.liquids.LiquidStack;
import universalelectricity.prefab.BlockMachine;
public class BlockTank extends BlockMachine
{
public BlockTank(int id)
{
super("lmTank", id, Material.rock, TabLiquidMechanics.INSTANCE);
this.setHardness(1f);
this.setResistance(5f);
}
@Override
public boolean isOpaqueCube()
{
return false;
}
@Override
public boolean renderAsNormalBlock()
{
return false;
}
@Override
public int getRenderType()
{
return BlockRenderHelper.renderID;
}
@Override
public int damageDropped(int meta)
{
return meta;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityplayer, int side, float hitX, float hitY, float hitZ)
{
ItemStack current = entityplayer.inventory.getCurrentItem();
if (current != null)
{
LiquidStack liquid = LiquidContainerRegistry.getLiquidForFilledItem(current);
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
if (tileEntity instanceof TileEntityTank)
{
TileEntityTank tank = (TileEntityTank) tileEntity;
// Handle filled containers
if (liquid != null)
{
int filled = tank.fill(ForgeDirection.UNKNOWN, liquid, true);
if (filled != 0 && !entityplayer.capabilities.isCreativeMode)
{
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, LiquidHandler.consumeItem(current));
}
return true;
// Handle empty containers
}
else
{
LiquidStack stack = tank.tank.getLiquid();
if (stack != null)
{
ItemStack liquidItem = LiquidContainerRegistry.fillLiquidContainer(stack, current);
liquid = LiquidContainerRegistry.getLiquidForFilledItem(liquidItem);
if (liquid != null)
{
if (!entityplayer.capabilities.isCreativeMode)
{
if (current.stackSize > 1)
{
if (!entityplayer.inventory.addItemStackToInventory(liquidItem)) return false;
else
{
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, LiquidHandler.consumeItem(current));
}
}
else
{
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, LiquidHandler.consumeItem(current));
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, liquidItem);
}
}
tank.tank.drain(liquid.amount, true);
return true;
}
}
}
}
}
return false;
}
@Override
public TileEntity createNewTileEntity(World var1)
{
return new TileEntityTank();
}
@Override
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z)
{
int meta = world.getBlockMetadata(x, y, z);
return new ItemStack(this, 1, meta);
}
}

View file

@ -1,6 +1,6 @@
package liquidmechanics.common.handlers;
import liquidmechanics.api.helpers.Colors;
import liquidmechanics.api.helpers.PipeColor;
import net.minecraftforge.liquids.LiquidStack;
public class LiquidData
@ -9,9 +9,9 @@ public class LiquidData
private int defaultPressure;
private LiquidStack sampleStack;
private String name;
private Colors color;
private PipeColor color;
public LiquidData(String name, LiquidStack stack,Colors color, boolean gas, int dPressure)
public LiquidData(String name, LiquidStack stack,PipeColor color, boolean gas, int dPressure)
{
this.sampleStack = stack;
this.isAGas = gas;
@ -38,10 +38,10 @@ public class LiquidData
{
return isAGas;
}
public Colors getColor()
public PipeColor getColor()
{
if (color != null) { return color; }
return Colors.NONE;
return PipeColor.NONE;
}
}

View file

@ -3,7 +3,7 @@ package liquidmechanics.common.handlers;
import java.util.ArrayList;
import java.util.List;
import liquidmechanics.api.helpers.Colors;
import liquidmechanics.api.helpers.PipeColor;
import liquidmechanics.common.LiquidMechanics;
import liquidmechanics.common.tileentity.TileEntityPipe;
import net.minecraft.block.Block;
@ -29,14 +29,12 @@ public class LiquidHandler
* Called to add the default liquids to the allowed list
*/
public static void addDefaultLiquids()
{
steam = new LiquidData("Steam", LiquidDictionary.getOrCreateLiquid("Steam", new LiquidStack(LiquidMechanics.blockSteamBlock, 1)),Colors.ORANGE, true, 100);
allowedLiquids.add(steam);
water = new LiquidData("water", LiquidDictionary.getOrCreateLiquid("Water", new LiquidStack(Block.waterStill, 1)),Colors.BLUE, false, 32);
{
water = new LiquidData("water", LiquidDictionary.getOrCreateLiquid("Water", new LiquidStack(Block.waterStill, 1)), PipeColor.BLUE, false, 32);
allowedLiquids.add(water);
lava = new LiquidData("Lava", LiquidDictionary.getOrCreateLiquid("Lava", new LiquidStack(Block.lavaStill, 1)),Colors.RED, false, 20);
lava = new LiquidData("Lava", LiquidDictionary.getOrCreateLiquid("Lava", new LiquidStack(Block.lavaStill, 1)), PipeColor.RED, false, 20);
allowedLiquids.add(lava);
air = new LiquidData("Air", LiquidDictionary.getOrCreateLiquid("Air", new LiquidStack(0, 1)),Colors.NONE, false, 0);
air = new LiquidData("Air", LiquidDictionary.getOrCreateLiquid("Air", new LiquidStack(0, 1)), PipeColor.NONE, false, 0);
allowedLiquids.add(air);
}
@ -45,7 +43,22 @@ public class LiquidHandler
{
// TODO use this to add new liquid types to the data list
// or something along the lines of IDing liquids for use
if (event.Name.equalsIgnoreCase("methane"))
{
this.allowedLiquids.add(new LiquidData("methane", event.Liquid, PipeColor.LIME, true, 100));
}
else if (event.Name.equalsIgnoreCase("oil"))
{
this.allowedLiquids.add(new LiquidData("oil", event.Liquid, PipeColor.BLACK, true, 30));
}
else if (event.Name.equalsIgnoreCase("fuel"))
{
this.allowedLiquids.add(new LiquidData("fuel", event.Liquid, PipeColor.YELLOW, true, 50));
}
else if (event.Name.equalsIgnoreCase("steam"))
{
this.steam =new LiquidData("steam", event.Liquid, PipeColor.ORANGE, true, 100);
}
}
/**
@ -77,7 +90,7 @@ public class LiquidHandler
*/
public static LiquidStack getStack(LiquidData type, int vol)
{
if(type == null) return null;
if (type == null) return null;
return new LiquidStack(type.getStack().itemID, vol, type.getStack().itemMeta);
}
@ -127,6 +140,7 @@ public class LiquidHandler
if (type.getStack().itemID == stack.itemID && type.getStack().itemMeta == stack.itemMeta) { return true; }
return false;
}
public static boolean isEqual(LiquidStack stack, LiquidStack type)
{
if (stack == null || type == null)
@ -134,6 +148,7 @@ public class LiquidHandler
if (type.itemID == stack.itemID && type.itemMeta == stack.itemMeta) { return true; }
return false;
}
public static ItemStack consumeItem(ItemStack stack)
{
if (stack.stackSize == 1)

View file

@ -1,20 +0,0 @@
package liquidmechanics.common.handlers;
import net.minecraftforge.liquids.LiquidDictionary.LiquidRegisterEvent;
/**
* WIP unknown if this can actual work fully
* @author Rseifert
*
*/
public class PipeCreator
{
/**
* used to create a new pipe type
*/
public static void createNewPipe(LiquidRegisterEvent event)
{
}
}

View file

@ -1,19 +1,18 @@
package liquidmechanics.common.handlers;
import liquidmechanics.api.helpers.PipeColor;
import liquidmechanics.common.tileentity.TileEntityPipe;
/**
* used to keep track of a pipe, its meta, and if Universal
*/
public class PipeInstance
{
public int color;
public PipeColor color;
public TileEntityPipe pipe;
public boolean any;
public PipeInstance(int color, TileEntityPipe pipe, boolean any)
//colors
public PipeInstance(PipeColor cc, TileEntityPipe pipe)
{
this.color = color;
this.color = cc;
this.pipe = pipe;
this.any = any;
}
}

View file

@ -1,8 +1,9 @@
package liquidmechanics.common.handlers;
import net.minecraft.nbt.NBTTagCompound;
import liquidmechanics.api.helpers.Colors;
import liquidmechanics.api.helpers.PipeColor;
import liquidmechanics.common.tileentity.TileEntityPipe;
import liquidmechanics.common.tileentity.TileEntityTank;
/**
* used to help convert older system to newer systems.
@ -15,14 +16,28 @@ public class UpdateConverter
Boolean converted25 = nbt.getBoolean("converted025");
if (!converted24)
{
pipe.setColor(Colors.get(LiquidHandler.getFromMeta(nbt.getInteger("type"))));
pipe.setColor(PipeColor.get(LiquidHandler.getFromMeta(nbt.getInteger("type"))));
}
else if (converted24 && !converted25)
{
pipe.setColor(Colors.get(LiquidHandler.get(nbt.getString("name"))));
pipe.setColor(PipeColor.get(LiquidHandler.get(nbt.getString("name"))));
}
nbt.setBoolean("converted", true);
nbt.setBoolean("converted025", true);
}
public static void convert(TileEntityTank pipe, NBTTagCompound nbt)
{
Boolean converted24 = nbt.getBoolean("converted");
Boolean converted25 = nbt.getBoolean("converted025");
if (!converted24)
{
pipe.setColor(PipeColor.get(LiquidHandler.getFromMeta(nbt.getInteger("type"))));
}
else if (converted24 && !converted25)
{
pipe.setColor(PipeColor.get(LiquidHandler.get(nbt.getString("name"))));
}
nbt.setBoolean("converted", true);
nbt.setBoolean("converted025", true);
}
}

View file

@ -1,135 +0,0 @@
package liquidmechanics.common.item;
import java.util.List;
import liquidmechanics.api.helpers.Colors;
import liquidmechanics.common.LiquidMechanics;
import liquidmechanics.common.TabLiquidMechanics;
import liquidmechanics.common.handlers.LiquidHandler;
import liquidmechanics.common.tileentity.TileEntityPipe;
import net.minecraft.block.Block;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class ItemPipe extends Item
{
int index = 32;
private int spawnID;
public ItemPipe(int id)
{
super(id);
this.setMaxDamage(0);
this.setIconIndex(10);
this.setItemName("itemPipe");
this.setCreativeTab(TabLiquidMechanics.INSTANCE);
}
@Override
public int getIconFromDamage(int par1)
{
return par1 + index;
}
@Override
public String getItemNameIS(ItemStack itemstack)
{
return "pipe";
}
@Override
public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List)
{
for (int i = 0; i < LiquidHandler.allowedLiquids.size() - 1; i++)
{
par3List.add(new ItemStack(this, 1, i));
}
}
public String getTextureFile()
{
return LiquidMechanics.ITEM_TEXTURE_FILE;
}
@Override
public String getItemName()
{
return "Pipes";
}
@Override
public boolean onItemUse(ItemStack itemstack, EntityPlayer player, World par3World, int x, int y, int z, int par7, float par8, float par9, float par10)
{
int blockID = par3World.getBlockId(x, y, z);
spawnID = LiquidMechanics.blockPipe.blockID;
if (blockID == Block.snow.blockID)
{
par7 = 1;
}
else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID)
{
if (par7 == 0)
{
--y;
}
if (par7 == 1)
{
++y;
}
if (par7 == 2)
{
--z;
}
if (par7 == 3)
{
++z;
}
if (par7 == 4)
{
--x;
}
if (par7 == 5)
{
++x;
}
}
if (LiquidMechanics.blockPipe.canPlaceBlockAt(par3World, x, y, z))
{
Block var9 = Block.blocksList[this.spawnID];
par3World.editingBlocks = true;
if (par3World.setBlockWithNotify(x, y, z, var9.blockID))
{
if (par3World.getBlockId(x, y, z) == var9.blockID)
{
Block.blocksList[this.spawnID].onBlockAdded(par3World, x, y, z);
Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, x, y, z, player);
TileEntity blockEntity = par3World.getBlockTileEntity(x, y, z);
if (blockEntity instanceof TileEntityPipe)
{
TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity;
par3World.setBlockMetadataWithNotify(x,y,z,Colors.NONE.ordinal());
}
}
--itemstack.stackSize;
par3World.editingBlocks = false;
return true;
}
}
par3World.editingBlocks = false;
return false;
}
}

View file

@ -1,138 +0,0 @@
package liquidmechanics.common.item;
import java.util.List;
import liquidmechanics.common.LiquidMechanics;
import liquidmechanics.common.TabLiquidMechanics;
import liquidmechanics.common.handlers.LiquidData;
import liquidmechanics.common.handlers.LiquidHandler;
import liquidmechanics.common.tileentity.TileEntityTank;
import net.minecraft.block.Block;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class ItemTank extends Item
{
int index = 64;// 64 + 2 rows alloted to pipes
private int spawnID;
public ItemTank(int id)
{
super(id);
this.setMaxDamage(0);
this.setHasSubtypes(true);
this.setIconIndex(10);
this.setItemName("itemTank");
this.setCreativeTab(TabLiquidMechanics.INSTANCE);
}
@Override
public int getIconFromDamage(int par1)
{
return par1 + index;
}
@Override
public String getItemNameIS(ItemStack itemstack)
{
return "Tank";
}
@Override
public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List)
{
for (int i = 0; i < LiquidHandler.allowedLiquids.size() -1; i++)
{
par3List.add(new ItemStack(this, 1, i));
}
}
public String getTextureFile()
{
return LiquidMechanics.ITEM_TEXTURE_FILE;
}
@Override
public String getItemName()
{
return "Pipes";
}
@Override
public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
{
int blockID = par3World.getBlockId(par4, par5, par6);
spawnID = LiquidMechanics.blockMachine.blockID;
if (blockID == Block.snow.blockID)
{
par7 = 1;
}
else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID)
{
if (par7 == 0)
{
--par5;
}
if (par7 == 1)
{
++par5;
}
if (par7 == 2)
{
--par6;
}
if (par7 == 3)
{
++par6;
}
if (par7 == 4)
{
--par4;
}
if (par7 == 5)
{
++par4;
}
}
if (LiquidMechanics.blockPipe.canPlaceBlockAt(par3World, par4, par5, par6))
{
Block var9 = Block.blocksList[this.spawnID];
par3World.editingBlocks = true;
if (par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var9.blockID, 5))
{
if (par3World.getBlockId(par4, par5, par6) == var9.blockID)
{
Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6);
Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, par2EntityPlayer);
TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6);
if (blockEntity instanceof TileEntityTank)
{
TileEntityTank pipeEntity = (TileEntityTank) blockEntity;
LiquidData dm = LiquidHandler.getFromMeta(par1ItemStack.getItemDamage());
pipeEntity.setType(dm);
pipeEntity.converted = true;
}
}
--par1ItemStack.stackSize;
par3World.editingBlocks = false;
return true;
}
}
par3World.editingBlocks = false;
return false;
}
}

View file

@ -4,7 +4,7 @@ import java.util.EnumSet;
import liquidmechanics.api.IForce;
import liquidmechanics.api.IReadOut;
import liquidmechanics.api.helpers.TankHelper;
import liquidmechanics.api.helpers.connectionHelper;
import liquidmechanics.common.LiquidMechanics;
import liquidmechanics.common.MetaGroup;
import liquidmechanics.common.block.BlockGenerator;
@ -76,7 +76,7 @@ public class TileEntityGenerator extends TileEntityElectricityProducer implement
this.genAmmount = Math.abs(force / this.getVoltage());
// wire count update
int wireCount = 0;
TileEntity[] ents = TankHelper.getSurroundings(worldObj, xCoord, yCoord, zCoord);
TileEntity[] ents = connectionHelper.getSurroundings(worldObj, xCoord, yCoord, zCoord);
this.wires = new IConductor[6];
for (int i = 0; i < ents.length; i++)
{

View file

@ -2,8 +2,8 @@ package liquidmechanics.common.tileentity;
import liquidmechanics.api.IReadOut;
import liquidmechanics.api.IPressure;
import liquidmechanics.api.helpers.Colors;
import liquidmechanics.api.helpers.TankHelper;
import liquidmechanics.api.helpers.PipeColor;
import liquidmechanics.api.helpers.connectionHelper;
import liquidmechanics.common.LiquidMechanics;
import liquidmechanics.common.handlers.LiquidData;
import liquidmechanics.common.handlers.LiquidHandler;
@ -28,7 +28,7 @@ import com.google.common.io.ByteArrayDataInput;
public class TileEntityPipe extends TileEntity implements ITankContainer, IPacketReceiver, IReadOut
{
private Colors color = Colors.NONE;
private PipeColor color = PipeColor.NONE;
private int count = 40;
private int count2, presure = 0;
@ -47,7 +47,7 @@ public class TileEntityPipe extends TileEntity implements ITankContainer, IPacke
{
count = 0;
this.validataConnections();
this.color = Colors.get(worldObj.getBlockMetadata(xCoord, yCoord, zCoord));
this.color = PipeColor.get(worldObj.getBlockMetadata(xCoord, yCoord, zCoord));
if (!worldObj.isRemote)
{
this.updatePressure();
@ -97,7 +97,7 @@ public class TileEntityPipe extends TileEntity implements ITankContainer, IPacke
/**
* gets the current color mark of the pipe
*/
public Colors getColor()
public PipeColor getColor()
{
return this.color;
}
@ -105,18 +105,19 @@ public class TileEntityPipe extends TileEntity implements ITankContainer, IPacke
/**
* sets the current color mark of the pipe
*/
public void setColor(Colors cc)
public void setColor(PipeColor cc)
{
this.color = cc;
}
/**
* sets the current color mark of the pipe
*/
public void setColor(int i)
{
if (i < Colors.values().length)
if (i < PipeColor.values().length)
{
this.color = Colors.values()[i];
this.color = PipeColor.values()[i];
}
}
@ -145,7 +146,8 @@ public class TileEntityPipe extends TileEntity implements ITankContainer, IPacke
{
super.readFromNBT(nbt);
UpdateConverter.convert(this, nbt);
LiquidStack stack = LiquidStack.loadLiquidStackFromNBT(nbt);
NBTTagCompound stored = nbt.getCompoundTag("stored");
LiquidStack stack = LiquidStack.loadLiquidStackFromNBT(stored);
this.stored.setLiquid(stack);
}
@ -155,16 +157,16 @@ public class TileEntityPipe extends TileEntity implements ITankContainer, IPacke
@Override
public void writeToNBT(NBTTagCompound nbt)
{
super.writeToNBT(nbt);
super.writeToNBT(nbt);
if (stored.getLiquid() != null)
{
stored.getLiquid().writeToNBT(nbt);
nbt.setCompoundTag("stored", stored.getLiquid().writeToNBT(nbt));
}
}
@Override
public String getMeterReading(EntityPlayer user, ForgeDirection side)
{
{
return "ReadOut not setup";
}
@ -216,20 +218,28 @@ public class TileEntityPipe extends TileEntity implements ITankContainer, IPacke
*/
public void validataConnections()
{
this.connectedBlocks = TankHelper.getSurroundings(worldObj, xCoord, yCoord, zCoord);
this.connectedBlocks = connectionHelper.getSurroundings(worldObj, xCoord, yCoord, zCoord);
for (int i = 0; i < 6; i++)
{
ForgeDirection dir = ForgeDirection.getOrientation(i);
TileEntity ent = connectedBlocks[i];
if (ent instanceof ITankContainer)
{
if (ent instanceof TileEntityPipe)
if (ent instanceof TileEntityPipe && color != ((TileEntityPipe) ent).getColor())
{
connectedBlocks[i] = null;
}
if(ent instanceof TileEntityTank && color != ((TileEntityTank)ent).getColor())
{
connectedBlocks[i] = null;
}
}
else if (ent instanceof IPressure)
{
if (!((IPressure) ent).canPressureToo(color.getLiquidData(), dir))
{
connectedBlocks[i] = null;
}
}
else
{

View file

@ -358,10 +358,4 @@ public class TileEntityPump extends TileEntityElectricityReceiver implements IPa
return false;
}
@Override
public LiquidData getLiquidType()
{
return this.type;
}
}

View file

@ -1,11 +1,14 @@
package liquidmechanics.common.tileentity;
import java.nio.channels.Pipe;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import liquidmechanics.api.IPressure;
import liquidmechanics.api.IReadOut;
import liquidmechanics.api.helpers.TankHelper;
import liquidmechanics.api.helpers.PipeColor;
import liquidmechanics.api.helpers.connectionHelper;
import liquidmechanics.common.block.BlockReleaseValve;
import liquidmechanics.common.handlers.LiquidData;
import liquidmechanics.common.handlers.LiquidHandler;
@ -25,8 +28,7 @@ import universalelectricity.prefab.implement.IRedstoneReceptor;
public class TileEntityReleaseValve extends TileEntity implements IPressure, IReadOut, IRedstoneReceptor, IInventory
{
public LiquidData type = LiquidHandler.air;
public boolean[] allowed = new boolean[PipeColor.values().length];
public TileEntity[] connected = new TileEntity[6];
private List<PipeInstance> output = new ArrayList<PipeInstance>();
@ -36,7 +38,6 @@ public class TileEntityReleaseValve extends TileEntity implements IPressure, IRe
public boolean isPowered = false;
public boolean converted = false;
public boolean isRestricted = false;
private ItemStack[] inventory = new ItemStack[0];
@ -48,11 +49,81 @@ public class TileEntityReleaseValve extends TileEntity implements IPressure, IRe
if (!this.worldObj.isRemote && ticks++ == 10)
{
BlockReleaseValve.checkForPower(worldObj, xCoord, yCoord, zCoord);
validateNBuildList();
//start the draining process
if (this.input.size() > 0 && this.output.size() > 0)
{
Iterator itr = input.iterator();
// testing out Iterators :p
while (itr.hasNext())
{
Object element = itr.next();
if (element instanceof ILiquidTank)
{
ILiquidTank tank = (ILiquidTank) element;
if (tank.getLiquid() != null && tank.getLiquid().amount < tank.getCapacity())
{
TileEntityPipe pipe = this.findValidPipe(tank.getLiquid());
if (pipe != null)
{
int drain = pipe.stored.fill(tank.getLiquid(), true);
tank.drain(drain, true);
break;
}
}
}
}
}
}
}
/**
* used to find a valid pipe for filling of the liquid type
*/
public TileEntityPipe findValidPipe(LiquidStack stack)
{
LiquidData data = LiquidHandler.get(stack);
if (data != LiquidHandler.air)
{
for (PipeInstance pipe : output)
{
if (pipe.color == data.getColor() && (pipe.pipe.stored.getLiquid() == null || pipe.pipe.stored.getLiquid().amount < pipe.pipe.stored.getCapacity())) { return pipe.pipe; }
}
}
return null;
}
/**
* sees if it can connect to a pipe of some color
*/
public boolean canConnect(PipeColor cc)
{
for (int i = 0; i < this.allowed.length; i++)
{
if (allowed[i] && i == cc.ordinal()) { return true; }
}
return false;
}
/**
* if any of allowed list is true
*
* @return true
*/
public boolean isRestricted()
{
for (int i = 0; i < this.allowed.length; i++)
{
if (allowed[i]) { return true; }
}
return false;
}
public boolean canAcceptLiquid(LiquidStack stack)
{
return canConnect(PipeColor.get(LiquidHandler.get(stack)));
}
/**
* Collects info about the surrounding 6 tiles and orders them into
* drain-able(ITankContainer) and fill-able(TileEntityPipes) instances
@ -60,7 +131,7 @@ public class TileEntityReleaseValve extends TileEntity implements IPressure, IRe
public void validateNBuildList()
{
// cleanup
this.connected = TankHelper.getSurroundings(worldObj, xCoord, yCoord, zCoord);
this.connected = connectionHelper.getSurroundings(worldObj, xCoord, yCoord, zCoord);
this.input.clear();
this.output.clear();
// read surroundings
@ -71,7 +142,7 @@ public class TileEntityReleaseValve extends TileEntity implements IPressure, IRe
if (ent instanceof TileEntityPipe)
{
TileEntityPipe pipe = (TileEntityPipe) ent;
if (this.isRestricted && pipe.type != this.type)
if (this.isRestricted() && this.canConnect(pipe.getColor()))
{
connected[i] = null;
}
@ -81,7 +152,7 @@ public class TileEntityReleaseValve extends TileEntity implements IPressure, IRe
}
else
{
this.output.add(new PipeInstance(LiquidHandler.getMeta(pipe.type), pipe, pipe.isUniversal));
this.output.add(new PipeInstance(pipe.getColor(), pipe));
}
}
else if (ent instanceof ITankContainer)
@ -93,9 +164,9 @@ public class TileEntityReleaseValve extends TileEntity implements IPressure, IRe
if (ll != null && ll.amount > 0 && ll.amount < tanks[t].getCapacity())
{
// if restricted check for type match
if (this.isRestricted)
if (this.isRestricted())
{
if (LiquidHandler.isEqual(ll, this.type))
if (this.canAcceptLiquid(ll))
{
this.input.add(tanks[t]);
}
@ -114,45 +185,34 @@ public class TileEntityReleaseValve extends TileEntity implements IPressure, IRe
}
}
/**
* removes liquid from a tank and fills it to a pipe
*
* @param pipe
* - pipe being filled
* @param drainee
* - LiquidTank being drained
*/
public void drainTo(TileEntityPipe pipe, LiquidTank drainee)
{
}
@Override
public int presureOutput(LiquidData type, ForgeDirection dir)
{
if (type == this.type) { return LiquidData.getPressure(type); }
if (type == null) return 0;
if (this.canConnect(type.getColor())) { return type.getPressure(); }
return 0;
}
@Override
public boolean canPressureToo(LiquidData type, ForgeDirection dir)
{
if (type == this.type)
return true;
if (type == null) return false;
if (this.canConnect(type.getColor())) return true;
return false;
}
@Override
public String getMeterReading(EntityPlayer user, ForgeDirection side)
{
if (type == null) return "Error: No Type";
// TODO maybe debug on # of connected units of input/output
String output = "";
if (this.isRestricted)
if (this.isRestricted())
{
output +="Outputting: "+ LiquidData.getName(type)+" ||";
}else
output += "Output: Restricted and";
}
else
{
output += " Outputting: All ||";
output += " Output: UnRestricted and";
}
if (!this.isPowered)
{
@ -169,8 +229,10 @@ public class TileEntityReleaseValve extends TileEntity implements IPressure, IRe
public void readFromNBT(NBTTagCompound nbt)
{
super.readFromNBT(nbt);
this.type = LiquidHandler.get(nbt.getString("name"));
this.isRestricted = nbt.getBoolean("restricted");
for (int i = 0; i < this.allowed.length; i++)
{
allowed[i] = nbt.getBoolean("allowed" + i);
}
}
/**
@ -180,14 +242,10 @@ public class TileEntityReleaseValve extends TileEntity implements IPressure, IRe
public void writeToNBT(NBTTagCompound nbt)
{
super.writeToNBT(nbt);
nbt.setBoolean("restricted", this.isRestricted);
nbt.setString("name", LiquidData.getName(type));
}
public void setType(LiquidData dm)
{
this.type = dm;
for (int i = 0; i < this.allowed.length; i++)
{
nbt.setBoolean("allowed" + i, allowed[i]);
}
}
@Override
@ -315,10 +373,4 @@ public class TileEntityReleaseValve extends TileEntity implements IPressure, IRe
}
@Override
public LiquidData getLiquidType()
{
return this.type;
}
}

View file

@ -1,11 +1,15 @@
package liquidmechanics.common.tileentity;
import javax.swing.colorchooser.ColorSelectionModel;
import liquidmechanics.api.IReadOut;
import liquidmechanics.api.IPressure;
import liquidmechanics.api.helpers.TankHelper;
import liquidmechanics.api.helpers.PipeColor;
import liquidmechanics.api.helpers.connectionHelper;
import liquidmechanics.common.LiquidMechanics;
import liquidmechanics.common.handlers.LiquidData;
import liquidmechanics.common.handlers.LiquidHandler;
import liquidmechanics.common.handlers.UpdateConverter;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.INetworkManager;
@ -24,37 +28,50 @@ import universalelectricity.prefab.network.PacketManager;
import com.google.common.io.ByteArrayDataInput;
public class TileEntityTank extends TileEntity implements IPacketReceiver, IReadOut, IPressure,ITankContainer
public class TileEntityTank extends TileEntity implements IPacketReceiver, IReadOut, IPressure, ITankContainer
{
public TileEntity[] cc = { null, null, null, null, null, null };
public LiquidData type = LiquidHandler.air;
private PipeColor color = PipeColor.NONE;
public static final int LMax = 4;
private int count = 0;
private int count2 = 0;
public boolean converted = false;
private int count, count2 = 0;
public int volume;
public int pVolume = 0;
private boolean doUpdate = true;
public LiquidTank tank = new LiquidTank(LiquidContainerRegistry.BUCKET_VOLUME * LMax);
public void updateEntity()
{
if (tank.getLiquid() == null)
if (tank.getLiquid() == null && type != LiquidHandler.air)
{
tank.setLiquid(LiquidHandler.getStack(this.type, 1));
}
LiquidStack liquid = tank.getLiquid();
if (++count >= 20 && liquid != null)
{
count = 0;
this.cc = TankHelper.getSurroundings(worldObj, xCoord, yCoord, zCoord);
this.cc = connectionHelper.getSurroundings(worldObj, xCoord, yCoord, zCoord);
if (!worldObj.isRemote)
{
this.type = color.getLiquidData();
this.tradeDown();
this.tradeArround();
volume = liquid.amount;
Packet packet = PacketManager.getPacket(LiquidMechanics.CHANNEL, this, new Object[] { LiquidData.getName(type), liquid.amount });
PacketManager.sendPacketToClients(packet, worldObj, new Vector3(this), 20);
if (volume != pVolume)
{
Packet packet = PacketManager.getPacket(LiquidMechanics.CHANNEL, this, new Object[] { volume });
PacketManager.sendPacketToClients(packet, worldObj, new Vector3(this), 20);
}
pVolume = volume;
}
}
@ -63,47 +80,28 @@ public class TileEntityTank extends TileEntity implements IPacketReceiver, IRead
@Override
public String getMeterReading(EntityPlayer user, ForgeDirection side)
{
if (type == null) return "Error: No Type";
String output = "";
LiquidStack stack = tank.getLiquid();
if (stack != null)
output += (stack.amount / LiquidContainerRegistry.BUCKET_VOLUME) + " " + LiquidData.getName(type);
if (stack != null)
return output;
return "0/4 " + LiquidData.getName(type);
if (volume == 0) { return "empty"; }
return (volume / LiquidContainerRegistry.BUCKET_VOLUME) + "/" + (tank.getCapacity() / LiquidContainerRegistry.BUCKET_VOLUME) + " " + type.getName();
}
@Override
public void readFromNBT(NBTTagCompound nbt)
{
super.readFromNBT(nbt);
this.converted = nbt.getBoolean("converted");
if (!converted)
{
int t = nbt.getInteger("type");
this.type = LiquidHandler.getFromMeta(t);
this.converted = true;
}
else
{
this.type = LiquidHandler.get(nbt.getString("name"));
}
if (this.type == null) type = LiquidHandler.air;
int vol = nbt.getInteger("liquid");
this.tank.setLiquid(LiquidHandler.getStack(type, vol));
UpdateConverter.convert(this, nbt);
NBTTagCompound stored = nbt.getCompoundTag("stored");
LiquidStack stack = LiquidStack.loadLiquidStackFromNBT(stored);
this.tank.setLiquid(stack);
}
@Override
public void writeToNBT(NBTTagCompound nbt)
{
super.writeToNBT(nbt);
nbt.setBoolean("converted", this.converted);
int s = 0;
if (tank.getLiquid() != null) s = tank.getLiquid().amount;
nbt.setInteger("liquid", s);
nbt.setString("name", LiquidData.getName(type));
if (tank.getLiquid() != null)
{
nbt.setCompoundTag("stored", tank.getLiquid().writeToNBT(nbt));
}
}
@Override
@ -111,8 +109,7 @@ public class TileEntityTank extends TileEntity implements IPacketReceiver, IRead
{
try
{
this.type = LiquidHandler.get(data.readUTF());
this.tank.setLiquid(LiquidHandler.getStack(this.type, data.readInt()));
this.volume = data.readInt();
}
catch (Exception e)
{
@ -152,7 +149,7 @@ public class TileEntityTank extends TileEntity implements IPacketReceiver, IRead
if (this.isFull())
{
int change = 1;
if (LiquidData.getCanFloat(LiquidHandler.get(resource)))
if (LiquidHandler.get(resource).getCanFloat())
change = -1;
TileEntity tank = worldObj.getBlockTileEntity(xCoord, yCoord + change, zCoord);
if (tank instanceof TileEntityTank) { return ((TileEntityTank) tank).tank.fill(resource, doFill); }
@ -249,10 +246,10 @@ public class TileEntityTank extends TileEntity implements IPacketReceiver, IRead
{
if (type == this.type)
{
if (LiquidData.getCanFloat(type) && dir == ForgeDirection.DOWN)
return LiquidData.getPressure(type);
if (!LiquidData.getCanFloat(type) && dir == ForgeDirection.UP)
return LiquidData.getPressure(type);
if (type.getCanFloat() && dir == ForgeDirection.DOWN)
return type.getPressure();
if (!type.getCanFloat() && dir == ForgeDirection.UP)
return type.getPressure();
}
return 0;
}
@ -262,9 +259,9 @@ public class TileEntityTank extends TileEntity implements IPacketReceiver, IRead
{
if (type == this.type)
{
if (LiquidData.getCanFloat(type) && dir == ForgeDirection.DOWN)
if (type.getCanFloat() && dir == ForgeDirection.DOWN)
return true;
if (!LiquidData.getCanFloat(type) && dir == ForgeDirection.UP)
if (!type.getCanFloat() && dir == ForgeDirection.UP)
return true;
}
return false;
@ -293,12 +290,12 @@ public class TileEntityTank extends TileEntity implements IPacketReceiver, IRead
{
if (this.tank.getLiquid() == null || this.tank.getLiquid().amount <= 0)
return;
TileEntity[] ents = TankHelper.getSurroundings(worldObj, xCoord, yCoord, zCoord);
TileEntity[] ents = connectionHelper.getSurroundings(worldObj, xCoord, yCoord, zCoord);
int commonVol = this.tank.getLiquid().amount;
int tanks = 1;
for (int i = 2; i < 6; i++)
{
if (ents[i] instanceof TileEntityTank && ((TileEntityTank) ents[i]).type == this.type)
if (ents[i] instanceof TileEntityTank && ((TileEntityTank) ents[i]).color == this.color)
{
tanks++;
if (((TileEntityTank) ents[i]).tank.getLiquid() != null)
@ -313,7 +310,7 @@ public class TileEntityTank extends TileEntity implements IPacketReceiver, IRead
if (this.tank.getLiquid() == null || this.tank.getLiquid().amount <= equalVol)
break;
if (ents[i] instanceof TileEntityTank && ((TileEntityTank) ents[i]).type == this.type && !((TileEntityTank) ents[i]).isFull())
if (ents[i] instanceof TileEntityTank && ((TileEntityTank) ents[i]).color == this.color && !((TileEntityTank) ents[i]).isFull())
{
LiquidStack stack = ((TileEntityTank) ents[i]).tank.getLiquid();
LiquidStack filling = this.tank.getLiquid();
@ -336,9 +333,14 @@ public class TileEntityTank extends TileEntity implements IPacketReceiver, IRead
}
}
@Override
public LiquidData getLiquidType()
public void setColor(PipeColor pipeColor)
{
return this.type;
this.color = pipeColor;
}
public PipeColor getColor()
{
return color;
}
}

View file

@ -7,7 +7,8 @@ tile.lmMachines.0.name=Pump
tile.lmMachines.4.name=Condensor
tile.MechanicRod.name=Geared Rod
tile.eValve.name=Release Valve
tile.lmTank.name = Tank
tile.lmPipe.name = Pipe
# Items
item.lmTool.0.name=Pipe Guage
@ -24,7 +25,3 @@ item.itemPipe.0.name=Steam Pipe
item.itemPipe.1.name=Water Pipe
item.itemPipe.2.name=Lava Pipe
item.itemTank.0.name=Steam Tank
item.itemTank.1.name=Water Tank
item.itemTank.2.name=Lava Tank

View file

Before

Width:  |  Height:  |  Size: 426 B

After

Width:  |  Height:  |  Size: 426 B

View file

Before

Width:  |  Height:  |  Size: 431 B

After

Width:  |  Height:  |  Size: 431 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 487 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 494 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 514 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 504 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 491 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 742 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 790 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 740 B