diff --git a/src/main/java/com/brohoof/minelittlepony/renderer/layer/LayerHeldPonyItem.java b/src/main/java/com/brohoof/minelittlepony/renderer/layer/LayerHeldPonyItem.java index d50e80d2..288590b3 100644 --- a/src/main/java/com/brohoof/minelittlepony/renderer/layer/LayerHeldPonyItem.java +++ b/src/main/java/com/brohoof/minelittlepony/renderer/layer/LayerHeldPonyItem.java @@ -2,6 +2,9 @@ package com.brohoof.minelittlepony.renderer.layer; import static net.minecraft.client.renderer.GlStateManager.*; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL14; + import com.brohoof.minelittlepony.model.PMAPI; import com.brohoof.minelittlepony.model.PlayerModel; import com.brohoof.minelittlepony.model.pony.pm_newPonyAdv; @@ -10,13 +13,19 @@ import com.brohoof.minelittlepony.renderer.IRenderPony; import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraft.client.renderer.block.model.ItemTransformVec3f; +import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RendererLivingEntity; import net.minecraft.client.renderer.entity.layers.LayerHeldItem; import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.client.resources.model.IBakedModel; +import net.minecraft.client.resources.model.ModelResourceLocation; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; public class LayerHeldPonyItem implements LayerRenderer { @@ -117,7 +126,29 @@ public class LayerHeldPonyItem implements LayerRenderer { } public void renderItemGlow(EntityLivingBase entity, ItemStack drop, int glowColor) { - // TODO reimplement + pushMatrix(); + GL11.glPushAttrib(GL11.GL_CURRENT_BIT | GL11.GL_ENABLE_BIT | GL11.GL_COLOR_BUFFER_BIT); + // GlStateManager.disableLighting(); + float red = (glowColor >> 16 & 255) / 255.0F; + float green = (glowColor >> 8 & 255) / 255.0F; + float blue = (glowColor & 255) / 255.0F; + float alpha = 0.2F; + enableBlend(); + blendFunc(32769, 1); + GL14.glBlendColor(red, green, blue, alpha); + color(red, green, blue, alpha); + IBakedModel model = getItemModel(Minecraft.getMinecraft().getRenderItem(), entity, drop); + applyTransform(model.getItemCameraTransforms().thirdPerson); + if (!model.isGui3d()) { + scale(1.5, 1.5, 1.5); + } else { + translate(0,-0.01,0); + scale(.9, .9, .9); + } + Minecraft.getMinecraft().getRenderItem().renderItem(drop, model); + GL11.glPopAttrib(); + disableBlend(); + popMatrix(); } @Override @@ -125,4 +156,47 @@ public class LayerHeldPonyItem implements LayerRenderer { return false; } + // Copied from RenderItem.renderItemModelForEntity + private IBakedModel getItemModel(RenderItem renderer, Entity entityToRenderFor, ItemStack stack) { + IBakedModel ibakedmodel = renderer.getItemModelMesher().getItemModel(stack); + + if (entityToRenderFor instanceof EntityPlayer) { + EntityPlayer entityplayer = (EntityPlayer) entityToRenderFor; + Item item = stack.getItem(); + ModelResourceLocation modelresourcelocation = null; + + if (item == Items.fishing_rod && entityplayer.fishEntity != null) { + modelresourcelocation = new ModelResourceLocation("fishing_rod_cast", "inventory"); + } else if (item == Items.bow && entityplayer.getItemInUse() != null) { + int i = stack.getMaxItemUseDuration() - entityplayer.getItemInUseCount(); + + if (i >= 18) { + modelresourcelocation = new ModelResourceLocation("bow_pulling_2", "inventory"); + } else if (i > 13) { + modelresourcelocation = new ModelResourceLocation("bow_pulling_1", "inventory"); + } else if (i > 0) { + modelresourcelocation = new ModelResourceLocation("bow_pulling_0", "inventory"); + } + } + + if (modelresourcelocation != null) { + ibakedmodel = renderer.getItemModelMesher().getModelManager().getModel(modelresourcelocation); + } + } + return ibakedmodel; + } + + // Adapted from RenderItem + private void applyTransform(ItemTransformVec3f transform) { + translate(transform.translation.x + RenderItem.debugItemOffsetX, + transform.translation.y + RenderItem.debugItemOffsetY, + transform.translation.z + RenderItem.debugItemOffsetZ); + translate(0f, .063f, -0.18); + + rotate(transform.rotation.y + RenderItem.debugItemRotationOffsetY, 0.0F, 1.0F, 0.0F); + rotate(transform.rotation.x + RenderItem.debugItemRotationOffsetX, 1.0F, 0.0F, 0.0F); + rotate(transform.rotation.z + RenderItem.debugItemRotationOffsetZ, 0.0F, 0.0F, 1.0F); + + + } }