On this page
- โจ Features
- ๐ Requirements
- ๐ Installation
- Adding Emotes
- ๐ฎ Controls
- โ๏ธ Configuration
- config.yml (key sections)
- category.yml (auto-generated)
- ๐ Commands
- ๐ Permissions
- Core
- Per-Emote (opt-in: permissions.per-emote: true)
- Per-Category (opt-in: permissions.per-category: true)
- LuckPerms Example
- ๐ PlaceholderAPI
- ๐ฌ RP Chat Integration
- Trigger Syntax
- Display Format
- ๐ฅ๏ธ Shader Detection
- ๐จ Creating Emotes in Blockbench
- Setup
- Required Bone Hierarchy
- Steps
- Duo Emotes
- Loop Modes
- ๐ฆ Resource Pack
- Self-Hosting (default)
- Merge Mode
- ๐ Troubleshooting
- ๐ License
- ๐ฌ Support
๐ญ Animotions V1.0.3
โโโโโโโโโโโโโโโโโโ
Built by roleplayers, for roleplay servers
1.21.4+ โข Paper
Support ViaVersion from 1.21.4+
โโโโโโโโโโโโโโโโโโ
Requirements: PacketEvents, MineskinAPI key
โจ Features
- UI-Based Emoting โ Shift+F opens a clean TextDisplay emote menu
- Duo Emotes โ Shift+Q to share emotes (handshakes, hugs, daps)
- RP Chat โ Type
*{wave}*in chat to trigger emotes inline - Blockbench Workflow โ Create custom emotes with full bone animation
- Auto Resource Pack โ Built-in HTTP server delivers shaders automatically
- Pack Merging โ Works with Nexo, ItemsAdder, Oraxen, or a custom folder
- Shader Compatible โ Detects OptiFine/Iris with graceful fallback + MineSkin body-part textures
- PlaceholderAPI โ
%animotions_current_emote%and more - Per-Emote & Per-Category Permissions โ Fine-grained LuckPerms-ready access control
- Animated Open/Close UI โ SCALE_UP, ELASTIC, SLIDE, GROW and more animation styles
๐ Requirements
| Requirement | Details |
|---|---|
| Server | Paper / Spigot / Bukkit 1.21.4+ |
| Java | 21+ |
| PacketEvents | Required โ download |
| MineSkin API Key | Free from mineskin.org/apikey |
| PlaceholderAPI | Optional โ for placeholders |
๐ Installation
- Install PacketEvents in
plugins/ - Place Animotions.jar in
plugins/ - Start the server โ config files generate automatically
- Stop the server
- Paste your license key in (acquired through Discord ticket)
plugins/Animotion/anim-license.txt:
ANMT-XXXX-XXXX-XXXX-XXXX
- Set your MineSkin API key in
config.ymlโmineskin.api-key - Set
resource-pack.hostto your server's public IP or domain - Open the
resource-pack.port(default50021) in your firewall - Start the server โ you're ready!
Adding Emotes
Drop .bbmodel files into plugins/Animotion/emotes/ and run /animotions reload.
You can have multiple .bbmodel files โ each with their own animations and bone hierarchies. Name them whatever you want:
plugins/Animotion/emotes/
โโโ social.bbmodel โ wave, bow, shrug, etc.
โโโ sitting.bbmodel โ sit, sit2, sit3, etc.
โโโ dance-pack.bbmodel โ custom dance animations
โโโ duo-romantic.bbmodel โ hug, kiss, bridal (duo)
โโโ duo-friendly.bbmodel โ handshake, fistbump (duo)
- Solo vs Duo is auto-detected โ if a
.bbmodelcontainsplayer_root2, all its animations are duo emotes - Each file keeps its own bone hierarchy and pivot points โ no conflicts between packs
- Animation names must be unique across all files (duplicates are overwritten with a warning)
After adding new files, run /animotions cload to automatically add new emotes to category.yml without overwriting your existing configuration.
๐ฎ Controls
| Key | Action |
|---|---|
| Shift+F | Open solo emote menu |
| Shift+Q | Open duo menu (look at a player) |
| Left Click | Scroll up |
| Right Click | Scroll down |
| F | Select / Confirm |
| Shift+F | Back / Close |
| Sneak | Cancel active emote |
| F (on invite) | Accept duo invite |
| Shift+F (on invite) | Deny duo invite |
โ๏ธ Configuration
config.yml (key sections)
resource-pack:
enabled: true
port: 50021
host: "your-server-ip"
required: true
prompt: "ยงeAnimotion ยง7requires a resource pack..."
shader-detection:
enabled: true
extra-brands: []
log-detections: true
emote-ui:
enabled: true
auto-close-seconds: 30
duo-target-distance: 5.0
close-on-move: true
close-on-damage: true
display-distance: 6.5
items-per-page: 8
animation:
open-style: SCALE_UP # SCALE_UP / ELASTIC / SLIDE_UP / SLIDE_DOWN / SLIDE_LEFT / SLIDE_RIGHT / GROW_HORIZONTAL / GROW_VERTICAL
close-style: SCALE_UP
open-duration: 5
close-duration: 4
mineskin:
enabled: true
api-key: "your-key"
log-uploads: true
merge-pack:
mode: none # none / auto / nexo / itemsadder / oraxen / folder
output-folder: "" # Only used when mode: folder
keep-self-host: false
rp-chat:
enabled: false
trigger-format: "*{name}*"
format-emote-syntax: true
format-pattern: "โฆ{name}โฆ"
format-color: "GOLD"
format-italic: true
format-bold: false
permissions:
per-emote: false # Enable animotions.emote.<name>
per-category: false # Enable animotions.category.<id>
category.yml (auto-generated)
Controls how emotes appear in the UI. Auto-generated on first run with defaults.
Adding new emotes to categories:
- Drop new
.bbmodelfiles intoemotes/ - Run
/animotions cloadโ new emotes are appended tocategory.yml(existing entries untouched) - Edit
category.ymlto set custom display names, categories, and order - Run
/animotions reloadto apply changes
categories:
general:
display-name: "&aโฆ General"
order: 1
colour: "55FF55"
allow-movement: false
emotes:
wave:
display-name: Wave
type: single
category: general
๐ Commands
| Command | Description | Permission |
|---|---|---|
/animotions |
Help | animotions.use |
/animotions <name> |
Play solo emote | animotions.use |
/animotions <name> <player> |
Play duo emote | animotions.duo |
/animotions stop |
Stop emote | animotions.use |
/animotions list |
List emotes | animotions.use |
/animotions reload |
Reload all emotes, config & categories | animotions.admin |
/animotions cload |
Catalog new emotes into category.yml | animotions.admin |
/animotions pack |
Debug resource pack | animotions.admin |
Aliases: /emote, /animate, /gesture, /e
๐ Permissions
Core
| Permission | Description | Default |
|---|---|---|
animotions.use |
Base access โ commands & emoting | OP |
animotions.admin |
Reload, pack debug | OP |
animotions.ui |
Keybind emote UI (Shift+F / Shift+Q) | OP |
animotions.duo |
Initiate duo emotes | OP |
animotions.rpchat |
Use *{emote}* in chat |
OP |
Per-Emote (opt-in: permissions.per-emote: true)
| Permission | Description |
|---|---|
animotions.emote.<name> |
Use a specific emote |
animotions.emote.* |
Use all emotes |
Per-Category (opt-in: permissions.per-category: true)
| Permission | Description |
|---|---|
animotions.category.<id> |
Access a category |
animotions.category.* |
Access all categories |
LuckPerms Example
# Base access for everyone
/lp group default permission set animotions.use true
/lp group default permission set animotions.ui true
/lp group default permission set animotions.rpchat true
# VIP gets duo emotes
/lp group vip permission set animotions.duo true
# Per-emote (when per-emote: true)
/lp group default permission set animotions.emote.wave true
/lp group vip permission set animotions.emote.* true
# Per-category (when per-category: true)
/lp group default permission set animotions.category.general true
/lp group vip permission set animotions.category.* true
# Admin
/lp group admin permission set animotions.admin true
๐ PlaceholderAPI
| Placeholder | Output |
|---|---|
%animotions_current_emote% |
wave or none |
%animotions_is_emoting% |
true / false |
%animotions_is_duo% |
true / false |
%animotions_emote_count% |
24 |
%animotions_category_count% |
5 |
Use in scoreboards, tab lists, chat formats, or any PAPI-compatible plugin.
๐ฌ RP Chat Integration
Bring chat to life with contextual emotes!
Enable in config:
rp-chat:
enabled: true
Type emotes inline:
Yo, what's up? *{nod_up}*
Other players see: Yo, what's up? โฆnod_upโฆ
Trigger Syntax
Configure what players type to trigger emotes:
| Config | Player Types |
|---|---|
"*{name}*" |
*wave* |
":{name}:" |
:wave: |
"-{name}-" |
-wave- |
">{name}<" |
>wave< |
Display Format
| Config | Example Result |
|---|---|
format-pattern: "โฆ{name}โฆ" |
โฆwaveโฆ |
format-pattern: "[{name}]" |
[wave] |
format-pattern: "โก {name}" |
โก wave |
format-color: "#FF5555" |
Red text |
format-italic: false |
No italic |
Requires animotions.rpchat permission.
๐ฅ๏ธ Shader Detection
Animotion automatically detects OptiFine and Iris shader mods via client brand.
When detected, body parts render at their real position so they stay visible and animated.
For the best experience with shader users, enable MineSkin โ this generates per-body-part skin textures so every body part shows the correct skin region instead of repeating the head texture.
shader-detection:
enabled: true
extra-brands: [] # Add custom brand strings if needed
log-detections: true
mineskin:
enabled: true
api-key: "your-key"
Note: MineSkin free tier allows ~2 req/min. Initial processing takes ~2-3 minutes per player (5 uploads). Results are cached to disk โ no further API calls until skin changes.
๐จ Creating Emotes in Blockbench
Setup
- Download Blockbench (free)
- File โ New โ Generic Model
(Or simply add the given steve.bbmodel)
Required Bone Hierarchy
player_root
โโโ hip
โ โโโ chest
โ โ โโโ head
โ โ โโโ left_arm
โ โ โ โโโ left_forearm
โ โ โโโ right_arm
โ โ โโโ right_forearm
โ โโโ left_leg
โ โ โโโ left_foreleg
โ โโโ right_leg
โ โโโ right_foreleg
Steps
- Create the bone hierarchy (bones only โ no visible cubes needed)
- Set pivot points matching Minecraft player joints
- Animation tab โ New Animation (name = emote name)
- Add rotation/position/scale keyframes to each bone
- Set loop mode: Once, Loop, or Hold
- Save as
.bbmodel
Duo Emotes
Use two skeletons in one model:
(Or simply add the given duo.bbmodel)
player_root โ Player 1
โโโ body / head / arms / legs
player_root2 โ Player 2
โโโ body2 / head2 / left_arm2 / right_arm2 / left_leg2 / right_leg2
player_root2origin = offset between players- All second-player bones end with
2
Loop Modes
| Mode | Behavior |
|---|---|
once |
Plays once, then ends |
loop |
Repeats until cancelled (sneak) |
hold |
Plays once, freezes on last frame |
๐ฆ Resource Pack
Self-Hosting (default)
resource-pack:
enabled: true
port: 50021
host: "your-public-ip"
required: true
Make sure the port is open/forwarded if players connect from outside.
Merge Mode
Merge the Animotion resource pack into another plugin's pack pipeline:
merge-pack:
mode: auto # Detects Nexo > ItemsAdder > Oraxen
| Mode | Description |
|---|---|
none |
No merging; use built-in HTTP server (default) |
auto |
Auto-detect Nexo > ItemsAdder > Oraxen at startup |
nexo |
Force Nexo integration |
itemsadder |
Force ItemsAdder integration |
oraxen |
Force Oraxen integration |
folder |
Copy pack files to a custom directory |
When merge mode is active, the built-in HTTP server is automatically disabled.
๐ Troubleshooting
| Issue | Fix |
|---|---|
| Head texture on all body parts | Enable MineSkin in config |
| Pack not downloading | Set host to public IP, open port in firewall |
| Emotes not loading | Check console for parse errors, run /animotion reload |
| Chat emotes not working | Enable rp-chat, check animotions.rpchat permission |
| MineSkin slow | Normal for first load (~2-3 min), cached after |
| Shader users see broken parts | Enable shader-detection and MineSkin |
| UI not appearing | Check animotions.ui permission |
๐ License
| Detail | Value |
|---|---|
| Key format | ANMT-XXXX-XXXX-XXXX-XXXX |
| File | plugins/Animotion/anim-license.txt |
| HWID binding | One key per server |
| Offline cache | Works offline after first validation |
On startup the plugin validates your key against our license system. On success it's cached locally. Periodic heartbeats confirm status.
๐ฌ Support
- Discord: discord.gg/anonventions
- Documentation: anonventions.org
- Purchase: anonventions.org/store
<p align="center">
<strong>More expression. More immersion. More roleplay.</strong>
</p>
