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 net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; import net.minecraft.util.MathHelper; import org.lwjgl.opengl.GL11; import mods.railcraft.api.carts.bore.IBoreHead; import mods.railcraft.common.carts.EntityTunnelBore; import mods.railcraft.common.core.RailcraftConstants; import mods.railcraft.client.render.models.bore.ModelTunnelBore; import net.minecraft.util.ResourceLocation; public class RenderTunnelBore extends Render { private static final ResourceLocation TEXTURE = new ResourceLocation( RailcraftConstants.CART_TEXTURE_FOLDER + "tunnel_bore.png"); public RenderTunnelBore() { shadowSize = 0.5F; modelTunnelBore = new ModelTunnelBore(); } public void render(EntityTunnelBore bore, double d, double d1, double d2, float yaw, float f1) { // System.out.println("Render Yaw = " + f); GL11.glPushMatrix(); long var10 = (long) bore.getEntityId() * 493286711L; var10 = var10 * var10 * 4392167121L + var10 * 98761L; float tx = (((float) (var10 >> 16 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; float ty = (((float) (var10 >> 20 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; float tz = (((float) (var10 >> 24 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; GL11.glTranslatef(tx, ty, tz); GL11.glTranslatef((float) d, (float) d1, (float) d2); switch (bore.getFacing()) { case NORTH: yaw = 90; break; case EAST: yaw = 0; break; case SOUTH: yaw = 270; break; case WEST: yaw = 180; break; } GL11.glRotatef(yaw, 0.0F, 1.0F, 0.0F); float f3 = (float) bore.getRollingAmplitude() - f1; float f4 = (float) bore.getDamage() - f1; if (f4 < 0.0F) { f4 = 0.0F; } if (f3 > 0.0F) { float angle = (MathHelper.sin(f3) * f3 * f4) / 10F; angle = Math.min(angle, 0.8f); angle = Math.copySign(angle, bore.getRollingDirection()); GL11.glRotatef(angle, 1.0F, 0.0F, 0.0F); } float light = bore.getBrightness(f1); light = light + ((1.0f - light) * 0.4f); int j = 0xffffff; float c1 = (float) (j >> 16 & 0xff) / 255F; float c2 = (float) (j >> 8 & 0xff) / 255F; float c3 = (float) (j & 0xff) / 255F; GL11.glColor4f(c1 * light, c2 * light, c3 * light, 1.0F); IBoreHead head = bore.getBoreHead(); if (head != null) { bindTexture(head.getBoreTexture()); modelTunnelBore.setRenderBoreHead(true); } else { bindTexture(TEXTURE); modelTunnelBore.setRenderBoreHead(false); } GL11.glScalef(-1F, -1F, 1.0F); modelTunnelBore.setBoreHeadRotation(bore.getBoreRotationAngle()); modelTunnelBore.setBoreActive(bore.isMinecartPowered()); modelTunnelBore.render(0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); GL11.glPopMatrix(); } @Override public void doRender(Entity entity, double d, double d1, double d2, float f, float f1) { render((EntityTunnelBore) entity, d, d1, d2, f, f1); } protected ModelTunnelBore modelTunnelBore; @Override protected ResourceLocation getEntityTexture(Entity entity) { return TEXTURE; } }