From eb923b84db27bbc288080285fe9dba7e29ee3516 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 22 Jan 2013 03:36:59 -0500 Subject: [PATCH] Added sink block simple, nicer looking way of filling buckets, water viels, cleaning color off of armor. --- .../liquidmechanics/client/ClientProxy.java | 3 + .../client/model/ModelSink.java | 112 ++++++++++++ .../client/render/BlockRenderHelper.java | 34 ++-- .../client/render/RenderSink.java | 74 ++++++++ .../common/LiquidMechanics.java | 10 +- .../common/block/BlockSink.java | 140 +++++++++++++- .../common/tileentity/TileEntityPipe.java | 5 +- .../common/tileentity/TileEntitySink.java | 173 ++++++++++++++++++ minecraft/liquidmechanics/resource/Sink.png | Bin 0 -> 1102 bytes minecraft/liquidmechanics/resource/blue.png | Bin 0 -> 7865 bytes .../resource/lang/en_US.properties | 3 +- resources/models/Sink.tcn | Bin 0 -> 1914 bytes 12 files changed, 523 insertions(+), 31 deletions(-) create mode 100644 minecraft/liquidmechanics/client/model/ModelSink.java create mode 100644 minecraft/liquidmechanics/client/render/RenderSink.java create mode 100644 minecraft/liquidmechanics/common/tileentity/TileEntitySink.java create mode 100644 minecraft/liquidmechanics/resource/Sink.png create mode 100644 minecraft/liquidmechanics/resource/blue.png create mode 100644 resources/models/Sink.tcn diff --git a/minecraft/liquidmechanics/client/ClientProxy.java b/minecraft/liquidmechanics/client/ClientProxy.java index bc168669..7c6e9dd8 100644 --- a/minecraft/liquidmechanics/client/ClientProxy.java +++ b/minecraft/liquidmechanics/client/ClientProxy.java @@ -7,6 +7,7 @@ import liquidmechanics.client.render.RenderGenerator; import liquidmechanics.client.render.RenderPipe; import liquidmechanics.client.render.RenderPump; import liquidmechanics.client.render.RenderReleaseValve; +import liquidmechanics.client.render.RenderSink; import liquidmechanics.client.render.RenderTank; import liquidmechanics.common.CommonProxy; import liquidmechanics.common.LiquidMechanics; @@ -15,6 +16,7 @@ import liquidmechanics.common.tileentity.TileEntityPipe; import liquidmechanics.common.tileentity.TileEntityPump; import liquidmechanics.common.tileentity.TileEntityReleaseValve; import liquidmechanics.common.tileentity.TileEntityRod; +import liquidmechanics.common.tileentity.TileEntitySink; import liquidmechanics.common.tileentity.TileEntityTank; import net.minecraftforge.client.MinecraftForgeClient; import cpw.mods.fml.client.registry.ClientRegistry; @@ -38,6 +40,7 @@ public class ClientProxy extends CommonProxy ClientRegistry.bindTileEntitySpecialRenderer(TileEntityGenerator.class, new RenderGenerator()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTank.class, new RenderTank()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityReleaseValve.class, new RenderReleaseValve()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySink.class, new RenderSink()); MinecraftForgeClient.registerItemRenderer(LiquidMechanics.blockPipe.blockID, new ItemRenderHelper()); MinecraftForgeClient.registerItemRenderer(LiquidMechanics.blockReleaseValve.blockID, new ItemRenderHelper()); RenderingRegistry.registerBlockHandler(new BlockRenderHelper()); diff --git a/minecraft/liquidmechanics/client/model/ModelSink.java b/minecraft/liquidmechanics/client/model/ModelSink.java new file mode 100644 index 00000000..f2c1a69d --- /dev/null +++ b/minecraft/liquidmechanics/client/model/ModelSink.java @@ -0,0 +1,112 @@ +// Date: 1/22/2013 12:21:32 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + +package liquidmechanics.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelSink extends ModelBase +{ + // fields + ModelRenderer Base; + ModelRenderer FrontLip; + ModelRenderer BottomLip; + ModelRenderer RightLip; + ModelRenderer LeftLip; + ModelRenderer BLip; + ModelRenderer Edge; + ModelRenderer Edge2; + ModelRenderer Water; + + public ModelSink() + { + textureWidth = 128; + textureHeight = 128; + + Base = new ModelRenderer(this, 0, 0); + Base.addBox(-7F, 0F, -7F, 14, 12, 14); + Base.setRotationPoint(0F, 12F, 0F); + Base.setTextureSize(128, 128); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + FrontLip = new ModelRenderer(this, 10, 62); + FrontLip.addBox(-8F, -4F, -8F, 16, 4, 2); + FrontLip.setRotationPoint(0F, 12F, 0F); + FrontLip.setTextureSize(128, 128); + FrontLip.mirror = true; + setRotation(FrontLip, 0F, 0F, 0F); + BottomLip = new ModelRenderer(this, 5, 37); + BottomLip.addBox(-8F, -4F, 4F, 16, 4, 4); + BottomLip.setRotationPoint(0F, 12F, 0F); + BottomLip.setTextureSize(128, 128); + BottomLip.mirror = true; + setRotation(BottomLip, 0F, 0F, 0F); + RightLip = new ModelRenderer(this, 0, 47); + RightLip.addBox(-8F, -4F, -6F, 2, 4, 10); + RightLip.setRotationPoint(0F, 12F, 0F); + RightLip.setTextureSize(128, 128); + RightLip.mirror = true; + setRotation(RightLip, 0F, 0F, 0F); + LeftLip = new ModelRenderer(this, 25, 47); + LeftLip.addBox(6F, -4F, -6F, 2, 4, 10); + LeftLip.setRotationPoint(0F, 12F, 0F); + LeftLip.setTextureSize(128, 128); + LeftLip.mirror = true; + setRotation(LeftLip, 0F, 0F, 0F); + BLip = new ModelRenderer(this, 9, 32); + BLip.addBox(-1F, -1F, 4F, 2, 2, 2); + BLip.setRotationPoint(0F, 12F, 0F); + BLip.setTextureSize(128, 128); + BLip.mirror = true; + setRotation(BLip, 0.5061455F, 0F, 0F); + Edge = new ModelRenderer(this, 5, 64); + Edge.addBox(0F, 0F, 0F, 1, 12, 1); + Edge.setRotationPoint(7F, 12F, 7F); + Edge.setTextureSize(128, 128); + Edge.mirror = true; + setRotation(Edge, 0F, 0F, 0F); + Edge2 = new ModelRenderer(this, 0, 64); + Edge2.addBox(0F, 0F, 0F, 1, 12, 1); + Edge2.setRotationPoint(-8F, 12F, 7F); + Edge2.setTextureSize(128, 128); + Edge2.mirror = true; + setRotation(Edge2, 0F, 0F, 0F); + Water = new ModelRenderer(this, 0, 0); + Water.addBox(-6F, 0F, -6F, 12, 0, 10); + Water.setRotationPoint(0F, 12F, 0F); + Water.setTextureSize(128, 128); + Water.mirror = true; + setRotation(Water, 0F, 0F, 0F); + } + + public void render(float f5) + { + Base.render(f5); + FrontLip.render(f5); + BottomLip.render(f5); + RightLip.render(f5); + LeftLip.render(f5); + BLip.render(f5); + Edge.render(f5); + Edge2.render(f5); + + } + + public void renderLiquid(float f5,float level) + { + Water.setRotationPoint(0F, 12F - level, 0F); + Water.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/minecraft/liquidmechanics/client/render/BlockRenderHelper.java b/minecraft/liquidmechanics/client/render/BlockRenderHelper.java index 3abd0fdc..814c8278 100644 --- a/minecraft/liquidmechanics/client/render/BlockRenderHelper.java +++ b/minecraft/liquidmechanics/client/render/BlockRenderHelper.java @@ -7,6 +7,7 @@ import liquidmechanics.client.model.ModelLargePipe; import liquidmechanics.client.model.ModelLiquidTank; import liquidmechanics.client.model.ModelPump; import liquidmechanics.client.model.ModelReleaseValve; +import liquidmechanics.client.model.ModelSink; import liquidmechanics.common.LiquidMechanics; import liquidmechanics.common.tileentity.TileEntityReleaseValve; import net.minecraft.block.Block; @@ -30,6 +31,7 @@ public class BlockRenderHelper implements ISimpleBlockRenderingHandler private ModelLargePipe SixPipe = new ModelLargePipe(); private ModelLiquidTank tank = new ModelLiquidTank(); private ModelReleaseValve valve = new ModelReleaseValve(); + private ModelSink sink = new ModelSink(); @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) @@ -46,15 +48,24 @@ public class BlockRenderHelper implements ISimpleBlockRenderingHandler modelPump.renderC3(0.0725F); GL11.glPopMatrix(); } + if (block.blockID == LiquidMechanics.blockSink.blockID) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.0F, (float) .8F, (float) 0.0F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(LiquidMechanics.RESOURCE_PATH + "Sink.png")); + sink.render(0.0565F); + GL11.glPopMatrix(); + } if (block.blockID == LiquidMechanics.blockTank.blockID) { GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.0F, (float) 1.1F, (float) 0.0F); + GL11.glTranslatef((float) 0.0F, (float) 1.0F, (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); GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(RenderTank.getGuageTexture(metadata,4))); - tank.renderMeter(null, 0.0625F); + tank.renderMeter(null, 0.0565F); GL11.glPopMatrix(); } if (block.blockID == LiquidMechanics.blockRod.blockID) @@ -69,30 +80,13 @@ public class BlockRenderHelper implements ISimpleBlockRenderingHandler if (block.blockID == LiquidMechanics.blockGenerator.blockID) { GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.0F, (float) 1.3F, (float) 0.0F); + GL11.glTranslatef((float) 0.0F, (float) 1.0F, (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) - { - - GL11.glPushMatrix(); - - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(RenderPipe.getPipeTexture(meta))); - - GL11.glTranslatef(0.5F, -0.5F, 0.5F); - - SixPipe.renderRight(); - SixPipe.renderLeft(); - SixPipe.renderMiddle(); - - GL11.glPopMatrix(); - } - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { return false; diff --git a/minecraft/liquidmechanics/client/render/RenderSink.java b/minecraft/liquidmechanics/client/render/RenderSink.java new file mode 100644 index 00000000..5e1c693d --- /dev/null +++ b/minecraft/liquidmechanics/client/render/RenderSink.java @@ -0,0 +1,74 @@ +package liquidmechanics.client.render; + +import liquidmechanics.client.model.ModelSink; +import liquidmechanics.common.LiquidMechanics; +import liquidmechanics.common.tileentity.TileEntitySink; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.ForgeHooksClient; +import net.minecraftforge.liquids.LiquidContainerRegistry; +import net.minecraftforge.liquids.LiquidStack; + +import org.lwjgl.opengl.GL11; + +public class RenderSink extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelSink model; + + public RenderSink() + { + model = new ModelSink(); + } + + public void renderWater(LiquidStack stack) + { + if (stack == null || stack.amount <= 1) { return; } + bindTextureByName(LiquidMechanics.RESOURCE_PATH + "blue.png"); + float p = 0; + if(stack.amount > 0)p = 0.5f; + if(stack.amount > 500)p=1.5f; + if(stack.amount > 1000)p=2.5f; + if(stack.amount > 1500)p=3.5f; + + model.renderLiquid(0.0625F, p); + } + + public void renderAModelAt(TileEntitySink te, double d, double d1, double d2, float f) + { + int meta = te.worldObj.getBlockMetadata(te.xCoord, te.yCoord, te.zCoord); + + bindTextureByName(LiquidMechanics.RESOURCE_PATH + "Sink.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + switch (meta) + { + case 3: + GL11.glRotatef(90f, 0f, 1f, 0f); + break; + case 0: + GL11.glRotatef(180f, 0f, 1f, 0f); + break; + case 1: + GL11.glRotatef(270f, 0f, 1f, 0f); + break; + case 2: + GL11.glRotatef(0f, 0f, 1f, 0f); + break; + } + model.render(0.0625F); + renderWater(te.getStack()); + GL11.glPopMatrix(); + + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) + { + this.renderAModelAt((TileEntitySink) tileEntity, var2, var4, var6, var8); + } + +} \ No newline at end of file diff --git a/minecraft/liquidmechanics/common/LiquidMechanics.java b/minecraft/liquidmechanics/common/LiquidMechanics.java index 91d4dccf..a5ed67e0 100644 --- a/minecraft/liquidmechanics/common/LiquidMechanics.java +++ b/minecraft/liquidmechanics/common/LiquidMechanics.java @@ -10,6 +10,7 @@ import liquidmechanics.common.block.BlockPumpMachine; import liquidmechanics.common.block.BlockPipe; import liquidmechanics.common.block.BlockReleaseValve; import liquidmechanics.common.block.BlockRod; +import liquidmechanics.common.block.BlockSink; import liquidmechanics.common.block.BlockTank; import liquidmechanics.common.block.BlockWasteLiquid; import liquidmechanics.common.item.ItemGuage; @@ -24,6 +25,7 @@ import liquidmechanics.common.tileentity.TileEntityPipe; import liquidmechanics.common.tileentity.TileEntityPump; import liquidmechanics.common.tileentity.TileEntityReleaseValve; import liquidmechanics.common.tileentity.TileEntityRod; +import liquidmechanics.common.tileentity.TileEntitySink; import liquidmechanics.common.tileentity.TileEntityTank; import net.minecraft.block.Block; import net.minecraft.item.Item; @@ -60,7 +62,7 @@ import cpw.mods.fml.common.registry.GameRegistry; public class LiquidMechanics extends DummyModContainer { // TODO Change in Version Release - public static final String VERSION = "0.2.5"; + public static final String VERSION = "0.2.6"; // Constants public static final String NAME = "Liquid Mechanics"; @@ -85,6 +87,7 @@ public class LiquidMechanics extends DummyModContainer public static Block blockRod; public static Block blockGenerator; public static Block blockReleaseValve; + public static Block blockSink; public static Block blockWasteLiquid; @@ -115,6 +118,7 @@ public class LiquidMechanics extends DummyModContainer blockReleaseValve = new BlockReleaseValve((this.CONFIGURATION.getBlock("Release Valve", BLOCK_ID_PREFIX + 5).getInt())); blockTank = new BlockTank(this.CONFIGURATION.getBlock("Tank", BLOCK_ID_PREFIX + 6).getInt()); blockWasteLiquid = new BlockWasteLiquid(this.CONFIGURATION.getBlock("WasteLiquid", BLOCK_ID_PREFIX + 7).getInt()); + blockSink = new BlockSink(this.CONFIGURATION.getBlock("Sink", BLOCK_ID_PREFIX + 8).getInt()); // Items itemParts = new ItemParts(this.CONFIGURATION.getItem("Parts", ITEM_ID_PREFIX).getInt()); @@ -135,6 +139,7 @@ public class LiquidMechanics extends DummyModContainer GameRegistry.registerBlock(blockGenerator, "lmGen"); GameRegistry.registerBlock(blockMachine, ItemLiquidMachine.class, "lmMachines"); GameRegistry.registerBlock(blockTank, ItemTank.class, "lmTank"); + GameRegistry.registerBlock(blockSink, "lmSink"); } @Init @@ -148,6 +153,7 @@ public class LiquidMechanics extends DummyModContainer GameRegistry.registerTileEntity(TileEntityReleaseValve.class, "lmeValve"); GameRegistry.registerTileEntity(TileEntityTank.class, "lmTank"); GameRegistry.registerTileEntity(TileEntityGenerator.class, "lmGen"); + GameRegistry.registerTileEntity(TileEntitySink.class,"lmSink"); System.out.println("Fluid Mechanics Loaded: " + TranslationHelper.loadLanguages(LANGUAGE_PATH, LANGUAGES_SUPPORTED) + " Languages."); } @@ -167,7 +173,7 @@ public class LiquidMechanics extends DummyModContainer // pipe gauge GameRegistry.addRecipe(new ItemStack(this.itemGauge, 1, 0), new Object[] { "TVT", " T ", - 'V', new ItemStack(itemParts, 1, 7), + 'V', new ItemStack(itemParts, 1, Parts.Valve.ordinal()), 'T', new ItemStack(itemParts, 1, Parts.Iron.ordinal()) }); // iron tube GameRegistry.addRecipe(new ItemStack(itemParts, 4, Parts.Iron.ordinal()), new Object[] { diff --git a/minecraft/liquidmechanics/common/block/BlockSink.java b/minecraft/liquidmechanics/common/block/BlockSink.java index 916a30bd..40ef58fb 100644 --- a/minecraft/liquidmechanics/common/block/BlockSink.java +++ b/minecraft/liquidmechanics/common/block/BlockSink.java @@ -1,24 +1,154 @@ package liquidmechanics.common.block; +import universalelectricity.prefab.tile.TileEntityAdvanced; +import liquidmechanics.client.render.BlockRenderHelper; +import liquidmechanics.common.MetaGroup; +import liquidmechanics.common.TabLiquidMechanics; +import liquidmechanics.common.tileentity.TileEntitySink; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.EnumArmorMaterial; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.liquids.ILiquidTank; +import net.minecraftforge.liquids.LiquidContainerRegistry; +import net.minecraftforge.liquids.LiquidStack; public class BlockSink extends BlockContainer { - - protected BlockSink(int par1) + public BlockSink(int par1) { super(par1, Material.iron); - // TODO Auto-generated constructor stub + this.setResistance(4f); + this.setHardness(4f); + this.setBlockName("lmSink"); + this.setCreativeTab(TabLiquidMechanics.INSTANCE); } @Override public TileEntity createNewTileEntity(World var1) { - // TODO Auto-generated method stub - return null; + return new TileEntitySink(); } + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float sx, float sy, float sz) + { + ItemStack heldItem = player.inventory.getCurrentItem(); + TileEntity ent = world.getBlockTileEntity(x, y, z); + int meta = world.getBlockMetadata(x, y, z); + int grouping = MetaGroup.getGrouping(meta); + + if (heldItem == null || !(ent instanceof TileEntitySink)) { return false; } + TileEntitySink sink = (TileEntitySink) ent; + + if (world.isRemote) + { + return true; + } + else + // ItemStack var12 = new ItemStack(Item.potion, 1, 0);heldItem.itemID == + // Item.glassBottle.itemID + { + ILiquidTank tank = sink.getTanks(ForgeDirection.UNKNOWN)[0]; + LiquidStack stack = tank.getLiquid(); + if (grouping == 0 || grouping == 1) + { + if (heldItem.itemID == Item.bucketWater.itemID) + { + LiquidStack filling = LiquidContainerRegistry.getLiquidForFilledItem(heldItem); + if (stack == null || (stack != null && stack.amount < tank.getCapacity())) + { + int f = sink.fill(ForgeDirection.getOrientation(side), filling, true); + if (f > 0) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, new ItemStack(Item.bucketEmpty)); + return true; + } + } + } + else if (heldItem.itemID == Item.bucketEmpty.itemID) + { + LiquidStack drain = tank.drain(LiquidContainerRegistry.BUCKET_VOLUME, false); + if (drain != null && drain.amount >= LiquidContainerRegistry.BUCKET_VOLUME) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, new ItemStack(Item.bucketWater)); + tank.drain(LiquidContainerRegistry.BUCKET_VOLUME, true); + return true; + } + + } + else if (heldItem.itemID == Item.glassBottle.itemID) + { + LiquidStack drain = tank.drain(LiquidContainerRegistry.BUCKET_VOLUME / 4, false); + if (drain != null && drain.amount >= LiquidContainerRegistry.BUCKET_VOLUME / 4) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, new ItemStack(Item.potion, 1, 0)); + tank.drain(LiquidContainerRegistry.BUCKET_VOLUME / 4, true); + return true; + } + } + else if (heldItem.getItem() instanceof ItemArmor && ((ItemArmor) heldItem.getItem()).getArmorMaterial() == EnumArmorMaterial.CLOTH) + { + ItemArmor var13 = (ItemArmor) heldItem.getItem(); + var13.removeColor(heldItem); + return true; + } + } + } + return false; + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving par5EntityLiving) + { + 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); + + world.setBlockMetadata(x, y, z, angle + MetaGroup.getGroupStartMeta(MetaGroup.getGrouping(meta))); + if (ent instanceof TileEntityAdvanced) + { + ((TileEntityAdvanced) world.getBlockTileEntity(x, y, z)).initiate(); + } + + world.notifyBlocksOfNeighborChange(x, y, z, this.blockID); + } + + @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, 0); + + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public int getRenderType() + { + return BlockRenderHelper.renderID; + } } diff --git a/minecraft/liquidmechanics/common/tileentity/TileEntityPipe.java b/minecraft/liquidmechanics/common/tileentity/TileEntityPipe.java index 2e331942..909baed5 100644 --- a/minecraft/liquidmechanics/common/tileentity/TileEntityPipe.java +++ b/minecraft/liquidmechanics/common/tileentity/TileEntityPipe.java @@ -274,9 +274,8 @@ public class TileEntityPipe extends TileEntity implements ITankContainer, IReadO { connectedBlocks[i] = null; } - - if (this.color != ColorCode.NONE && ent instanceof TileEntityTank && ((TileEntityTank) ent).getColor() != ColorCode.NONE && color != ((TileEntityTank) ent).getColor() - ) + //TODO switch side catch for IPressure + if (this.color != ColorCode.NONE && ent instanceof TileEntityTank && ((TileEntityTank) ent).getColor() != ColorCode.NONE && color != ((TileEntityTank) ent).getColor()) { connectedBlocks[i] = null; } diff --git a/minecraft/liquidmechanics/common/tileentity/TileEntitySink.java b/minecraft/liquidmechanics/common/tileentity/TileEntitySink.java new file mode 100644 index 00000000..fa57cc9d --- /dev/null +++ b/minecraft/liquidmechanics/common/tileentity/TileEntitySink.java @@ -0,0 +1,173 @@ +package liquidmechanics.common.tileentity; + +import javax.swing.colorchooser.ColorSelectionModel; + +import liquidmechanics.api.IColorCoded; +import liquidmechanics.api.IReadOut; +import liquidmechanics.api.IPressure; +import liquidmechanics.api.helpers.LiquidData; +import liquidmechanics.api.helpers.LiquidHandler; +import liquidmechanics.api.helpers.ColorCode; +import liquidmechanics.api.helpers.connectionHelper; +import liquidmechanics.common.LiquidMechanics; +import liquidmechanics.common.handlers.UpdateConverter; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.INetworkManager; +import net.minecraft.network.packet.Packet; +import net.minecraft.network.packet.Packet250CustomPayload; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.liquids.ILiquidTank; +import net.minecraftforge.liquids.ITankContainer; +import net.minecraftforge.liquids.LiquidContainerRegistry; +import net.minecraftforge.liquids.LiquidStack; +import net.minecraftforge.liquids.LiquidTank; +import universalelectricity.core.vector.Vector3; +import universalelectricity.prefab.network.IPacketReceiver; +import universalelectricity.prefab.network.PacketManager; + +import com.google.common.io.ByteArrayDataInput; + +public class TileEntitySink extends TileEntity implements IPacketReceiver, ITankContainer, IColorCoded +{ + public TileEntity[] cc = { null, null, null, null, null, null }; + + private ColorCode color = ColorCode.BLUE; + + public static final int LMax = 2; + private int count = 100; + private LiquidTank tank = new LiquidTank(LiquidContainerRegistry.BUCKET_VOLUME * LMax); + + @Override + public void updateEntity() + { + if (count++ >= 100) + { + triggerUpdate(); + } + } + + /** + */ + public void triggerUpdate() + { + if (!worldObj.isRemote) + { + LiquidStack stack = new LiquidStack(0, 0, 0); + if (this.tank.getLiquid() != null) + { + stack = this.tank.getLiquid(); + } + Packet packet = PacketManager.getPacket(LiquidMechanics.CHANNEL, this, new Object[] { stack.itemID, stack.amount, stack.itemMeta }); + PacketManager.sendPacketToClients(packet, worldObj, new Vector3(this), 20); + + } + } + + public LiquidStack getStack() + { + return tank.getLiquid(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + LiquidStack liquid = new LiquidStack(0, 0, 0); + liquid.readFromNBT(nbt.getCompoundTag("stored")); + tank.setLiquid(liquid); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + if (tank.getLiquid() != null) + { + nbt.setTag("stored", tank.getLiquid().writeToNBT(new NBTTagCompound())); + } + } + + @Override + public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput data) + { + try + { + this.tank.setLiquid(new LiquidStack(data.readInt(), data.readInt(), data.readInt())); + } + catch (Exception e) + { + e.printStackTrace(); + System.out.print("Fail reading data for Storage tank \n"); + } + + } + + @Override + public int fill(ForgeDirection from, LiquidStack resource, boolean doFill) + { + if (resource == null || (!LiquidHandler.isEqual(resource, color.getLiquidData().getStack()))) { return 0; } + return this.fill(0, resource, doFill); + } + + @Override + public int fill(int tankIndex, LiquidStack resource, boolean doFill) + { + if (resource == null || tankIndex != 0) { return 0; } + if (doFill) + { + triggerUpdate(); + } + return this.tank.fill(resource, doFill); + } + + @Override + public LiquidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) + { + return this.drain(0, maxDrain, doDrain); + } + + @Override + public LiquidStack drain(int tankIndex, int maxDrain, boolean doDrain) + { + if (tankIndex != 0 || this.tank.getLiquid() == null) { return null; } + LiquidStack stack = this.tank.getLiquid(); + if (maxDrain < this.tank.getLiquid().amount) + { + stack = LiquidHandler.getStack(stack, maxDrain); + } + if (doDrain) + { + triggerUpdate(); + this.tank.drain(maxDrain, doDrain); + + } + return stack; + } + + @Override + public ILiquidTank[] getTanks(ForgeDirection direction) + { + return new ILiquidTank[] { tank }; + } + + @Override + public ILiquidTank getTank(ForgeDirection direction, LiquidStack type) + { + return null; + } + + @Override + public void setColor(Object obj) + { + // this.color = ColorCode.get(cc); + } + + @Override + public ColorCode getColor() + { + return color; + } +} diff --git a/minecraft/liquidmechanics/resource/Sink.png b/minecraft/liquidmechanics/resource/Sink.png new file mode 100644 index 0000000000000000000000000000000000000000..0d973dfdb0212521d6ecdac774e00b465f2c7d5f GIT binary patch literal 1102 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 literal 0 HcmV?d00001