    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    }