diff --git a/src/main/java/com/minelittlepony/render/RenderPonyMob.java b/src/main/java/com/minelittlepony/render/RenderPonyMob.java index 41762b0e..33870add 100644 --- a/src/main/java/com/minelittlepony/render/RenderPonyMob.java +++ b/src/main/java/com/minelittlepony/render/RenderPonyMob.java @@ -3,7 +3,7 @@ package com.minelittlepony.render; import com.minelittlepony.MineLittlePony; import com.minelittlepony.ducks.IRenderPony; import com.minelittlepony.model.ModelWrapper; -import com.minelittlepony.render.layer.LayerHeldPonyItem; +import com.minelittlepony.render.layer.LayerHeldPonyItemMagical; import com.minelittlepony.render.layer.LayerPonyArmor; import com.minelittlepony.render.layer.LayerPonyCustomHead; import com.minelittlepony.render.layer.LayerPonyElytra; @@ -29,7 +29,7 @@ public abstract class RenderPonyMob extends RenderLiving protected void addLayers() { addLayer(new LayerPonyArmor<>(this)); - addLayer(new LayerHeldPonyItem<>(this)); + addLayer(new LayerHeldPonyItemMagical<>(this)); // addLayer(new LayerArrow(this)); addLayer(new LayerPonyCustomHead<>(this)); addLayer(new LayerPonyElytra<>(this)); diff --git a/src/main/java/com/minelittlepony/render/layer/LayerHeldPonyItem.java b/src/main/java/com/minelittlepony/render/layer/LayerHeldPonyItem.java index a6488281..a1ebb217 100644 --- a/src/main/java/com/minelittlepony/render/layer/LayerHeldPonyItem.java +++ b/src/main/java/com/minelittlepony/render/layer/LayerHeldPonyItem.java @@ -1,29 +1,17 @@ package com.minelittlepony.render.layer; -import com.minelittlepony.ducks.IRenderItem; -import com.minelittlepony.ducks.IRenderPony; import com.minelittlepony.model.AbstractPonyModel; import com.minelittlepony.model.BodyPart; -import com.minelittlepony.model.ponies.ModelPlayerPony; -import com.minelittlepony.pony.data.IPonyData; - import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelBiped; -import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderItem; import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; import net.minecraft.client.renderer.entity.RenderLivingBase; import net.minecraft.client.renderer.entity.layers.LayerHeldItem; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumHandSide; -import org.lwjgl.opengl.GL14; - -import javax.annotation.Nullable; - import static net.minecraft.client.renderer.GlStateManager.*; public class LayerHeldPonyItem extends AbstractPonyLayer { @@ -65,7 +53,7 @@ public class LayerHeldPonyItem extends AbstractPonyL private void renderHeldItem(T entity, ItemStack drop, TransformType transform, EnumHandSide hand) { if (!drop.isEmpty()) { GlStateManager.pushMatrix(); - postRenderArm(hand); + renderArm(hand); if (entity.isSneaking()) { GlStateManager.translate(0, 0.2F, 0); @@ -74,81 +62,26 @@ public class LayerHeldPonyItem extends AbstractPonyL GlStateManager.rotate(-90, 1, 0, 0); GlStateManager.rotate(180, 0, 1, 0); - boolean isUnicorn = isUnicorn(getRenderer().getMainModel()); - boolean isLeft = hand == EnumHandSide.LEFT; + preItemRender(entity, drop, transform, hand); + Minecraft.getMinecraft().getItemRenderer().renderItemSide(entity, drop, transform, hand == EnumHandSide.LEFT); + postItemRender(entity, drop, transform, hand); - if (isUnicorn) { - GlStateManager.translate(isLeft ? -0.6F : 0.1F, 1, -0.5F); - } else { - GlStateManager.translate(0.0425F, 0.125F, -1); - } - - Minecraft.getMinecraft().getItemRenderer().renderItemSide(entity, drop, transform, isLeft); - - if (isUnicorn) { - IPonyData metadata = ((AbstractPonyModel) getRenderer().getMainModel()).metadata; - renderItemGlow(entity, drop, transform, hand, metadata.getGlowColor()); - } GlStateManager.popMatrix(); } } - private static boolean isUnicorn(ModelBase model) { - return model instanceof AbstractPonyModel && ((AbstractPonyModel) model).metadata.hasMagic(); + protected void preItemRender(T entity, ItemStack drop, TransformType transform, EnumHandSide hand) { + GlStateManager.translate(0.0425F, 0.125F, -1); + } + + protected void postItemRender(T entity, ItemStack drop, TransformType transform, EnumHandSide hand) { } /** * Renders the main arm */ - protected void postRenderArm(EnumHandSide side) { - AbstractPonyModel thePony = ((IRenderPony) getRenderer()).getPlayerModel().getModel(); - if (thePony.metadata.hasMagic()) { - ModelPlayerPony playerModel = (ModelPlayerPony) thePony; - ModelRenderer unicornarm = side == EnumHandSide.LEFT ? playerModel.unicornArmLeft : playerModel.unicornArmRight; - unicornarm.postRender(0.0625F); - } else { - ((ModelBiped) getRenderer().getMainModel()).postRenderArm(0.0625F, side); - } - } - - public void renderItemGlow(T entity, ItemStack drop, TransformType transform, EnumHandSide hand, int glowColor) { - - // enchantments mess up the rendering - ItemStack drop2 = drop.copy(); - if (drop2.hasEffect()) { - removeEnch(drop2.getTagCompound()); - } - float red = (glowColor >> 16 & 255) / 255.0F; - float green = (glowColor >> 8 & 255) / 255.0F; - float blue = (glowColor & 255) / 255.0F; - float alpha = 0.2F; - - pushMatrix(); - disableLighting(); - - GL14.glBlendColor(red, green, blue, alpha); - - RenderItem renderItem = Minecraft.getMinecraft().getRenderItem(); - ((IRenderItem) renderItem).useTransparency(true); - - scale(1.1, 1.1, 1.1); - - translate(0, .01, .01); - renderItem.renderItem(drop, entity, transform, hand == EnumHandSide.LEFT); - translate(.01, -.01, -.02); - renderItem.renderItem(drop, entity, transform, hand == EnumHandSide.LEFT); - - ((IRenderItem) renderItem).useTransparency(false); - enableLighting(); - popMatrix(); - - // I hate rendering - } - - private void removeEnch(@Nullable NBTTagCompound tag) { - if (tag != null) { - tag.removeTag("ench"); - } + protected void renderArm(EnumHandSide side) { + ((ModelBiped) getRenderer().getMainModel()).postRenderArm(0.0625F, side); } @Override diff --git a/src/main/java/com/minelittlepony/render/layer/LayerHeldPonyItemMagical.java b/src/main/java/com/minelittlepony/render/layer/LayerHeldPonyItemMagical.java new file mode 100644 index 00000000..94be2ca8 --- /dev/null +++ b/src/main/java/com/minelittlepony/render/layer/LayerHeldPonyItemMagical.java @@ -0,0 +1,111 @@ +package com.minelittlepony.render.layer; + +import static net.minecraft.client.renderer.GlStateManager.disableLighting; +import static net.minecraft.client.renderer.GlStateManager.enableLighting; +import static net.minecraft.client.renderer.GlStateManager.popMatrix; +import static net.minecraft.client.renderer.GlStateManager.pushMatrix; +import static net.minecraft.client.renderer.GlStateManager.scale; +import static net.minecraft.client.renderer.GlStateManager.translate; + +import javax.annotation.Nullable; + +import org.lwjgl.opengl.GL14; + +import com.minelittlepony.ducks.IRenderItem; +import com.minelittlepony.ducks.IRenderPony; +import com.minelittlepony.model.AbstractPonyModel; +import com.minelittlepony.model.ponies.ModelPlayerPony; +import com.minelittlepony.pony.data.IPonyData; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumHandSide; + +public class LayerHeldPonyItemMagical extends LayerHeldPonyItem { + + public LayerHeldPonyItemMagical(RenderLivingBase livingPony) { + super(livingPony); + } + + private boolean isUnicorn() { + ModelBase model = getRenderer().getMainModel(); + return model instanceof AbstractPonyModel && ((AbstractPonyModel) model).metadata.hasMagic(); + } + + protected void preItemRender(T entity, ItemStack drop, TransformType transform, EnumHandSide hand) { + if (isUnicorn()) { + GlStateManager.translate(hand == EnumHandSide.LEFT ? -0.6F : 0.1F, 1, -0.5F); + } else { + super.preItemRender(entity, drop, transform, hand); + } + } + + protected void postItemRender(T entity, ItemStack drop, TransformType transform, EnumHandSide hand) { + if (isUnicorn()) { + IPonyData metadata = ((AbstractPonyModel) getRenderer().getMainModel()).metadata; + renderItemGlow(entity, drop, transform, hand, metadata.getGlowColor()); + } + } + + /** + * Renders the main arm + */ + protected void renderArm(EnumHandSide side) { + AbstractPonyModel thePony = ((IRenderPony) getRenderer()).getPlayerModel().getModel(); + if (thePony.metadata.hasMagic()) { + ModelPlayerPony playerModel = (ModelPlayerPony) thePony; + ModelRenderer unicornarm = side == EnumHandSide.LEFT ? playerModel.unicornArmLeft : playerModel.unicornArmRight; + unicornarm.postRender(0.0625F); + } else { + super.renderArm(side); + } + } + + public void renderItemGlow(T entity, ItemStack drop, TransformType transform, EnumHandSide hand, int glowColor) { + + // enchantments mess up the rendering + ItemStack drop2 = drop.copy(); + if (drop2.hasEffect()) { + removeEnch(drop2.getTagCompound()); + } + float red = (glowColor >> 16 & 255) / 255.0F; + float green = (glowColor >> 8 & 255) / 255.0F; + float blue = (glowColor & 255) / 255.0F; + float alpha = 0.2F; + + pushMatrix(); + disableLighting(); + + GL14.glBlendColor(red, green, blue, alpha); + + RenderItem renderItem = Minecraft.getMinecraft().getRenderItem(); + ((IRenderItem) renderItem).useTransparency(true); + + scale(1.1, 1.1, 1.1); + + translate(0, .01, .01); + renderItem.renderItem(drop, entity, transform, hand == EnumHandSide.LEFT); + translate(.01, -.01, -.02); + renderItem.renderItem(drop, entity, transform, hand == EnumHandSide.LEFT); + + ((IRenderItem) renderItem).useTransparency(false); + enableLighting(); + popMatrix(); + + // I hate rendering + } + + private void removeEnch(@Nullable NBTTagCompound tag) { + if (tag != null) { + tag.removeTag("ench"); + } + } +}