Skip to content

A Paper plugin for tab completion of emojis ๐Ÿ‘

Notifications You must be signed in to change notification settings

Remynfv/EmojiTab

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

47 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

EmojiTab

EmojiTab banner

A Paper plugin for tab completion of emojis ๐Ÿ‘

Here's a demo of the plugin in action:
Demo

Table of Contents

Background

Larger Minecraft servers that employ resource packs have been using these tab-completable emojis for ages. Origin Realms, Mineclub, and some upcoming servers come to mind. However, no plugin to replicate this was available to the public. Thus, EmojiTab was born.

How does it work?

EmojiTab creates a fake "player" in the player list for each emoji shortcode. This adds them to the list of usernames you can tab-complete in any chat message.

The players all appear to have no name, and have a gray skin to blend in with the player list's background (this can be configured.) This is how the big networks do it too, but you might not notice it because the player lists are usually quite full.

To keep these fake players from appearing above real players they are added to a fake scoreboard team called zzzzzzzzz_emoji_tab.

Player list full of gray blank players

Compatibility

EmojiTab should be compatible with all other chat/player list plugins. This is because everything is sent via packets, so none of the players/teams exist on the server. You'll notice that if you run /team list, the team for sorting does not show up. On the backend, this means even if a player is looking at a custom plugin scoreboard, the team's sorting will still be in effect. If you run into any compatibility issues with other plugins, let me know!

Installation

Note: Spigot and Bukkit are NOT supported. This plugin uses several of Paper's API features. Paper is the most popular server software, but if there is enough demand for a Spigot version I could consider adding Spigot support.

Dependencies

This plugin depends on ProtocolLib for creating packets.

Usage

Commands

/emoji reload - Reloads the configs and player lists.

/emoji toggle [player] - Toggles tab completion of emojis for player, or yourself if no player is specified. This does NOT toggle the ability to use emojis in chat.

/emoji list - List all emojis in chat. Hover over them to see names, and click to enter it in chat.

/emoji - Shortcut for /emoji list

Screenshot showing /emoji

Config

EmojiTab has two config files. config.yml is for plugin-wide configuration settings. emojis.yml is where you define your own emojis.

config.yml

# EmojiTab by Legitimoose

# Character to put around emojis, can be left blank if desired.
# Defaults to semicolon ":"
emoji-wrapping: ":"

# Require permission emoji.use to be able to use emojis.
use-permissions: false

# Require permission emoji.use.<emoji name> to be able to use emojis.
# All emojis will still be visible in tab-completion to players without permission.
individual-permissions: false

# Whether to spam the server log with every emoji's data on startup
verbose: false

# CUSTOM PLAYER LIST SKIN
#
# Go to https://mineskin.org and choose a skin.
# Copy and paste "Texture Data" and "Texture Signature" into here.
custom-texture-data:
custom-texture-signature:

emojis.yml

By default, emojis.yml is populated with many of the characters included in Minecraft's default font.

An emoji can be one character โš” or multiple (ใƒŽเฒ ็›Šเฒ )ใƒŽๅฝกโ”ปโ”โ”ป. Custom characters can be added using a resource pack with a custom font.

name is what you type in chat to make the emoji appear. aliases is any number of alternate names for the same emoji.

NOTE: The combined length of name and emoji-wrapping (found in config.yml) cannot exceed 16 characters. This is a hard limit in Minecraft, and any emoji shortcodes longer than 16 characters will be truncated (you'll get a warning in the console, too.)

emojis:
  โš”:
    name: swords
    aliases: crossed_swords
  โ˜ :
    name: skull
  ยฉ:
    name: copyright
  ยฎ:
    name: registered
  โ„ข:
    name: tm
    aliases: trademark
  โ€ผ:
    name: '!!'
  โ‰:
    name: interrobang
    aliases: [ '!?' ]
  โ˜€:
    name: sun
  โ˜:
    name: cloud
  โ™€:
    name: female_sign
  โ™‚:
    name: male_sign
  โ™ :
    name: spades
  โ™ฃ:
    name: clubs
  โ™ฅ:
    name: hearts
  โ™ฆ:
    name: diamonds
  โšก:
    name: lightning
    aliases: zap
  โ›:
    name: pickaxe
  โœ”:
    name: check_mark
  โ„:
    name: snowflake
  โŒ:
    name: x
  โค:
    name: heart
  โญ:
    name: star
  โ:
    name: eject
  โฉ:
    name: fast_forward
  โช:
    name: fast_reverse
    aliases: rewind
  โญ:
    name: next_track
  โฎ:
    name: last_track
  โฏ:
    name: play_or_pause
  โธ:
    name: pause
  โน:
    name: stop
    aliases: square
  โบ:
    name: record
    aliases: circle
  โ–ถ:
    name: play
    aliases: arrow_forward
  โ—€:
    name: reverse
    aliases: arrow_backward
  โš“:
    name: anchor
  โ˜บ:
    name: smile
  โ˜น:
    name: frown
    aliases: sad
  โœ‰:
    name: envelope
    aliases: email
  โ˜‚:
    name: umbrella
  โ˜”:
    name: umbrella_rain
  โ˜„:
    name: comet
  โ›„:
    name: snowman2
  โ˜ƒ:
    name: snowman
  โŒ›:
    name: hourglass
  โŒš:
    name: watch
  โฃ:
    name: heart_exclamation
  โ›ˆ:
    name: lightning_rain
  โ†”:
    name: left_right
  โš :
    name: warning
  โ“‚:
    name: circled_M
    aliases: m
  โ˜ฏ:
    name: yin_yang
  โ˜‘:
    name: check_box
  (ใƒŽเฒ ็›Šเฒ )ใƒŽๅฝกโ”ปโ”โ”ป:
    name: table_flip

Contributing

PRs welcome! The source code is pretty well documented. If you have any questions, you can usually find me in my Discord server.