    001package net.minecraftforge.client;
    002
    003import net.minecraft.entity.item.EntityItem;
    004import net.minecraft.entity.EntityLiving;
    005import net.minecraft.item.ItemStack;
    006import net.minecraft.client.renderer.RenderBlocks;
    007
    008public interface IItemRenderer
    009{
    010    public enum ItemRenderType
    011    {
    012        /**
    013         * Called to render an in-world item, e.g. one that has been thrown or
    014         * dropped. The appropriate OpenGL transformations and scaling have already
    015         * been applied, so Tessellator location (0,0,0) is the center of the
    016         * EntityItem.
    017         *
    018         * Data parameters:
    019         * RenderBlocks render - The RenderBlocks instance
    020         * EntityItem entity - The in-world item to be rendered
    021         */
    022        ENTITY,
    023
    024        /**
    025         * Called to render an item currently held in-hand by a living entity. If
    026         * rendering as a 3D block, the item will be rotated to a 45-degree angle.
    027         * To render a 2D texture with some thickness (like default items), see
    028         * net.minecraft.src.ItemRenderer. In either case, rendering should be done
    029         * in local coordinates from (0,0,0)-(1,1,1).
    030         *
    031         * Data parameters:
    032         * RenderBlocks render - The RenderBlocks instance
    033         * EntityLiving entity - The entity holding this item
    034         */
    035        EQUIPPED,
    036
    037        /**
    038         * Called to render an item in a GUI inventory slot. If rendering as a 3D
    039         * block, the appropriate OpenGL translations and scaling have already been
    040         * applied, and the rendering should be done in local coordinates from
    041         * (0,0,0)-(1,1,1). If rendering as a 2D texture, the rendering should be in
    042         * GUI pixel coordinates from (0, 0, 0)-(16, 16, 0).
    043         *
    044         * Data parameters:
    045         * RenderBlocks render - The RenderBlocks instance
    046         */
    047        INVENTORY,
    048
    049        /**
    050         * The render type used for when a ItemMap is rendered in first person,
    051         * All appropriate rotations have been applied, and the player's hands,
    052         * and the map BG are already rendered.
    053         *
    054         * Data Parameters:
    055         * EntityPlayer player - The player holding the map
    056         * RenderEngine engine - The RenderEngine instance
    057         * MapData mapData - The map data
    058         */
    059        FIRST_PERSON_MAP
    060    }
    061
    062    public enum ItemRendererHelper
    063    {
    064        /**
    065         * Determines if a rotation effect should be used when rendering an
    066         * EntityItem, like most default blocks do.
    067         */
    068        ENTITY_ROTATION,
    069
    070        /**
    071         * Determines if an up-and-down bobbing effect should be used when
    072         * rendering an EntityItem, like most default items do.
    073         */
    074        ENTITY_BOBBING,
    075
    076        /**
    077         * Determines if the currently equipped item should be rendered as a 3D
    078         * block or as a 2D texture.
    079         */
    080        EQUIPPED_BLOCK,
    081
    082        /**
    083         * Determines if the item should equate to a block that has
    084         * RenderBlocks.renderItemIn3d return true
    085         */
    086        BLOCK_3D,
    087
    088        /**
    089         * Determines if the item should be rendered in GUI inventory slots as a 3D
    090         * block or as a 2D texture.
    091         */
    092        INVENTORY_BLOCK
    093    }
    094
    095    /**
    096     * Checks if this renderer should handle a specific item's render type
    097     * @param item The item we are trying to render
    098     * @param type A render type to check if this renderer handles
    099     * @return true if this renderer should handle the given render type,
    100     * otherwise false
    101     */
    102    public boolean handleRenderType(ItemStack item, ItemRenderType type);
    103
    104    /**
    105     * Checks if certain helper functionality should be executed for this renderer.
    106     * See ItemRendererHelper for more info
    107     *
    108     * @param type The render type
    109     * @param item The ItemStack being rendered
    110     * @param helper The type of helper functionality to be ran
    111     * @return True to run the helper functionality, false to not.
    112     */
    113    public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper);
    114
    115    /**
    116     * Called to do the actual rendering, see ItemRenderType for details on when specific
    117     * types are run, and what extra data is passed into the data parameter.
    118     *
    119     * @param type The render type
    120     * @param item The ItemStack being rendered
    121     * @param data Extra Type specific data
    122     */
    123    public void renderItem(ItemRenderType type, ItemStack item, Object... data);
    124}