diff --git a/src/main/java/com/minelittlepony/unicopia/client/minelittlepony/BodyPartGear.java b/src/main/java/com/minelittlepony/unicopia/client/minelittlepony/BodyPartGear.java index f8ba0d14..e99a9860 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/minelittlepony/BodyPartGear.java +++ b/src/main/java/com/minelittlepony/unicopia/client/minelittlepony/BodyPartGear.java @@ -9,6 +9,7 @@ import com.minelittlepony.api.model.gear.IGear; import com.minelittlepony.client.model.ClientPonyModel; import com.minelittlepony.client.model.ModelType; import com.minelittlepony.client.model.PlayerModelKey; +import com.minelittlepony.client.model.entity.race.ChangelingModel; import com.minelittlepony.client.model.entity.race.PegasusModel; import com.minelittlepony.client.model.entity.race.UnicornModel; import com.minelittlepony.client.model.part.UnicornHorn; @@ -33,6 +34,9 @@ class BodyPartGear & MsonModel & IModel> private static final Identifier ICARUS_WINGS = Unicopia.id("textures/models/wings/icarus_pony.png"); private static final Identifier ICARUS_WINGS_CORRUPTED = Unicopia.id("textures/models/wings/icarus_corrupted_pony.png"); + public static final Predicate BUG_WINGS_PREDICATE = MINE_LP_HAS_NO_WINGS.and(AmuletSelectors.PEGASUS_AMULET.negate()).and(EquinePredicates.PLAYER_CHANGELING); + public static final Identifier BUG_WINGS = Unicopia.id("textures/models/wings/bug_pony.png"); + public static final Predicate BAT_WINGS_PREDICATE = MINE_LP_HAS_NO_WINGS.and(AmuletSelectors.PEGASUS_AMULET.negate()).and(EquinePredicates.PLAYER_BAT); public static final Identifier BAT_WINGS = Unicopia.id("textures/models/wings/bat_pony.png"); @@ -52,7 +56,11 @@ class BodyPartGear & MsonModel & IModel> } public static BodyPartGear batWings() { - return new BodyPartGear<>(BodyPart.BODY, ModelType.BAT_PONY, BAT_WINGS_PREDICATE, WingsGearModel::new, WingsGearModel::getWings, e -> BAT_WINGS); + return new BodyPartGear<>(BodyPart.BODY, ModelType.BAT_PONY, BAT_WINGS_PREDICATE, WingsGearModel::new, IPegasus::getWings, e -> BAT_WINGS); + } + + public static BodyPartGear bugWings() { + return new BodyPartGear<>(BodyPart.BODY, ModelType.CHANGELING, BUG_WINGS_PREDICATE, BugWingsGearModel::new, IPegasus::getWings, e -> BUG_WINGS); } public static BodyPartGear unicornHorn() { @@ -70,7 +78,7 @@ class BodyPartGear & MsonModel & IModel> PlayerModelKey modelKey, Predicate renderTargetPredicate, MsonModel.Factory modelFactory, - Function partExtractor, + Function partExtractor, Function textureSupplier) { this.gearLocation = gearLocation; this.model = modelKey.steveKey().createModel(modelFactory); @@ -119,6 +127,17 @@ class BodyPartGear & MsonModel & IModel> } } + static final class BugWingsGearModel extends ChangelingModel { + public BugWingsGearModel(ModelPart tree) { + super(tree, false); + } + + @Override + public boolean canFly() { + return true; + } + } + static final class HornGearModel extends UnicornModel { public HornGearModel(ModelPart tree) { super(tree, false); diff --git a/src/main/java/com/minelittlepony/unicopia/client/minelittlepony/Main.java b/src/main/java/com/minelittlepony/unicopia/client/minelittlepony/Main.java index 2f7c292d..958debad 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/minelittlepony/Main.java +++ b/src/main/java/com/minelittlepony/unicopia/client/minelittlepony/Main.java @@ -29,6 +29,7 @@ public class Main extends MineLPDelegate implements ClientModInitializer { IGear.register(HeldEntityGear::new); IGear.register(BodyPartGear::pegasusWings); IGear.register(BodyPartGear::batWings); + IGear.register(BodyPartGear::bugWings); IGear.register(BodyPartGear::unicornHorn); IGear.register(AmuletGear::new); IGear.register(GlassesGear::new); @@ -51,6 +52,7 @@ public class Main extends MineLPDelegate implements ClientModInitializer { model.getAttributes().isGoingFast |= zMotion > 0.4F; model.getAttributes().isGoingFast |= pony.getMotion().isDiving(); } + model.getAttributes().isGoingFast |= pony.getMotion().isRainbooming(); model.getAttributes().isGoingFast &= !pony.getEntityInArms().isPresent(); diff --git a/src/main/resources/assets/unicopia/textures/models/wings/bug_pony.png b/src/main/resources/assets/unicopia/textures/models/wings/bug_pony.png new file mode 100644 index 00000000..7b3db5b7 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/models/wings/bug_pony.png differ