From 4e5011f7fe9a44e5627f241beadfce416a769f34 Mon Sep 17 00:00:00 2001 From: Bernhard Bonigl Date: Sun, 14 Sep 2014 20:04:07 +0200 Subject: [PATCH] Seared Tank/Glass/Window now render their liquids in inventory! yay! --- .../smeltery/SmelteryProxyClient.java | 7 +++ .../smeltery/model/TankItemRenderer.java | 47 +++++++++++++++++++ .../tconstruct/smeltery/model/TankRender.java | 3 +- 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/main/java/tconstruct/smeltery/model/TankItemRenderer.java diff --git a/src/main/java/tconstruct/smeltery/SmelteryProxyClient.java b/src/main/java/tconstruct/smeltery/SmelteryProxyClient.java index 7d2e32066aa..66fe9fd5c50 100644 --- a/src/main/java/tconstruct/smeltery/SmelteryProxyClient.java +++ b/src/main/java/tconstruct/smeltery/SmelteryProxyClient.java @@ -5,8 +5,11 @@ import mantle.lib.client.MantleClientRegistry; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.*; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fluids.RenderBlockFluid; import tconstruct.armor.TinkerArmor; @@ -43,6 +46,10 @@ void registerRenderer () RenderingRegistry.registerBlockHandler(new RenderBlockFluid()); RenderingRegistry.registerBlockHandler(new BlockRenderCastingChannel()); + IItemRenderer tankItemRenderer = new TankItemRenderer(); + MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(TinkerSmeltery.lavaTank), tankItemRenderer); + MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(TinkerSmeltery.lavaTankNether), tankItemRenderer); + if (!PHConstruct.newSmeltery) { RenderingRegistry.registerBlockHandler(new SmelteryRender()); diff --git a/src/main/java/tconstruct/smeltery/model/TankItemRenderer.java b/src/main/java/tconstruct/smeltery/model/TankItemRenderer.java new file mode 100644 index 00000000000..e46b3393fdc --- /dev/null +++ b/src/main/java/tconstruct/smeltery/model/TankItemRenderer.java @@ -0,0 +1,47 @@ +package tconstruct.smeltery.model; + +import cpw.mods.fml.client.registry.RenderingRegistry; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.item.ItemStack; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.fluids.FluidStack; +import org.lwjgl.opengl.GL11; +import tconstruct.util.ItemHelper; + +public class TankItemRenderer implements IItemRenderer { + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + return type == ItemRenderType.INVENTORY || type == ItemRenderType.ENTITY; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return true; + } + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + // should be impossible to happen, but rather be safe + + RenderBlocks renderblocks = (RenderBlocks) data[0]; + Block block = Block.getBlockFromItem(item.getItem()); + int meta = item.getItemDamage(); + + if(item.hasTagCompound() && item.getTagCompound().hasKey("Fluid")) + { + FluidStack liquid = FluidStack.loadFluidStackFromNBT(item.getTagCompound().getCompoundTag("Fluid")); + if(liquid != null && liquid.getFluid().getBlock() != null) + { + float height = (float)liquid.amount / 4000f - 0.01f; + renderblocks.setRenderBounds(0.01, 0.01, 0.01, 0.99, height, 0.99); + GL11.glEnable(GL11.GL_BLEND); + ItemHelper.renderStandardInvBlock(renderblocks, liquid.getFluid().getBlock(), 0); + } + } + + renderblocks.setRenderBounds(0, 0, 0, 1, 1, 1); + //ItemHelper.renderStandardInvBlock(renderblocks, block, meta); + RenderingRegistry.instance().renderInventoryBlock(renderblocks, block, meta, TankRender.tankModelID); + } +} diff --git a/src/main/java/tconstruct/smeltery/model/TankRender.java b/src/main/java/tconstruct/smeltery/model/TankRender.java index 8fa562a4d32..b73e7ea7194 100644 --- a/src/main/java/tconstruct/smeltery/model/TankRender.java +++ b/src/main/java/tconstruct/smeltery/model/TankRender.java @@ -22,6 +22,7 @@ public void renderInventoryBlock (Block block, int metadata, int modelID, Render if (modelID == tankModelID) { ItemHelper.renderStandardInvBlock(renderer, block, metadata); + // the thingie on top of lava tanks if (metadata == 0) { renderer.setRenderBounds(0.1875, 0, 0.1875, 0.8125, 0.125, 0.8125); @@ -46,7 +47,7 @@ public boolean renderWorldBlock (IBlockAccess world, int x, int y, int z, Block Fluid fluid = liquid.getFluid(); BlockSkinRenderHelper.renderLiquidBlock(fluid.getStillIcon(), fluid.getStillIcon(), x, y, z, renderer, world, true); - renderer.setRenderBounds(00, 0.001, 0.001, 0.999, logic.getFluidAmountScaled(), 0.999); + renderer.setRenderBounds(0, 0.001, 0.001, 0.999, logic.getFluidAmountScaled(), 0.999); } } //Block