Rewrote IItemRenderer to be a more generic and expandable version, Breaks previous interfaces, but this should be the last time the interface changes.
Implemented the MapRender hook ChickenBones requested.
This commit is contained in:
parent
e400b2df4e
commit
20e264f9ee
7 changed files with 164 additions and 94 deletions
|
@ -19,6 +19,9 @@ import java.util.*;
|
|||
import net.minecraft.src.*;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
|
||||
import static net.minecraft.src.forge.IItemRenderer.ItemRenderType.*;
|
||||
import static net.minecraft.src.forge.IItemRenderer.ItemRendererHelper.*;
|
||||
|
||||
public class ForgeHooksClient
|
||||
{
|
||||
|
||||
|
@ -261,18 +264,13 @@ public class ForgeHooksClient
|
|||
}
|
||||
}
|
||||
|
||||
public static void renderEntityItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, EntityItem item)
|
||||
{
|
||||
customRenderer.renderEntityItem(renderBlocks, item);
|
||||
}
|
||||
|
||||
public static void renderEquippedItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, EntityLiving entity, ItemStack item)
|
||||
{
|
||||
if (customRenderer.renderEquippedItemAsBlock(item))
|
||||
if (customRenderer.shouldUseRenderHelper(EQUIPPED, item, EQUIPPED_BLOCK))
|
||||
{
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
|
||||
customRenderer.renderEquippedItem(renderBlocks, entity, item);
|
||||
customRenderer.renderItem(EQUIPPED, item, renderBlocks, entity);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
else
|
||||
|
@ -284,14 +282,9 @@ public class ForgeHooksClient
|
|||
GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F);
|
||||
GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F);
|
||||
GL11.glTranslatef(-0.9375F, -0.0625F, 0.0F);
|
||||
customRenderer.renderEquippedItem(renderBlocks, entity, item);
|
||||
customRenderer.renderItem(EQUIPPED, item, renderBlocks, entity);
|
||||
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
}
|
||||
|
||||
public static void renderInventoryItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, ItemStack item)
|
||||
{
|
||||
customRenderer.renderInventoryItem(renderBlocks, item);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,86 @@ import net.minecraft.src.RenderBlocks;
|
|||
|
||||
public interface IItemRenderer
|
||||
{
|
||||
/** Checks if this renderer should handle a specific item's render type
|
||||
public enum ItemRenderType
|
||||
{
|
||||
/**
|
||||
* Called to render an in-world item, e.g. one that has been thrown or
|
||||
* dropped. The appropriate OpenGL transformations and scaling have already
|
||||
* been applied, so Tessellator location (0,0,0) is the center of the
|
||||
* EntityItem.
|
||||
*
|
||||
* Data parameters:
|
||||
* RenderBlocks render - The RenderBlocks instance
|
||||
* EntityItem entity - The in-world item to be rendered
|
||||
*/
|
||||
ENTITY,
|
||||
|
||||
/**
|
||||
* Called to render an item currently held in-hand by a living entity. If
|
||||
* rendering as a 3D block, the item will be rotated to a 45-degree angle.
|
||||
* To render a 2D texture with some thickness (like default items), see
|
||||
* net.minecraft.src.ItemRenderer. In either case, rendering should be done
|
||||
* in local coordinates from (0,0,0)-(1,1,1).
|
||||
*
|
||||
* Data parameters:
|
||||
* RenderBlocks render - The RenderBlocks instance
|
||||
* EntityLiving entity - The entity holding this item
|
||||
*/
|
||||
EQUIPPED,
|
||||
|
||||
/**
|
||||
* Called to render an item in a GUI inventory slot. If rendering as a 3D
|
||||
* block, the appropriate OpenGL translations and scaling have already been
|
||||
* applied, and the rendering should be done in local coordinates from
|
||||
* (0,0,0)-(1,1,1). If rendering as a 2D texture, the rendering should be in
|
||||
* GUI pixel coordinates from (0, 0, 0)-(16, 16, 0).
|
||||
*
|
||||
* Data parameters:
|
||||
* RenderBlocks render - The RenderBlocks instance
|
||||
*/
|
||||
INVENTORY,
|
||||
|
||||
/**
|
||||
* The render type used for when a ItemMap is rendered in first person,
|
||||
* All appropriate rotations have been applied, and the player's hands,
|
||||
* and the map BG are already rendered.
|
||||
*
|
||||
* Data Parameters:
|
||||
* EntityPlayer player - The player holding the map
|
||||
* RenderEngine engine - The RenderEngine instance
|
||||
* MapData mapData - The map data
|
||||
*/
|
||||
FIRST_PERSON_MAP
|
||||
}
|
||||
|
||||
public enum ItemRendererHelper
|
||||
{
|
||||
/**
|
||||
* Determines if a rotation effect should be used when rendering an
|
||||
* EntityItem, like most default blocks do.
|
||||
*/
|
||||
ENTITY_ROTATION,
|
||||
|
||||
/**
|
||||
* Determines if an up-and-down bobbing effect should be used when
|
||||
*/
|
||||
ENTITY_BOBBING,
|
||||
|
||||
/**
|
||||
* Determines if the currently equipped item should be rendered as a 3D
|
||||
* block or as a 2D texture.
|
||||
*/
|
||||
EQUIPPED_BLOCK,
|
||||
|
||||
/**
|
||||
* Determines if the item should be rendered in GUI inventory slots as a 3D
|
||||
* block or as a 2D texture.
|
||||
*/
|
||||
INVENTORY_BLOCK
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if this renderer should handle a specific item's render type
|
||||
* @param item The item we are trying to render
|
||||
* @param type A render type to check if this renderer handles
|
||||
* @return true if this renderer should handle the given render type,
|
||||
|
@ -15,64 +94,24 @@ public interface IItemRenderer
|
|||
*/
|
||||
public boolean handleRenderType(ItemStack item, ItemRenderType type);
|
||||
|
||||
/** Called to render an in-world item, e.g. one that has been thrown or
|
||||
* dropped. The appropriate OpenGL transformations and scaling have already
|
||||
* been applied, so Tessellator location (0,0,0) is the center of the
|
||||
* EntityItem.
|
||||
* @param render The RenderBlocks instance
|
||||
* @param item The in-world item to be rendered
|
||||
/**
|
||||
* Checks if certain helper functionality should be executed for this renderer.
|
||||
* See ItemRendererHelper for more info
|
||||
*
|
||||
* @param type The render type
|
||||
* @param item The ItemStack being rendered
|
||||
* @param helper The type of helper functionality to be ran
|
||||
* @return True to run the helper functionality, false to not.
|
||||
*/
|
||||
public void renderEntityItem(RenderBlocks render, EntityItem item);
|
||||
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper);
|
||||
|
||||
/** Determines if a rotation effect should be used when rendering an
|
||||
* EntityItem, like most default blocks do.
|
||||
* @param item the item we are trying to render
|
||||
* @return true if the EntityItem should rotate, otherwise false
|
||||
/**
|
||||
* Called to do the actual rendering, see ItemRenderType for details on when specific
|
||||
* types are run, and what extra data is passed into the data parameter.
|
||||
*
|
||||
* @param type The render type
|
||||
* @param item The ItemStack being rendered
|
||||
* @param data Extra Type specific data
|
||||
*/
|
||||
public boolean useEntityItemRotationEffect(ItemStack item);
|
||||
|
||||
/** Determines if an up-and-down bobbing effect should be used when
|
||||
* rendering an EntityItem, like all default blocks and items do.
|
||||
* @param item the item we are trying to render
|
||||
* @return true if the EntityItem should bob up and down, otherwise false
|
||||
*/
|
||||
public boolean useEntityItemBobbingEffect(ItemStack item);
|
||||
|
||||
/** Called to render an item currently held in-hand by a living entity. If
|
||||
* rendering as a 3D block, the item will be rotated to a 45-degree angle.
|
||||
* To render a 2D texture with some thickness (like default items), see
|
||||
* net.minecraft.src.ItemRenderer. In either case, rendering should be done
|
||||
* in local coordinates from (0,0,0)-(1,1,1).
|
||||
* @param render The RenderBlocks instance
|
||||
* @param entity The entity holding this item
|
||||
* @param item The equipped item to be rendered
|
||||
*/
|
||||
public void renderEquippedItem(RenderBlocks render, EntityLiving entity, ItemStack item);
|
||||
|
||||
/** Determines if the currently equipped item should be rendered as a 3D
|
||||
* block or as a 2D texture.
|
||||
* @param item the item we are trying to render
|
||||
* @return true if the equipped item should be rendered as a 3D block,
|
||||
* otherwise false
|
||||
*/
|
||||
public boolean renderEquippedItemAsBlock(ItemStack item);
|
||||
|
||||
/** Called to render an item in a GUI inventory slot. If rendering as a 3D
|
||||
* block, the appropriate OpenGL translations and scaling have already been
|
||||
* applied, and the rendering should be done in local coordinates from
|
||||
* (0,0,0)-(1,1,1). If rendering as a 2D texture, the rendering should be in
|
||||
* GUI pixel coordinates from (0, 0, 0)-(16, 16, 0).
|
||||
* @param render The RenderBlocks instance
|
||||
* @param item The item stack to render
|
||||
*/
|
||||
public void renderInventoryItem(RenderBlocks render, ItemStack item);
|
||||
|
||||
/** Determines if the item should be rendered in GUI inventory slots as a 3D
|
||||
* block or as a 2D texture.
|
||||
* @param item the item we are trying to render
|
||||
* @return true if the inventory item should be rendered as a 3D block,
|
||||
* otherwise false
|
||||
*/
|
||||
public boolean renderInventoryItemAsBlock(ItemStack item);
|
||||
|
||||
public void renderItem(ItemRenderType type, ItemStack item, Object... data);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package net.minecraft.src.forge;
|
||||
|
||||
@Deprecated //Now consolidated into IITemRenderer
|
||||
public enum ItemRenderType
|
||||
{
|
||||
ENTITY, // Render type for in-world EntityItems
|
||||
|
|
|
@ -12,6 +12,7 @@ import net.minecraft.src.Item;
|
|||
import net.minecraft.src.ItemStack;
|
||||
import net.minecraft.src.ModLoader;
|
||||
import net.minecraft.src.RenderBlocks;
|
||||
import net.minecraft.src.forge.IItemRenderer.ItemRenderType;
|
||||
|
||||
public class MinecraftForgeClient
|
||||
{
|
||||
|
|
|
@ -603,9 +603,13 @@ public class ForgeHooks
|
|||
}
|
||||
public static ArrayList<IArrowNockHandler> arrowNockHandlers = new ArrayList<IArrowNockHandler>();
|
||||
|
||||
//This number is incremented every Minecraft version, and never reset
|
||||
public static final int majorVersion = 3;
|
||||
//This number is incremented every official release, and reset every Minecraft version
|
||||
public static final int minorVersion = 0;
|
||||
public static final int revisionVersion = 0;
|
||||
//This number is incremented every time a interface changes, and reset every Minecraft version
|
||||
public static final int revisionVersion = 1;
|
||||
//This number is incremented every time Jenkins builds Forge, and never reset. Should always be 0 in the repo code.
|
||||
public static final int buildVersion = 0;
|
||||
static
|
||||
{
|
||||
|
|
|
@ -1,22 +1,23 @@
|
|||
--- ../src_base/minecraft/net/minecraft/src/ItemRenderer.java 0000-00-00 00:00:00.000000000 -0000
|
||||
+++ ../src_work/minecraft/net/minecraft/src/ItemRenderer.java 0000-00-00 00:00:00.000000000 -0000
|
||||
@@ -1,6 +1,11 @@
|
||||
@@ -1,6 +1,12 @@
|
||||
package net.minecraft.src;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
+import net.minecraft.src.forge.ForgeHooksClient;
|
||||
+import net.minecraft.src.forge.IItemRenderer;
|
||||
+import net.minecraft.src.forge.ItemRenderType;
|
||||
+import net.minecraft.src.forge.MinecraftForgeClient;
|
||||
+import static net.minecraft.src.forge.IItemRenderer.ItemRenderType.*;
|
||||
+import static net.minecraft.src.forge.IItemRenderer.ItemRendererHelper.*;
|
||||
+
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
|
||||
@@ -35,21 +40,27 @@
|
||||
@@ -35,21 +41,27 @@
|
||||
public void renderItem(EntityLiving par1EntityLiving, ItemStack par2ItemStack, int par3)
|
||||
{
|
||||
GL11.glPushMatrix();
|
||||
+ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par2ItemStack, ItemRenderType.EQUIPPED);
|
||||
+ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par2ItemStack, EQUIPPED);
|
||||
|
||||
- if (par2ItemStack.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType()))
|
||||
+ if (customRenderer != null)
|
||||
|
@ -44,3 +45,33 @@
|
|||
}
|
||||
|
||||
Tessellator var4 = Tessellator.instance;
|
||||
@@ -246,8 +258,10 @@
|
||||
float var11;
|
||||
float var13;
|
||||
|
||||
- if (var14 != null && var14.itemID == Item.map.shiftedIndex)
|
||||
+ if (var14 != null && var14.getItem() instanceof ItemMap)
|
||||
{
|
||||
+ IItemRenderer custom = MinecraftForgeClient.getItemRenderer(var14, FIRST_PERSON_MAP);
|
||||
+
|
||||
GL11.glPushMatrix();
|
||||
var7 = 0.8F;
|
||||
var17 = var3.getSwingProgress(par1);
|
||||
@@ -313,8 +327,15 @@
|
||||
var26.addVertexWithUV((double)(128 + var27), (double)(0 - var27), 0.0D, 1.0D, 0.0D);
|
||||
var26.addVertexWithUV((double)(0 - var27), (double)(0 - var27), 0.0D, 0.0D, 0.0D);
|
||||
var26.draw();
|
||||
- MapData var23 = Item.map.getMapData(var14, this.mc.theWorld);
|
||||
- this.mapItemRenderer.renderMap(this.mc.thePlayer, this.mc.renderEngine, var23);
|
||||
+ MapData var23 = ((ItemMap)var14.getItem()).getMapData(var14, this.mc.theWorld);
|
||||
+ if (custom == null)
|
||||
+ {
|
||||
+ this.mapItemRenderer.renderMap(this.mc.thePlayer, this.mc.renderEngine, var23);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ custom.renderItem(FIRST_PERSON_MAP, var14, mc.thePlayer, mc.renderEngine, var23);
|
||||
+ }
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
else if (var14 != null)
|
||||
|
|
|
@ -1,32 +1,33 @@
|
|||
--- ../src_base/minecraft/net/minecraft/src/RenderItem.java 0000-00-00 00:00:00.000000000 -0000
|
||||
+++ ../src_work/minecraft/net/minecraft/src/RenderItem.java 0000-00-00 00:00:00.000000000 -0000
|
||||
@@ -1,6 +1,12 @@
|
||||
@@ -1,6 +1,13 @@
|
||||
package net.minecraft.src;
|
||||
|
||||
import java.util.Random;
|
||||
+
|
||||
+import net.minecraft.src.forge.ForgeHooksClient;
|
||||
+import net.minecraft.src.forge.IItemRenderer;
|
||||
+import net.minecraft.src.forge.ItemRenderType;
|
||||
+import net.minecraft.src.forge.MinecraftForgeClient;
|
||||
+import static net.minecraft.src.forge.IItemRenderer.ItemRenderType.*;
|
||||
+import static net.minecraft.src.forge.IItemRenderer.ItemRendererHelper.*;
|
||||
+
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
|
||||
@@ -55,10 +61,58 @@
|
||||
@@ -55,10 +62,58 @@
|
||||
float var18;
|
||||
float var23;
|
||||
|
||||
- if (var10.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var10.itemID].getRenderType()))
|
||||
+ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var10, ItemRenderType.ENTITY);
|
||||
+ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var10, ENTITY);
|
||||
+
|
||||
+ if (customRenderer != null)
|
||||
+ {
|
||||
+ if (customRenderer.useEntityItemRotationEffect(var10))
|
||||
+ if (customRenderer.shouldUseRenderHelper(ENTITY, var10, ENTITY_ROTATION))
|
||||
+ {
|
||||
+ GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F);
|
||||
+ }
|
||||
+ if (!customRenderer.useEntityItemBobbingEffect(var10))
|
||||
+ if (!customRenderer.shouldUseRenderHelper(ENTITY, var10, ENTITY_BOBBING))
|
||||
+ {
|
||||
+ GL11.glTranslatef(0.0F, -var11, 0.0F);
|
||||
+ }
|
||||
|
@ -54,7 +55,7 @@
|
|||
+ ((random.nextFloat() * 2.0F - 1.0F) * 0.2F) / 0.5F,
|
||||
+ ((random.nextFloat() * 2.0F - 1.0F) * 0.2F) / 0.5F);
|
||||
+ }
|
||||
+ ForgeHooksClient.renderEntityItem(customRenderer, renderBlocks, par1EntityItem);
|
||||
+ customRenderer.renderItem(ENTITY, var10, renderBlocks, par1EntityItem);
|
||||
+ GL11.glPopMatrix();
|
||||
+ }
|
||||
+ }
|
||||
|
@ -62,7 +63,7 @@
|
|||
+ {
|
||||
+ this.loadTexture(ForgeHooksClient.getTexture(var10.itemID < 256 ? "/terrain.png" : "/gui/items.png", var10.getItem()));
|
||||
+ GL11.glScalef(0.5F, 0.5F, 0.5F);
|
||||
+ ForgeHooksClient.renderEntityItem(customRenderer, renderBlocks, par1EntityItem);
|
||||
+ customRenderer.renderItem(ENTITY, var10, renderBlocks, par1EntityItem);
|
||||
+ }
|
||||
+
|
||||
+ }
|
||||
|
@ -74,7 +75,7 @@
|
|||
float var21 = 0.25F;
|
||||
var15 = Block.blocksList[var10.itemID].getRenderType();
|
||||
|
||||
@@ -94,7 +148,7 @@
|
||||
@@ -94,7 +149,7 @@
|
||||
if (var10.getItem().func_46058_c())
|
||||
{
|
||||
GL11.glScalef(0.5F, 0.5F, 0.5F);
|
||||
|
@ -83,7 +84,7 @@
|
|||
|
||||
for (var14 = 0; var14 <= 1; ++var14)
|
||||
{
|
||||
@@ -120,11 +174,11 @@
|
||||
@@ -120,11 +175,11 @@
|
||||
|
||||
if (var10.itemID < 256)
|
||||
{
|
||||
|
@ -97,7 +98,7 @@
|
|||
}
|
||||
|
||||
if (this.field_27004_a)
|
||||
@@ -186,10 +240,10 @@
|
||||
@@ -186,10 +241,10 @@
|
||||
float var11;
|
||||
float var12;
|
||||
float var13;
|
||||
|
@ -110,7 +111,7 @@
|
|||
Block var15 = Block.blocksList[par3];
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslatef((float)(par6 - 2), (float)(par7 + 3), -3.0F + this.zLevel);
|
||||
@@ -221,7 +275,7 @@
|
||||
@@ -221,7 +276,7 @@
|
||||
if (Item.itemsList[par3].func_46058_c())
|
||||
{
|
||||
GL11.glDisable(GL11.GL_LIGHTING);
|
||||
|
@ -119,7 +120,7 @@
|
|||
|
||||
for (var8 = 0; var8 <= 1; ++var8)
|
||||
{
|
||||
@@ -247,11 +301,11 @@
|
||||
@@ -247,11 +302,11 @@
|
||||
|
||||
if (par3 < 256)
|
||||
{
|
||||
|
@ -133,16 +134,16 @@
|
|||
}
|
||||
|
||||
var8 = Item.itemsList[par3].getColorFromDamage(par4, 0);
|
||||
@@ -279,7 +333,58 @@
|
||||
@@ -279,7 +334,58 @@
|
||||
{
|
||||
if (par3ItemStack != null)
|
||||
{
|
||||
- this.drawItemIntoGui(par1FontRenderer, par2RenderEngine, par3ItemStack.itemID, par3ItemStack.getItemDamage(), par3ItemStack.getIconIndex(), par4, par5);
|
||||
+ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par3ItemStack, ItemRenderType.INVENTORY);
|
||||
+ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par3ItemStack, INVENTORY);
|
||||
+ if (customRenderer != null)
|
||||
+ {
|
||||
+ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(ForgeHooksClient.getTexture(par3ItemStack.itemID < 256 ? "/terrain.png" : "/gui/items.png", Item.itemsList[par3ItemStack.itemID])));
|
||||
+ if (customRenderer.renderInventoryItemAsBlock(par3ItemStack))
|
||||
+ if (customRenderer.shouldUseRenderHelper(INVENTORY, par3ItemStack, INVENTORY_BLOCK))
|
||||
+ {
|
||||
+ GL11.glPushMatrix();
|
||||
+ GL11.glTranslatef((float)(par4 - 2), (float)(par5 + 3), -3.0F + this.zLevel);
|
||||
|
@ -161,7 +162,7 @@
|
|||
+ }
|
||||
+ GL11.glRotatef(-90F, 0.0F, 1.0F, 0.0F);
|
||||
+ renderBlocks.useInventoryTint = field_27004_a;
|
||||
+ ForgeHooksClient.renderInventoryItem(customRenderer, renderBlocks, par3ItemStack);
|
||||
+ customRenderer.renderItem(INVENTORY, par3ItemStack, renderBlocks);
|
||||
+ renderBlocks.useInventoryTint = true;
|
||||
+ GL11.glPopMatrix();
|
||||
+ }
|
||||
|
@ -181,7 +182,7 @@
|
|||
+ GL11.glColor4f(r, g, b, 1.0F);
|
||||
+ }
|
||||
+
|
||||
+ ForgeHooksClient.renderInventoryItem(customRenderer, renderBlocks, par3ItemStack);
|
||||
+ customRenderer.renderItem(INVENTORY, par3ItemStack, renderBlocks);
|
||||
+ GL11.glPopMatrix();
|
||||
+ GL11.glEnable(GL11.GL_LIGHTING);
|
||||
+ }
|
||||
|
|
Loading…
Reference in a new issue