- core: EmotecraftLoader reads Emotecraft / player-animation-lib JSON
into a KeyframeAnimation (per-channel keyframes with Easing), following
player-animation-lib's reader: absolute pivots become offsets, body
(and torso before version 3) is the whole player in blocks, angles are
degrees unless "degrees": false, turn adds whole turns, and loops jump
back to returnTick after endTick. Emote and EmoteRegistry hold emotes
by ID with their name, description and author. Animation.loopStart
lets loops restart after an intro. Uses Jackson 2.17.0, the version
Saturn Client ships.
- Bone.ROOT moves the whole player around its middle (0.7 blocks above
the feet), through the model's root part, so armor and held items
follow.
- fabric: Emotes.registry() and Emotes.play(uuid, id). Core and Jackson
are bundled in the jar.
- testmod: loads Saturn's six emotes into the library's registry
(/emotes play), and keeps its test animations in a separate registry
(/emotes test). The gametest shoots the loaded emotes too.
Blending with the vanilla pose is issue #4.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- core/: Minecraft-independent animation model (Bone, BoneTransform with
bend fields, Pose, Animation, AnimationPlayer) with JUnit tests.
- src/main: Fabric mod built for 1.21.4-1.21.11 with Stonecutter on
Mojang mappings. Samples each player's pose into its render state and
applies it at the end of HumanoidModel.setupAnim (armor follows too).
- src/testmod: dev-only tester with /emotes play|stop|info and a mixin
audit on startup.
- Publishing to the saturnclientmc Gitea Maven registry as
org.saturnclient:emotes-core and emotes-fabric:<v>+<mc>.
Loom is pinned to 1.17 because 1.18 needs a Java 25 JVM.
Co-Authored-By: Claude Opus 5.5 <[email protected]>