mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2025-02-13 16:24:23 +01:00
Split the held item renderer up into a magical and non-magical variant since they not neccessarily neet to be together
This commit is contained in:
parent
b00b2745e1
commit
235494cd6c
3 changed files with 124 additions and 80 deletions
|
@ -3,7 +3,7 @@ package com.minelittlepony.render;
|
||||||
import com.minelittlepony.MineLittlePony;
|
import com.minelittlepony.MineLittlePony;
|
||||||
import com.minelittlepony.ducks.IRenderPony;
|
import com.minelittlepony.ducks.IRenderPony;
|
||||||
import com.minelittlepony.model.ModelWrapper;
|
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.LayerPonyArmor;
|
||||||
import com.minelittlepony.render.layer.LayerPonyCustomHead;
|
import com.minelittlepony.render.layer.LayerPonyCustomHead;
|
||||||
import com.minelittlepony.render.layer.LayerPonyElytra;
|
import com.minelittlepony.render.layer.LayerPonyElytra;
|
||||||
|
@ -29,7 +29,7 @@ public abstract class RenderPonyMob<T extends EntityLiving> extends RenderLiving
|
||||||
|
|
||||||
protected void addLayers() {
|
protected void addLayers() {
|
||||||
addLayer(new LayerPonyArmor<>(this));
|
addLayer(new LayerPonyArmor<>(this));
|
||||||
addLayer(new LayerHeldPonyItem<>(this));
|
addLayer(new LayerHeldPonyItemMagical<>(this));
|
||||||
// addLayer(new LayerArrow(this));
|
// addLayer(new LayerArrow(this));
|
||||||
addLayer(new LayerPonyCustomHead<>(this));
|
addLayer(new LayerPonyCustomHead<>(this));
|
||||||
addLayer(new LayerPonyElytra<>(this));
|
addLayer(new LayerPonyElytra<>(this));
|
||||||
|
|
|
@ -1,29 +1,17 @@
|
||||||
package com.minelittlepony.render.layer;
|
package com.minelittlepony.render.layer;
|
||||||
|
|
||||||
import com.minelittlepony.ducks.IRenderItem;
|
|
||||||
import com.minelittlepony.ducks.IRenderPony;
|
|
||||||
import com.minelittlepony.model.AbstractPonyModel;
|
import com.minelittlepony.model.AbstractPonyModel;
|
||||||
import com.minelittlepony.model.BodyPart;
|
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.Minecraft;
|
||||||
import net.minecraft.client.model.ModelBase;
|
import net.minecraft.client.model.ModelBase;
|
||||||
import net.minecraft.client.model.ModelBiped;
|
import net.minecraft.client.model.ModelBiped;
|
||||||
import net.minecraft.client.model.ModelRenderer;
|
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
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.block.model.ItemCameraTransforms.TransformType;
|
||||||
import net.minecraft.client.renderer.entity.RenderLivingBase;
|
import net.minecraft.client.renderer.entity.RenderLivingBase;
|
||||||
import net.minecraft.client.renderer.entity.layers.LayerHeldItem;
|
import net.minecraft.client.renderer.entity.layers.LayerHeldItem;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
|
||||||
import net.minecraft.util.EnumHandSide;
|
import net.minecraft.util.EnumHandSide;
|
||||||
import org.lwjgl.opengl.GL14;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import static net.minecraft.client.renderer.GlStateManager.*;
|
import static net.minecraft.client.renderer.GlStateManager.*;
|
||||||
|
|
||||||
public class LayerHeldPonyItem<T extends EntityLivingBase> extends AbstractPonyLayer<T> {
|
public class LayerHeldPonyItem<T extends EntityLivingBase> extends AbstractPonyLayer<T> {
|
||||||
|
@ -65,7 +53,7 @@ public class LayerHeldPonyItem<T extends EntityLivingBase> extends AbstractPonyL
|
||||||
private void renderHeldItem(T entity, ItemStack drop, TransformType transform, EnumHandSide hand) {
|
private void renderHeldItem(T entity, ItemStack drop, TransformType transform, EnumHandSide hand) {
|
||||||
if (!drop.isEmpty()) {
|
if (!drop.isEmpty()) {
|
||||||
GlStateManager.pushMatrix();
|
GlStateManager.pushMatrix();
|
||||||
postRenderArm(hand);
|
renderArm(hand);
|
||||||
|
|
||||||
if (entity.isSneaking()) {
|
if (entity.isSneaking()) {
|
||||||
GlStateManager.translate(0, 0.2F, 0);
|
GlStateManager.translate(0, 0.2F, 0);
|
||||||
|
@ -74,82 +62,27 @@ public class LayerHeldPonyItem<T extends EntityLivingBase> extends AbstractPonyL
|
||||||
GlStateManager.rotate(-90, 1, 0, 0);
|
GlStateManager.rotate(-90, 1, 0, 0);
|
||||||
GlStateManager.rotate(180, 0, 1, 0);
|
GlStateManager.rotate(180, 0, 1, 0);
|
||||||
|
|
||||||
boolean isUnicorn = isUnicorn(getRenderer().getMainModel());
|
preItemRender(entity, drop, transform, hand);
|
||||||
boolean isLeft = hand == EnumHandSide.LEFT;
|
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();
|
GlStateManager.popMatrix();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isUnicorn(ModelBase model) {
|
protected void preItemRender(T entity, ItemStack drop, TransformType transform, EnumHandSide hand) {
|
||||||
return model instanceof AbstractPonyModel && ((AbstractPonyModel) model).metadata.hasMagic();
|
GlStateManager.translate(0.0425F, 0.125F, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void postItemRender(T entity, ItemStack drop, TransformType transform, EnumHandSide hand) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renders the main arm
|
* Renders the main arm
|
||||||
*/
|
*/
|
||||||
protected void postRenderArm(EnumHandSide side) {
|
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 {
|
|
||||||
((ModelBiped) getRenderer().getMainModel()).postRenderArm(0.0625F, side);
|
((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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldCombineTextures() {
|
public boolean shouldCombineTextures() {
|
||||||
|
|
|
@ -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<T extends EntityLivingBase> extends LayerHeldPonyItem<T> {
|
||||||
|
|
||||||
|
public LayerHeldPonyItemMagical(RenderLivingBase<T> 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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue