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 }