MineLittlePony/src/main/java/com/brohoof/minelittlepony/mixin/MixinRenderPlayer.java

145 lines
5.9 KiB
Java
Raw Normal View History

2016-01-15 08:59:50 +01:00
package com.brohoof.minelittlepony.mixin;
2015-08-02 00:36:33 +02:00
import static net.minecraft.client.renderer.GlStateManager.scale;
2016-01-15 08:59:50 +01:00
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
2015-11-17 06:09:04 +01:00
import com.brohoof.minelittlepony.MineLittlePony;
import com.brohoof.minelittlepony.Pony;
import com.brohoof.minelittlepony.PonySize;
2015-11-17 06:09:04 +01:00
import com.brohoof.minelittlepony.model.PMAPI;
import com.brohoof.minelittlepony.model.PlayerModel;
2015-12-16 05:29:47 +01:00
import com.brohoof.minelittlepony.model.pony.ModelHumanPlayer;
2016-01-15 08:59:50 +01:00
import com.brohoof.minelittlepony.renderer.IRenderPony;
2015-11-17 06:09:04 +01:00
import com.brohoof.minelittlepony.renderer.layer.LayerHeldPonyItem;
import com.brohoof.minelittlepony.renderer.layer.LayerPonyArmor;
import com.brohoof.minelittlepony.renderer.layer.LayerPonyCape;
import com.brohoof.minelittlepony.renderer.layer.LayerPonySkull;
2015-08-02 00:36:33 +02:00
import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.entity.RenderPlayer;
import net.minecraft.client.renderer.entity.RendererLivingEntity;
import net.minecraft.client.renderer.entity.layers.LayerArrow;
import net.minecraft.entity.Entity;
import net.minecraft.item.EnumAction;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
2016-01-15 08:59:50 +01:00
@Mixin(RenderPlayer.class)
public abstract class MixinRenderPlayer extends RendererLivingEntity implements IRenderPony {
2015-08-02 00:36:33 +02:00
private PlayerModel playerModel;
private Pony thePony;
2015-08-02 00:36:33 +02:00
2016-01-15 08:59:50 +01:00
private MixinRenderPlayer(RenderManager renderManager) {
2015-08-02 00:36:33 +02:00
super(renderManager, null, 0.5F);
}
2016-01-15 08:59:50 +01:00
@Inject(method="<init>(Lnet/minecraft/client/renderer/entity/RenderManager;Z)V", at=@At("RETURN"))
private void init(RenderManager renderManager, boolean useSmallArms, CallbackInfo ci) {
this.playerModel = PMAPI.pony;
this.mainModel = this.playerModel.getModel();
this.shadowSize = this.playerModel.getShadowsize();
2015-08-02 00:36:33 +02:00
this.layerRenderers.clear();
this.addLayer(new LayerPonyArmor(this));
this.addLayer(new LayerHeldPonyItem(this));
this.addLayer(new LayerArrow(this));
this.addLayer(new LayerPonySkull(this));
this.addLayer(new LayerPonyCape(this));
2015-08-02 00:36:33 +02:00
}
2016-01-15 08:59:50 +01:00
@Overwrite
2015-08-02 00:36:33 +02:00
public void doRender(AbstractClientPlayer player, double x, double y, double z, float yaw, float partialTicks) {
ItemStack currentItemStack = player.inventory.getCurrentItem();
this.thePony = MineLittlePony.getInstance().getManager().getPonyFromResourceRegistry(player);
thePony.checkSkin();
2015-08-02 00:36:33 +02:00
this.playerModel = this.getModel(player);
this.mainModel = this.playerModel.getModel();
this.playerModel.getModel().heldItemRight = currentItemStack == null ? 0 : 1;
this.playerModel.apply(thePony.metadata);
2015-08-02 00:36:33 +02:00
if (currentItemStack != null && player.getItemInUseCount() > 0) {
EnumAction yOrigin = currentItemStack.getItemUseAction();
if (yOrigin == EnumAction.BLOCK) {
this.playerModel.getModel().heldItemRight = 3;
2015-08-02 00:36:33 +02:00
} else if (yOrigin == EnumAction.BOW) {
this.playerModel.getModel().aimedBow = true;
2015-08-02 00:36:33 +02:00
}
}
this.playerModel.getModel().isSneak = player.isSneaking();
this.playerModel.getModel().isFlying = thePony.isPegasusFlying(player);
2015-08-02 00:36:33 +02:00
if (MineLittlePony.getConfig().getShowScale().get()) {
2015-08-02 00:36:33 +02:00
if (this.playerModel != PMAPI.human) {
PonySize size = thePony.metadata.getSize();
if (size == PonySize.FOAL)
2015-08-02 00:36:33 +02:00
this.shadowSize = 0.25F;
else if (size == PonySize.NORMAL)
2015-08-02 00:36:33 +02:00
this.shadowSize = 0.4F;
2015-12-16 05:29:47 +01:00
else if (size == PonySize.TALL)
2015-08-02 00:36:33 +02:00
this.shadowSize = 0.45F;
else
2015-08-02 00:36:33 +02:00
this.shadowSize = 0.5F;
} else {
this.shadowSize = 0.5F;
}
} else {
this.shadowSize = 0.5F;
}
double yOrigin1 = y;
if (player.isSneaking() && !(player instanceof EntityPlayerSP)) {
yOrigin1 -= 0.125D;
}
this.playerModel.getModel().isSleeping = player.isPlayerSleeping();
this.playerModel.getModel().swingProgress = getSwingProgress(player, partialTicks);
this.playerModel.getModel().isVillager = false;
2015-08-02 00:36:33 +02:00
super.doRender(player, x, yOrigin1, z, yaw, partialTicks);
this.playerModel.getModel().aimedBow = false;
this.playerModel.getModel().isSneak = false;
this.playerModel.getModel().heldItemRight = 0;
2015-08-02 00:36:33 +02:00
}
2016-01-15 08:59:50 +01:00
@Inject(method = "renderLivingAt", at = @At("RETURN"))
private void setupPlayerScale(AbstractClientPlayer player, double xPosition, double yPosition, double zPosition, CallbackInfo ci) {
2015-08-02 00:36:33 +02:00
2015-12-16 05:29:47 +01:00
if (MineLittlePony.getConfig().getShowScale().get() && !(playerModel.getModel() instanceof ModelHumanPlayer)) {
PonySize size = thePony.metadata.getSize();
if (size == PonySize.LARGE)
2015-08-02 00:36:33 +02:00
scale(0.9F, 0.9F, 0.9F);
else if (size == PonySize.NORMAL || size == PonySize.FOAL)
2015-08-02 00:36:33 +02:00
scale(0.8F, 0.8F, 0.8F);
}
}
2016-01-15 08:59:50 +01:00
private ResourceLocation getEntityTexture(AbstractClientPlayer player) {
Pony thePony = MineLittlePony.getInstance().getManager().getPonyFromResourceRegistry(player);
2015-08-02 00:36:33 +02:00
return thePony.getTextureResourceLocation();
}
@Override
2016-01-15 08:59:50 +01:00
public final ResourceLocation getEntityTexture(Entity entity) {
2015-08-02 00:36:33 +02:00
return this.getEntityTexture((AbstractClientPlayer) entity);
}
2016-01-15 08:59:50 +01:00
private PlayerModel getModel(AbstractClientPlayer player) {
Pony thePony = MineLittlePony.getInstance().getManager().getPonyFromResourceRegistry(player);
2015-08-02 00:36:33 +02:00
return thePony.getModel();
}
@Override
public PlayerModel getPony() {
return this.playerModel;
}
}