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 00000000..840c46d3 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/strider/strider_confused_pony.png differ diff --git a/src/main/resources/assets/minelittlepony/textures/entity/strider/strider_pony.png b/src/main/resources/assets/minelittlepony/textures/entity/strider/strider_pony.png new file mode 100644 index 00000000..92fb3eb4 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/strider/strider_pony.png differ 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 00000000..8affb643 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/entity/strider/strider_saddle_pony.png differ