Scaffold the emote library with a Stonecutter Fabric mod and tester #1

Merged
selimaj-dev merged 1 commits from stonecutter-scaffold into master 2026-09-26 17:06:39 +00:00
Owner

Our own emote library to replace player-animation-lib, which doesn't support the newer versions or limb bending. This PR is only the scaffold. Bending comes next.

What's here

  • core/: animation model with no Minecraft dependency: Bone, BoneTransform (it already has bend/bendAxis fields), Pose, Animation, AnimationPlayer. Includes JUnit tests.
  • src/main: the Fabric mod, built for 1.21.4–1.21.11 with Stonecutter on Mojang mappings.
    • LivingEntityRendererMixin samples each player's pose into the render state.
    • HumanoidModelMixin applies it at the end of HumanoidModel.setupAnim, so armor follows the pose too.
    • Both hook points are the same in every supported version, so there are no version branches yet.
  • src/testmod: a dev-only tester that isn't published. It adds /emotes play <wave|tpose|bob|bend>, /emotes stop and /emotes info, and runs a Mixin audit at startup so a broken target fails right away.
  • Publishing: goes to the saturnclientmc Gitea registry as org.saturnclient:emotes-core and org.saturnclient:emotes-fabric:<v>+<mc>, with core bundled inside the jar.

Testing

  • ./gradlew :core:test passes.
  • ./gradlew buildAll builds all 8 jars, and the mixin targets are remapped to intermediary.
  • runTestmodClient starts on all 8 versions and the mixin audit passes. I haven't played an emote in a world yet.
  • publishToMavenLocal produces the expected POMs. Nothing is published to Gitea yet.

Notes

  • Loom is pinned to 1.17.21 because 1.18 needs a Java 25 JVM to run Gradle. 26.x will need that upgrade.
  • BoneTransform.bend isn't rendered yet.

🤖 Generated with Claude Code

Our own emote library to replace player-animation-lib, which doesn't support the newer versions or limb bending. This PR is only the scaffold. Bending comes next. ## What's here - **`core/`**: animation model with no Minecraft dependency: `Bone`, `BoneTransform` (it already has `bend`/`bendAxis` fields), `Pose`, `Animation`, `AnimationPlayer`. Includes JUnit tests. - **`src/main`**: the Fabric mod, built for 1.21.4–1.21.11 with Stonecutter on Mojang mappings. - `LivingEntityRendererMixin` samples each player's pose into the render state. - `HumanoidModelMixin` applies it at the end of `HumanoidModel.setupAnim`, so armor follows the pose too. - Both hook points are the same in every supported version, so there are no version branches yet. - **`src/testmod`**: a dev-only tester that isn't published. It adds `/emotes play <wave|tpose|bob|bend>`, `/emotes stop` and `/emotes info`, and runs a Mixin audit at startup so a broken target fails right away. - **Publishing**: goes to the `saturnclientmc` Gitea registry as `org.saturnclient:emotes-core` and `org.saturnclient:emotes-fabric:<v>+<mc>`, with core bundled inside the jar. ## Testing - `./gradlew :core:test` passes. - `./gradlew buildAll` builds all 8 jars, and the mixin targets are remapped to intermediary. - `runTestmodClient` starts on all 8 versions and the mixin audit passes. I haven't played an emote in a world yet. - `publishToMavenLocal` produces the expected POMs. Nothing is published to Gitea yet. ## Notes - Loom is pinned to 1.17.21 because 1.18 needs a Java 25 JVM to run Gradle. 26.x will need that upgrade. - `BoneTransform.bend` isn't rendered yet. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
selimaj-dev added 1 commit 2026-09-26 17:05:17 +00:00
- 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]>
selimaj-dev merged commit d5af8d65c2 into master 2026-09-26 17:06:39 +00:00
selimaj-dev deleted branch stonecutter-scaffold 2026-09-26 17:06:41 +00:00
Sign in to join this conversation.