Adds the three drops as Stonecutter versions (26.1's jar also accepts
its hotfixes). loom-back-compat already picks the plain Loom for 26.x;
the testmod's remap configurations are only created where there's
something to remap, and the foojay resolver downloads the Java 25
toolchain these versions need.
- 26.3 renamed PoseStack.mulPose(Quaternionfc) to rotate.
- The testmod follows Fabric API's renames: ClientCommands (26.1),
getClientLevel (26.1) and getConnection (26.2) for waiting on chunks.
- 26.2 replaced Options.hideGui with the HUD's toggle, so the gametest
toggles it through a helper.
The screenshot gametest passes on 26.1, 26.2 and 26.3, and the bent
limbs match 1.21.11's.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- 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: Bezier (any degree, De Casteljau), LimbBend (cubic spine through
the rigid upper/joint/lower shape, one ring per texture row spaced by
arc length, rigid rings so pieces share vertices) and QuadSplitter
(cuts faces at the rings, interpolating UVs).
- fabric: ModelPartMixin draws parts that have a bend with
BentCubeRenderer, which deforms vanilla's own cubes. Overlays and armor
use the limb's spine so they stay attached. Bends are reset every
setupAnim because models are shared between entities.
- testmod: flap and squat animations, and a client gametest that
screenshots each animation from the front and side
(runClientGameTest). The tester runs with the full Fabric API because
single modules don't bring their version-specific dependencies.
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]>