001 /** 002 * This software is provided under the terms of the Minecraft Forge Public 003 * License v1.0. 004 */ 005 006 package net.minecraftforge.client; 007 008 import org.lwjgl.opengl.Display; 009 010 import net.minecraft.src.Block; 011 import net.minecraft.src.Entity; 012 import net.minecraft.src.Item; 013 import net.minecraft.src.ItemStack; 014 import net.minecraft.src.ModLoader; 015 import net.minecraft.src.RenderBlocks; 016 import net.minecraft.src.World; 017 import net.minecraftforge.client.IItemRenderer.ItemRenderType; 018 import net.minecraftforge.common.MinecraftForge; 019 020 public class MinecraftForgeClient 021 { 022 /** Register a new render context handler. A render context is a block 023 * of rendering performed with similar OpenGL modes, for example, 024 * texture name. 025 * @param texture The name of the texture for this render context. 026 * @param subid The subid of this render context. 0 is the default pass 027 * for normal rendering, higher subids render later. All subids of 0 028 * will render before all subids of 1, etc. 029 * @param handler The handler to register. 030 */ 031 public static void registerRenderContextHandler(String texture, int subid, IRenderContextHandler handler) 032 { 033 ForgeHooksClient.registerRenderContextHandler(texture, subid, handler); 034 } 035 036 /** 037 * Preload a texture. Textures must be preloaded before the first 038 * use, or they will cause visual anomalies. 039 */ 040 public static void preloadTexture(String texture) 041 { 042 ModLoader.getMinecraftInstance().renderEngine.getTexture(texture); 043 } 044 045 /** Render a block. Render a block which may have a custom texture. 046 */ 047 public static void renderBlock(RenderBlocks render, Block block, int x, int y, int z) 048 { 049 ForgeHooksClient.beforeBlockRender(block, render); 050 render.renderBlockByRenderType(block, x, y, z); 051 ForgeHooksClient.afterBlockRender(block, render); 052 } 053 054 /** 055 * Get the current render pass. 056 */ 057 public static int getRenderPass() 058 { 059 return ForgeHooksClient.renderPass; 060 } 061 062 private static IItemRenderer[] customItemRenderers = new IItemRenderer[Item.itemsList.length]; 063 064 /** 065 * Register a custom renderer for a specific item. This can be used to 066 * render the item in-world as an EntityItem, when the item is equipped, or 067 * when the item is in an inventory slot. 068 * @param itemID The item ID (shifted index) to handle rendering. 069 * @param renderer The IItemRenderer interface that handles rendering for 070 * this item. 071 */ 072 public static void registerItemRenderer(int itemID, IItemRenderer renderer) 073 { 074 customItemRenderers[itemID] = renderer; 075 } 076 077 public static IItemRenderer getItemRenderer(ItemStack item, ItemRenderType type) 078 { 079 IItemRenderer renderer = customItemRenderers[item.itemID]; 080 if (renderer != null && renderer.handleRenderType(item, type)) 081 { 082 return customItemRenderers[item.itemID]; 083 } 084 return null; 085 } 086 }