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.api.carts.locomotive.IRenderer; import mods.railcraft.api.carts.locomotive.LocomotiveModelRenderer; import mods.railcraft.api.carts.locomotive.LocomotiveRenderType; import mods.railcraft.common.carts.EntityLocomotive; import mods.railcraft.common.carts.ItemLocomotive; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.IItemRenderer; import org.lwjgl.opengl.GL11; /** * * @author CovertJaguar <http://www.railcraft.info/> */ public class RenderItemLocomotive implements IItemRenderer, IRenderer { private final LocomotiveRenderType renderType; private final EntityLocomotive entity; public RenderItemLocomotive(LocomotiveRenderType renderType, EntityLocomotive entity) { this.renderType = renderType; this.entity = entity; } @Override public boolean handleRenderType(ItemStack stack, ItemRenderType type) { switch (type) { case INVENTORY: String rendererTag = ItemLocomotive.getModel(stack); LocomotiveModelRenderer renderer = renderType.getRenderer(rendererTag); if (renderer == null || !renderer.renderItemIn3D()) return false; case ENTITY: case EQUIPPED: case EQUIPPED_FIRST_PERSON: return true; default: return false; } } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack stack, ItemRendererHelper helper) { switch (helper) { case ENTITY_ROTATION: case ENTITY_BOBBING: case INVENTORY_BLOCK: return true; default: return false; } } @Override public void renderItem(ItemRenderType type, ItemStack stack, Object... data) { GL11.glPushMatrix(); switch (type) { case EQUIPPED_FIRST_PERSON: GL11.glTranslatef(0.5F, 0.4F, 0f); GL11.glRotatef(20.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(-10.0F, 1.0F, 0.0F, 0.0F); render(stack, 0.6F); break; case EQUIPPED: GL11.glTranslatef(0.5F, 0.5F, 0f); GL11.glRotatef(-35.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(40.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(-45.0F, 1.0F, 0.0F, 0.0F); render(stack, 0.6F); break; case ENTITY: case INVENTORY: GL11.glTranslatef(0F, -0.1F, 0f); GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); render(stack, 0.8F); break; } GL11.glPopMatrix(); } @Override public void bindTex(ResourceLocation texture) { Minecraft.getMinecraft().renderEngine.bindTexture(texture); } private void render(ItemStack stack, float scale) { GL11.glPushAttrib(GL11.GL_ENABLE_BIT); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glScalef(scale, scale, scale); entity.rotationYaw = 0; entity.rotationPitch = 0; entity.setModel(ItemLocomotive.getModel(stack)); entity.setPrimaryColor(ItemLocomotive.getPrimaryColor(stack).ordinal()); entity.setSecondaryColor(ItemLocomotive.getSecondaryColor(stack).ordinal()); LocomotiveRenderer.INSTANCE.render(this, entity, 1.0F, 1.0F); GL11.glPopAttrib(); } }