From e985dc895000d83b63a67791f314a6a870f0141b Mon Sep 17 00:00:00 2001 From: Sollace Date: Wed, 8 Apr 2020 18:00:21 +0200 Subject: [PATCH] Added parasprites --- .../client/model/ModelType.java | 2 + .../client/model/entity/ParaspriteModel.java | 58 ++++++++++++++++++ .../client/render/MobRenderers.java | 3 + .../render/entity/ParaspriteRenderer.java | 47 ++++++++++++++ .../minelittlepony/models/parasprite.json | 47 ++++++++++++++ .../entity/strider/strider_confused_pony.png | Bin 0 -> 1390 bytes .../textures/entity/strider/strider_pony.png | Bin 0 -> 1387 bytes .../entity/strider/strider_saddle_pony.png | Bin 0 -> 1161 bytes 8 files changed, 157 insertions(+) create mode 100644 src/main/java/com/minelittlepony/client/model/entity/ParaspriteModel.java create mode 100644 src/main/java/com/minelittlepony/client/render/entity/ParaspriteRenderer.java create mode 100644 src/main/resources/assets/minelittlepony/models/parasprite.json create mode 100644 src/main/resources/assets/minelittlepony/textures/entity/strider/strider_confused_pony.png create mode 100644 src/main/resources/assets/minelittlepony/textures/entity/strider/strider_pony.png create mode 100644 src/main/resources/assets/minelittlepony/textures/entity/strider/strider_saddle_pony.png diff --git a/src/main/java/com/minelittlepony/client/model/ModelType.java b/src/main/java/com/minelittlepony/client/model/ModelType.java index d293ae2a..c99bfe45 100644 --- a/src/main/java/com/minelittlepony/client/model/ModelType.java +++ b/src/main/java/com/minelittlepony/client/model/ModelType.java @@ -12,6 +12,7 @@ import com.minelittlepony.client.model.entity.BreezieModel; import com.minelittlepony.client.model.entity.EnderStallionModel; import com.minelittlepony.client.model.entity.GuardianPonyModel; import com.minelittlepony.client.model.entity.IllagerPonyModel; +import com.minelittlepony.client.model.entity.ParaspriteModel; import com.minelittlepony.client.model.entity.PiglinPonyModel; import com.minelittlepony.client.model.entity.PillagerPonyModel; import com.minelittlepony.client.model.entity.SkeleponyModel; @@ -63,6 +64,7 @@ public final class ModelType { public static final ModelKey GUARDIAN = register("guardian", GuardianPonyModel::new); public static final ModelKey ENDERMAN = register("enderman", EnderStallionModel::new); public static final ModelKey> BREEZIE = register("breezie", BreezieModel::new); + public static final ModelKey PARASPRITE = register("parasprite", ParaspriteModel::new); public static final ModelKey> ELYTRA = register("elytra", PonyElytra::new); public static final ModelKey SKULL = register("skull", PonySkullModel::new); diff --git a/src/main/java/com/minelittlepony/client/model/entity/ParaspriteModel.java b/src/main/java/com/minelittlepony/client/model/entity/ParaspriteModel.java new file mode 100644 index 00000000..ff63ea6a --- /dev/null +++ b/src/main/java/com/minelittlepony/client/model/entity/ParaspriteModel.java @@ -0,0 +1,58 @@ +package com.minelittlepony.client.model.entity; + +import net.minecraft.client.model.ModelPart; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.entity.model.EntityModel; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.passive.StriderEntity; + +import com.minelittlepony.mson.api.ModelContext; +import com.minelittlepony.mson.api.MsonModel; + +public class ParaspriteModel extends EntityModel implements MsonModel { + + private ModelPart body; + private ModelPart leftWing; + private ModelPart rightWing; + + private ModelPart saddle; + + public ParaspriteModel() { + super(RenderLayer::getEntityTranslucent); + child = false; + textureHeight = 64; + } + + @Override + public void init(ModelContext context) { + body = context.findByName("body"); + saddle = context.findByName("saddle"); + leftWing = context.findByName("leftWing"); + rightWing = context.findByName("rightWing"); + } + + @Override + public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) { + body.render(matrices, vertices, light, overlay, red, green, blue, alpha); + saddle.render(matrices, vertices, light, overlay, red, green, blue, alpha); + } + + @Override + public void setAngles(StriderEntity entity, float move, float swing, float ticks, float headYaw, float headPitch) { + body.yaw = headYaw * 0.017453292F; + body.pitch = headPitch * 0.017453292F; + + saddle.copyPositionAndRotation(body); + + float sin = (float)Math.sin(ticks) / 2; + float cos = (float)Math.cos(ticks) / 3; + + leftWing.roll = 0.5F + cos; + leftWing.yaw = 0.5F - sin; + + rightWing.visible = true; + rightWing.roll = -0.5F - cos; + rightWing.yaw = -0.5F + sin; + } +} diff --git a/src/main/java/com/minelittlepony/client/render/MobRenderers.java b/src/main/java/com/minelittlepony/client/render/MobRenderers.java index 8aac7192..c88ac4e8 100644 --- a/src/main/java/com/minelittlepony/client/render/MobRenderers.java +++ b/src/main/java/com/minelittlepony/client/render/MobRenderers.java @@ -55,6 +55,9 @@ public final class MobRenderers { public static final MobRenderers INANIMATE = register("inanimates", (state, pony) -> { pony.switchRenderer(state, EntityType.ARMOR_STAND, PonyStandRenderer::new); }); + public static final MobRenderers STRIDER = register("strider", (state, pony) -> { + pony.switchRenderer(state, EntityType.STRIDER, ParaspriteRenderer::new); + }); private final BiConsumer changer; diff --git a/src/main/java/com/minelittlepony/client/render/entity/ParaspriteRenderer.java b/src/main/java/com/minelittlepony/client/render/entity/ParaspriteRenderer.java new file mode 100644 index 00000000..79e5ba07 --- /dev/null +++ b/src/main/java/com/minelittlepony/client/render/entity/ParaspriteRenderer.java @@ -0,0 +1,47 @@ +package com.minelittlepony.client.render.entity; + +import net.minecraft.client.render.entity.EntityRenderDispatcher; +import net.minecraft.client.render.entity.MobEntityRenderer; +import net.minecraft.client.render.entity.feature.PigSaddleFeatureRenderer; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.passive.StriderEntity; +import net.minecraft.util.Identifier; + +import com.minelittlepony.client.model.ModelType; +import com.minelittlepony.client.model.entity.ParaspriteModel; + +public class ParaspriteRenderer extends MobEntityRenderer { + + private static final Identifier NORMAL = new Identifier("minelittlepony", "textures/entity/strider/strider_pony.png"); + private static final Identifier CONFUSED = new Identifier("minelittlepony", "textures/entity/strider/strider_confused_pony.png"); + + private static final Identifier SADDLE = new Identifier("minelittlepony", "textures/entity/strider/strider_saddle_pony.png"); + + public ParaspriteRenderer(EntityRenderDispatcher dispatcher) { + super(dispatcher, ModelType.PARASPRITE.createModel(), 0.5F); + addFeature(new PigSaddleFeatureRenderer<>(this, ModelType.PARASPRITE.createModel(), SADDLE)); + } + + @Override + public Identifier getTexture(StriderEntity entity) { + return entity.method_26348() ? CONFUSED : NORMAL; + } + + @Override + protected void scale(StriderEntity entity, MatrixStack stack, float ticks) { + float scale = 0.9375F; + if (entity.isBaby()) { + scale *= 0.5F; + shadowRadius = 0.25F; + } else { + shadowRadius = 0.5F; + } + + stack.scale(scale, scale, scale); + } + + @Override + protected boolean isShaking(StriderEntity entity) { + return entity.method_26348(); + } +} diff --git a/src/main/resources/assets/minelittlepony/models/parasprite.json b/src/main/resources/assets/minelittlepony/models/parasprite.json new file mode 100644 index 00000000..60a397b4 --- /dev/null +++ b/src/main/resources/assets/minelittlepony/models/parasprite.json @@ -0,0 +1,47 @@ +{ + "texture": { + "w": 64, "h": 64 + }, + "body": { + "center": [-4, -4, -4], + "cubes": [ + {"from": [0, 0, 0], "size": [8, 8, 8] } + ], + "children": [ + { + "name": "leftWing", + "center": [4, 2, 8], + "texture": {"u": 32, "v": 0}, + "cubes": [ + { + "type": "mson:plane", + "face": "east", + "position": [0, -16, 0], + "size": [ 16, 16 ] + } + ] + }, + { + "name": "rightWing", + "center": [4, 2, 8], + "texture": {"u": 48, "v": 0}, + "cubes": [ + { + "type": "mson:plane", + "face": "west", + "position": [0, -16, 0], + "size": [ 16, 16 ] + } + ] + } + ] + }, + "saddle": { + "center": [-4, -4, -4], + "texture": {"u": 0, "v": 16}, + "visible": true, + "cubes": [ + {"from": [-4, -0.1, -4], "size": [16, 16, 16] } + ] + } +} diff --git a/src/main/resources/assets/minelittlepony/textures/entity/strider/strider_confused_pony.png b/src/main/resources/assets/minelittlepony/textures/entity/strider/strider_confused_pony.png new file mode 100644 index 0000000000000000000000000000000000000000..840c46d311e52154692cac33ad629f7de718e8af GIT binary patch literal 1390 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/minelittlepony/textures/entity/strider/strider_saddle_pony.png b/src/main/resources/assets/minelittlepony/textures/entity/strider/strider_saddle_pony.png new file mode 100644 index 0000000000000000000000000000000000000000..8affb643f076352b8ca4bee4781ce9f5b4e3f6d0 GIT binary patch literal 1161 zcmV;41a|w0P)gS)} z_BavW*u>Fe#}WB`WP1bnW#+f^bmiX-0GOYjCv9JT(QA1I*k=DYVdy-o)&JA_uMMpe zRB1r$2Ak2*?BoBlRiVO7l?G&|QK__|8L(XeY^SmR&H%DSu%a|zyN&ydI^f>L54HV) z{zIDlrKx#M{zJd^;?>J2*8hG`@EUek5O#-)T;px%fS5`^c)=N830iI5h7Rlx?8Wjj z2X8|M06&)tC!J|*NCY^I#`D*{b{#DOeJ8~ zGXv%Z79@@ra3QoCIRya3FtlJ=mV#b9$S&TM6eULg98^lW|Wfy?D4=dYYU{Z{F> z0?!LWF8~~$o+ZX3YiRN@7;LW1XkX;x7>}%xYeOcbzx+#!qL>52kV>%0$Dqyc&N<)a zccaP2m_N@e(mpR7y;48uXGs>6vY?+OLV4&YOcTa@*`OIfXtL85+5+(|e)5c=x`yB4ri1hdEWNcXHH2dpfF7Wp`)A~D^o!J9L;6}5mm5mds_y%LlmOhsZDg^*JC z^fWcWi>U-eQ6$03!@-bJ*r-5@Wq_JtAP)gCl`y6hwrsWMtta0Z=i3FCa(TQzu$L@^ z><$;g;U%&lvfW?pEn4K15-hFrc&XYN#UD5wFS z1sVYyL-g?~La4C>fEj%#ssU=uXbmv>{!{}f01AKtpa3WU3V;Hj04RV8HQk@woIEv5 z_UOhYrm?dwP;&oXPk)*L6hN5)P_ut;q`%=BaPrh}&N<~ieLhPh;<$EcSQmdf1SkLs zfC8WZD1b5pFg7u5slO!v