- LimbBend.anchoredAtEnd keeps the far end in place (the hips on the
legs) and folds the other half, and angleAt/axis expose how far the
limb has turned at a point.
- PoseApplier bends the body from the hips and carries the head and arms
with it: their pivots follow the bent torso and they turn with its ring.
- Test animations: bow (torso only) and twerk. The gametest shoots the
twerk at the top and bottom of its bounce, including from behind.
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]>