diff --git a/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java b/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java index c8345eda..01a5d120 100644 --- a/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java +++ b/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java @@ -4,6 +4,7 @@ import net.minecraft.client.model.Cuboid; import net.minecraft.client.render.entity.model.BipedEntityModel; import net.minecraft.client.render.entity.model.PlayerEntityModel; import net.minecraft.entity.LivingEntity; +import net.minecraft.util.AbsoluteHand; import com.minelittlepony.client.pony.PonyData; import com.minelittlepony.model.ModelAttributes; @@ -84,6 +85,12 @@ public abstract class ClientPonyModel extends PlayerEnti return handSwingProgress; } + + @Override + public Cuboid getArm(AbsoluteHand side) { + return super.getArm(side); + } + /** * Copies this model's attributes into the passed model. */ diff --git a/src/main/java/com/minelittlepony/client/model/entities/ModelIllagerPony.java b/src/main/java/com/minelittlepony/client/model/entities/ModelIllagerPony.java index 83579a9f..1c3e1172 100644 --- a/src/main/java/com/minelittlepony/client/model/entities/ModelIllagerPony.java +++ b/src/main/java/com/minelittlepony/client/model/entities/ModelIllagerPony.java @@ -48,9 +48,4 @@ public class ModelIllagerPony extends ModelMobPony { aimBow(arm, ticks); } } - - @Override - public Cuboid getArm(AbsoluteHand side) { - return canCast() ? getUnicornArmForSide(side) : super.getArm(side); - } } diff --git a/src/main/java/com/minelittlepony/client/model/entities/ModelPillagerPony.java b/src/main/java/com/minelittlepony/client/model/entities/ModelPillagerPony.java new file mode 100644 index 00000000..47895cce --- /dev/null +++ b/src/main/java/com/minelittlepony/client/model/entities/ModelPillagerPony.java @@ -0,0 +1,35 @@ +package com.minelittlepony.client.model.entities; + +import net.minecraft.entity.mob.IllagerEntity; +import net.minecraft.entity.mob.PillagerEntity; +import net.minecraft.util.AbsoluteHand; + +import com.minelittlepony.client.model.races.ModelChangeling; + +public class ModelPillagerPony extends ModelChangeling { + + public ModelPillagerPony() { + super(false); + } + + @Override + public void animateModel(T entity, float move, float swing, float ticks) { + ArmPose holdingPose = getHoldingPose(entity.getState()); + + if (holdingPose != ArmPose.EMPTY) { + boolean rightHanded = entity.getMainHand() == AbsoluteHand.RIGHT; + + leftArmPose = rightHanded ? ArmPose.EMPTY : holdingPose; + rightArmPose = rightHanded ? holdingPose : ArmPose.EMPTY; + } + } + + protected ArmPose getHoldingPose(IllagerEntity.State state) { + switch (state) { + case BOW_AND_ARROW: return ArmPose.BOW_AND_ARROW; + case CROSSBOW_CHARGE: return ArmPose.CROSSBOW_CHARGE; + case CROSSBOW_HOLD: return ArmPose.CROSSBOW_HOLD; + default: return ArmPose.EMPTY; + } + } +} diff --git a/src/main/java/com/minelittlepony/client/model/entities/ModelSkeletonPony.java b/src/main/java/com/minelittlepony/client/model/entities/ModelSkeletonPony.java index 76db0f50..a754a7c9 100644 --- a/src/main/java/com/minelittlepony/client/model/entities/ModelSkeletonPony.java +++ b/src/main/java/com/minelittlepony/client/model/entities/ModelSkeletonPony.java @@ -54,9 +54,6 @@ public class ModelSkeletonPony extends ModelMobPony leftArmPose = pose; } } - - - super.animateModel(entity, move, swing, ticks); } @Override diff --git a/src/main/java/com/minelittlepony/client/model/races/ModelUnicorn.java b/src/main/java/com/minelittlepony/client/model/races/ModelUnicorn.java index 5e80b232..db6f6616 100644 --- a/src/main/java/com/minelittlepony/client/model/races/ModelUnicorn.java +++ b/src/main/java/com/minelittlepony/client/model/races/ModelUnicorn.java @@ -4,6 +4,7 @@ import com.minelittlepony.client.model.components.UnicornHorn; import com.minelittlepony.client.util.render.PonyRenderer; import com.minelittlepony.model.IUnicorn; +import net.minecraft.client.model.Cuboid; import net.minecraft.entity.LivingEntity; import net.minecraft.util.AbsoluteHand; import net.minecraft.util.math.MathHelper; @@ -163,4 +164,9 @@ public class ModelUnicorn extends ModelEarthPony impl unicornArmRight.box(armX - armWidth, armY, armZ, armWidth, armLength, armDepth, stretch + .25F) .around(-rarmX, yOffset + rarmY, 0); } + + @Override + public Cuboid getArm(AbsoluteHand side) { + return canCast() ? getUnicornArmForSide(side) : super.getArm(side); + } } diff --git a/src/main/java/com/minelittlepony/client/render/entities/MobRenderers.java b/src/main/java/com/minelittlepony/client/render/entities/MobRenderers.java index 88ef7686..2bf8bb60 100644 --- a/src/main/java/com/minelittlepony/client/render/entities/MobRenderers.java +++ b/src/main/java/com/minelittlepony/client/render/entities/MobRenderers.java @@ -22,6 +22,7 @@ public enum MobRenderers implements Setting { pony.switchRenderer(state, WitchEntity.class, RenderPonyWitch::new); pony.switchRenderer(state, ZombieVillagerEntity.class, RenderPonyZombieVillager::new); pony.switchRenderer(state, WanderingTraderEntity.class, RenderPonyTrader::new); + pony.switchRenderer(state, PillagerEntity.class, RenderPonyPillager::new); } }, ZOMBIES { diff --git a/src/main/java/com/minelittlepony/client/render/entities/RenderPonyPillager.java b/src/main/java/com/minelittlepony/client/render/entities/RenderPonyPillager.java index 82953e86..017be91e 100644 --- a/src/main/java/com/minelittlepony/client/render/entities/RenderPonyPillager.java +++ b/src/main/java/com/minelittlepony/client/render/entities/RenderPonyPillager.java @@ -1,5 +1,28 @@ package com.minelittlepony.client.render.entities; -public class RenderPonyPillager { - // TODO: Render Pillagers as changelings +import net.minecraft.client.render.entity.EntityRenderDispatcher; +import net.minecraft.entity.mob.PillagerEntity; +import net.minecraft.util.Identifier; + +import com.minelittlepony.client.model.entities.ModelPillagerPony; +import com.minelittlepony.client.render.layer.LayerHeldItemIllager; +import com.minelittlepony.client.render.layer.LayerHeldPonyItem; + +public class RenderPonyPillager extends RenderPonyMob> { + + private static final Identifier TEXTURES = new Identifier("minelittlepony", "textures/entity/illager/pillager_pony.png"); + + public RenderPonyPillager(EntityRenderDispatcher manager) { + super(manager, new ModelPillagerPony()); + } + + @Override + public Identifier findTexture(PillagerEntity entity) { + return TEXTURES; + } + + @Override + protected LayerHeldPonyItem> createItemHoldingLayer() { + return new LayerHeldItemIllager<>(this); + } } diff --git a/src/main/java/com/minelittlepony/client/render/layer/LayerHeldItemIllager.java b/src/main/java/com/minelittlepony/client/render/layer/LayerHeldItemIllager.java index 1a3e0dcf..014e654f 100644 --- a/src/main/java/com/minelittlepony/client/render/layer/LayerHeldItemIllager.java +++ b/src/main/java/com/minelittlepony/client/render/layer/LayerHeldItemIllager.java @@ -3,12 +3,12 @@ package com.minelittlepony.client.render.layer; import net.minecraft.entity.mob.IllagerEntity; import net.minecraft.util.AbsoluteHand; -import com.minelittlepony.client.model.entities.ModelIllagerPony; +import com.minelittlepony.client.model.races.ModelAlicorn; import com.minelittlepony.client.render.IPonyRender; -public class LayerHeldItemIllager extends LayerHeldPonyItem> { +public class LayerHeldItemIllager> extends LayerHeldPonyItem { - public LayerHeldItemIllager(IPonyRender> livingPony) { + public LayerHeldItemIllager(IPonyRender livingPony) { super(livingPony); } diff --git a/src/main/resources/assets/minelittlepony/textures/entity/illager/pillager_pony.png b/src/main/resources/assets/minelittlepony/textures/entity/illager/pillager_pony.png new file mode 100644 index 00000000..149b11ae Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/illager/pillager_pony.png differ