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 }