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.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.util.EnumHandSide;
import net.minecraft.util.math.MathHelper;
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.
*/

View file

@ -71,6 +71,6 @@ public class ModelIllagerPony extends ModelPlayerPony {
}
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) {
if (swingProgress > -9990.0F && !isSleeping) {
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()) {
swingArm(mainRight ? unicornArmRight : unicornArmLeft);
swingArm(getUnicornArmForSide(mainSide));
} else {
swingArm(getArmForSide(mainSide));
}
@ -348,10 +346,12 @@ public class ModelPlayerPony extends AbstractPonyModel {
}
protected void swingArms(float tick) {
if (isSleeping) return;
float cos = MathHelper.cos(tick * 0.09F) * 0.05F + 0.05F;
float sin = MathHelper.sin(tick * 0.067F) * 0.05F;
if (rightArmPose != ArmPose.EMPTY && !isSleeping) {
if (rightArmPose != ArmPose.EMPTY) {
if (metadata.hasMagic()) {
unicornArmRight.rotateAngleZ += cos;
@ -361,7 +361,8 @@ public class ModelPlayerPony extends AbstractPonyModel {
bipedRightArm.rotateAngleX += sin;
}
}
if (leftArmPose != ArmPose.EMPTY && !isSleeping) {
if (leftArmPose != ArmPose.EMPTY) {
if (metadata.hasMagic()) {
unicornArmLeft.rotateAngleZ += cos;
unicornArmLeft.rotateAngleX += sin;
@ -391,6 +392,10 @@ public class ModelPlayerPony extends AbstractPonyModel {
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.
*/
@ -659,11 +664,8 @@ public class ModelPlayerPony extends AbstractPonyModel {
bipedRightLegwear.setRotationPoint(-3, yOffset, 0);
}
unicornArmLeft .addBox(FIRSTP_ARM_CENTRE_X - 2, armY, armZ, 4, 12, 4, stretch + .25f);
unicornArmRight.addBox(FIRSTP_ARM_CENTRE_X - 2, armY, armZ, 4, 12, 4, stretch + .25f);
unicornArmLeft .setRotationPoint(5, yOffset + 2, 0);
unicornArmRight.setRotationPoint(-5, yOffset + 2, 0);
unicornArmLeft .box(FIRSTP_ARM_CENTRE_X - 2, armY, armZ, 4, 12, 4, stretch + .25f).around(5, yOffset + 2, 0);
unicornArmRight.box(FIRSTP_ARM_CENTRE_X - 2, armY, armZ, 4, 12, 4, stretch + .25f).around(-5, yOffset + 2, 0);
}
@Override

View file

@ -1,5 +1,7 @@
package com.minelittlepony.render.layer;
import com.minelittlepony.ducks.IRenderPony;
import com.minelittlepony.model.AbstractPonyModel;
import com.minelittlepony.model.ponies.ModelHumanPlayer;
import net.minecraft.client.model.ModelBase;
@ -36,6 +38,19 @@ public abstract class AbstractPonyLayer<T extends EntityLivingBase> implements L
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
public boolean shouldCombineTextures() {
return false;

View file

@ -2,7 +2,6 @@ package com.minelittlepony.render.layer;
import com.minelittlepony.ForgeProxy;
import com.minelittlepony.model.BodyPart;
import com.minelittlepony.model.ponies.ModelPlayerPony;
import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.client.renderer.GlStateManager;
@ -54,7 +53,6 @@ public class LayerEntityOnPonyShoulder extends AbstractPonyLayer<AbstractClientP
GlStateManager.disableRescaleNormal();
}
@SuppressWarnings("unchecked")
@Nullable
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) {
@ -69,19 +67,19 @@ public class LayerEntityOnPonyShoulder extends AbstractPonyLayer<AbstractClientP
GlStateManager.pushMatrix();
ModelPlayerPony model = ((ModelPlayerPony) getRenderer().getMainModel());
model.transform(BodyPart.BODY);
getPonyModel().transform(BodyPart.BODY);
// render on the haunches
GlStateManager.translate(left ? 0.25F : -0.25F, 0.25F, 0.35F);
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);
if (render != null) {
render.doRender(entity, 0, 0, 0, 0, 0);
GlStateManager.popMatrix();
}
GlStateManager.popMatrix();
return entity;
}

View file

@ -22,7 +22,7 @@ public class LayerHeldItemIllager<T extends AbstractIllager> extends LayerHeldPo
@Override
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) {

View file

@ -22,7 +22,7 @@ public class LayerHeldPonyItem<T extends EntityLivingBase> extends AbstractPonyL
@Override
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;
ItemStack itemMain = entity.getHeldItemMainhand();
@ -32,6 +32,8 @@ public class LayerHeldPonyItem<T extends EntityLivingBase> extends AbstractPonyL
ItemStack right = mainRight ? itemMain : itemOff;
if (!left.isEmpty() || !right.isEmpty()) {
ModelBase model = getRenderer().getMainModel();
pushMatrix();
if (model instanceof AbstractPonyModel) {
((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.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> {
@ -36,7 +29,7 @@ public class LayerHeldPonyItemMagical<T extends EntityLivingBase> extends LayerH
}
private boolean isUnicorn() {
ModelBase model = getRenderer().getMainModel();
ModelBase model = getMainModel();
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) {
if (isUnicorn()) {
IPonyData metadata = ((AbstractPonyModel) getRenderer().getMainModel()).metadata;
renderItemGlow(entity, drop, transform, hand, metadata.getGlowColor());
renderItemGlow(entity, drop, transform, hand, getPonyModel().metadata.getGlowColor());
}
}
@ -59,11 +51,8 @@ public class LayerHeldPonyItemMagical<T extends EntityLivingBase> extends LayerH
* 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);
if (isUnicorn()) {
this.<ModelPlayerPony>getMainModel().getUnicornArmForSide(side).postRender(0.0625F);
} else {
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) {
// enchantments mess up the rendering
ItemStack drop2 = drop.copy();
if (drop2.hasEffect()) {
removeEnch(drop2.getTagCompound());
}
drop = stackWithoutEnchantment(drop);
float red = (glowColor >> 16 & 255) / 255.0F;
float green = (glowColor >> 8 & 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);
translate(0, .01, .01);
translate(0, 0.01F, 0.01F);
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);
((IRenderItem) renderItem).useTransparency(false);
@ -103,9 +90,11 @@ public class LayerHeldPonyItemMagical<T extends EntityLivingBase> extends LayerH
// I hate rendering
}
private void removeEnch(@Nullable NBTTagCompound tag) {
if (tag != null) {
tag.removeTag("ench");
private ItemStack stackWithoutEnchantment(ItemStack original) {
ItemStack copy = original.copy();
if (copy.isItemEnchanted()) {
copy.getTagCompound().removeTag("ench");
}
return copy;
}
}

View file

@ -1,7 +1,5 @@
package com.minelittlepony.render.layer;
import com.minelittlepony.ducks.IRenderPony;
import com.minelittlepony.model.AbstractPonyModel;
import com.minelittlepony.model.BodyPart;
import com.minelittlepony.model.components.PonyElytra;
@ -30,31 +28,16 @@ public class LayerPonyElytra<T extends EntityLivingBase> extends AbstractPonyLay
@Override
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);
if (itemstack.getItem() == Items.ELYTRA) {
GlStateManager.color(1, 1, 1, 1);
if (entity instanceof AbstractClientPlayer) {
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);
}
getRenderer().bindTexture(getElytraTexture(entity));
GlStateManager.pushMatrix();
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.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
public boolean shouldCombineTextures() {
return false;