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