Emote is a Minecraft Fabric emote player for BD Engine humanoid exports. It plays emotes from datapacks on the server, and modded clients can replace the datapack skin with the player's current skin.
!Emote demo
The repository already includes ready-to-test example datapacks in docs/example:
emote.cry.zipemote.hello.zipemote.no.zipemote.yes.zipTo test them as-is:
mods folder.datapacks folder.config/emote/pack.json with this:{
"permissions": {
"": [
{
"datapack_identifier": "cry",
"name": "cry",
"command_name": "cry",
"description": "cry",
"default_animation_name": "default",
"options": "loop"
},
{
"datapack_identifier": "hello",
"name": "hello",
"command_name": "hello",
"description": "hello",
"default_animation_name": "default",
"options": "loop"
},
{
"datapack_identifier": "no",
"name": "no",
"command_name": "no",
"description": "no",
"default_animation_name": "default",
"options": "loop"
},
{
"datapack_identifier": "yes",
"name": "yes",
"command_name": "yes",
"description": "yes",
"default_animation_name": "default",
"options": "loop"
}
]
}
}
/emote reload./emote play hello
/emote play hello default_loop
/emote play yes
/emote menu
The example datapacks already contain play_anim_loop.mcfunction, so options: "loop" immediately adds loop entries such as default_loop.
/emote commandpack.json metadata-based loop entry generation for datapacks with play_anim_loop.mcfunctionemote:* skin markersmods folder.datapacks folder.config/emote/pack.json./emote reload./emote.Client installation is optional.
Emotes are loaded from datapacks whose namespaces are listed in config/emote/pack.json.
A datapack is treated as an emote when its data/<namespace> folder matches a configured datapack_identifier.
BD Engine export zips can be prepared with prepare_emote_datapack.py.
The script adds the emote:* markers used for player skin support and writes an emote.name.zip file.
python docs\prepare_emote_datapack.py [--defaults] [--swap-left-right] path\to\project.zip
data/<namespace>/function/a/<animation>/play_anim.mcfunction.data/<namespace>/function/a/<animation>/play_anim_loop.mcfunction.play_anim.mcfunction and play_anim_loop.mcfunction for default.The mod uses two config files:
config/emote/config.jsonconfig/emote/pack.jsonconfig.jsonmenu_page_size: number of emotes shown per menu pageplayer_skin_port: port used by the built-in skin texture endpoint, 0 for automatic selectionmineskin_api_key: optional MineSkin API key for uploading baked player skin textures and using MineSkin-hosted URLsemote_permission: default permission required to use emotespack.jsonpack.json maps permission strings to emote pack entries.
{
"permissions": {
"": [
{
"datapack_identifier": "hello",
"name": "hello",
"command_name": "hello",
"description": "hello",
"default_animation_name": "default",
"options": "loop"
}
],
"emote.pack.vip": [
{
"datapack_identifier": "wave_pack",
"name": "wave",
"command_name": "wave",
"description": "wave",
"default_animation_name": "default",
"options": ""
}
]
}
}
permissions maps a permission string to a list of emote packsdatapack_identifier is the datapack namespace, which means the folder name under data/<namespace>"" means the pack has no extra pack-specific permissiondatapack_identifier cannot appear in more than one permission groupcommand_name, name, description, default_animation_name, and options are defined here instead of being read from the datapack itselfoptionsoptions is a space-separated string.
loop: adds extra *_loop animation entries when the datapack has play_anim_loop.mcfunctionvisible_player: keeps the real player visible instead of forcing invisibility during playbackExample:
"""loop""visible_player loop"This project is licensed under the Apache License 2.0.