Fix rendering issues with elytra flight

This commit is contained in:
Matthew Messinger 2016-12-26 20:58:21 -05:00
parent 80516f9068
commit 6c0542ff89
3 changed files with 15 additions and 19 deletions

View file

@ -8,11 +8,7 @@ import com.minelittlepony.model.PMAPI;
import com.minelittlepony.model.PlayerModel; import com.minelittlepony.model.PlayerModel;
import com.minelittlepony.model.pony.ModelHumanPlayer; import com.minelittlepony.model.pony.ModelHumanPlayer;
import com.minelittlepony.model.pony.ModelPlayerPony; import com.minelittlepony.model.pony.ModelPlayerPony;
import com.minelittlepony.renderer.layer.LayerHeldPonyItem; import com.minelittlepony.renderer.layer.*;
import com.minelittlepony.renderer.layer.LayerPonyArmor;
import com.minelittlepony.renderer.layer.LayerPonyCape;
import com.minelittlepony.renderer.layer.LayerPonyElytra;
import com.minelittlepony.renderer.layer.LayerPonySkull;
import net.minecraft.client.entity.AbstractClientPlayer; import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.client.model.ModelPlayer; import net.minecraft.client.model.ModelPlayer;
import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.model.ModelRenderer;
@ -32,8 +28,6 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import static net.minecraft.client.renderer.GlStateManager.scale;
@Mixin(RenderPlayer.class) @Mixin(RenderPlayer.class)
public abstract class MixinRenderPlayer extends RenderLivingBase<AbstractClientPlayer> implements IRenderPony { public abstract class MixinRenderPlayer extends RenderLivingBase<AbstractClientPlayer> implements IRenderPony {
@ -43,6 +37,7 @@ public abstract class MixinRenderPlayer extends RenderLivingBase<AbstractClientP
private PlayerModel playerModel; private PlayerModel playerModel;
private Pony thePony; private Pony thePony;
@SuppressWarnings("ConstantConditions")
private MixinRenderPlayer(RenderManager renderManager) { private MixinRenderPlayer(RenderManager renderManager) {
super(renderManager, null, 0.5F); super(renderManager, null, 0.5F);
} }
@ -101,9 +96,9 @@ public abstract class MixinRenderPlayer extends RenderLivingBase<AbstractClientP
if (MineLittlePony.getConfig().showscale && !(playerModel.getModel() instanceof ModelHumanPlayer)) { if (MineLittlePony.getConfig().showscale && !(playerModel.getModel() instanceof ModelHumanPlayer)) {
PonySize size = thePony.metadata.getSize(); PonySize size = thePony.metadata.getSize();
if (size == PonySize.LARGE) if (size == PonySize.LARGE)
scale(0.9F, 0.9F, 0.9F); GlStateManager.scale(0.9F, 0.9F, 0.9F);
else if (size == PonySize.NORMAL || size == PonySize.FOAL) else if (size == PonySize.NORMAL || size == PonySize.FOAL)
scale(0.8F, 0.8F, 0.8F); GlStateManager.scale(0.8F, 0.8F, 0.8F);
} }
} }
@ -218,9 +213,13 @@ public abstract class MixinRenderPlayer extends RenderLivingBase<AbstractClientP
target = "Lnet/minecraft/client/renderer/GlStateManager;rotate(FFFF)V", target = "Lnet/minecraft/client/renderer/GlStateManager;rotate(FFFF)V",
ordinal = 3)) ordinal = 3))
private void rotateRedirect(float f1, float f2, float f3, float f4) { private void rotateRedirect(float f1, float f2, float f3, float f4) {
if (this.playerModel.getModel() instanceof ModelPlayerPony) boolean isPony = this.playerModel.getModel() instanceof ModelPlayerPony;
if (isPony)
f1 += 90; f1 += 90;
GlStateManager.rotate(f1, f2, f3, f4); GlStateManager.rotate(f1, f2, f3, f4);
if (isPony)
GlStateManager.translate(0, -1, 0);
} }
private void updateModel(AbstractClientPlayer player) { private void updateModel(AbstractClientPlayer player) {

View file

@ -1,11 +1,6 @@
package com.minelittlepony.model.pony; package com.minelittlepony.model.pony;
import com.minelittlepony.model.AbstractPonyModel; import com.minelittlepony.model.*;
import com.minelittlepony.model.BodyPart;
import com.minelittlepony.model.PonyModelConstants;
import com.minelittlepony.model.PegasusWings;
import com.minelittlepony.model.PonySnout;
import com.minelittlepony.model.UnicornHorn;
import com.minelittlepony.renderer.PlaneRenderer; import com.minelittlepony.renderer.PlaneRenderer;
import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.model.ModelRenderer;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
@ -84,7 +79,7 @@ public class ModelPlayerPony extends AbstractPonyModel implements PonyModelConst
this.setLegs(limbSwing, limbSwingAmount, ageInTicks, entityIn); this.setLegs(limbSwing, limbSwingAmount, ageInTicks, entityIn);
this.holdItem(limbSwingAmount); this.holdItem(limbSwingAmount);
this.swingItem(entityIn, this.swingProgress); this.swingItem(entityIn, this.swingProgress);
if (this.isSneak && !this.isFlying) { if (this.isSneak && !this.isFlying && !this.rainboom) {
this.adjustBody(BODY_ROTATE_ANGLE_X_SNEAK, BODY_RP_Y_SNEAK, BODY_RP_Z_SNEAK); this.adjustBody(BODY_ROTATE_ANGLE_X_SNEAK, BODY_RP_Y_SNEAK, BODY_RP_Z_SNEAK);
this.sneakLegs(); this.sneakLegs();
this.setHead(0.0F, 6.0F, -2.0F); this.setHead(0.0F, 6.0F, -2.0F);

View file

@ -17,6 +17,8 @@ import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import javax.annotation.Nonnull;
public class LayerPonyElytra implements LayerRenderer<AbstractClientPlayer> { public class LayerPonyElytra implements LayerRenderer<AbstractClientPlayer> {
private static final ResourceLocation TEXTURE_ELYTRA = new ResourceLocation("textures/entity/elytra.png"); private static final ResourceLocation TEXTURE_ELYTRA = new ResourceLocation("textures/entity/elytra.png");
@ -31,7 +33,7 @@ public class LayerPonyElytra implements LayerRenderer<AbstractClientPlayer> {
} }
@Override @Override
public void doRenderLayer(AbstractClientPlayer entity, float swing, float swingAmount, float ticks, float age, float yaw, float head, float scale) { public void doRenderLayer(@Nonnull AbstractClientPlayer entity, float swing, float swingAmount, float ticks, float age, float yaw, float head, float scale) {
AbstractPonyModel model = ((IRenderPony) this.renderPlayer).getPony().getModel(); AbstractPonyModel model = ((IRenderPony) this.renderPlayer).getPony().getModel();
if (model instanceof ModelHumanPlayer) { if (model instanceof ModelHumanPlayer) {
@ -41,7 +43,7 @@ public class LayerPonyElytra implements LayerRenderer<AbstractClientPlayer> {
ItemStack itemstack = entity.getItemStackFromSlot(EntityEquipmentSlot.CHEST); ItemStack itemstack = entity.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
if (itemstack != null && itemstack.getItem() == Items.ELYTRA) { if (itemstack.getItem() == Items.ELYTRA) {
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
if (entity.isPlayerInfoSet() && entity.getLocationElytra() != null) { if (entity.isPlayerInfoSet() && entity.getLocationElytra() != null) {