ForgePatch/patches/minecraft/net/minecraft/client/renderer/ItemRenderer.java.patch

125 lines
5.9 KiB
Diff

--- ../src_base/minecraft/net/minecraft/client/renderer/ItemRenderer.java
+++ ../src_work/minecraft/net/minecraft/client/renderer/ItemRenderer.java
@@ -17,6 +17,8 @@
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.EnumAction;
import net.minecraft.item.Item;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemMap;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Icon;
import net.minecraft.util.MathHelper;
@@ -24,6 +26,13 @@
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
+import net.minecraftforge.client.ForgeHooksClient;
+import net.minecraftforge.client.IItemRenderer;
+import net.minecraftforge.client.IItemRenderer.ItemRenderType;
+import net.minecraftforge.client.MinecraftForgeClient;
+import static net.minecraftforge.client.IItemRenderer.ItemRenderType.*;
+import static net.minecraftforge.client.IItemRenderer.ItemRendererHelper.*;
+
@SideOnly(Side.CLIENT)
public class ItemRenderer
{
@@ -54,15 +63,32 @@
this.mapItemRenderer = new MapItemRenderer(par1Minecraft.gameSettings, par1Minecraft.func_110434_K());
}
+ public void renderItem(EntityLivingBase par1EntityLivingBase, ItemStack par2ItemStack, int par3)
+ {
+ this.renderItem(par1EntityLivingBase, par2ItemStack, par3, ItemRenderType.EQUIPPED);
+ }
+
/**
* Renders the item stack for being in an entity's hand Args: itemStack
*/
- public void renderItem(EntityLivingBase par1EntityLivingBase, ItemStack par2ItemStack, int par3)
+ public void renderItem(EntityLivingBase par1EntityLivingBase, ItemStack par2ItemStack, int par3, ItemRenderType type)
{
GL11.glPushMatrix();
TextureManager texturemanager = this.mc.func_110434_K();
- if (par2ItemStack.getItemSpriteNumber() == 0 && par2ItemStack.itemID < Block.blocksList.length && Block.blocksList[par2ItemStack.itemID] != null && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType()))
+ Block block = null;
+ if (par2ItemStack.getItem() instanceof ItemBlock && par2ItemStack.itemID < Block.blocksList.length)
+ {
+ block = Block.blocksList[par2ItemStack.itemID];
+ }
+
+ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par2ItemStack, type);
+ if (customRenderer != null)
+ {
+ texturemanager.func_110577_a(texturemanager.func_130087_a(par2ItemStack.getItemSpriteNumber()));
+ ForgeHooksClient.renderEquippedItem(type, customRenderer, renderBlocksInstance, par1EntityLivingBase, par2ItemStack);
+ }
+ else if (block != null && par2ItemStack.getItemSpriteNumber() == 0 && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType()))
{
texturemanager.func_110577_a(texturemanager.func_130087_a(0));
this.renderBlocksInstance.renderBlockAsItem(Block.blocksList[par2ItemStack.itemID], par2ItemStack.getItemDamage(), 1.0F);
@@ -266,7 +292,7 @@
Render render;
RenderPlayer renderplayer;
- if (itemstack != null && itemstack.itemID == Item.map.itemID)
+ if (itemstack != null && itemstack.getItem() instanceof ItemMap)
{
GL11.glPushMatrix();
f12 = 0.8F;
@@ -333,11 +359,20 @@
tessellator.addVertexWithUV((double)(128 + b0), (double)(0 - b0), 0.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV((double)(0 - b0), (double)(0 - b0), 0.0D, 0.0D, 0.0D);
tessellator.draw();
- MapData mapdata = Item.map.getMapData(itemstack, this.mc.theWorld);
-
- if (mapdata != null)
- {
- this.mapItemRenderer.renderMap(this.mc.thePlayer, this.mc.func_110434_K(), mapdata);
+
+ IItemRenderer custom = MinecraftForgeClient.getItemRenderer(itemstack, FIRST_PERSON_MAP);
+ MapData mapdata = ((ItemMap)itemstack.getItem()).getMapData(itemstack, this.mc.theWorld);
+
+ if (custom == null)
+ {
+ if (mapdata != null)
+ {
+ this.mapItemRenderer.renderMap(this.mc.thePlayer, this.mc.func_110434_K(), mapdata);
+ }
+ }
+ else
+ {
+ custom.renderItem(FIRST_PERSON_MAP, itemstack, mc.thePlayer, mc.func_110434_K(), mapdata);
}
GL11.glPopMatrix();
@@ -439,17 +474,20 @@
if (itemstack.getItem().requiresMultipleRenderPasses())
{
- this.renderItem(entityclientplayermp, itemstack, 0);
- int i1 = Item.itemsList[itemstack.itemID].getColorFromItemStack(itemstack, 1);
- f11 = (float)(i1 >> 16 & 255) / 255.0F;
- f13 = (float)(i1 >> 8 & 255) / 255.0F;
- f14 = (float)(i1 & 255) / 255.0F;
- GL11.glColor4f(f5 * f11, f5 * f13, f5 * f14, 1.0F);
- this.renderItem(entityclientplayermp, itemstack, 1);
+ this.renderItem(entityclientplayermp, itemstack, 0, ItemRenderType.EQUIPPED_FIRST_PERSON);
+ for (int x = 1; x < itemstack.getItem().getRenderPasses(itemstack.getItemDamage()); x++)
+ {
+ int i1 = Item.itemsList[itemstack.itemID].getColorFromItemStack(itemstack, x);
+ f11 = (float)(i1 >> 16 & 255) / 255.0F;
+ f13 = (float)(i1 >> 8 & 255) / 255.0F;
+ f14 = (float)(i1 & 255) / 255.0F;
+ GL11.glColor4f(f5 * f11, f5 * f13, f5 * f14, 1.0F);
+ this.renderItem(entityclientplayermp, itemstack, x, ItemRenderType.EQUIPPED_FIRST_PERSON);
+ }
}
else
{
- this.renderItem(entityclientplayermp, itemstack, 0);
+ this.renderItem(entityclientplayermp, itemstack, 0, ItemRenderType.EQUIPPED_FIRST_PERSON);
}
GL11.glPopMatrix();