001 package net.minecraftforge.client;
002
003 import net.minecraft.entity.item.EntityItem;
004 import net.minecraft.entity.EntityLiving;
005 import net.minecraft.item.ItemStack;
006 import net.minecraft.client.renderer.RenderBlocks;
007
008 public 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 }