2018-04-25 16:40:47 +02:00
|
|
|
package com.minelittlepony.render.layer;
|
2017-06-13 05:55:50 +02:00
|
|
|
|
|
|
|
import com.minelittlepony.model.BodyPart;
|
2018-04-25 16:40:47 +02:00
|
|
|
|
2017-06-13 05:55:50 +02:00
|
|
|
import net.minecraft.client.entity.AbstractClientPlayer;
|
|
|
|
import net.minecraft.client.renderer.GlStateManager;
|
2017-06-16 07:41:36 +02:00
|
|
|
import net.minecraft.client.renderer.entity.Render;
|
2017-06-13 05:55:50 +02:00
|
|
|
import net.minecraft.client.renderer.entity.RenderLivingBase;
|
|
|
|
import net.minecraft.client.renderer.entity.RenderManager;
|
2017-06-16 07:41:36 +02:00
|
|
|
import net.minecraft.entity.Entity;
|
2017-06-13 05:55:50 +02:00
|
|
|
import net.minecraft.entity.EntityList;
|
|
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
|
|
|
|
|
|
import javax.annotation.Nullable;
|
|
|
|
|
2018-04-27 17:50:13 +02:00
|
|
|
public class LayerEntityOnPonyShoulder extends AbstractPonyLayer<AbstractClientPlayer> {
|
2017-06-13 05:55:50 +02:00
|
|
|
|
2018-04-27 13:49:33 +02:00
|
|
|
private final RenderManager renderManager;
|
|
|
|
|
2017-06-16 07:41:36 +02:00
|
|
|
private EntityLivingBase leftEntity;
|
|
|
|
private EntityLivingBase rightEntity;
|
2017-06-13 05:55:50 +02:00
|
|
|
|
2018-04-27 13:49:33 +02:00
|
|
|
public LayerEntityOnPonyShoulder(RenderManager manager, RenderLivingBase<AbstractClientPlayer> renderer) {
|
2018-04-28 16:39:32 +02:00
|
|
|
super(renderer);
|
2018-04-27 13:49:33 +02:00
|
|
|
renderManager = manager;
|
2017-06-13 05:55:50 +02:00
|
|
|
}
|
|
|
|
|
2018-04-27 13:49:33 +02:00
|
|
|
@Override
|
2018-05-01 12:38:13 +02:00
|
|
|
public void doPonyRender(AbstractClientPlayer player, float move, float swing, float partialTicks, float ticks, float headYaw, float headPitch, float scale) {
|
2017-06-13 05:55:50 +02:00
|
|
|
|
|
|
|
GlStateManager.enableRescaleNormal();
|
2018-04-26 22:30:17 +02:00
|
|
|
GlStateManager.color(1, 1, 1, 1);
|
2017-06-13 05:55:50 +02:00
|
|
|
|
2017-06-16 07:41:36 +02:00
|
|
|
NBTTagCompound leftTag = player.getLeftShoulderEntity();
|
2017-06-13 05:55:50 +02:00
|
|
|
|
2018-08-15 02:00:16 +02:00
|
|
|
if (!leftTag.isEmpty()) {
|
2018-06-07 23:19:54 +02:00
|
|
|
leftEntity = renderShoulderEntity(player, leftEntity, leftTag, headYaw, headPitch, true);
|
2017-06-13 05:55:50 +02:00
|
|
|
}
|
|
|
|
|
2017-06-16 07:41:36 +02:00
|
|
|
NBTTagCompound rightTag = player.getRightShoulderEntity();
|
2017-06-13 05:55:50 +02:00
|
|
|
|
2018-08-15 02:00:16 +02:00
|
|
|
if (!rightTag.isEmpty()) {
|
2018-06-07 23:19:54 +02:00
|
|
|
rightEntity = renderShoulderEntity(player, rightEntity, rightTag, headYaw, headPitch, false);
|
2017-06-13 05:55:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
GlStateManager.disableRescaleNormal();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
2018-06-07 23:19:54 +02:00
|
|
|
private EntityLivingBase renderShoulderEntity(AbstractClientPlayer player, @Nullable EntityLivingBase entity, NBTTagCompound shoulderTag, float headYaw, float headPitch, boolean left) {
|
2017-06-13 05:55:50 +02:00
|
|
|
|
2018-05-01 12:38:13 +02:00
|
|
|
if (entity == null || !entity.getUniqueID().equals(shoulderTag.getUniqueId("UUID"))) {
|
|
|
|
entity = (EntityLivingBase) EntityList.createEntityFromNBT(shoulderTag, player.world);
|
2017-06-16 07:41:36 +02:00
|
|
|
// this isn't an entity.
|
|
|
|
if (entity == null) {
|
2017-06-13 05:55:50 +02:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-05-01 12:38:13 +02:00
|
|
|
Render<Entity> render = renderManager.getEntityRenderObject(entity);
|
|
|
|
|
|
|
|
if (render == null) {
|
|
|
|
return entity;
|
|
|
|
}
|
|
|
|
|
2017-06-13 05:55:50 +02:00
|
|
|
GlStateManager.pushMatrix();
|
|
|
|
|
2018-04-27 20:37:54 +02:00
|
|
|
getPonyModel().transform(BodyPart.BODY);
|
2017-06-13 05:55:50 +02:00
|
|
|
|
2017-06-16 07:41:36 +02:00
|
|
|
// render on the haunches
|
2018-04-26 22:30:17 +02:00
|
|
|
GlStateManager.translate(left ? 0.25F : -0.25F, 0.25F, 0.35F);
|
2017-06-16 07:41:36 +02:00
|
|
|
GlStateManager.scale(1, -1, -1);
|
2018-04-27 20:37:54 +02:00
|
|
|
GlStateManager.rotate(left ? -5 : 5, 0, 0, 1);
|
2017-06-13 05:55:50 +02:00
|
|
|
|
2018-06-07 23:19:54 +02:00
|
|
|
// look where the player is looking
|
|
|
|
entity.prevRotationYawHead = headYaw;
|
|
|
|
entity.rotationYawHead = headYaw;
|
|
|
|
entity.rotationPitch = headPitch;
|
|
|
|
entity.prevRotationPitch = headPitch;
|
|
|
|
|
|
|
|
render.doRender(entity, 0, 0, 0, 0, 0);
|
2018-04-27 20:37:54 +02:00
|
|
|
|
|
|
|
GlStateManager.popMatrix();
|
2017-06-16 07:41:36 +02:00
|
|
|
return entity;
|
2017-06-13 05:55:50 +02:00
|
|
|
}
|
|
|
|
}
|