Some more tidying up

This commit is contained in:
Sollace 2018-04-27 20:37:54 +02:00
parent b410b988a2
commit 2b154d2441
9 changed files with 79 additions and 63 deletions

View file

@ -10,6 +10,7 @@ import net.minecraft.client.model.ModelPlayer;
import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.util.EnumHandSide;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import java.util.Random; import java.util.Random;
@ -80,6 +81,10 @@ public abstract class AbstractPonyModel extends ModelPlayer {
} }
} }
public ArmPose getArmPoseForSide(EnumHandSide side) {
return side == EnumHandSide.RIGHT ? rightArmPose : leftArmPose;
}
/** /**
* Returns true if the default minecraft handling should be used. * Returns true if the default minecraft handling should be used.
*/ */

View file

@ -71,6 +71,6 @@ public class ModelIllagerPony extends ModelPlayerPony {
} }
public ModelRenderer getArm(EnumHandSide side) { public ModelRenderer getArm(EnumHandSide side) {
return metadata.hasMagic() ? side == EnumHandSide.LEFT ? unicornArmLeft : unicornArmRight : getArmForSide(side); return metadata.hasMagic() ? getUnicornArmForSide(side) : getArmForSide(side);
} }
} }

View file

@ -321,13 +321,11 @@ public class ModelPlayerPony extends AbstractPonyModel {
protected void swingItem(Entity entity, float swingProgress) { protected void swingItem(Entity entity, float swingProgress) {
if (swingProgress > -9990.0F && !isSleeping) { if (swingProgress > -9990.0F && !isSleeping) {
EnumHandSide mainSide = getMainHand(entity); EnumHandSide mainSide = getMainHand(entity);
boolean mainRight = mainSide == EnumHandSide.RIGHT;
ArmPose mainPose = mainRight ? rightArmPose : leftArmPose;
if (mainPose == ArmPose.EMPTY) return; if (getArmPoseForSide(mainSide) == ArmPose.EMPTY) return;
if (metadata.hasMagic()) { if (metadata.hasMagic()) {
swingArm(mainRight ? unicornArmRight : unicornArmLeft); swingArm(getUnicornArmForSide(mainSide));
} else { } else {
swingArm(getArmForSide(mainSide)); swingArm(getArmForSide(mainSide));
} }
@ -348,10 +346,12 @@ public class ModelPlayerPony extends AbstractPonyModel {
} }
protected void swingArms(float tick) { protected void swingArms(float tick) {
if (isSleeping) return;
float cos = MathHelper.cos(tick * 0.09F) * 0.05F + 0.05F; float cos = MathHelper.cos(tick * 0.09F) * 0.05F + 0.05F;
float sin = MathHelper.sin(tick * 0.067F) * 0.05F; float sin = MathHelper.sin(tick * 0.067F) * 0.05F;
if (rightArmPose != ArmPose.EMPTY && !isSleeping) { if (rightArmPose != ArmPose.EMPTY) {
if (metadata.hasMagic()) { if (metadata.hasMagic()) {
unicornArmRight.rotateAngleZ += cos; unicornArmRight.rotateAngleZ += cos;
@ -361,7 +361,8 @@ public class ModelPlayerPony extends AbstractPonyModel {
bipedRightArm.rotateAngleX += sin; bipedRightArm.rotateAngleX += sin;
} }
} }
if (leftArmPose != ArmPose.EMPTY && !isSleeping) {
if (leftArmPose != ArmPose.EMPTY) {
if (metadata.hasMagic()) { if (metadata.hasMagic()) {
unicornArmLeft.rotateAngleZ += cos; unicornArmLeft.rotateAngleZ += cos;
unicornArmLeft.rotateAngleX += sin; unicornArmLeft.rotateAngleX += sin;
@ -391,6 +392,10 @@ public class ModelPlayerPony extends AbstractPonyModel {
neck.setRotationPoint(NECK_ROT_X + rotateAngleX, rotationPointY, rotationPointZ); neck.setRotationPoint(NECK_ROT_X + rotateAngleX, rotationPointY, rotationPointZ);
} }
public PonyRenderer getUnicornArmForSide(EnumHandSide side) {
return side == EnumHandSide.LEFT ? unicornArmLeft : unicornArmRight;
}
/** /**
* Aligns legs to a sneaky position. * Aligns legs to a sneaky position.
*/ */
@ -659,11 +664,8 @@ public class ModelPlayerPony extends AbstractPonyModel {
bipedRightLegwear.setRotationPoint(-3, yOffset, 0); bipedRightLegwear.setRotationPoint(-3, yOffset, 0);
} }
unicornArmLeft .addBox(FIRSTP_ARM_CENTRE_X - 2, armY, armZ, 4, 12, 4, stretch + .25f); unicornArmLeft .box(FIRSTP_ARM_CENTRE_X - 2, armY, armZ, 4, 12, 4, stretch + .25f).around(5, yOffset + 2, 0);
unicornArmRight.addBox(FIRSTP_ARM_CENTRE_X - 2, armY, armZ, 4, 12, 4, stretch + .25f); unicornArmRight.box(FIRSTP_ARM_CENTRE_X - 2, armY, armZ, 4, 12, 4, stretch + .25f).around(-5, yOffset + 2, 0);
unicornArmLeft .setRotationPoint(5, yOffset + 2, 0);
unicornArmRight.setRotationPoint(-5, yOffset + 2, 0);
} }
@Override @Override

View file

@ -1,5 +1,7 @@
package com.minelittlepony.render.layer; package com.minelittlepony.render.layer;
import com.minelittlepony.ducks.IRenderPony;
import com.minelittlepony.model.AbstractPonyModel;
import com.minelittlepony.model.ponies.ModelHumanPlayer; import com.minelittlepony.model.ponies.ModelHumanPlayer;
import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelBase;
@ -36,6 +38,19 @@ public abstract class AbstractPonyLayer<T extends EntityLivingBase> implements L
return renderer; return renderer;
} }
public AbstractPonyModel getPlayerModel() {
return ((IRenderPony) getRenderer()).getPlayerModel().getModel();
}
public AbstractPonyModel getPonyModel() {
return getMainModel();
}
@SuppressWarnings("unchecked")
public <M extends ModelBase> M getMainModel() {
return (M)getRenderer().getMainModel();
}
@Override @Override
public boolean shouldCombineTextures() { public boolean shouldCombineTextures() {
return false; return false;

View file

@ -2,7 +2,6 @@ package com.minelittlepony.render.layer;
import com.minelittlepony.ForgeProxy; import com.minelittlepony.ForgeProxy;
import com.minelittlepony.model.BodyPart; import com.minelittlepony.model.BodyPart;
import com.minelittlepony.model.ponies.ModelPlayerPony;
import net.minecraft.client.entity.AbstractClientPlayer; import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
@ -54,7 +53,6 @@ public class LayerEntityOnPonyShoulder extends AbstractPonyLayer<AbstractClientP
GlStateManager.disableRescaleNormal(); GlStateManager.disableRescaleNormal();
} }
@SuppressWarnings("unchecked")
@Nullable @Nullable
private EntityLivingBase renderShoulderEntity(AbstractClientPlayer player, @Nullable EntityLivingBase entity, NBTTagCompound tag, private EntityLivingBase renderShoulderEntity(AbstractClientPlayer player, @Nullable EntityLivingBase entity, NBTTagCompound tag,
float move, float swing, float ticks, float age, float headYaw, float headPitch, float scale, boolean left) { float move, float swing, float ticks, float age, float headYaw, float headPitch, float scale, boolean left) {
@ -69,19 +67,19 @@ public class LayerEntityOnPonyShoulder extends AbstractPonyLayer<AbstractClientP
GlStateManager.pushMatrix(); GlStateManager.pushMatrix();
ModelPlayerPony model = ((ModelPlayerPony) getRenderer().getMainModel()); getPonyModel().transform(BodyPart.BODY);
model.transform(BodyPart.BODY);
// render on the haunches // render on the haunches
GlStateManager.translate(left ? 0.25F : -0.25F, 0.25F, 0.35F); GlStateManager.translate(left ? 0.25F : -0.25F, 0.25F, 0.35F);
GlStateManager.scale(1, -1, -1); GlStateManager.scale(1, -1, -1);
GlStateManager.rotate(5 * (left ? -1 : 1), 0, 0, 1); GlStateManager.rotate(left ? -5 : 5, 0, 0, 1);
Render<Entity> render = renderManager.getEntityRenderObject(entity); Render<Entity> render = renderManager.getEntityRenderObject(entity);
if (render != null) { if (render != null) {
render.doRender(entity, 0, 0, 0, 0, 0); render.doRender(entity, 0, 0, 0, 0, 0);
GlStateManager.popMatrix();
} }
GlStateManager.popMatrix();
return entity; return entity;
} }

View file

@ -22,7 +22,7 @@ public class LayerHeldItemIllager<T extends AbstractIllager> extends LayerHeldPo
@Override @Override
protected void renderArm(EnumHandSide side) { protected void renderArm(EnumHandSide side) {
((ModelIllagerPony) getRenderer().getMainModel()).getArm(side).postRender(0.0625F); ((ModelIllagerPony)getPonyModel()).getArm(side).postRender(0.0625F);
} }
public boolean shouldRender(T entity) { public boolean shouldRender(T entity) {

View file

@ -22,7 +22,7 @@ public class LayerHeldPonyItem<T extends EntityLivingBase> extends AbstractPonyL
@Override @Override
public void doPonyRender(T entity, float move, float swing, float ticks, float age, float headYaw, float headPitch, float scale) { public void doPonyRender(T entity, float move, float swing, float ticks, float age, float headYaw, float headPitch, float scale) {
ModelBase model = getRenderer().getMainModel();
boolean mainRight = entity.getPrimaryHand() == EnumHandSide.RIGHT; boolean mainRight = entity.getPrimaryHand() == EnumHandSide.RIGHT;
ItemStack itemMain = entity.getHeldItemMainhand(); ItemStack itemMain = entity.getHeldItemMainhand();
@ -32,6 +32,8 @@ public class LayerHeldPonyItem<T extends EntityLivingBase> extends AbstractPonyL
ItemStack right = mainRight ? itemMain : itemOff; ItemStack right = mainRight ? itemMain : itemOff;
if (!left.isEmpty() || !right.isEmpty()) { if (!left.isEmpty() || !right.isEmpty()) {
ModelBase model = getRenderer().getMainModel();
pushMatrix(); pushMatrix();
if (model instanceof AbstractPonyModel) { if (model instanceof AbstractPonyModel) {
((AbstractPonyModel) model).transform(BodyPart.LEGS); ((AbstractPonyModel) model).transform(BodyPart.LEGS);

View file

@ -7,26 +7,19 @@ import static net.minecraft.client.renderer.GlStateManager.pushMatrix;
import static net.minecraft.client.renderer.GlStateManager.scale; import static net.minecraft.client.renderer.GlStateManager.scale;
import static net.minecraft.client.renderer.GlStateManager.translate; import static net.minecraft.client.renderer.GlStateManager.translate;
import javax.annotation.Nullable;
import org.lwjgl.opengl.GL14; import org.lwjgl.opengl.GL14;
import com.minelittlepony.ducks.IRenderItem; import com.minelittlepony.ducks.IRenderItem;
import com.minelittlepony.ducks.IRenderPony;
import com.minelittlepony.model.AbstractPonyModel; import com.minelittlepony.model.AbstractPonyModel;
import com.minelittlepony.model.ponies.ModelPlayerPony; 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.ModelRenderer;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderItem; 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.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;
public class LayerHeldPonyItemMagical<T extends EntityLivingBase> extends LayerHeldPonyItem<T> { public class LayerHeldPonyItemMagical<T extends EntityLivingBase> extends LayerHeldPonyItem<T> {
@ -36,7 +29,7 @@ public class LayerHeldPonyItemMagical<T extends EntityLivingBase> extends LayerH
} }
private boolean isUnicorn() { private boolean isUnicorn() {
ModelBase model = getRenderer().getMainModel(); ModelBase model = getMainModel();
return model instanceof AbstractPonyModel && ((AbstractPonyModel) model).metadata.hasMagic(); return model instanceof AbstractPonyModel && ((AbstractPonyModel) model).metadata.hasMagic();
} }
@ -50,8 +43,7 @@ public class LayerHeldPonyItemMagical<T extends EntityLivingBase> extends LayerH
protected void postItemRender(T entity, ItemStack drop, TransformType transform, EnumHandSide hand) { protected void postItemRender(T entity, ItemStack drop, TransformType transform, EnumHandSide hand) {
if (isUnicorn()) { if (isUnicorn()) {
IPonyData metadata = ((AbstractPonyModel) getRenderer().getMainModel()).metadata; renderItemGlow(entity, drop, transform, hand, getPonyModel().metadata.getGlowColor());
renderItemGlow(entity, drop, transform, hand, metadata.getGlowColor());
} }
} }
@ -59,11 +51,8 @@ public class LayerHeldPonyItemMagical<T extends EntityLivingBase> extends LayerH
* Renders the main arm * Renders the main arm
*/ */
protected void renderArm(EnumHandSide side) { protected void renderArm(EnumHandSide side) {
AbstractPonyModel thePony = ((IRenderPony) getRenderer()).getPlayerModel().getModel(); if (isUnicorn()) {
if (thePony.metadata.hasMagic()) { this.<ModelPlayerPony>getMainModel().getUnicornArmForSide(side).postRender(0.0625F);
ModelPlayerPony playerModel = (ModelPlayerPony) thePony;
ModelRenderer unicornarm = side == EnumHandSide.LEFT ? playerModel.unicornArmLeft : playerModel.unicornArmRight;
unicornarm.postRender(0.0625F);
} else { } else {
super.renderArm(side); super.renderArm(side);
} }
@ -72,10 +61,8 @@ public class LayerHeldPonyItemMagical<T extends EntityLivingBase> extends LayerH
public void renderItemGlow(T entity, ItemStack drop, TransformType transform, EnumHandSide hand, int glowColor) { public void renderItemGlow(T entity, ItemStack drop, TransformType transform, EnumHandSide hand, int glowColor) {
// enchantments mess up the rendering // enchantments mess up the rendering
ItemStack drop2 = drop.copy(); drop = stackWithoutEnchantment(drop);
if (drop2.hasEffect()) {
removeEnch(drop2.getTagCompound());
}
float red = (glowColor >> 16 & 255) / 255.0F; float red = (glowColor >> 16 & 255) / 255.0F;
float green = (glowColor >> 8 & 255) / 255.0F; float green = (glowColor >> 8 & 255) / 255.0F;
float blue = (glowColor & 255) / 255.0F; float blue = (glowColor & 255) / 255.0F;
@ -91,9 +78,9 @@ public class LayerHeldPonyItemMagical<T extends EntityLivingBase> extends LayerH
scale(1.1, 1.1, 1.1); scale(1.1, 1.1, 1.1);
translate(0, .01, .01); translate(0, 0.01F, 0.01F);
renderItem.renderItem(drop, entity, transform, hand == EnumHandSide.LEFT); renderItem.renderItem(drop, entity, transform, hand == EnumHandSide.LEFT);
translate(.01, -.01, -.02); translate(0.01F, -0.01F, -0.02F);
renderItem.renderItem(drop, entity, transform, hand == EnumHandSide.LEFT); renderItem.renderItem(drop, entity, transform, hand == EnumHandSide.LEFT);
((IRenderItem) renderItem).useTransparency(false); ((IRenderItem) renderItem).useTransparency(false);
@ -103,9 +90,11 @@ public class LayerHeldPonyItemMagical<T extends EntityLivingBase> extends LayerH
// I hate rendering // I hate rendering
} }
private void removeEnch(@Nullable NBTTagCompound tag) { private ItemStack stackWithoutEnchantment(ItemStack original) {
if (tag != null) { ItemStack copy = original.copy();
tag.removeTag("ench"); if (copy.isItemEnchanted()) {
copy.getTagCompound().removeTag("ench");
} }
return copy;
} }
} }

View file

@ -1,7 +1,5 @@
package com.minelittlepony.render.layer; package com.minelittlepony.render.layer;
import com.minelittlepony.ducks.IRenderPony;
import com.minelittlepony.model.AbstractPonyModel;
import com.minelittlepony.model.BodyPart; import com.minelittlepony.model.BodyPart;
import com.minelittlepony.model.components.PonyElytra; import com.minelittlepony.model.components.PonyElytra;
@ -30,31 +28,16 @@ public class LayerPonyElytra<T extends EntityLivingBase> extends AbstractPonyLay
@Override @Override
public void doPonyRender(@Nonnull T entity, float move, float swing, float ticks, float age, float yaw, float head, float scale) { public void doPonyRender(@Nonnull T entity, float move, float swing, float ticks, float age, float yaw, float head, float scale) {
AbstractPonyModel model = ((IRenderPony) getRenderer()).getPlayerModel().getModel();
ItemStack itemstack = entity.getItemStackFromSlot(EntityEquipmentSlot.CHEST); ItemStack itemstack = entity.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
if (itemstack.getItem() == Items.ELYTRA) { if (itemstack.getItem() == Items.ELYTRA) {
GlStateManager.color(1, 1, 1, 1); GlStateManager.color(1, 1, 1, 1);
if (entity instanceof AbstractClientPlayer) { getRenderer().bindTexture(getElytraTexture(entity));
AbstractClientPlayer player = (AbstractClientPlayer) entity;
if (player.isPlayerInfoSet() && player.getLocationElytra() != null) {
getRenderer().bindTexture(player.getLocationElytra());
} else if (player.hasPlayerInfo() && player.getLocationCape() != null && player.isWearing(EnumPlayerModelParts.CAPE)) {
getRenderer().bindTexture(player.getLocationCape());
} else {
getRenderer().bindTexture(TEXTURE_ELYTRA);
}
} else {
getRenderer().bindTexture(TEXTURE_ELYTRA);
}
GlStateManager.pushMatrix(); GlStateManager.pushMatrix();
GlStateManager.translate(0, 0.25F, 0.125F); GlStateManager.translate(0, 0.25F, 0.125F);
model.transform(BodyPart.BODY); getPlayerModel().transform(BodyPart.BODY);
modelElytra.setRotationAngles(move, swing, age, yaw, head, scale, entity); modelElytra.setRotationAngles(move, swing, age, yaw, head, scale, entity);
modelElytra.render(entity, move, swing, age, yaw, head, scale); modelElytra.render(entity, move, swing, age, yaw, head, scale);
@ -66,6 +49,28 @@ public class LayerPonyElytra<T extends EntityLivingBase> extends AbstractPonyLay
} }
} }
protected ResourceLocation getElytraTexture(T entity) {
if (entity instanceof AbstractClientPlayer) {
AbstractClientPlayer player = (AbstractClientPlayer) entity;
ResourceLocation result;
if (player.isPlayerInfoSet()) {
result = player.getLocationElytra();
if (result != null) return result;
}
if (player.hasPlayerInfo() && player.isWearing(EnumPlayerModelParts.CAPE)) {
result = player.getLocationCape();
if (result != null) return result;
}
}
return TEXTURE_ELYTRA;
}
@Override @Override
public boolean shouldCombineTextures() { public boolean shouldCombineTextures() {
return false; return false;