From 3da7853265b037fcb49d4f535f808242b67bd641 Mon Sep 17 00:00:00 2001 From: Sollace Date: Mon, 30 Apr 2018 14:10:30 +0200 Subject: [PATCH 01/10] Added zebras and finished witches --- .../com/minelittlepony/PonyRenderManager.java | 1 + .../java/com/minelittlepony/model/PMAPI.java | 4 ++ .../model/components/PonySnout.java | 5 ++ .../model/player/ModelZebra.java | 50 +++++++++++++++ .../model/player/PlayerModels.java | 3 +- .../model/ponies/ModelWitchPony.java | 57 ++++++++++++++---- .../minelittlepony/pony/data/PonyRace.java | 2 +- .../render/ponies/RenderPonyWitch.java | 3 +- .../textures/entity/witch_pony.png | Bin 620 -> 769 bytes 9 files changed, 111 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/minelittlepony/model/player/ModelZebra.java diff --git a/src/main/java/com/minelittlepony/PonyRenderManager.java b/src/main/java/com/minelittlepony/PonyRenderManager.java index 30355b2b..554d7ce7 100644 --- a/src/main/java/com/minelittlepony/PonyRenderManager.java +++ b/src/main/java/com/minelittlepony/PonyRenderManager.java @@ -58,6 +58,7 @@ public class PonyRenderManager { registerPlayerSkin(manager, PlayerModels.EARTH); registerPlayerSkin(manager, PlayerModels.PEGASUS); registerPlayerSkin(manager, PlayerModels.ALICORN); + registerPlayerSkin(manager, PlayerModels.ZEBRA); } private void registerPlayerSkin(RenderManager manager, PlayerModels playerModel) { diff --git a/src/main/java/com/minelittlepony/model/PMAPI.java b/src/main/java/com/minelittlepony/model/PMAPI.java index 2d02aa5e..945dcec5 100644 --- a/src/main/java/com/minelittlepony/model/PMAPI.java +++ b/src/main/java/com/minelittlepony/model/PMAPI.java @@ -3,6 +3,7 @@ package com.minelittlepony.model; import com.minelittlepony.model.player.ModelAlicorn; import com.minelittlepony.model.player.ModelEarthPony; import com.minelittlepony.model.player.ModelPegasus; +import com.minelittlepony.model.player.ModelZebra; import com.minelittlepony.model.ponies.ModelIllagerPony; import com.minelittlepony.model.ponies.ModelSkeletonPony; import com.minelittlepony.model.ponies.ModelVillagerPony; @@ -30,6 +31,9 @@ public final class PMAPI { public static final ModelWrapper alicorn = new ModelWrapper(new ModelAlicorn(false)); public static final ModelWrapper alicornSmall = new ModelWrapper(new ModelAlicorn(true)); + public static final ModelWrapper zebra = new ModelWrapper(new ModelZebra(false)); + public static final ModelWrapper zebraSmall = new ModelWrapper(new ModelZebra(true)); + public static final ModelWrapper zombie = new ModelWrapper(new ModelZombiePony()); public static final ModelWrapper skeleton = new ModelWrapper(new ModelSkeletonPony()); public static final ModelWrapper villager = new ModelWrapper(new ModelVillagerPony()); diff --git a/src/main/java/com/minelittlepony/model/components/PonySnout.java b/src/main/java/com/minelittlepony/model/components/PonySnout.java index 05c12fd9..a525acb0 100644 --- a/src/main/java/com/minelittlepony/model/components/PonySnout.java +++ b/src/main/java/com/minelittlepony/model/components/PonySnout.java @@ -20,6 +20,11 @@ public class PonySnout { pony.bipedHead.addChild(mare); } + public void rotate(float x, float y, float z) { + mare.rotate(x, y, z); + stallion.rotate(x, y, z); + } + public void init(float yOffset, float stretch) { mare.offset(HEAD_CENTRE_X, HEAD_CENTRE_Y, HEAD_CENTRE_Z) .around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z) diff --git a/src/main/java/com/minelittlepony/model/player/ModelZebra.java b/src/main/java/com/minelittlepony/model/player/ModelZebra.java new file mode 100644 index 00000000..89fc4c5e --- /dev/null +++ b/src/main/java/com/minelittlepony/model/player/ModelZebra.java @@ -0,0 +1,50 @@ +package com.minelittlepony.model.player; + +import com.minelittlepony.render.PonyRenderer; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; + +public class ModelZebra extends ModelEarthPony { + + public PonyRenderer bristles; + + public ModelZebra(boolean useSmallArms) { + super(useSmallArms); + } + + @Override + protected void renderHead(Entity entity, float move, float swing, float age, float headYaw, float headPitch, float scale) { + GlStateManager.translate(0, -0.1F, 0); + super.renderHead(entity, move, swing, age, headYaw, headPitch, scale); + } + + @Override + protected void renderNeck() { + GlStateManager.scale(1, 1.1F, 1); + super.renderNeck(); + } + + @Override + protected void initHeadTextures() { + super.initHeadTextures(); + + bristles = new PonyRenderer(this, 56, 32); + bipedHead.addChild(bristles); + } + + @Override + protected void initHeadPositions(float yOffset, float stretch) { + super.initHeadPositions(yOffset, stretch); + + bristles.offset(-1, -1, -3) + .box(0, -10, 2, 2, 6, 2, scale) + .box(0, -10, 4, 2, 8, 2, scale) + .box(0, -8, 6, 2, 6, 2, scale) + .rotateAngleX = 0.3F; + bristles.child(0).offset(-1.01F, 2, -7) //0.01 to prevent z-fighting + .box(0, -10, 4, 2, 8, 2, scale) + .box(0, -8, 6, 2, 6, 2, scale) + .rotateAngleX = -1F; + } +} diff --git a/src/main/java/com/minelittlepony/model/player/PlayerModels.java b/src/main/java/com/minelittlepony/model/player/PlayerModels.java index af91e7f7..28f03673 100644 --- a/src/main/java/com/minelittlepony/model/player/PlayerModels.java +++ b/src/main/java/com/minelittlepony/model/player/PlayerModels.java @@ -10,7 +10,8 @@ public enum PlayerModels { @Deprecated HUMAN("default", "slim", () -> PMAPI.pony, () -> PMAPI.ponySmall), EARTH("earthpony", "slimearthpony", () -> PMAPI.earthpony, () -> PMAPI.earthponySmall), PEGASUS("pegasus", "slimpegasus", () -> PMAPI.pegasus, () -> PMAPI.pegasusSmall), - ALICORN("alicorn", "slimalicorn", () -> PMAPI.alicorn, () -> PMAPI.alicornSmall); + ALICORN("alicorn", "slimalicorn", () -> PMAPI.alicorn, () -> PMAPI.alicornSmall), + ZEBRA("zebra", "slimzebra", () -> PMAPI.zebra, () -> PMAPI.zebraSmall); private final ModelResolver normal, slim; diff --git a/src/main/java/com/minelittlepony/model/ponies/ModelWitchPony.java b/src/main/java/com/minelittlepony/model/ponies/ModelWitchPony.java index e8daea9c..1429fbcb 100644 --- a/src/main/java/com/minelittlepony/model/ponies/ModelWitchPony.java +++ b/src/main/java/com/minelittlepony/model/ponies/ModelWitchPony.java @@ -3,38 +3,73 @@ package com.minelittlepony.model.ponies; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.monster.EntityWitch; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; import static com.minelittlepony.model.PonyModelConstants.HEAD_RP_X; import static com.minelittlepony.model.PonyModelConstants.HEAD_RP_Y; import static com.minelittlepony.model.PonyModelConstants.HEAD_RP_Z; +import static com.minelittlepony.model.PonyModelConstants.PI; +import com.minelittlepony.model.player.ModelZebra; import com.minelittlepony.render.PonyRenderer; -public class ModelWitchPony extends ModelVillagerPony { +public class ModelWitchPony extends ModelZebra { private static final ResourceLocation WITCH_TEXTURES = new ResourceLocation("textures/entity/witch.png"); private PonyRenderer witchHat; public ModelWitchPony() { - super(); + super(false); + } + + public void setLivingAnimations(EntityLivingBase entity, float move, float swing, float ticks) { + EntityWitch witch = ((EntityWitch) entity); + + leftArmPose = ArmPose.EMPTY; + rightArmPose = witch.getHeldItemMainhand().isEmpty() ? ArmPose.EMPTY : ArmPose.ITEM; } @Override public void setRotationAngles(float move, float swing, float ticks, float headYaw, float headPitch, float scale, Entity entity) { - rightArmPose = ArmPose.EMPTY; - leftArmPose = ((EntityWitch) entity).getHeldItemMainhand().isEmpty() ? ArmPose.EMPTY : ArmPose.ITEM; - super.setRotationAngles(move, swing, ticks, headYaw, headPitch, scale, entity); - if (leftArmPose != ArmPose.EMPTY) { - if (!canCast()) { - bipedRightArm.rotateAngleX = -2 * (float)Math.PI/3; - bipedRightArm.offsetZ = 0.1f; - } - unicornArmRight.offsetZ = -0.1f; + + if (((EntityWitch)entity).isDrinkingPotion()) { + float noseRot = MathHelper.sin(entity.ticksExisted); + + snout.rotate(noseRot * 4.5F * 0.02F, 0, noseRot * 2.5F * 0.02F); + } else { + snout.rotate(0, 0, 0); } + + + if (rightArmPose != ArmPose.EMPTY) { + float rot = (float)(Math.tan(ticks / 7) + Math.sin(ticks / 3)); + if (rot > 1) rot = 1; + if (rot < -1) rot = -1; + + float legDrinkingAngle = -1 * PI/3 + rot; + + bipedRightArm.rotateAngleX = legDrinkingAngle; + bipedRightArmwear.rotateAngleX = legDrinkingAngle; + bipedRightArm.rotateAngleY = 0.1F; + bipedRightArmwear.rotateAngleY = 0.1F; + bipedRightArm.offsetZ = 0.1f; + bipedRightArmwear.offsetZ = 0.1f; + + if (rot > 0) rot = 0; + + bipedHead.rotateAngleX = -rot / 2; + bipedHeadwear.rotateAngleX = -rot / 2; + } else { + bipedRightArm.offsetZ = 0; + bipedRightArmwear.offsetZ = 0; + } + + } @Override diff --git a/src/main/java/com/minelittlepony/pony/data/PonyRace.java b/src/main/java/com/minelittlepony/pony/data/PonyRace.java index 508f8707..d0f973c8 100644 --- a/src/main/java/com/minelittlepony/pony/data/PonyRace.java +++ b/src/main/java/com/minelittlepony/pony/data/PonyRace.java @@ -10,7 +10,7 @@ public enum PonyRace implements ITriggerPixelMapped { UNICORN(0xd19fe4, PlayerModels.ALICORN, false, true), ALICORN(0xfef9fc, PlayerModels.ALICORN, true, true), CHANGELING(0x282b29, PlayerModels.ALICORN, true, true), - ZEBRA(0xd0cccf, PlayerModels.EARTH, false, false), + ZEBRA(0xd0cccf, PlayerModels.ZEBRA, false, false), REFORMED_CHANGELING(0xcaed5a, PlayerModels.ALICORN, true, true), GRIFFIN(0xae9145, PlayerModels.PEGASUS, true, false), HIPPOGRIFF(0xd6ddac, PlayerModels.PEGASUS, true, false); diff --git a/src/main/java/com/minelittlepony/render/ponies/RenderPonyWitch.java b/src/main/java/com/minelittlepony/render/ponies/RenderPonyWitch.java index cdfd4e3c..ccb72cac 100644 --- a/src/main/java/com/minelittlepony/render/ponies/RenderPonyWitch.java +++ b/src/main/java/com/minelittlepony/render/ponies/RenderPonyWitch.java @@ -30,7 +30,8 @@ public class RenderPonyWitch extends RenderPonyMob { GlStateManager.translate(-0.1F, 0.7F, 0); GlStateManager.rotate(110, 1, 0, 0); } else { - GlStateManager.translate(-0.2F, -0.3F, -0.7F); + GlStateManager.translate(0, -0.3F, -0.8F); + GlStateManager.rotate(10, 1, 0, 0); } } }; diff --git a/src/main/resources/assets/minelittlepony/textures/entity/witch_pony.png b/src/main/resources/assets/minelittlepony/textures/entity/witch_pony.png index 215d140060ac2ce9cb9b3e7d26a09349a8699960..e0743364e7eef06a2eb3b6ac69d35a324b1494a9 100644 GIT binary patch delta 745 zcmV* zIWH4p3n8mWNC4zkp4#6T9LoUIG8Yf1s`ADVfQGF6e0gy-SKWXH8t&E&KtLz}z*b&- ziBAYshCpco#TqZWkghyt09v{3Ofy+!<9JKY&dd*~E`N7m2Od7vWS%shUBAp=+*l2i-~#1~A4xvD&5ktQ~-< zwRu_RaL!3V0H*o934o6=@lB28uK)pcdfe_>YCi^f0D60?fU>Ggv5y2m9aoo)|3d=6R-9rV z2%sram;^OV8VdlN4krL(F5r4V6Fk7w6C?l$Kmw2eBmfCO0+0YC011F6Q5Phj%}d|U z*DeV_0?;r3n0E>&?;lXLb^tER=B~@`{N9lV;9|P>7d-&et`EQ0b@w;=9AMf7YJ>+s zAu#eDka9rk1^UJAv5(VM}^pt3&Emz_K z6g1SKN8$)buk(%7&`_o3?UZ6Dhv-o9*}dUn6wyf{@zy5Ptx&{bT^75P;3|r*{^l zFrL~80boB%3gGDM#aA4+W_ozChMDc7*QlQg9z*GOwGvPl3S`773` zwRd((GJ62W*MARt#_~Nq3k4t#Qq=>ve0q1z0D3li0IVr?3(c396aeiy6oB+2CbbL1 zo)t7Fs%ijaERUKze{-4L*RIpt+p4dBEac>oaz9x)e-Hre3|i7&^o{qq8# zGjtaa5h))tUC(mCi0$8Mwd#y@rHu?qYTxGj@^Zxu4(*>8z*1z-30j&g7J%0s27sB1 z_j|w+W|^5lzWTBK{{@{AxuKUErW^nO002ovPDHLkV1kVp1)%@{ From 5686608969d1a2f46688f72fc12ad2cc16e5a86e Mon Sep 17 00:00:00 2001 From: Sollace Date: Thu, 10 May 2018 18:24:27 +0200 Subject: [PATCH 02/10] Decompose ModelAlicorn into its constituents --- .../model/AbstractPonyModel.java | 38 ++-- .../model/capabilities/IModel.java | 15 ++ .../model/capabilities/IModelPegasus.java | 9 +- .../model/player/ModelAlicorn.java | 152 ++-------------- .../model/player/ModelPegasus.java | 53 +----- .../model/player/ModelUnicorn.java | 164 ++++++++++++++++++ .../render/player/RenderPonyBase.java | 2 +- 7 files changed, 224 insertions(+), 209 deletions(-) create mode 100644 src/main/java/com/minelittlepony/model/player/ModelUnicorn.java diff --git a/src/main/java/com/minelittlepony/model/AbstractPonyModel.java b/src/main/java/com/minelittlepony/model/AbstractPonyModel.java index 4a7b15b3..7372ae7f 100644 --- a/src/main/java/com/minelittlepony/model/AbstractPonyModel.java +++ b/src/main/java/com/minelittlepony/model/AbstractPonyModel.java @@ -52,7 +52,7 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { /** * Flag indicating that this model is performing a rainboom (flight). */ - public boolean rainboom; + protected boolean rainboom; public PlaneRenderer upperTorso; public PlaneRenderer neck; @@ -69,6 +69,13 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { return new PonyArmor(new ModelPonyArmor(), new ModelPonyArmor()); } + /** + * Checks flying and speed conditions and sets rainboom to true if we're a species with wings and is going faaast. + */ + protected void checkRainboom(Entity entity, float swing) { + rainboom = canFly() && isFlying(entity) && swing >= 0.9999F; + } + /** * Sets the model's various rotation angles. * @@ -82,6 +89,8 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { */ @Override public void setRotationAngles(float move, float swing, float ticks, float headYaw, float headPitch, float scale, Entity entity) { + checkRainboom(entity, swing); + super.setRotationAngles(move, swing, ticks, headYaw, headPitch, scale, entity); float headRotateAngleY = isSleeping ? 1.4f : headYaw / 57.29578F; @@ -100,7 +109,9 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { rotateLook(move, swing, bodySwingRotation, ticks); setLegs(move, swing, ticks, entity); - holdItem(swing); + if (!rainboom) { + holdItem(swing); + } swingItem(entity); if (isCrouching()) { @@ -224,8 +235,8 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { * */ protected void rotateLegsInFlight(float move, float swing, float ticks, Entity entity) { - float armX = MathHelper.sin(-swing / 2); - float legX = MathHelper.sin(swing / 2); + float armX = rainboom ? ROTATE_270 : MathHelper.sin(-swing / 2); + float legX = rainboom ? ROTATE_90 : MathHelper.sin(swing / 2); bipedLeftArm.rotateAngleX = armX; bipedRightArm.rotateAngleX = armX; @@ -655,23 +666,26 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { } @Override - public boolean isCrouching() { - return isSneak && !isFlying; + public IPonyData getMetadata() { + return metadata; } - /** - * Checks flying and speed conditions and sets rainboom to true if we're a species with wings and is going faaast. - */ - protected void checkRainboom(Entity entity, float swing) { - rainboom = isFlying(entity) && swing >= 0.9999F; + @Override + public boolean isCrouching() { + return !rainboom && isSneak && !isFlying; } @Override public boolean isFlying(Entity entity) { - return (isFlying && metadata.getRace().hasWings()) || + return (isFlying && canFly()) || (entity instanceof EntityLivingBase && ((EntityLivingBase) entity).isElytraFlying()); } + @Override + public boolean isGoingFast() { + return rainboom; + } + @Override public boolean isFlying() { return isFlying; diff --git a/src/main/java/com/minelittlepony/model/capabilities/IModel.java b/src/main/java/com/minelittlepony/model/capabilities/IModel.java index acc4e84c..38638a93 100644 --- a/src/main/java/com/minelittlepony/model/capabilities/IModel.java +++ b/src/main/java/com/minelittlepony/model/capabilities/IModel.java @@ -2,6 +2,7 @@ package com.minelittlepony.model.capabilities; import com.minelittlepony.model.BodyPart; import com.minelittlepony.model.armour.PonyArmor; +import com.minelittlepony.pony.data.IPonyData; import net.minecraft.entity.Entity; @@ -25,6 +26,8 @@ public interface IModel { */ PonyArmor createArmour(); + IPonyData getMetadata(); + /** * Returns true if this model is on the ground and crouching. */ @@ -40,6 +43,18 @@ public interface IModel { */ boolean isFlying(); + /** + * Returns true if we're flying really fast. + */ + boolean isGoingFast(); + + /** + * Returns true if this model is being applied to a race that has wings. + */ + default boolean canFly() { + return getMetadata().getRace().hasWings(); + } + /** * Returns true if the current model is a child or a child-like foal. */ diff --git a/src/main/java/com/minelittlepony/model/capabilities/IModelPegasus.java b/src/main/java/com/minelittlepony/model/capabilities/IModelPegasus.java index c2edccdb..e344b2cf 100644 --- a/src/main/java/com/minelittlepony/model/capabilities/IModelPegasus.java +++ b/src/main/java/com/minelittlepony/model/capabilities/IModelPegasus.java @@ -4,10 +4,7 @@ public interface IModelPegasus extends IModel { /** * Returns true if the wings are spread. */ - boolean wingsAreOpen(); - - /** - * Returns true if this model is being applied to a race that has wings. - */ - boolean canFly(); + default boolean wingsAreOpen() { + return isFlying() || isCrouching(); + } } diff --git a/src/main/java/com/minelittlepony/model/player/ModelAlicorn.java b/src/main/java/com/minelittlepony/model/player/ModelAlicorn.java index 5350c5fb..68d341b5 100644 --- a/src/main/java/com/minelittlepony/model/player/ModelAlicorn.java +++ b/src/main/java/com/minelittlepony/model/player/ModelAlicorn.java @@ -1,24 +1,13 @@ package com.minelittlepony.model.player; -import com.minelittlepony.model.components.UnicornHorn; -import com.minelittlepony.render.PonyRenderer; +import com.minelittlepony.model.components.PegasusWings; import net.minecraft.entity.Entity; -import net.minecraft.util.EnumHandSide; -import net.minecraft.util.math.MathHelper; -import com.minelittlepony.model.capabilities.IModelUnicorn; +import com.minelittlepony.model.capabilities.IModelPegasus; -import static com.minelittlepony.model.PonyModelConstants.*; +public class ModelAlicorn extends ModelUnicorn implements IModelPegasus { -/** - * Used for both unicorns and alicorns since there's no logical way to keep them distinct and not duplicate stuff. - */ -public class ModelAlicorn extends ModelPegasus implements IModelUnicorn { - - public PonyRenderer unicornArmRight; - public PonyRenderer unicornArmLeft; - - public UnicornHorn horn; + public PegasusWings wings; public ModelAlicorn(boolean smallArms) { super(smallArms); @@ -27,138 +16,23 @@ public class ModelAlicorn extends ModelPegasus implements IModelUnicorn { @Override public void init(float yOffset, float stretch) { super.init(yOffset, stretch); - horn = new UnicornHorn(this, yOffset, stretch); + wings = new PegasusWings(this, yOffset, stretch); } @Override - protected void rotateLegsOnGround(float move, float swing, float ticks, Entity entity) { - super.rotateLegsOnGround(move, swing, ticks, entity); + public void setRotationAngles(float move, float swing, float ticks, float headYaw, float headPitch, float scale, Entity entity) { + super.setRotationAngles(move, swing, ticks, headYaw, headPitch, scale, entity); - unicornArmRight.rotateAngleY = 0; - unicornArmLeft.rotateAngleY = 0; - } - - @Override - protected void adjustLegs(float move, float swing, float ticks) { - super.adjustLegs(move, swing, ticks); - - unicornArmLeft.rotateAngleZ = 0; - unicornArmRight.rotateAngleZ = 0; - - unicornArmLeft.rotateAngleX = 0; - unicornArmRight.rotateAngleX = 0; - } - - @Override - protected void holdItem(float swing) { - if (canCast()) { - boolean both = leftArmPose == ArmPose.ITEM && rightArmPose == ArmPose.ITEM; - - alignArmForAction(unicornArmLeft, leftArmPose, both, swing); - alignArmForAction(unicornArmRight, rightArmPose, both, swing); - } else { - super.holdItem(swing); + if (canFly()) { + wings.setRotationAngles(move, swing, ticks); } } @Override - protected void swingItem(Entity entity) { - EnumHandSide mainSide = getMainHand(entity); - - if (canCast() && getArmPoseForSide(mainSide) != ArmPose.EMPTY) { - if (swingProgress > -9990.0F && !isSleeping) { - swingArm(getUnicornArmForSide(mainSide)); - } - } else { - super.swingItem(entity); + protected void renderBody(Entity entity, float move, float swing, float ticks, float headYaw, float headPitch, float scale) { + super.renderBody(entity, move, swing, ticks, headYaw, headPitch, scale); + if (canFly()) { + wings.render(scale); } } - - @Override - protected void swingArms(float ticks) { - if (isSleeping) return; - - if (canCast()) { - float cos = MathHelper.cos(ticks * 0.09F) * 0.05F + 0.05F; - float sin = MathHelper.sin(ticks * 0.067F) * 0.05F; - - if (rightArmPose != ArmPose.EMPTY) { - unicornArmRight.rotateAngleZ += cos; - unicornArmRight.rotateAngleX += sin; - } - - if (leftArmPose != ArmPose.EMPTY) { - unicornArmLeft.rotateAngleZ += cos; - unicornArmLeft.rotateAngleX += sin; - } - } else { - super.swingArms(ticks); - } - } - - @Override - public PonyRenderer getUnicornArmForSide(EnumHandSide side) { - return side == EnumHandSide.LEFT ? unicornArmLeft : unicornArmRight; - } - - @Override - public boolean canCast() { - return metadata.hasMagic(); - } - - @Override - public boolean isCasting() { - return rightArmPose != ArmPose.EMPTY || leftArmPose != ArmPose.EMPTY; - } - - @Override - public int getMagicColor() { - return metadata.getGlowColor(); - } - - @Override - protected void sneakLegs() { - super.sneakLegs(); - unicornArmRight.rotateAngleX += SNEAK_LEG_X_ROTATION_ADJUSTMENT; - unicornArmLeft.rotateAngleX += SNEAK_LEG_X_ROTATION_ADJUSTMENT; - } - - @Override - protected void aimBow(ArmPose leftArm, ArmPose rightArm, float ticks) { - if (canCast()) { - if (rightArm == ArmPose.BOW_AND_ARROW) aimBowPony(unicornArmRight, ticks); - if (leftArm == ArmPose.BOW_AND_ARROW) aimBowPony(unicornArmLeft, ticks); - } else { - super.aimBow(leftArm, rightArm, ticks); - } - } - - @Override - protected void renderHead(Entity entity, float move, float swing, float ticks, float headYaw, float headPitch, float scale) { - super.renderHead(entity, move, swing, ticks, headYaw, headPitch, scale); - - if (canCast()) { - horn.render(scale); - if (isCasting()) { - horn.renderMagic(getMagicColor(), scale); - } - } - } - - @Override - protected void initLegTextures() { - super.initLegTextures(); - unicornArmLeft = new PonyRenderer(this, 40, 32).size(64, 64); - unicornArmRight = new PonyRenderer(this, 40, 32).size(64, 64); - } - - @Override - protected void initLegPositions(float yOffset, float stretch) { - super.initLegPositions(yOffset, stretch); - float armY = THIRDP_ARM_CENTRE_Y - 6; - float armZ = THIRDP_ARM_CENTRE_Z - 2; - - 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); - } } diff --git a/src/main/java/com/minelittlepony/model/player/ModelPegasus.java b/src/main/java/com/minelittlepony/model/player/ModelPegasus.java index 8fdadfb0..b24e9d7e 100644 --- a/src/main/java/com/minelittlepony/model/player/ModelPegasus.java +++ b/src/main/java/com/minelittlepony/model/player/ModelPegasus.java @@ -3,8 +3,6 @@ package com.minelittlepony.model.player; import com.minelittlepony.model.components.PegasusWings; import net.minecraft.entity.Entity; -import static com.minelittlepony.model.PonyModelConstants.*; - import com.minelittlepony.model.capabilities.IModelPegasus; public class ModelPegasus extends ModelEarthPony implements IModelPegasus { @@ -21,62 +19,15 @@ public class ModelPegasus extends ModelEarthPony implements IModelPegasus { wings = new PegasusWings(this, yOffset, stretch); } - @Override - public boolean isCrouching() { - return super.isCrouching() && !rainboom; - } - @Override public void setRotationAngles(float move, float swing, float ticks, float headYaw, float headPitch, float scale, Entity entity) { - checkRainboom(entity, swing); - super.setRotationAngles(move, swing, ticks, headYaw, headPitch, scale, entity); - - if (bipedCape != null) { - wings.setRotationAngles(move, swing, ticks); - } - } - - @Override - protected void rotateLegsInFlight(float move, float swing, float ticks, Entity entity) { - if (rainboom) { - bipedLeftArm.rotateAngleX = ROTATE_270; - bipedRightArm.rotateAngleX = ROTATE_270; - - bipedLeftLeg.rotateAngleX = ROTATE_90; - bipedRightLeg.rotateAngleX = ROTATE_90; - - bipedLeftArm.rotateAngleY = -0.2F; - bipedLeftLeg.rotateAngleY = 0.2F; - - bipedRightArm.rotateAngleY = 0.2F; - bipedRightLeg.rotateAngleY = -0.2F; - } else { - super.rotateLegsInFlight(move, swing, ticks, entity); - } - } - - protected void holdItem(float swing) { - if (!rainboom) { - super.holdItem(swing); - } + wings.setRotationAngles(move, swing, ticks); } @Override protected void renderBody(Entity entity, float move, float swing, float ticks, float headYaw, float headPitch, float scale) { super.renderBody(entity, move, swing, ticks, headYaw, headPitch, scale); - if (canFly()) { - wings.render(scale); - } - } - - @Override - public boolean wingsAreOpen() { - return isFlying || isCrouching(); - } - - @Override - public boolean canFly() { - return metadata.getRace().hasWings(); + wings.render(scale); } } diff --git a/src/main/java/com/minelittlepony/model/player/ModelUnicorn.java b/src/main/java/com/minelittlepony/model/player/ModelUnicorn.java new file mode 100644 index 00000000..d758a9c1 --- /dev/null +++ b/src/main/java/com/minelittlepony/model/player/ModelUnicorn.java @@ -0,0 +1,164 @@ +package com.minelittlepony.model.player; + +import com.minelittlepony.model.components.UnicornHorn; +import com.minelittlepony.render.PonyRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.math.MathHelper; + +import com.minelittlepony.model.capabilities.IModelUnicorn; + +import static com.minelittlepony.model.PonyModelConstants.*; + +/** + * Used for both unicorns and alicorns since there's no logical way to keep them distinct and not duplicate stuff. + */ +public class ModelUnicorn extends ModelEarthPony implements IModelUnicorn { + + public PonyRenderer unicornArmRight; + public PonyRenderer unicornArmLeft; + + public UnicornHorn horn; + + public ModelUnicorn(boolean smallArms) { + super(smallArms); + } + + @Override + public void init(float yOffset, float stretch) { + super.init(yOffset, stretch); + horn = new UnicornHorn(this, yOffset, stretch); + } + + @Override + protected void rotateLegsOnGround(float move, float swing, float ticks, Entity entity) { + super.rotateLegsOnGround(move, swing, ticks, entity); + + unicornArmRight.rotateAngleY = 0; + unicornArmLeft.rotateAngleY = 0; + } + + @Override + protected void adjustLegs(float move, float swing, float ticks) { + super.adjustLegs(move, swing, ticks); + + unicornArmLeft.rotateAngleZ = 0; + unicornArmRight.rotateAngleZ = 0; + + unicornArmLeft.rotateAngleX = 0; + unicornArmRight.rotateAngleX = 0; + } + + @Override + protected void holdItem(float swing) { + if (canCast()) { + boolean both = leftArmPose == ArmPose.ITEM && rightArmPose == ArmPose.ITEM; + + alignArmForAction(unicornArmLeft, leftArmPose, both, swing); + alignArmForAction(unicornArmRight, rightArmPose, both, swing); + } else { + super.holdItem(swing); + } + } + + @Override + protected void swingItem(Entity entity) { + EnumHandSide mainSide = getMainHand(entity); + + if (canCast() && getArmPoseForSide(mainSide) != ArmPose.EMPTY) { + if (swingProgress > -9990.0F && !isSleeping) { + swingArm(getUnicornArmForSide(mainSide)); + } + } else { + super.swingItem(entity); + } + } + + @Override + protected void swingArms(float ticks) { + if (isSleeping) return; + + if (canCast()) { + float cos = MathHelper.cos(ticks * 0.09F) * 0.05F + 0.05F; + float sin = MathHelper.sin(ticks * 0.067F) * 0.05F; + + if (rightArmPose != ArmPose.EMPTY) { + unicornArmRight.rotateAngleZ += cos; + unicornArmRight.rotateAngleX += sin; + } + + if (leftArmPose != ArmPose.EMPTY) { + unicornArmLeft.rotateAngleZ += cos; + unicornArmLeft.rotateAngleX += sin; + } + } else { + super.swingArms(ticks); + } + } + + @Override + public PonyRenderer getUnicornArmForSide(EnumHandSide side) { + return side == EnumHandSide.LEFT ? unicornArmLeft : unicornArmRight; + } + + @Override + public boolean canCast() { + return metadata.hasMagic(); + } + + @Override + public boolean isCasting() { + return rightArmPose != ArmPose.EMPTY || leftArmPose != ArmPose.EMPTY; + } + + @Override + public int getMagicColor() { + return metadata.getGlowColor(); + } + + @Override + protected void sneakLegs() { + super.sneakLegs(); + unicornArmRight.rotateAngleX += SNEAK_LEG_X_ROTATION_ADJUSTMENT; + unicornArmLeft.rotateAngleX += SNEAK_LEG_X_ROTATION_ADJUSTMENT; + } + + @Override + protected void aimBow(ArmPose leftArm, ArmPose rightArm, float ticks) { + if (canCast()) { + if (rightArm == ArmPose.BOW_AND_ARROW) aimBowPony(unicornArmRight, ticks); + if (leftArm == ArmPose.BOW_AND_ARROW) aimBowPony(unicornArmLeft, ticks); + } else { + super.aimBow(leftArm, rightArm, ticks); + } + } + + @Override + protected void renderHead(Entity entity, float move, float swing, float ticks, float headYaw, float headPitch, float scale) { + super.renderHead(entity, move, swing, ticks, headYaw, headPitch, scale); + + if (canCast()) { + horn.render(scale); + if (isCasting()) { + horn.renderMagic(getMagicColor(), scale); + } + } + } + + @Override + protected void initLegTextures() { + super.initLegTextures(); + unicornArmLeft = new PonyRenderer(this, 40, 32).size(64, 64); + unicornArmRight = new PonyRenderer(this, 40, 32).size(64, 64); + } + + @Override + protected void initLegPositions(float yOffset, float stretch) { + super.initLegPositions(yOffset, stretch); + float armY = THIRDP_ARM_CENTRE_Y - 6; + float armZ = THIRDP_ARM_CENTRE_Z - 2; + + 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); + } +} diff --git a/src/main/java/com/minelittlepony/render/player/RenderPonyBase.java b/src/main/java/com/minelittlepony/render/player/RenderPonyBase.java index 0a3f3447..3520a484 100644 --- a/src/main/java/com/minelittlepony/render/player/RenderPonyBase.java +++ b/src/main/java/com/minelittlepony/render/player/RenderPonyBase.java @@ -98,7 +98,7 @@ public abstract class RenderPonyBase extends RenderPlayer implements IRenderPony if (player.isEntityAlive() && player.isPlayerSleeping()) return; - if (ponyModel.rainboom) { + if (ponyModel.isGoingFast()) { transformPegasusFlight(player, motionX, motionY, motionZ, yaw, pitch, ticks); return; } From 72b3bce9502b183f515dbd4974b4ae2978267660 Mon Sep 17 00:00:00 2001 From: Sollace Date: Thu, 10 May 2018 18:26:07 +0200 Subject: [PATCH 03/10] Added Modelseapony (I will make sure this works later) --- .../model/ponies/ModelSeapony.java | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 src/main/java/com/minelittlepony/model/ponies/ModelSeapony.java diff --git a/src/main/java/com/minelittlepony/model/ponies/ModelSeapony.java b/src/main/java/com/minelittlepony/model/ponies/ModelSeapony.java new file mode 100644 index 00000000..1634ec9c --- /dev/null +++ b/src/main/java/com/minelittlepony/model/ponies/ModelSeapony.java @@ -0,0 +1,128 @@ +package com.minelittlepony.model.ponies; + +import com.minelittlepony.model.player.ModelUnicorn; +import com.minelittlepony.render.PonyRenderer; + +import net.minecraft.entity.Entity; + +public class ModelSeapony extends ModelUnicorn { + + PonyRenderer bodyCenter; + PonyRenderer bodyRear; + PonyRenderer bodyBack; + + PonyRenderer tail; + PonyRenderer tailFin; + + PonyRenderer leftFin; + PonyRenderer centerFin; + PonyRenderer rightFin; + + public ModelSeapony() { + super(false); + textureHeight = 64; + } + + @Override + protected void initLegTextures() { + super.initLegTextures(); + + // hide the back legs + bipedLeftLeg.showModel = false; + bipedRightLeg.showModel = false; + bipedLeftLegwear.showModel = false; + bipedRightLegwear.showModel = false; + + centerFin = new PonyRenderer(this, 58, 36); + leftFin = new PonyRenderer(this, 56, 8); + rightFin = new PonyRenderer(this, 56, 8); + } + + @Override + protected void initLegPositions(float yOffset, float stretch) { + super.initLegPositions(yOffset, stretch); + + centerFin.around(0, 1, 9) + .addBox(0, 0, 0, 0, 6, 6).flipX(); + + leftFin.rotate(0, 0.5235988F, 0).around(3, -6, 3) + .addBox(0, 0, 0, 0, 12, 8).flipX(); + + rightFin.rotate(0, -0.5235988F, 0).around(-3, -6, 3) + .addBox(0, 0, 0, 0, 12, 8).flipX(); + } + + @Override + protected void initTailTextures() { + tail = new PonyRenderer(this, 24, 0); + tailFin = new PonyRenderer(this, 56, 20); + } + + @Override + protected void initTailPositions(float yOffset, float stretch) { + tail.rotate(1.570796F, 0, 0).around(-1, 12.5F, 14) + .addBox(0, 0, 0, 2, 6, 1).flipX(); + tailFin.rotate(0, 0, -1.570796F).around(-2, 12, 18) + .addBox(0, -5, 0, 0, 14, 8).flipX(); + } + + @Override + protected void initBodyTextures() { + super.initBodyTextures(); + + bodyCenter = new PonyRenderer(this, 0, 48); + bodyBack = new PonyRenderer(this, 0, 16); + bodyRear = new PonyRenderer(this, 0, 38); + + } + + @Override + protected void initBodyPositions(float yOffset, float stretch) { + super.initBodyPositions(yOffset, stretch); + + bodyCenter.around(0, 6, 1) + .addBox(-3, -1, 0, 6, 7, 9).flipX(); + + bodyBack.around(-4, 2, -1) + .addBox(0, 0, 0, 8, 8, 4); + + bodyRear.rotate(1.570796F, 0, 0).around(-2, 14, 8) + .addBox(0, 0, 0, 4, 6, 4).flipX(); + } + + @Override + protected void renderBody(Entity entity, float move, float swing, float ticks, float headYaw, float headPitch, float scale) { + bipedBody.render(scale); + if (textureHeight == 64) { + bipedBodyWear.render(scale); + } + + bodyCenter.render(scale); + bodyRear.render(scale); + bodyBack.render(scale); + + bipedBody.postRender(scale); + + tail.render(scale); + tailFin.render(scale); + } + + @Override + protected void renderLegs() { + super.renderLegs(); + + leftFin.render(scale); + centerFin.render(scale); + rightFin.render(scale); + } + + @Override + public void setRotationAngles(float move, float swing, float ticks, float headYaw, float headPitch, float scale, Entity entity) { + super.setRotationAngles(move, swing, ticks, headYaw, headPitch, scale, entity); + } + + @Override + public boolean canFly() { + return false; + } +} From 8e1fb834f7b89174c0ca00dc729cd70df13b46a5 Mon Sep 17 00:00:00 2001 From: Sollace Date: Thu, 10 May 2018 18:34:55 +0200 Subject: [PATCH 04/10] (From the capes branch) Let's be a bit more sensible about flying --- .../com/minelittlepony/model/AbstractPonyModel.java | 13 +++---------- .../minelittlepony/model/capabilities/IModel.java | 7 ------- .../java/com/minelittlepony/pony/data/Pony.java | 2 +- .../com/minelittlepony/render/RenderPonyMob.java | 2 +- 4 files changed, 5 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/minelittlepony/model/AbstractPonyModel.java b/src/main/java/com/minelittlepony/model/AbstractPonyModel.java index 7372ae7f..93393814 100644 --- a/src/main/java/com/minelittlepony/model/AbstractPonyModel.java +++ b/src/main/java/com/minelittlepony/model/AbstractPonyModel.java @@ -17,7 +17,6 @@ import net.minecraft.client.model.ModelPlayer; import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.util.EnumHandSide; import net.minecraft.util.math.MathHelper; @@ -73,7 +72,7 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { * Checks flying and speed conditions and sets rainboom to true if we're a species with wings and is going faaast. */ protected void checkRainboom(Entity entity, float swing) { - rainboom = canFly() && isFlying(entity) && swing >= 0.9999F; + rainboom = isFlying() && swing >= 0.9999F; } /** @@ -213,7 +212,7 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { * */ protected void setLegs(float move, float swing, float ticks, Entity entity) { - if (isFlying(entity)) { + if (isFlying()) { rotateLegsInFlight(move, swing, ticks, entity); } else { rotateLegsOnGround(move, swing, ticks, entity); @@ -675,12 +674,6 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { return !rainboom && isSneak && !isFlying; } - @Override - public boolean isFlying(Entity entity) { - return (isFlying && canFly()) || - (entity instanceof EntityLivingBase && ((EntityLivingBase) entity).isElytraFlying()); - } - @Override public boolean isGoingFast() { return rainboom; @@ -688,7 +681,7 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { @Override public boolean isFlying() { - return isFlying; + return isFlying && canFly(); } @Override diff --git a/src/main/java/com/minelittlepony/model/capabilities/IModel.java b/src/main/java/com/minelittlepony/model/capabilities/IModel.java index 38638a93..193caa6a 100644 --- a/src/main/java/com/minelittlepony/model/capabilities/IModel.java +++ b/src/main/java/com/minelittlepony/model/capabilities/IModel.java @@ -4,8 +4,6 @@ import com.minelittlepony.model.BodyPart; import com.minelittlepony.model.armour.PonyArmor; import com.minelittlepony.pony.data.IPonyData; -import net.minecraft.entity.Entity; - public interface IModel { /** @@ -33,11 +31,6 @@ public interface IModel { */ boolean isCrouching(); - /** - * Returns true if the given entity can and is flying, or has an elytra. - */ - boolean isFlying(Entity entity); - /** * Returns true if the model is flying. */ diff --git a/src/main/java/com/minelittlepony/pony/data/Pony.java b/src/main/java/com/minelittlepony/pony/data/Pony.java index 270e3d1e..7d17eb5f 100644 --- a/src/main/java/com/minelittlepony/pony/data/Pony.java +++ b/src/main/java/com/minelittlepony/pony/data/Pony.java @@ -100,7 +100,7 @@ public class Pony { //noinspection SimplifiableIfStatement if (!getRace(false).hasWings()) return false; - return player.capabilities.isFlying || !(player.onGround || player.isRiding() || player.isOnLadder() || player.isInWater() || player.isElytraFlying()); + return player.capabilities.isFlying || !(player.onGround || player.isRiding() || player.isOnLadder() || player.isInWater()); } public ModelWrapper getModel(boolean ignorePony) { diff --git a/src/main/java/com/minelittlepony/render/RenderPonyMob.java b/src/main/java/com/minelittlepony/render/RenderPonyMob.java index 0efe0f9e..5513e416 100644 --- a/src/main/java/com/minelittlepony/render/RenderPonyMob.java +++ b/src/main/java/com/minelittlepony/render/RenderPonyMob.java @@ -53,7 +53,7 @@ public abstract class RenderPonyMob extends RenderLiving @Override protected void preRenderCallback(T entity, float ticks) { playerModel.getModel().isSneak = entity.isSneaking(); - playerModel.getModel().isFlying = !entity.onGround; + playerModel.getModel().isFlying = !entity.onGround || entity.isElytraFlying(); playerModel.getModel().isSleeping = false; ResourceLocation loc = getEntityTexture(entity); From cc6dfaf772bb22968b5d58e82f2795ac4e72e782 Mon Sep 17 00:00:00 2001 From: Sollace Date: Thu, 10 May 2018 18:35:16 +0200 Subject: [PATCH 05/10] Texture for the seapony --- .../minelittlepony/textures/entity/seapony.png | Bin 0 -> 767 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/minelittlepony/textures/entity/seapony.png diff --git a/src/main/resources/assets/minelittlepony/textures/entity/seapony.png b/src/main/resources/assets/minelittlepony/textures/entity/seapony.png new file mode 100644 index 0000000000000000000000000000000000000000..eb708a48085eec3f13c0230c9e215eed190f1330 GIT binary patch literal 767 zcmVVGd000McNliru;sP1~G%mHk3W@*#0*pyS zK~#9!?OHKw!ax*$7cvG)K~Sgeu7wUoa4LcsJLV@icM$E=*ni^creJX@;?N)9?$j0> z?VJw!!g=OQG&z&Imj|V}Cfd9&-}k+DcVQ3{!`U_fh0$+23~~$$h=&aT@c8-_xXp%= zr!iTq3Jm~5isOwg-yRqx3D}sp+idIrpe6xKyy#Rd8K4RP)cg`?hAlI>e%pcJY#Sc$ z4N*GAV=c>|EO|^c2zD5~fBYSc8Dk+3x`JR!xM0Lr+aPa4 zO%fsqR@M~EBhr|&okZ`lr(Xn9Ji3Sd>ei_;%liS@H9?dD2>_zp->52(h6Q8*kgAn5@}cho-sge<7m>R{)+D5*Ml^Wzi8vGEMxb Date: Fri, 11 May 2018 13:52:42 +0200 Subject: [PATCH 06/10] Guardians are now seaponies! --- .../java/com/minelittlepony/PonyConfig.java | 1 + .../com/minelittlepony/PonyRenderManager.java | 16 +- .../model/AbstractPonyModel.java | 9 +- .../java/com/minelittlepony/model/PMAPI.java | 3 + .../model/capabilities/IModelPart.java | 22 +++ .../model/components/ModelWing.java | 6 +- .../model/components/PegasusWings.java | 13 +- .../model/components/PonyTail.java | 14 +- .../model/components/SeaponyTail.java | 62 +++++++ .../model/player/ModelAlicorn.java | 2 +- .../model/player/ModelPegasus.java | 2 +- .../model/ponies/ModelSeapony.java | 153 ++++++++++-------- .../minelittlepony/render/RenderPonyMob.java | 20 +++ .../render/ponies/RenderPonyGuardian.java | 72 +++++++++ 14 files changed, 306 insertions(+), 89 deletions(-) create mode 100644 src/main/java/com/minelittlepony/model/capabilities/IModelPart.java create mode 100644 src/main/java/com/minelittlepony/model/components/SeaponyTail.java create mode 100644 src/main/java/com/minelittlepony/render/ponies/RenderPonyGuardian.java diff --git a/src/main/java/com/minelittlepony/PonyConfig.java b/src/main/java/com/minelittlepony/PonyConfig.java index 70a513e3..1f72a40b 100644 --- a/src/main/java/com/minelittlepony/PonyConfig.java +++ b/src/main/java/com/minelittlepony/PonyConfig.java @@ -23,6 +23,7 @@ public class PonyConfig implements Exposable { @Expose public boolean pigzombies = true; @Expose public boolean skeletons = true; @Expose public boolean illagers = true; + @Expose public boolean guardians = true; /** * Gets the current PonyLevel. That is the level of ponies you would like to see. diff --git a/src/main/java/com/minelittlepony/PonyRenderManager.java b/src/main/java/com/minelittlepony/PonyRenderManager.java index 554d7ce7..5045a2e9 100644 --- a/src/main/java/com/minelittlepony/PonyRenderManager.java +++ b/src/main/java/com/minelittlepony/PonyRenderManager.java @@ -9,6 +9,7 @@ import com.minelittlepony.hdskins.gui.RenderPonyModel; import com.minelittlepony.model.player.PlayerModels; import com.minelittlepony.render.LevitatingItemRenderer; import com.minelittlepony.render.player.RenderPonyPlayer; +import com.minelittlepony.render.ponies.RenderPonyGuardian; import com.minelittlepony.render.ponies.RenderPonyIllager; import com.minelittlepony.render.ponies.RenderPonyPigman; import com.minelittlepony.render.ponies.RenderPonySkeleton; @@ -22,8 +23,10 @@ import com.mumfrey.liteloader.util.ModUtilities; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.entity.Entity; +import net.minecraft.entity.monster.EntityElderGuardian; import net.minecraft.entity.monster.EntityEvoker; import net.minecraft.entity.monster.EntityGiantZombie; +import net.minecraft.entity.monster.EntityGuardian; import net.minecraft.entity.monster.EntityHusk; import net.minecraft.entity.monster.EntityIllusionIllager; import net.minecraft.entity.monster.EntityPigZombie; @@ -129,6 +132,14 @@ public class PonyRenderManager { restoreRenderer(EntityVindicator.class); restoreRenderer(EntityIllusionIllager.class); } + + if (config.guardians) { + pushNewRenderer(manager, EntityGuardian.class, new RenderPonyGuardian(manager)); + pushNewRenderer(manager, EntityElderGuardian.class, new RenderPonyGuardian.Elder(manager)); + } else { + restoreRenderer(EntityGuardian.class); + restoreRenderer(EntityElderGuardian.class); + } } /** @@ -138,11 +149,12 @@ public class PonyRenderManager { * @param renderer The replacement value * @param The entity type */ - public void pushNewRenderer(RenderManager manager, Class type, Render renderer) { + @SuppressWarnings("unchecked") + public void pushNewRenderer(RenderManager manager, Class type, Render renderer) { if (!renderMap.containsKey(type)) { renderMap.put(type, manager.getEntityClassRenderObject(type)); } - ModUtilities.addRenderer(type, renderer); + ModUtilities.addRenderer((Class)type, renderer); } /** diff --git a/src/main/java/com/minelittlepony/model/AbstractPonyModel.java b/src/main/java/com/minelittlepony/model/AbstractPonyModel.java index 93393814..968a8023 100644 --- a/src/main/java/com/minelittlepony/model/AbstractPonyModel.java +++ b/src/main/java/com/minelittlepony/model/AbstractPonyModel.java @@ -3,6 +3,7 @@ package com.minelittlepony.model; import com.minelittlepony.model.armour.ModelPonyArmor; import com.minelittlepony.model.armour.PonyArmor; import com.minelittlepony.model.capabilities.IModel; +import com.minelittlepony.model.capabilities.IModelPart; import com.minelittlepony.model.components.PonySnout; import com.minelittlepony.model.components.PonyTail; import com.minelittlepony.pony.data.IPonyData; @@ -56,7 +57,7 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { public PlaneRenderer upperTorso; public PlaneRenderer neck; - public PonyTail tail; + public IModelPart tail; public PonySnout snout; public AbstractPonyModel(boolean arms) { @@ -730,11 +731,11 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { * @param scale Scaling factor used to render this model. Determined by the return value of {@link RenderLivingBase.prepareScale}. Usually {@code 0.0625F}. */ @Override - public void render(Entity entityIn, float move, float swing, float ticks, float headYaw, float headPitch, float scale) { + public void render(Entity entity, float move, float swing, float ticks, float headYaw, float headPitch, float scale) { pushMatrix(); transform(BodyPart.HEAD); - renderHead(entityIn, move, swing, ticks, headYaw, headPitch, this.scale); + renderHead(entity, move, swing, ticks, headYaw, headPitch, scale); popMatrix(); pushMatrix(); @@ -744,7 +745,7 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { pushMatrix(); transform(BodyPart.BODY); - renderBody(entityIn, move, swing, ticks, headYaw, headPitch, this.scale); + renderBody(entity, move, swing, ticks, headYaw, headPitch, scale); popMatrix(); pushMatrix(); diff --git a/src/main/java/com/minelittlepony/model/PMAPI.java b/src/main/java/com/minelittlepony/model/PMAPI.java index 945dcec5..11cea302 100644 --- a/src/main/java/com/minelittlepony/model/PMAPI.java +++ b/src/main/java/com/minelittlepony/model/PMAPI.java @@ -5,6 +5,7 @@ import com.minelittlepony.model.player.ModelEarthPony; import com.minelittlepony.model.player.ModelPegasus; import com.minelittlepony.model.player.ModelZebra; import com.minelittlepony.model.ponies.ModelIllagerPony; +import com.minelittlepony.model.ponies.ModelSeapony; import com.minelittlepony.model.ponies.ModelSkeletonPony; import com.minelittlepony.model.ponies.ModelVillagerPony; import com.minelittlepony.model.ponies.ModelWitchPony; @@ -34,6 +35,8 @@ public final class PMAPI { public static final ModelWrapper zebra = new ModelWrapper(new ModelZebra(false)); public static final ModelWrapper zebraSmall = new ModelWrapper(new ModelZebra(true)); + public static final ModelWrapper seapony = new ModelWrapper(new ModelSeapony()); + public static final ModelWrapper zombie = new ModelWrapper(new ModelZombiePony()); public static final ModelWrapper skeleton = new ModelWrapper(new ModelSkeletonPony()); public static final ModelWrapper villager = new ModelWrapper(new ModelVillagerPony()); diff --git a/src/main/java/com/minelittlepony/model/capabilities/IModelPart.java b/src/main/java/com/minelittlepony/model/capabilities/IModelPart.java new file mode 100644 index 00000000..bf8c0af3 --- /dev/null +++ b/src/main/java/com/minelittlepony/model/capabilities/IModelPart.java @@ -0,0 +1,22 @@ +package com.minelittlepony.model.capabilities; + +public interface IModelPart { + /** + * Initialises all of the boxes in this modelpart. + * @param yOffset + * @param stretch + */ + void init(float yOffset, float stretch); + + /** + * Sets the model's various rotation angles. + * + * See {@link AbstractPonyMode.setRotationAndAngle} for an explanation of the various parameters. + */ + void setRotationAndAngles(boolean rainboom, float move, float swing, float bodySwing, float ticks); + + /** + * Renders this model component. + */ + void render(float scale); +} diff --git a/src/main/java/com/minelittlepony/model/components/ModelWing.java b/src/main/java/com/minelittlepony/model/components/ModelWing.java index 3f602d73..6733b55d 100644 --- a/src/main/java/com/minelittlepony/model/components/ModelWing.java +++ b/src/main/java/com/minelittlepony/model/components/ModelWing.java @@ -24,9 +24,9 @@ public class ModelWing { } private void addClosedWing(float x, float y, float scale) { - folded.box(x, 5f, 2, 2, 6, 2, scale) - .box(x, 5f, 4, 2, 8, 2, scale) - .box(x, 5f, 6, 2, 6, 2, scale) + folded.box(x, 5, 2, 2, 6, 2, scale) + .box(x, 5, 4, 2, 8, 2, scale) + .box(x, 5, 6, 2, 6, 2, scale) .rotateAngleX = ROTATE_90; } diff --git a/src/main/java/com/minelittlepony/model/components/PegasusWings.java b/src/main/java/com/minelittlepony/model/components/PegasusWings.java index 9846c2bd..0d3b69c9 100644 --- a/src/main/java/com/minelittlepony/model/components/PegasusWings.java +++ b/src/main/java/com/minelittlepony/model/components/PegasusWings.java @@ -5,9 +5,10 @@ import net.minecraft.util.math.MathHelper; import static com.minelittlepony.model.PonyModelConstants.*; import com.minelittlepony.model.AbstractPonyModel; +import com.minelittlepony.model.capabilities.IModelPart; import com.minelittlepony.model.capabilities.IModelPegasus; -public class PegasusWings { +public class PegasusWings implements IModelPart { private final IModelPegasus pegasus; @@ -21,7 +22,14 @@ public class PegasusWings { rightWing = new ModelWing(model, true, -6f, yOffset, stretch, 16); } - public void setRotationAngles(float move, float swing, float ticks) { + + @Override + public void init(float yOffset, float stretch) { + + } + + @Override + public void setRotationAndAngles(boolean rainboom, float move, float swing, float bodySwing, float ticks) { float flap = 0; float progress = pegasus.getSwingAmount(); @@ -54,6 +62,7 @@ public class PegasusWings { return LEFT_WING_ROTATE_ANGLE_Z_SNEAK; } + @Override public void render(float scale) { boolean standing = pegasus.wingsAreOpen(); leftWing.render(standing, scale); diff --git a/src/main/java/com/minelittlepony/model/components/PonyTail.java b/src/main/java/com/minelittlepony/model/components/PonyTail.java index c806149c..daaabff9 100644 --- a/src/main/java/com/minelittlepony/model/components/PonyTail.java +++ b/src/main/java/com/minelittlepony/model/components/PonyTail.java @@ -6,9 +6,10 @@ import net.minecraft.util.math.MathHelper; import static com.minelittlepony.model.PonyModelConstants.*; import com.minelittlepony.model.AbstractPonyModel; +import com.minelittlepony.model.capabilities.IModelPart; import com.minelittlepony.render.plane.PlaneRenderer; -public class PonyTail extends PlaneRenderer { +public class PonyTail extends PlaneRenderer implements IModelPart { private static final int SEGMENTS = 4; @@ -21,17 +22,14 @@ public class PonyTail extends PlaneRenderer { theModel = model; } + @Override public void init(float yOffset, float stretch) { for (int i = 0; i < SEGMENTS; i++) { addChild(new TailSegment(theModel, i, yOffset, stretch)); } } - /** - * Sets the model's various rotation angles. - * - * See {@link AbstractPonyMode.setRotationAndAngle} for an explanation of the various parameters. - */ + @Override public void setRotationAndAngles(boolean rainboom, float move, float swing, float bodySwing, float ticks) { rotateAngleZ = rainboom ? 0 : MathHelper.cos(move * 0.8F) * 0.2f * swing; rotateAngleY = bodySwing; @@ -63,13 +61,13 @@ public class PonyTail extends PlaneRenderer { tailStop = theModel.metadata.getTail().ordinal(); } - public void swingX(float ticks) { + private void swingX(float ticks) { float sinTickFactor = MathHelper.sin(ticks * 0.067f) * 0.05f; rotateAngleX += sinTickFactor; rotateAngleY += sinTickFactor; } - public void rotateSneak() { + private void rotateSneak() { setRotationPoint(TAIL_RP_X, TAIL_RP_Y, TAIL_RP_Z_SNEAK); rotateAngleX = -BODY_ROTATE_ANGLE_X_SNEAK + 0.1F; } diff --git a/src/main/java/com/minelittlepony/model/components/SeaponyTail.java b/src/main/java/com/minelittlepony/model/components/SeaponyTail.java new file mode 100644 index 00000000..af6fbf49 --- /dev/null +++ b/src/main/java/com/minelittlepony/model/components/SeaponyTail.java @@ -0,0 +1,62 @@ +package com.minelittlepony.model.components; + +import com.minelittlepony.model.AbstractPonyModel; +import com.minelittlepony.model.capabilities.IModelPart; +import com.minelittlepony.render.PonyRenderer; +import com.minelittlepony.render.plane.PlaneRenderer; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.math.MathHelper; + +import static com.minelittlepony.model.PonyModelConstants.*; + +public class SeaponyTail implements IModelPart { + + private static final float TAIL_ROTX = PI / 2; + + private PonyRenderer tailBase; + + private PlaneRenderer tailTip; + private PlaneRenderer tailFins; + + public SeaponyTail(AbstractPonyModel model) { + tailBase = new PonyRenderer(model, 0, 38); + tailTip = new PlaneRenderer(model, 24, 0); + tailFins = new PlaneRenderer(model, 56, 20); + + tailBase.addChild(tailTip); + tailTip.addChild(tailFins); + } + + @Override + public void init(float yOffset, float stretch) { + tailBase.rotate(TAIL_ROTX, 0, 0).around(-2, 14, 8) + .box( 0, 0, 0, 4, 6, 4, stretch).flipX(); + + tailTip.rotate(0, 0, 0).around(1, 5, 1) + .box(0, 0, 0, 2, 6, 1, stretch); + + tailFins.offset(1, 0, 4).rotate(-TAIL_ROTX, 0, 0) + .addTopPlane(-8, 0, 0, 8, 8, stretch) + .flipX().addTopPlane( 0, 0, 0, 8, 8, stretch); + } + + @Override + public void setRotationAndAngles(boolean rainboom, float move, float swing, float bodySwing, float ticks) { + float rotation = MathHelper.sin(ticks * 0.536f) / 4; + + tailBase.offset(0, -4, -2).around(-2, 10, 8); + + tailBase.rotateAngleX = TAIL_ROTX + rotation; + tailTip.rotateAngleX = rotation; + tailFins.rotateAngleX = rotation - TAIL_ROTX; + } + + @Override + public void render(float scale) { + GlStateManager.enableBlend(); + tailBase.render(scale); + GlStateManager.disableBlend(); + } + +} diff --git a/src/main/java/com/minelittlepony/model/player/ModelAlicorn.java b/src/main/java/com/minelittlepony/model/player/ModelAlicorn.java index 68d341b5..0ee19fd8 100644 --- a/src/main/java/com/minelittlepony/model/player/ModelAlicorn.java +++ b/src/main/java/com/minelittlepony/model/player/ModelAlicorn.java @@ -24,7 +24,7 @@ public class ModelAlicorn extends ModelUnicorn implements IModelPegasus { super.setRotationAngles(move, swing, ticks, headYaw, headPitch, scale, entity); if (canFly()) { - wings.setRotationAngles(move, swing, ticks); + wings.setRotationAndAngles(rainboom, move, swing, 0, ticks); } } diff --git a/src/main/java/com/minelittlepony/model/player/ModelPegasus.java b/src/main/java/com/minelittlepony/model/player/ModelPegasus.java index b24e9d7e..cae65052 100644 --- a/src/main/java/com/minelittlepony/model/player/ModelPegasus.java +++ b/src/main/java/com/minelittlepony/model/player/ModelPegasus.java @@ -22,7 +22,7 @@ public class ModelPegasus extends ModelEarthPony implements IModelPegasus { @Override public void setRotationAngles(float move, float swing, float ticks, float headYaw, float headPitch, float scale, Entity entity) { super.setRotationAngles(move, swing, ticks, headYaw, headPitch, scale, entity); - wings.setRotationAngles(move, swing, ticks); + wings.setRotationAndAngles(rainboom, move, swing, 0, ticks); } @Override diff --git a/src/main/java/com/minelittlepony/model/ponies/ModelSeapony.java b/src/main/java/com/minelittlepony/model/ponies/ModelSeapony.java index 1634ec9c..cab34a7d 100644 --- a/src/main/java/com/minelittlepony/model/ponies/ModelSeapony.java +++ b/src/main/java/com/minelittlepony/model/ponies/ModelSeapony.java @@ -1,22 +1,25 @@ package com.minelittlepony.model.ponies; +import com.minelittlepony.model.components.SeaponyTail; import com.minelittlepony.model.player.ModelUnicorn; import com.minelittlepony.render.PonyRenderer; +import com.minelittlepony.render.plane.PlaneRenderer; +import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +import static com.minelittlepony.model.PonyModelConstants.*; public class ModelSeapony extends ModelUnicorn { + private static final float FIN_ROTY = PI / 6; + PonyRenderer bodyCenter; - PonyRenderer bodyRear; - PonyRenderer bodyBack; - PonyRenderer tail; - PonyRenderer tailFin; - - PonyRenderer leftFin; - PonyRenderer centerFin; - PonyRenderer rightFin; + PlaneRenderer leftFin; + PlaneRenderer centerFin; + PlaneRenderer rightFin; public ModelSeapony() { super(false); @@ -26,103 +29,117 @@ public class ModelSeapony extends ModelUnicorn { @Override protected void initLegTextures() { super.initLegTextures(); - // hide the back legs bipedLeftLeg.showModel = false; bipedRightLeg.showModel = false; bipedLeftLegwear.showModel = false; bipedRightLegwear.showModel = false; - centerFin = new PonyRenderer(this, 58, 36); - leftFin = new PonyRenderer(this, 56, 8); - rightFin = new PonyRenderer(this, 56, 8); + centerFin = new PlaneRenderer(this, 58, 28); + leftFin = new PlaneRenderer(this, 56, 16); + rightFin = new PlaneRenderer(this, 56, 16); } @Override protected void initLegPositions(float yOffset, float stretch) { super.initLegPositions(yOffset, stretch); - centerFin.around(0, 1, 9) - .addBox(0, 0, 0, 0, 6, 6).flipX(); + centerFin.rotate(PI / 2 - 0.1F, 0, 0).around(0, 6, 9) + .addEastPlane(0, -6, 0, 12, 6, stretch); - leftFin.rotate(0, 0.5235988F, 0).around(3, -6, 3) - .addBox(0, 0, 0, 0, 12, 8).flipX(); + leftFin.rotate(0, FIN_ROTY, 0).around(3, -6, 3) + .flipZ().addEastPlane(0, 0, 0, 12, 8, stretch); - rightFin.rotate(0, -0.5235988F, 0).around(-3, -6, 3) - .addBox(0, 0, 0, 0, 12, 8).flipX(); + rightFin.rotate(0, -FIN_ROTY, 0).around(-3, -6, 3) + .addWestPlane(0, 0, 0, 12, 8, stretch); } @Override protected void initTailTextures() { - tail = new PonyRenderer(this, 24, 0); - tailFin = new PonyRenderer(this, 56, 20); - } - - @Override - protected void initTailPositions(float yOffset, float stretch) { - tail.rotate(1.570796F, 0, 0).around(-1, 12.5F, 14) - .addBox(0, 0, 0, 2, 6, 1).flipX(); - tailFin.rotate(0, 0, -1.570796F).around(-2, 12, 18) - .addBox(0, -5, 0, 0, 14, 8).flipX(); + tail = new SeaponyTail(this); } @Override protected void initBodyTextures() { super.initBodyTextures(); - bodyCenter = new PonyRenderer(this, 0, 48); - bodyBack = new PonyRenderer(this, 0, 16); - bodyRear = new PonyRenderer(this, 0, 38); - } @Override protected void initBodyPositions(float yOffset, float stretch) { super.initBodyPositions(yOffset, stretch); - bodyCenter.around(0, 6, 1) - .addBox(-3, -1, 0, 6, 7, 9).flipX(); - - bodyBack.around(-4, 2, -1) - .addBox(0, 0, 0, 8, 8, 4); - - bodyRear.rotate(1.570796F, 0, 0).around(-2, 14, 8) - .addBox(0, 0, 0, 4, 6, 4).flipX(); - } - - @Override - protected void renderBody(Entity entity, float move, float swing, float ticks, float headYaw, float headPitch, float scale) { - bipedBody.render(scale); - if (textureHeight == 64) { - bipedBodyWear.render(scale); - } - - bodyCenter.render(scale); - bodyRear.render(scale); - bodyBack.render(scale); - - bipedBody.postRender(scale); - - tail.render(scale); - tailFin.render(scale); - } - - @Override - protected void renderLegs() { - super.renderLegs(); - - leftFin.render(scale); - centerFin.render(scale); - rightFin.render(scale); + .box(-3, -1, 0, 6, 7, 9, stretch).flipX(); } @Override public void setRotationAngles(float move, float swing, float ticks, float headYaw, float headPitch, float scale, Entity entity) { super.setRotationAngles(move, swing, ticks, headYaw, headPitch, scale, entity); + + float finAngle = FIN_ROTY + MathHelper.cos(ticks / 10) / 5; + + leftFin.rotateAngleY = finAngle; + rightFin.rotateAngleY = -finAngle; + centerFin.rotateAngleZ = MathHelper.cos(ticks / 10) / 5; + + if (!entity.isInWater()) { + bipedLeftArm.rotateAngleX -= 0.5F; + bipedRightArm.rotateAngleX -= 0.5F; + } + + if (!entity.isInWater() || entity.onGround) { + bipedLeftArm.rotateAngleY -= 0.5F; + bipedRightArm.rotateAngleY += 0.5F; + } + } + + protected void fixSpecialRotationPoints(float move) { + bipedLeftArm.rotateAngleX -= 1.4F; + bipedLeftArm.rotateAngleY -= 0.3F; + bipedRightArm.rotateAngleX -= 1.4F; + bipedRightArm.rotateAngleY += 0.3F; } @Override - public boolean canFly() { - return false; + public void render(Entity entity, float move, float swing, float ticks, float headYaw, float headPitch, float scale) { + GlStateManager.pushMatrix(); + GlStateManager.translate(0, 0.6F, 0); + super.render(entity, move, swing, ticks, headYaw, headPitch, scale); + GlStateManager.popMatrix(); + } + + @Override + protected void renderBody(Entity entity, float move, float swing, float ticks, float headYaw, float headPitch, float scale) { + bipedBody.render(scale); + bodyCenter.render(scale); + bipedBody.postRender(scale); + + tail.render(scale); + + GlStateManager.enableBlend(); + + + leftFin.render(scale); + centerFin.render(scale); + rightFin.render(scale); + + GlStateManager.disableBlend(); + + } + + @Override + public boolean canCast() { + return true; + } + + @Override + public void setVisible(boolean visible) { + super.setVisible(visible); + + // hide the back legs + bipedLeftLeg.showModel = false; + bipedRightLeg.showModel = false; + bipedLeftLegwear.showModel = false; + bipedRightLegwear.showModel = false; } } diff --git a/src/main/java/com/minelittlepony/render/RenderPonyMob.java b/src/main/java/com/minelittlepony/render/RenderPonyMob.java index 5513e416..cc3382c6 100644 --- a/src/main/java/com/minelittlepony/render/RenderPonyMob.java +++ b/src/main/java/com/minelittlepony/render/RenderPonyMob.java @@ -95,4 +95,24 @@ public abstract class RenderPonyMob extends RenderLiving } protected abstract ResourceLocation getTexture(T entity); + + public abstract static class Proxy extends RenderPonyMob { + + public Proxy(RenderManager manager, ModelWrapper model) { + super(manager, model); + } + + @Override + protected void addLayers() { + + } + + public void preRenderCallback(T entity, float ticks) { + super.preRenderCallback(entity, ticks); + } + + public final ResourceLocation getTextureFor(T entity) { + return super.getEntityTexture(entity); + } + } } diff --git a/src/main/java/com/minelittlepony/render/ponies/RenderPonyGuardian.java b/src/main/java/com/minelittlepony/render/ponies/RenderPonyGuardian.java new file mode 100644 index 00000000..ffd0040e --- /dev/null +++ b/src/main/java/com/minelittlepony/render/ponies/RenderPonyGuardian.java @@ -0,0 +1,72 @@ +package com.minelittlepony.render.ponies; + +import javax.annotation.Nonnull; + +import com.minelittlepony.model.PMAPI; +import com.minelittlepony.render.RenderPonyMob; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderGuardian; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.monster.EntityElderGuardian; +import net.minecraft.entity.monster.EntityGuardian; +import net.minecraft.util.ResourceLocation; + +public class RenderPonyGuardian extends RenderGuardian { + + public static final ResourceLocation SEAPONY = new ResourceLocation("minelittlepony", "textures/entity/seapony.png"); + + private RenderPonyMob.Proxy ponyRenderer; + + public RenderPonyGuardian(RenderManager manager) { + super(manager); + mainModel = PMAPI.seapony.getModel(); + + ponyRenderer = new RenderPonyMob.Proxy(manager, PMAPI.seapony) { + @Override + protected ResourceLocation getTexture(EntityGuardian entity) { + return RenderPonyGuardian.this.getTexture(entity); + } + }; + } + + @Override + @Nonnull + protected final ResourceLocation getEntityTexture(EntityGuardian entity) { + return ponyRenderer.getTextureFor(entity); + } + + @Override + protected void preRenderCallback(EntityGuardian entity, float ticks) { + ponyRenderer.preRenderCallback(entity, ticks); + } + + public void doRender(EntityGuardian entity, double x, double y, double z, float entityYaw, float partialTicks) { + float origin = entity.height; + + // aligns the beam to their horns + entity.height = entity instanceof EntityElderGuardian ? 6 : 3; + super.doRender(entity, x, y, z, entityYaw, partialTicks); + + // The beams in RenderGuardian leave lighting disabled, so we need to change it back. #MojangPls + GlStateManager.enableLighting(); + entity.height = origin; + } + + protected ResourceLocation getTexture(EntityGuardian entity) { + return SEAPONY; + } + + public static class Elder extends RenderPonyGuardian { + + public Elder(RenderManager manager) { + super(manager); + } + + @Override + protected void preRenderCallback(EntityGuardian entity, float ticks) { + super.preRenderCallback(entity, ticks); + GlStateManager.scale(2.35F, 2.35F, 2.35F); + } + } +} From 76044f17e667c50cb9ea423e4c2a3e26bb2cbdc6 Mon Sep 17 00:00:00 2001 From: Sollace Date: Fri, 11 May 2018 13:53:04 +0200 Subject: [PATCH 07/10] Fix some errors with the seapony texture --- .../minelittlepony/textures/entity/seapony.png | Bin 767 -> 709 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/minelittlepony/textures/entity/seapony.png b/src/main/resources/assets/minelittlepony/textures/entity/seapony.png index eb708a48085eec3f13c0230c9e215eed190f1330..071b06d4e73318b723f12c2028fca797be6e9bbb 100644 GIT binary patch delta 686 zcmV;f0#W_{1;quBBYy&nNklZQ+HRPLlK;cV8)LA3CB{wr7SuE*f?(>vfIPx%riu4!Hb}D2KVYZsR$Q9p^?+9NTos1aUKvx0RT}1c|cg%^1f^_gIR?G5Ek=1-9_qK-2BC6ms=C65V$loReO}qxO7~q z_8?^y0$G>Caa6Zb{AO8}(c~FWg+LL7Oqnu;aVKr(%a$n&nHQr%N;G6$s4DfqAIO_% UP4$=LL;wH)07*qoM6N<$g0O=*TmS$7 delta 744 zcmVVGd z000McNliru;sP1~G%mHk3W@*#0*pySK~#9!?OHKw!ax*$7cvG)K~Sgeu7wUoa4Lcs zJLV@icM$E=*ni^creJX@;?N)9?$j0>?VJw!!g=OQG&z&ImwyMPxhC4YFW>jQcXweB z6T{gy0EN+SI}CCR3y6me0Py(w6}ZiYlBY3QtO^YPLyF^#F5ey)B?;J=xZ7;(0H7uT zOuXn+Eg7H+0Mz^vXof8_xqjP$;cOco?+sBp#$zqZpe%VzGzfMWy?^{2j2UAg5W0e3 zOS(Vkx1BK2=YOY9006juxjz{5KqH9-006!28piV$jOVTJ9FBY4^})490f2FP zb9eBx`C~k%b1>DNo>7yb$zo+(!(^XxF*Zvk#YGb6x1FQUA(gKwsVFvzlR1peU^ANf z70<}^0JqsV$bT0)IR`(EU4D% zVCTIksed|n^Wzi8vGEMxb Date: Fri, 11 May 2018 20:20:10 +0200 Subject: [PATCH 08/10] Added unicorn models to all the stuffs --- src/main/java/com/minelittlepony/PonyRenderManager.java | 9 +++++---- src/main/java/com/minelittlepony/model/PMAPI.java | 4 ++++ .../com/minelittlepony/model/player/PlayerModels.java | 1 + src/main/java/com/minelittlepony/pony/data/PonyRace.java | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/minelittlepony/PonyRenderManager.java b/src/main/java/com/minelittlepony/PonyRenderManager.java index 5045a2e9..ac8c9898 100644 --- a/src/main/java/com/minelittlepony/PonyRenderManager.java +++ b/src/main/java/com/minelittlepony/PonyRenderManager.java @@ -58,10 +58,11 @@ public class PonyRenderManager { // Preview on the select skin gui ModUtilities.addRenderer(EntityPonyModel.class, new RenderPonyModel(manager)); - registerPlayerSkin(manager, PlayerModels.EARTH); - registerPlayerSkin(manager, PlayerModels.PEGASUS); - registerPlayerSkin(manager, PlayerModels.ALICORN); - registerPlayerSkin(manager, PlayerModels.ZEBRA); + for (PlayerModels i : PlayerModels.values()) { + if (i != PlayerModels.HUMAN) { + registerPlayerSkin(manager, i); + } + } } private void registerPlayerSkin(RenderManager manager, PlayerModels playerModel) { diff --git a/src/main/java/com/minelittlepony/model/PMAPI.java b/src/main/java/com/minelittlepony/model/PMAPI.java index 11cea302..0ac8d2f9 100644 --- a/src/main/java/com/minelittlepony/model/PMAPI.java +++ b/src/main/java/com/minelittlepony/model/PMAPI.java @@ -3,6 +3,7 @@ package com.minelittlepony.model; import com.minelittlepony.model.player.ModelAlicorn; import com.minelittlepony.model.player.ModelEarthPony; import com.minelittlepony.model.player.ModelPegasus; +import com.minelittlepony.model.player.ModelUnicorn; import com.minelittlepony.model.player.ModelZebra; import com.minelittlepony.model.ponies.ModelIllagerPony; import com.minelittlepony.model.ponies.ModelSeapony; @@ -29,6 +30,9 @@ public final class PMAPI { public static final ModelWrapper pegasus = new ModelWrapper(new ModelPegasus(false)); public static final ModelWrapper pegasusSmall = new ModelWrapper(new ModelPegasus(true)); + public static final ModelWrapper unicorn = new ModelWrapper(new ModelUnicorn(false)); + public static final ModelWrapper unicornSmall = new ModelWrapper(new ModelUnicorn(true)); + public static final ModelWrapper alicorn = new ModelWrapper(new ModelAlicorn(false)); public static final ModelWrapper alicornSmall = new ModelWrapper(new ModelAlicorn(true)); diff --git a/src/main/java/com/minelittlepony/model/player/PlayerModels.java b/src/main/java/com/minelittlepony/model/player/PlayerModels.java index 28f03673..57188584 100644 --- a/src/main/java/com/minelittlepony/model/player/PlayerModels.java +++ b/src/main/java/com/minelittlepony/model/player/PlayerModels.java @@ -10,6 +10,7 @@ public enum PlayerModels { @Deprecated HUMAN("default", "slim", () -> PMAPI.pony, () -> PMAPI.ponySmall), EARTH("earthpony", "slimearthpony", () -> PMAPI.earthpony, () -> PMAPI.earthponySmall), PEGASUS("pegasus", "slimpegasus", () -> PMAPI.pegasus, () -> PMAPI.pegasusSmall), + UNICORN("unicorn", "slimunicorn", () -> PMAPI.unicorn, () -> PMAPI.unicornSmall), ALICORN("alicorn", "slimalicorn", () -> PMAPI.alicorn, () -> PMAPI.alicornSmall), ZEBRA("zebra", "slimzebra", () -> PMAPI.zebra, () -> PMAPI.zebraSmall); diff --git a/src/main/java/com/minelittlepony/pony/data/PonyRace.java b/src/main/java/com/minelittlepony/pony/data/PonyRace.java index d0f973c8..59efb57d 100644 --- a/src/main/java/com/minelittlepony/pony/data/PonyRace.java +++ b/src/main/java/com/minelittlepony/pony/data/PonyRace.java @@ -7,7 +7,7 @@ public enum PonyRace implements ITriggerPixelMapped { HUMAN(0, PlayerModels.HUMAN, false, false), EARTH(0xf9b131, PlayerModels.EARTH,false, false), PEGASUS(0x88caf0, PlayerModels.PEGASUS, true, false), - UNICORN(0xd19fe4, PlayerModels.ALICORN, false, true), + UNICORN(0xd19fe4, PlayerModels.UNICORN, false, true), ALICORN(0xfef9fc, PlayerModels.ALICORN, true, true), CHANGELING(0x282b29, PlayerModels.ALICORN, true, true), ZEBRA(0xd0cccf, PlayerModels.ZEBRA, false, false), From e13a5c326db2f3d3dabcc0ae8c67651015a27cb5 Mon Sep 17 00:00:00 2001 From: Sollace Date: Fri, 11 May 2018 20:54:31 +0200 Subject: [PATCH 09/10] Added "ponify guardians" to the cluster --- .../java/com/minelittlepony/PonyRenderManager.java | 1 + .../java/com/minelittlepony/PonySettingPanel.java | 13 +++++++++++-- .../resources/assets/minelittlepony/lang/en_us.lang | 1 + .../resources/assets/minelittlepony/lang/fr_fr.lang | 8 +++++--- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/minelittlepony/PonyRenderManager.java b/src/main/java/com/minelittlepony/PonyRenderManager.java index ac8c9898..76c143ae 100644 --- a/src/main/java/com/minelittlepony/PonyRenderManager.java +++ b/src/main/java/com/minelittlepony/PonyRenderManager.java @@ -137,6 +137,7 @@ public class PonyRenderManager { if (config.guardians) { pushNewRenderer(manager, EntityGuardian.class, new RenderPonyGuardian(manager)); pushNewRenderer(manager, EntityElderGuardian.class, new RenderPonyGuardian.Elder(manager)); + MineLittlePony.logger.info("Guardians are now ponies."); } else { restoreRenderer(EntityGuardian.class); restoreRenderer(EntityElderGuardian.class); diff --git a/src/main/java/com/minelittlepony/PonySettingPanel.java b/src/main/java/com/minelittlepony/PonySettingPanel.java index 1e2095b1..3cfdb6f4 100644 --- a/src/main/java/com/minelittlepony/PonySettingPanel.java +++ b/src/main/java/com/minelittlepony/PonySettingPanel.java @@ -11,6 +11,8 @@ import java.io.IOException; /** * In-Game options menu. + * + * TODO: What a mess */ public class PonySettingPanel extends GuiScreen { @@ -34,6 +36,7 @@ public class PonySettingPanel extends GuiScreen { private static final String ZOMBIE_PIGMEN = MOB_PREFIX + "zombiepigmen"; private static final String SKELETONS = MOB_PREFIX + "skeletons"; private static final String ILLAGERS = MOB_PREFIX + "illagers"; + private static final String GUARDIANS = MOB_PREFIX + "guardians"; private static final int PONY_ID = 0; private static final int HUMAN_ID = 1; @@ -48,6 +51,7 @@ public class PonySettingPanel extends GuiScreen { private static final int ZOMBIE_PIGMEN_ID = 9; private static final int SKELETONS_ID = 10; private static final int ILLAGER_ID = 11; + private static final int GUARDIAN_ID = 12; private PonyConfig config; @@ -63,15 +67,15 @@ public class PonySettingPanel extends GuiScreen { @Override public void initGui() { final int LEFT = width / 10 + 16; - GuiCheckbox pony, human, both, hd, sizes, snuzzles, showscale, villager, zombie, pigmen, skeleton, illager; + GuiCheckbox pony, human, both, hd, sizes, snuzzles, showscale, villager, zombie, pigmen, skeleton, illager, guardian; int row = 32; buttonList.add(pony = ponies = new GuiCheckbox(PONY_ID, LEFT, row += 15, I18n.format(PONY))); buttonList.add(human = humans = new GuiCheckbox(HUMAN_ID, LEFT, row += 15, I18n.format(HUMAN))); buttonList.add(both = this.both = new GuiCheckbox(BOTH_ID, LEFT, row += 15, I18n.format(BOTH))); row += 15; buttonList.add(hd = new GuiCheckbox(HD_ID, LEFT, row += 15, I18n.format(HD))); - buttonList.add(sizes = new GuiCheckbox(SIZES_ID, LEFT, row += 15, I18n.format(SIZES))); buttonList.add(snuzzles = new GuiCheckbox(SNUZZLES_ID, LEFT, row += 15, I18n.format(SNUZZLES))); + buttonList.add(sizes = new GuiCheckbox(SIZES_ID, LEFT, row += 15, I18n.format(SIZES))); buttonList.add(showscale = new GuiCheckbox(SHOW_SCALE_ID, LEFT, row += 15, I18n.format(SHOW_SCALE))); final int RIGHT = width - width / 3; @@ -81,6 +85,7 @@ public class PonySettingPanel extends GuiScreen { buttonList.add(pigmen = new GuiCheckbox(ZOMBIE_PIGMEN_ID, RIGHT, row += 15, I18n.format(ZOMBIE_PIGMEN))); buttonList.add(skeleton = new GuiCheckbox(SKELETONS_ID, RIGHT, row += 15, I18n.format(SKELETONS))); buttonList.add(illager = new GuiCheckbox(ILLAGER_ID, RIGHT, row += 15, I18n.format(ILLAGERS))); + buttonList.add(guardian = new GuiCheckbox(GUARDIAN_ID, RIGHT, row += 15, I18n.format(GUARDIANS))); switch (config.getPonyLevel()) { default: @@ -103,6 +108,7 @@ public class PonySettingPanel extends GuiScreen { pigmen.checked = config.pigzombies; skeleton.checked = config.skeletons; illager.checked = config.illagers; + guardian.checked = config.guardians; } @Override @@ -171,6 +177,9 @@ public class PonySettingPanel extends GuiScreen { case ILLAGER_ID: config.illagers = checked; break; + case GUARDIAN_ID: + config.guardians = checked; + break; } } } diff --git a/src/main/resources/assets/minelittlepony/lang/en_us.lang b/src/main/resources/assets/minelittlepony/lang/en_us.lang index 0e6ae0ee..94b57348 100644 --- a/src/main/resources/assets/minelittlepony/lang/en_us.lang +++ b/src/main/resources/assets/minelittlepony/lang/en_us.lang @@ -15,3 +15,4 @@ minelp.mobs.zombies=Ponify zombies minelp.mobs.zombiepigmen=Ponify zombie pigmen minelp.mobs.skeletons=Ponify skeletons minelp.mobs.illagers=Ponify illagers +minelp.mobs.guardians=Ponify guardians diff --git a/src/main/resources/assets/minelittlepony/lang/fr_fr.lang b/src/main/resources/assets/minelittlepony/lang/fr_fr.lang index ec61b39f..dc67c545 100644 --- a/src/main/resources/assets/minelittlepony/lang/fr_fr.lang +++ b/src/main/resources/assets/minelittlepony/lang/fr_fr.lang @@ -10,10 +10,12 @@ minelp.options.hd=Activer MineLP serveur de skin minelp.options.sizes=Autoriser tous les diffrentes tailles de poney minelp.options.ponyarmor=Utiliser armure compatible de MineLP minelp.options.snuzzles=Afficher museau sur les poneys -minelp.options.showscale=Utiliser chelle fidle MLP +minelp.options.showscale=Utiliser echelle fidele a MLP minelp.mobs.title=Options de mobs minelp.mobs.villagers=Ponifier villageois minelp.mobs.zombies=Ponifier zombies -minelp.mobs.zombiepigmen=Ponifier zombie pigmen -minelp.mobs.skeletons=Ponifier squelettes \ No newline at end of file +minelp.mobs.zombiepigmen=Ponifier cochon-zombie +minelp.mobs.skeletons=Ponifier squelettes +minelp.mobs.illagers=Ponifier illagers +minelp.mobs.guardians=Ponifier gardien From 36d6f421a9dad6bf4bdec5e89fbc880a7ca1541e Mon Sep 17 00:00:00 2001 From: Sollace Date: Sun, 13 May 2018 14:50:32 +0200 Subject: [PATCH 10/10] Fix character encoding (dammit PinkishPie, ANSI is not okay) --- src/main/resources/assets/minelittlepony/lang/fr_fr.lang | 4 ++-- src/main/resources/assets/minelittlepony/lang/ru_ru.lang | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/minelittlepony/lang/fr_fr.lang b/src/main/resources/assets/minelittlepony/lang/fr_fr.lang index dc67c545..617b82b7 100644 --- a/src/main/resources/assets/minelittlepony/lang/fr_fr.lang +++ b/src/main/resources/assets/minelittlepony/lang/fr_fr.lang @@ -7,10 +7,10 @@ minelp.options.ponylevel.humans=Seuls Humains minelp.options.ponylevel.both=Deux minelp.options.options=Options Poney minelp.options.hd=Activer MineLP serveur de skin -minelp.options.sizes=Autoriser tous les diffrentes tailles de poney +minelp.options.sizes=Autoriser tous les différentes tailles de poney minelp.options.ponyarmor=Utiliser armure compatible de MineLP minelp.options.snuzzles=Afficher museau sur les poneys -minelp.options.showscale=Utiliser echelle fidele a MLP +minelp.options.showscale=Utiliser échelle fidéle á MLP minelp.mobs.title=Options de mobs minelp.mobs.villagers=Ponifier villageois diff --git a/src/main/resources/assets/minelittlepony/lang/ru_ru.lang b/src/main/resources/assets/minelittlepony/lang/ru_ru.lang index 21b603a6..51cb3714 100644 --- a/src/main/resources/assets/minelittlepony/lang/ru_ru.lang +++ b/src/main/resources/assets/minelittlepony/lang/ru_ru.lang @@ -13,4 +13,4 @@ minelp.mobs.title=Пони-мобы minelp.mobs.villagers=Пони-житель minelp.mobs.zombies=Пони-зомби minelp.mobs.zombiepigmen=Пони-свинозомби -minelp.mobs.skeletons=Пони-скелеты \ No newline at end of file +minelp.mobs.skeletons=Пони-скелеты