diff --git a/src/main/java/com/minelittlepony/client/model/part/PegasusWings.java b/src/main/java/com/minelittlepony/client/model/part/PegasusWings.java index 0168c848..e18563f4 100644 --- a/src/main/java/com/minelittlepony/client/model/part/PegasusWings.java +++ b/src/main/java/com/minelittlepony/client/model/part/PegasusWings.java @@ -8,11 +8,13 @@ import net.minecraft.util.math.MathHelper; import com.minelittlepony.model.IPart; import com.minelittlepony.model.IPegasus; +import com.minelittlepony.mson.api.ModelContext; +import com.minelittlepony.mson.api.MsonModel; import com.minelittlepony.pony.meta.Wearable; import java.util.UUID; -public class PegasusWings implements IPart { +public class PegasusWings implements IPart, MsonModel { protected T pegasus; @@ -21,6 +23,14 @@ public class PegasusWings implements IPart { protected Wing legacyWing; + + @Override + public void init(ModelContext context) { + leftWing = context.findByName("left_wing"); + rightWing = context.findByName("right_wing"); + legacyWing = context.findByName("legacy_right_wing"); + } + public Wing getLeft() { return leftWing; } @@ -72,13 +82,20 @@ public class PegasusWings implements IPart { getRight().render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); } - public static class Wing { + public static class Wing implements MsonModel { protected IPegasus pegasus; protected ModelPart extended; protected ModelPart folded; + @Override + public void init(ModelContext context) { + pegasus = (IPegasus)context.getModel(); + extended = context.findByName("extended"); + folded = context.findByName("folded"); + } + public void rotateWalking(float swing) { folded.yaw = swing * 0.15F; } diff --git a/src/main/java/com/minelittlepony/client/model/part/PonyEars.java b/src/main/java/com/minelittlepony/client/model/part/PonyEars.java index b3aa850a..0b920453 100644 --- a/src/main/java/com/minelittlepony/client/model/part/PonyEars.java +++ b/src/main/java/com/minelittlepony/client/model/part/PonyEars.java @@ -5,14 +5,23 @@ import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; import com.minelittlepony.model.IPart; +import com.minelittlepony.mson.api.ModelContext; +import com.minelittlepony.mson.api.MsonModel; import java.util.UUID; -public class PonyEars implements IPart { +public class PonyEars implements IPart, MsonModel { private ModelPart right; private ModelPart left; + + @Override + public void init(ModelContext context) { + right = context.findByName("right"); + left = context.findByName("left"); + } + @Override public void renderPart(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha, UUID interpolatorId) { } diff --git a/src/main/java/com/minelittlepony/client/model/part/PonySnout.java b/src/main/java/com/minelittlepony/client/model/part/PonySnout.java index 0a24abc9..c353a2a5 100644 --- a/src/main/java/com/minelittlepony/client/model/part/PonySnout.java +++ b/src/main/java/com/minelittlepony/client/model/part/PonySnout.java @@ -7,12 +7,14 @@ import net.minecraft.client.util.math.MatrixStack; import com.minelittlepony.client.MineLittlePony; import com.minelittlepony.model.ICapitated; import com.minelittlepony.model.IPart; +import com.minelittlepony.mson.api.ModelContext; +import com.minelittlepony.mson.api.MsonModel; import com.minelittlepony.mson.api.model.MsonPart; import com.minelittlepony.pony.meta.Gender; import java.util.UUID; -public class PonySnout implements IPart { +public class PonySnout implements IPart, MsonModel { private boolean visible = false; @@ -21,6 +23,13 @@ public class PonySnout implements IPart { private ICapitated head; + @Override + public void init(ModelContext context) { + head = context.getContext(); + mare = context.findByName("mare"); + stallion = context.findByName("stallion"); + } + public void rotate(float x, float y, float z) { ((MsonPart)mare).rotate(x, y, z); ((MsonPart)stallion).rotate(x, y, z); diff --git a/src/main/java/com/minelittlepony/client/model/part/PonyTail.java b/src/main/java/com/minelittlepony/client/model/part/PonyTail.java index a22c02b8..840ba1be 100644 --- a/src/main/java/com/minelittlepony/client/model/part/PonyTail.java +++ b/src/main/java/com/minelittlepony/client/model/part/PonyTail.java @@ -8,10 +8,13 @@ import net.minecraft.util.math.MathHelper; import com.minelittlepony.client.model.AbstractPonyModel; import com.minelittlepony.model.IPart; +import com.minelittlepony.mson.api.ModelContext; +import com.minelittlepony.mson.api.MsonModel; import java.util.UUID; +import java.util.concurrent.ExecutionException; -public class PonyTail extends ModelPart implements IPart { +public class PonyTail extends ModelPart implements IPart, MsonModel { private final AbstractPonyModel theModel; @@ -22,6 +25,23 @@ public class PonyTail extends ModelPart implements IPart { theModel = model; } + + @Override + public void init(ModelContext context) { + try { + int segments = context.getLocals().getValue("segments").get().intValue(); + + for (int i = 0; i < segments; i++) { + Segment segment = context.findByName("segment_" + i); + segment.index = i; + addChild(segment); + } + + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + } + @Override public void setRotationAndAngles(boolean rainboom, UUID interpolatorId, float move, float swing, float bodySwing, float ticks) { roll = rainboom ? 0 : MathHelper.cos(move * 0.8F) * 0.2f * swing; @@ -73,19 +93,20 @@ public class PonyTail extends ModelPart implements IPart { render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); } - private static class Segment extends ModelPart { + private static class Segment extends ModelPart implements MsonModel { public PonyTail tail; - int index; + public int index; public Segment(Model model) { super(model); } - public void setOwner(int index, PonyTail tail) { - this.index = index; - this.tail = tail; + @Override + public void init(ModelContext context) { + tail = context.getContext(); + context.findByName("segment", this); } @Override diff --git a/src/main/java/com/minelittlepony/client/model/part/SeaponyTail.java b/src/main/java/com/minelittlepony/client/model/part/SeaponyTail.java index 2effa634..e0da737b 100644 --- a/src/main/java/com/minelittlepony/client/model/part/SeaponyTail.java +++ b/src/main/java/com/minelittlepony/client/model/part/SeaponyTail.java @@ -1,8 +1,9 @@ package com.minelittlepony.client.model.part; -import com.minelittlepony.client.model.AbstractPonyModel; import com.minelittlepony.client.model.IPonyModel; import com.minelittlepony.model.IPart; +import com.minelittlepony.mson.api.ModelContext; +import com.minelittlepony.mson.api.MsonModel; import java.util.UUID; @@ -11,7 +12,7 @@ import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.MathHelper; -public class SeaponyTail implements IPart { +public class SeaponyTail implements IPart, MsonModel { private static final float TAIL_ROTX = PI / 2; @@ -22,8 +23,12 @@ public class SeaponyTail implements IPart { private IPonyModel model; - public SeaponyTail(AbstractPonyModel model) { - this.model = model; + @Override + public void init(ModelContext context) { + model = (IPonyModel)context.getModel(); + tailBase = context.findByName("base"); + tailTip = context.findByName("tip"); + tailFins = context.findByName("fins"); } @Override diff --git a/src/main/java/com/minelittlepony/client/model/part/UnicornHorn.java b/src/main/java/com/minelittlepony/client/model/part/UnicornHorn.java index 48c4403a..dbd29eab 100644 --- a/src/main/java/com/minelittlepony/client/model/part/UnicornHorn.java +++ b/src/main/java/com/minelittlepony/client/model/part/UnicornHorn.java @@ -8,19 +8,27 @@ import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; import com.minelittlepony.model.IPart; +import com.minelittlepony.mson.api.ModelContext; +import com.minelittlepony.mson.api.MsonModel; import com.minelittlepony.util.math.Color; import javax.annotation.Nullable; import java.util.UUID; -public class UnicornHorn implements IPart { +public class UnicornHorn implements IPart, MsonModel { private ModelPart horn; private ModelPart glow; protected boolean visible = true; + @Override + public void init(ModelContext context) { + horn = context.findByName("bone"); + glow = context.findByName("corona"); + } + @Override public void renderPart(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha, @Nullable UUID interpolatorId) { if (visible) {