package openmods.gui.component; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.util.IIcon; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import openmods.api.IValueReceiver; import openmods.gui.misc.BoxRenderer; public class GuiComponentTankLevel extends GuiComponentResizable { private static final BoxRenderer BOX_RENDERER = new BoxRenderer(0, 0); private static final int BORDER_COLOR = 0xc6c6c6; private FluidStack fluidStack; private int capacity; public GuiComponentTankLevel(int x, int y, int width, int height, int capacity) { super(x, y, width, height); this.capacity = capacity; } @Override public void render(Minecraft minecraft, int offsetX, int offsetY, int mouseX, int mouseY) { bindComponentsSheet(); BOX_RENDERER.render(this, x + offsetX, y + offsetY, width, height, BORDER_COLOR); if (fluidStack == null) return; final Fluid fluid = fluidStack.getFluid(); if (fluid == null) return; minecraft.renderEngine.bindTexture(TextureMap.locationBlocksTexture); Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.setColorOpaque_F(1, 1, 1); IIcon icon = fluid.getIcon(); if (icon != null) { double percentFull = Math.max(0, Math.min(1, (double)fluidStack.amount / (double)capacity)); double fluidHeight = (height - 3) * percentFull; final int posX = offsetX + x; final int posY = offsetY + y; final float minU = icon.getMinU(); final float maxU = icon.getMaxU(); final float minV = icon.getMinV(); final float maxV = icon.getMaxV(); tessellator.addVertexWithUV(posX + 3, posY + height - 3, this.zLevel, minU, maxV); tessellator.addVertexWithUV(posX + width - 3, posY + height - 3, this.zLevel, maxU, maxV); tessellator.addVertexWithUV(posX + width - 3, posY + (height - fluidHeight), this.zLevel, maxU, minV); tessellator.addVertexWithUV(posX + 3, posY + (height - fluidHeight), this.zLevel, minU, minV); tessellator.draw(); } } @Override public void renderOverlay(Minecraft minecraft, int offsetX, int offsetY, int mouseX, int mouseY) {} public void setFluid(FluidStack value) { fluidStack = value; } public void setCapacity(int capacity) { this.capacity = capacity; } public IValueReceiver<FluidStack> fluidReceiver() { return new IValueReceiver<FluidStack>() { @Override public void setValue(FluidStack value) { fluidStack = value; } }; } public IValueReceiver<Integer> capacityReceiver() { return new IValueReceiver<Integer>() { @Override public void setValue(Integer value) { capacity = value; } }; } }