diff --git a/src/main/java/com/minelittlepony/unicopia/client/minelittlepony/Main.java b/src/main/java/com/minelittlepony/unicopia/client/minelittlepony/Main.java new file mode 100644 index 00000000..94ff6eba --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/client/minelittlepony/Main.java @@ -0,0 +1,28 @@ +package com.minelittlepony.unicopia.client.minelittlepony; + +import com.minelittlepony.client.render.EquineRenderManager; +import com.minelittlepony.model.IModel; +import com.minelittlepony.model.capabilities.fabric.PonyModelPrepareCallback; +import com.minelittlepony.unicopia.entity.player.Pony; + +import net.fabricmc.api.ClientModInitializer; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; + +public class Main implements ClientModInitializer { + + @Override + public void onInitializeClient() { + PonyModelPrepareCallback.EVENT.register(this::onPonyModelPrepared); + } + + private void onPonyModelPrepared(Entity entity, IModel model, EquineRenderManager.Mode mode) { + if (entity instanceof PlayerEntity) { + Pony pony = Pony.of((PlayerEntity)entity); + + model.getAttributes().isSwimming |= pony.getMotion().isFlying(); + //model.getAttributes().isSwimmingRotated |= pony.getMotion().isFlying(); + model.getAttributes().isGoingFast |= pony.getMotion().isRainbooming(); + } + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/Motion.java b/src/main/java/com/minelittlepony/unicopia/entity/player/Motion.java index b54af7a0..47049288 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/Motion.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/Motion.java @@ -11,6 +11,8 @@ public interface Motion { boolean isGliding(); + boolean isRainbooming(); + float getWingAngle(); PlayerDimensions getDimensions(); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java index 5d4611b2..73d71632 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java @@ -4,6 +4,7 @@ import com.minelittlepony.unicopia.FlightType; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.USounds; import com.minelittlepony.unicopia.ability.magic.Spell; +import com.minelittlepony.unicopia.ability.magic.spell.JoustingSpell; import com.minelittlepony.unicopia.entity.Creature; import com.minelittlepony.unicopia.entity.EntityPhysics; import com.minelittlepony.unicopia.entity.Jumper; @@ -73,6 +74,11 @@ public class PlayerPhysics extends EntityPhysics implements Tickable, Moti return isFlying() && (pony.getMaster().isSneaking() || ((Jumper)pony.getMaster()).isJumping()) && !pony.sneakingChanged(); } + @Override + public boolean isRainbooming() { + return pony.getSpellOrEmpty(JoustingSpell.class).isPresent(); + } + @Override public float getWingAngle() { float spreadAmount = -0.5F; diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 7fa580fe..a065f0bc 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -24,6 +24,9 @@ ], "modmenu": [ "com.minelittlepony.unicopia.modmenu.UMenuFactory" + ], + "minelittlepony": [ + "com.minelittlepony.unicopia.client.minelittlepony.Main" ] }, "depends": {