From 84886cf798f0810ef6ab18b9a2659118115234b9 Mon Sep 17 00:00:00 2001 From: Sollace Date: Tue, 5 Jul 2022 22:50:40 +0200 Subject: [PATCH] Added crowns --- .../api/pony/meta/Wearable.java | 1 + .../client/model/ModelType.java | 8 +-- .../client/model/gear/Crown.java | 47 ++++++++++++++++++ .../client/render/MobRenderers.java | 3 ++ .../client/render/entity/PonyPigRenderer.java | 41 +++++++++++++++ .../minelittlepony/settings/PonyConfig.java | 1 + .../minelittlepony/models/gear/crown.json | 10 ++++ .../minelittlepony/textures/models/crown.png | Bin 0 -> 6973 bytes 8 files changed, 105 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/minelittlepony/client/model/gear/Crown.java create mode 100644 src/main/java/com/minelittlepony/client/render/entity/PonyPigRenderer.java create mode 100644 src/main/resources/assets/minelittlepony/models/gear/crown.json create mode 100644 src/main/resources/assets/minelittlepony/textures/models/crown.png diff --git a/src/main/java/com/minelittlepony/api/pony/meta/Wearable.java b/src/main/java/com/minelittlepony/api/pony/meta/Wearable.java index 7784f521..71286cf0 100644 --- a/src/main/java/com/minelittlepony/api/pony/meta/Wearable.java +++ b/src/main/java/com/minelittlepony/api/pony/meta/Wearable.java @@ -8,6 +8,7 @@ import java.util.List; public enum Wearable implements TriggerPixelType { NONE (0x00), + CROWN (0x16), MUFFIN (0x32), HAT (0x64), ANTLERS (0x96), diff --git a/src/main/java/com/minelittlepony/client/model/ModelType.java b/src/main/java/com/minelittlepony/client/model/ModelType.java index 6fe17d94..5b9338c9 100644 --- a/src/main/java/com/minelittlepony/client/model/ModelType.java +++ b/src/main/java/com/minelittlepony/client/model/ModelType.java @@ -21,12 +21,7 @@ import com.minelittlepony.client.model.entity.race.PegasusModel; import com.minelittlepony.client.model.entity.race.SeaponyModel; import com.minelittlepony.client.model.entity.race.UnicornModel; import com.minelittlepony.client.model.entity.race.ZebraModel; -import com.minelittlepony.client.model.gear.AbstractGear; -import com.minelittlepony.client.model.gear.ChristmasHat; -import com.minelittlepony.client.model.gear.Muffin; -import com.minelittlepony.client.model.gear.SaddleBags; -import com.minelittlepony.client.model.gear.Stetson; -import com.minelittlepony.client.model.gear.WitchHat; +import com.minelittlepony.client.model.gear.*; import com.minelittlepony.client.render.entity.PlayerPonyRenderer; import com.minelittlepony.client.render.entity.PlayerSeaponyRenderer; import com.minelittlepony.mson.api.ModelKey; @@ -71,6 +66,7 @@ public final class ModelType { public static final ModelKey STETSON = registerGear("stetson", Wearable.STETSON, Stetson::new); public static final ModelKey SADDLEBAGS = registerGear("saddlebags", Wearable.SADDLE_BAGS, SaddleBags::new); + public static final ModelKey CROWN = registerGear("crown", Wearable.CROWN, Crown::new); public static final ModelKey MUFFIN = registerGear("muffin", Wearable.MUFFIN, Muffin::new); public static final ModelKey WITCH_HAT = registerGear("witch_hat", Wearable.HAT, WitchHat::new); public static final ModelKey ANTLERS = registerGear("antlers", Wearable.ANTLERS, ChristmasHat::new); diff --git a/src/main/java/com/minelittlepony/client/model/gear/Crown.java b/src/main/java/com/minelittlepony/client/model/gear/Crown.java new file mode 100644 index 00000000..e790f3c3 --- /dev/null +++ b/src/main/java/com/minelittlepony/client/model/gear/Crown.java @@ -0,0 +1,47 @@ +package com.minelittlepony.client.model.gear; + +import net.minecraft.client.model.ModelPart; +import net.minecraft.entity.Entity; +import net.minecraft.entity.mob.AbstractPiglinEntity; +import net.minecraft.entity.mob.ZombifiedPiglinEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.Identifier; + +import com.minelittlepony.api.model.BodyPart; +import com.minelittlepony.api.model.IModel; +import com.minelittlepony.api.model.gear.IStackable; +import com.minelittlepony.api.pony.meta.Wearable; + +public class Crown extends AbstractGear implements IStackable { + public static final Identifier TEXTURE = new Identifier("minelittlepony", "textures/models/crown.png"); + + public Crown(ModelPart tree) { + addPart(tree.getChild("crown")); + } + + @Override + public boolean canRender(IModel model, Entity entity) { + return model.isWearing(Wearable.CROWN) + || (( + entity instanceof AbstractPiglinEntity + || entity instanceof PlayerEntity + || entity instanceof ZombifiedPiglinEntity + ) && entity.hasCustomName() && entity.getCustomName().getString().equalsIgnoreCase("technoblade") + ); + } + + @Override + public BodyPart getGearLocation() { + return BodyPart.HEAD; + } + + @Override + public Identifier getTexture(T entity, Context context) { + return TEXTURE; + } + + @Override + public float getStackingHeight() { + return 0.1F; + } +} diff --git a/src/main/java/com/minelittlepony/client/render/MobRenderers.java b/src/main/java/com/minelittlepony/client/render/MobRenderers.java index fd275b59..f01f2dcc 100644 --- a/src/main/java/com/minelittlepony/client/render/MobRenderers.java +++ b/src/main/java/com/minelittlepony/client/render/MobRenderers.java @@ -40,6 +40,9 @@ public final class MobRenderers { pony.switchRenderer(state, EntityType.PIGLIN, PonyPiglinRenderer::new); pony.switchRenderer(state, EntityType.PIGLIN_BRUTE, PonyPiglinRenderer::new); pony.switchRenderer(state, EntityType.ZOMBIFIED_PIGLIN, PonyPiglinRenderer::new); + if (!MineLittlePony.getInstance().getConfig().noFun.get()) { + pony.switchRenderer(state, EntityType.PIG, PonyPigRenderer::new); + } }); public static final MobRenderers SKELETON = register("skeletons", (state, pony) -> { pony.switchRenderer(state, EntityType.SKELETON, SkeleponyRenderer::new); diff --git a/src/main/java/com/minelittlepony/client/render/entity/PonyPigRenderer.java b/src/main/java/com/minelittlepony/client/render/entity/PonyPigRenderer.java new file mode 100644 index 00000000..671208a9 --- /dev/null +++ b/src/main/java/com/minelittlepony/client/render/entity/PonyPigRenderer.java @@ -0,0 +1,41 @@ +package com.minelittlepony.client.render.entity; + +import net.minecraft.client.model.Dilation; +import net.minecraft.client.render.*; +import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.render.entity.PigEntityRenderer; +import net.minecraft.client.render.entity.feature.*; +import net.minecraft.client.render.entity.model.*; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.passive.PigEntity; +import com.minelittlepony.client.model.gear.Crown; + +public class PonyPigRenderer extends PigEntityRenderer { + + public PonyPigRenderer(EntityRendererFactory.Context context) { + super(context); + addFeature(new CrownFeature(this)); + } + + private final class CrownFeature extends FeatureRenderer> { + private final PigEntityModel model; + + public CrownFeature(FeatureRendererContext> context) { + super(context); + model = new PigEntityModel<>(PigEntityModel.getTexturedModelData(new Dilation(0.5F)).createModel()); + } + + @Override + public void render(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, PigEntity entity, float limbAngle, float limbDistance, float tickDelta, float animationProgress, float headYaw, float headPitch) { + if (!entity.hasCustomName() || !entity.getCustomName().getString().equalsIgnoreCase("technoblade")) { + return; + } + + getContextModel().copyStateTo(model); + model.animateModel(entity, limbAngle, limbDistance, tickDelta); + model.setAngles(entity, limbAngle, limbDistance, animationProgress, headYaw, headPitch); + VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderLayer.getEntityCutoutNoCull(Crown.TEXTURE)); + model.render(matrices, vertexConsumer, light, OverlayTexture.DEFAULT_UV, 1, 1, 1, 1); + } + } +} diff --git a/src/main/java/com/minelittlepony/settings/PonyConfig.java b/src/main/java/com/minelittlepony/settings/PonyConfig.java index 8fe3f875..a921af9a 100644 --- a/src/main/java/com/minelittlepony/settings/PonyConfig.java +++ b/src/main/java/com/minelittlepony/settings/PonyConfig.java @@ -33,6 +33,7 @@ public class PonyConfig extends JsonConfig { public final Setting sizeOverride = value("sizeOverride", Sizes.UNSET); public final Setting flappyElytras = value("customisation", "flappyElytras", false); + public final Setting noFun = value("customisation", "noFun", false); public PonyConfig(Path path) { super(path); diff --git a/src/main/resources/assets/minelittlepony/models/gear/crown.json b/src/main/resources/assets/minelittlepony/models/gear/crown.json new file mode 100644 index 00000000..00427d3b --- /dev/null +++ b/src/main/resources/assets/minelittlepony/models/gear/crown.json @@ -0,0 +1,10 @@ +{ + "texture": {"w": 64, "h": 32}, + "data": { + "crown": { + "cubes": [ + { "from": [-4, -6, -6], "size": [ 8, 8, 8], "dilate": 0.5 } + ] + } + } +} diff --git a/src/main/resources/assets/minelittlepony/textures/models/crown.png b/src/main/resources/assets/minelittlepony/textures/models/crown.png new file mode 100644 index 0000000000000000000000000000000000000000..ad517d5ee30d2c3362e0565d006f79d4d73f26e0 GIT binary patch literal 6973 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 P00000NkvXXu0mjfNLqBW literal 0 HcmV?d00001