package openblocks.client.renderer.item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; import openblocks.client.renderer.block.BlockTankRenderer; import openblocks.client.renderer.tileentity.TileEntityTankRenderer; import openblocks.client.renderer.tileentity.tank.ITankRenderFluidData; import openblocks.common.tileentity.TileEntityTank; import openmods.utils.Diagonal; import org.lwjgl.opengl.GL11; public class ItemRendererTank implements IItemRenderer { private FluidTank tank = new FluidTank(TileEntityTank.getTankCapacity()); @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) { GL11.glPushMatrix(); if (type == ItemRenderType.ENTITY) GL11.glTranslated(-0.5, -0.5, -0.5); else if (type == ItemRenderType.INVENTORY) GL11.glTranslated(0, -0.1, 0); BlockTankRenderer.EMPTY_FRAME.render(); NBTTagCompound tag = item.getTagCompound(); if (tag != null && tag.hasKey("tank")) { final FluidStack stack = readFluid(tag); if (stack != null) { final float height = (float)tank.getFluidAmount() / tank.getCapacity(); TileEntityTankRenderer.renderFluid(new ITankRenderFluidData() { @Override public boolean shouldRenderFluidWall(ForgeDirection side) { return true; } @Override public boolean hasFluid() { return true; } @Override public FluidStack getFluid() { return stack; } @Override public float getCornerFluidLevel(Diagonal diagonal, float time) { return height; } @Override public float getCenterFluidLevel(float time) { return height; } }, 0); } } GL11.glPopMatrix(); } private FluidStack readFluid(NBTTagCompound tag) { synchronized (tank) { tank.setFluid(null); tank.readFromNBT(tag.getCompoundTag("tank")); return tank.getFluid(); } } }