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.carts; import mods.railcraft.common.fluids.tanks.StandardTank; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityMinecart; import net.minecraft.util.IIcon; import org.lwjgl.opengl.GL11; import mods.railcraft.client.render.FluidRenderer; import mods.railcraft.client.render.RenderFakeBlock; import mods.railcraft.client.render.RenderFakeBlock.RenderInfo; import mods.railcraft.common.carts.EntityCartTank; import net.minecraft.util.ResourceLocation; /** * @author CovertJaguar <http://www.railcraft.info> */ public class CartContentRendererTank extends CartContentRenderer { private final RenderInfo fillBlock = new RenderInfo(0.4f, 0.0f, 0.4f, 0.6f, 0.999f, 0.6f); public CartContentRendererTank() { fillBlock.texture = new IIcon[6]; } private void renderTank(RenderCart renderer, EntityMinecart cart, float light, float time, int x, int y, int z) { EntityCartTank cartTank = (EntityCartTank) cart; StandardTank tank = cartTank.getTankManager().get(0); if (tank.renderData.fluid != null && tank.renderData.amount > 0) { int[] displayLists = FluidRenderer.getLiquidDisplayLists(tank.renderData.fluid); if (displayLists != null) { GL11.glPushMatrix(); GL11.glPushAttrib(GL11.GL_ENABLE_BIT); GL11.glEnable(GL11.GL_BLEND); GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); GL11.glTranslatef(0, 0.0625f, 0); float cap = tank.getCapacity(); float level = Math.min(tank.renderData.amount, cap) / cap; renderer.bindTex(FluidRenderer.getFluidSheet(tank.renderData.fluid)); FluidRenderer.setColorForTank(tank); GL11.glCallList(displayLists[(int) (level * (float) (FluidRenderer.DISPLAY_STAGES - 1))]); if (cartTank.isFilling()) { ResourceLocation texSheet = FluidRenderer.setupFlowingLiquidTexture(tank.renderData.fluid, fillBlock.texture); if (texSheet != null) { renderer.bindTex(texSheet); RenderFakeBlock.renderBlockForEntity(fillBlock, cart.worldObj, x, y, z, false, true); } } GL11.glPopAttrib(); GL11.glPopMatrix(); } } } private void renderFilterItem(RenderCart renderer, EntityCartTank cart, float light, float time, int x, int y, int z) { if (!cart.hasFilter()) return; GL11.glPushMatrix(); GL11.glPushAttrib(GL11.GL_ENABLE_BIT); GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_BLEND); // GL11.glEnable(GL11.GL_CULL_FACE); EntityItem item = new EntityItem(null, 0.0D, 0.0D, 0.0D, cart.getFilterItem().copy()); item.getEntityItem().stackSize = 1; item.hoverStart = 0.0F; float scale = 1.2F; GL11.glPushMatrix(); GL11.glRotatef(90.F, 0.0F, 1.0F, 0.0F); GL11.glTranslatef(0.0F, -0.6F, 0.68F); GL11.glScalef(scale, scale, scale); renderItem(item); GL11.glPopMatrix(); GL11.glRotatef(-90.F, 0.0F, 1.0F, 0.0F); GL11.glTranslatef(0.0F, -0.6F, 0.68F); GL11.glScalef(scale, scale, scale); renderItem(item); GL11.glPopAttrib(); GL11.glPopMatrix(); } private void renderItem(EntityItem item) { RenderItem.renderInFrame = true; RenderManager.instance.renderEntityWithPosYaw(item, 0.0D, 0.0D, 0.0D, 0.0F, 0.0F); if (!RenderManager.instance.options.fancyGraphics) { GL11.glRotatef(180, 0, 1, 0); RenderManager.instance.renderEntityWithPosYaw(item, 0.0D, 0.0D, 0.0D, 0.0F, 0.0F); GL11.glRotatef(-180, 0, 1, 0); } RenderItem.renderInFrame = false; } @Override public void render(RenderCart renderer, EntityMinecart cart, float light, float time) { super.render(renderer, cart, light, time); GL11.glPushMatrix(); GL11.glPushAttrib(GL11.GL_ENABLE_BIT); GL11.glTranslatef(0.0F, 0.3125F, 0.0F); GL11.glRotatef(90F, 0.0F, 1.0F, 0.0F); GL11.glDisable(GL11.GL_LIGHTING); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); int x = (int) (Math.floor(cart.posX)); int y = (int) (Math.floor(cart.posY)); int z = (int) (Math.floor(cart.posZ)); renderTank(renderer, cart, light, time, x, y, z); EntityCartTank cartTank = (EntityCartTank) cart; renderFilterItem(renderer, cartTank, light, time, x, y, z); GL11.glPopAttrib(); GL11.glPopMatrix(); } }