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.
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)
- 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]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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 hasbend/bendAxisfields),Pose,Animation,AnimationPlayer. Includes JUnit tests.src/main: the Fabric mod, built for 1.21.4–1.21.11 with Stonecutter on Mojang mappings.LivingEntityRendererMixinsamples each player's pose into the render state.HumanoidModelMixinapplies it at the end ofHumanoidModel.setupAnim, so armor follows the pose too.src/testmod: a dev-only tester that isn't published. It adds/emotes play <wave|tpose|bob|bend>,/emotes stopand/emotes info, and runs a Mixin audit at startup so a broken target fails right away.saturnclientmcGitea registry asorg.saturnclient:emotes-coreandorg.saturnclient:emotes-fabric:<v>+<mc>, with core bundled inside the jar.Testing
./gradlew :core:testpasses../gradlew buildAllbuilds all 8 jars, and the mixin targets are remapped to intermediary.runTestmodClientstarts on all 8 versions and the mixin audit passes. I haven't played an emote in a world yet.publishToMavenLocalproduces the expected POMs. Nothing is published to Gitea yet.Notes
BoneTransform.bendisn't rendered yet.🤖 Generated with Claude Code