Java tutorial
/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.client.render; import mods.railcraft.client.render.RenderFakeBlock.RenderInfo; import mods.railcraft.common.blocks.machine.gamma.EnumMachineGamma; import net.minecraft.tileentity.TileEntity; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import org.lwjgl.opengl.GL11; import mods.railcraft.common.blocks.machine.gamma.TileLiquidLoader; import mods.railcraft.common.blocks.machine.gamma.TileLoaderLiquidBase; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.util.IIcon; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidTank; /** * * @author CovertJaguar <http://www.railcraft.info> */ public class RenderLiquidLoader extends TileEntitySpecialRenderer { private static final float PIPE_OFFSET = 5 * RenderTools.PIXEL; private static final RenderInfo backDrop = new RenderInfo(); private static final RenderInfo pipe = new RenderInfo(); public RenderLiquidLoader() { backDrop.minX = 0.011f; backDrop.minY = 0.01f; backDrop.minZ = 0.011f; backDrop.maxX = 0.989f; backDrop.maxY = 0.99f; backDrop.maxZ = 0.989f; pipe.texture = EnumMachineGamma.pipeTexture; pipe.minX = PIPE_OFFSET; pipe.minZ = PIPE_OFFSET; pipe.maxX = 1 - PIPE_OFFSET; pipe.maxY = RenderTools.PIXEL; pipe.maxZ = 1 - PIPE_OFFSET; backDrop.texture = new IIcon[1]; } @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float f) { TileLoaderLiquidBase base = (TileLoaderLiquidBase) tile; GL11.glPushMatrix(); GL11.glPushAttrib(GL11.GL_ENABLE_BIT); GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_BLEND); // GL11.glEnable(GL11.GL_CULL_FACE); backDrop.texture[0] = base.getMachineType().getTexture(7); bindTexture(TextureMap.locationBlocksTexture); RenderFakeBlock.renderBlock(backDrop, base.getWorld(), x, y, z, false, true); GL11.glTranslatef((float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F); GL11.glScalef(1f, 0.6f, 1f); IFluidTank tank = base.getTankManager().get(0); FluidStack fluidStack = tank.getFluid(); if (fluidStack != null && fluidStack.amount > 0) { int[] displayLists = FluidRenderer.getLiquidDisplayLists(fluidStack); if (displayLists != null) { GL11.glPushMatrix(); if (FluidRenderer.getFluidTexture(fluidStack, false) != null) { float cap = tank.getCapacity(); float level = (float) Math.min(fluidStack.amount, cap) / cap; bindTexture(FluidRenderer.getFluidSheet(fluidStack)); FluidRenderer.setColorForFluidStack(fluidStack); GL11.glCallList(displayLists[(int) (level * (float) (FluidRenderer.DISPLAY_STAGES - 1))]); } GL11.glPopMatrix(); } } // GL11.glScalef(0.994f, 1.05f, 0.994f); GL11.glPopAttrib(); GL11.glPopMatrix(); if (tile.getClass() == TileLiquidLoader.class) { TileLiquidLoader loader = (TileLiquidLoader) tile; pipe.minY = RenderTools.PIXEL - loader.getPipeLenght(); RenderFakeBlock.renderBlock(pipe, loader.getWorld(), x, y, z, false, true); } } }