Anonventions
โ† Back to guides
A LITTLE KNOW-HOW

Installation, Documentation

On this page
  1. โœจ Features
  2. ๐Ÿ“‹ Requirements
  3. ๐Ÿš€ Installation
  4. Adding Emotes
  5. ๐ŸŽฎ Controls
  6. โš™๏ธ Configuration
  7. config.yml (key sections)
  8. category.yml (auto-generated)
  9. ๐Ÿ“ Commands
  10. ๐Ÿ”’ Permissions
  11. Core
  12. Per-Emote (opt-in: permissions.per-emote: true)
  13. Per-Category (opt-in: permissions.per-category: true)
  14. LuckPerms Example
  15. ๐Ÿ”Œ PlaceholderAPI
  16. ๐Ÿ’ฌ RP Chat Integration
  17. Trigger Syntax
  18. Display Format
  19. ๐Ÿ–ฅ๏ธ Shader Detection
  20. ๐ŸŽจ Creating Emotes in Blockbench
  21. Setup
  22. Required Bone Hierarchy
  23. Steps
  24. Duo Emotes
  25. Loop Modes
  26. ๐Ÿ“ฆ Resource Pack
  27. Self-Hosting (default)
  28. Merge Mode
  29. ๐Ÿ› Troubleshooting
  30. ๐Ÿ”‘ License
  31. ๐Ÿ“ฌ 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

  1. Install PacketEvents in plugins/
  2. Place Animotions.jar in plugins/
  3. Start the server โ€” config files generate automatically
  4. Stop the server
  5. Paste your license key in (acquired through Discord ticket) plugins/Animotion/anim-license.txt:
   ANMT-XXXX-XXXX-XXXX-XXXX
  1. Set your MineSkin API key in config.yml โ†’ mineskin.api-key
  2. Set resource-pack.host to your server's public IP or domain
  3. Open the resource-pack.port (default 50021) in your firewall
  4. 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 .bbmodel contains player_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:

  1. Drop new .bbmodel files into emotes/
  2. Run /animotions cload โ€” new emotes are appended to category.yml (existing entries untouched)
  3. Edit category.yml to set custom display names, categories, and order
  4. Run /animotions reload to 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

  1. Download Blockbench (free)
  2. 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

  1. Create the bone hierarchy (bones only โ€” no visible cubes needed)
  2. Set pivot points matching Minecraft player joints
  3. Animation tab โ†’ New Animation (name = emote name)
  4. Add rotation/position/scale keyframes to each bone
  5. Set loop mode: Once, Loop, or Hold
  6. 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_root2 origin = 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


<p align="center">
<strong>More expression. More immersion. More roleplay.</strong>
</p>

THE LITTLE DETAILS MATTER

Choose what this shop may load. Saying no to optional features does not prevent shopping.