ApoTags is an optimized Minecraft plugin for Paper and Velocity networks. It manages custom tags and visual prefixes, streamlining rank organization and enhancing player identity across your entire server.

The complete RGB tag manager for Paper servers.
Give your players beautifully colored prefix tags — with full GUI, PlaceholderAPI support, and zero file editing required.
&#RRGGBB hex codes and legacy & codes anywheregui_user.yml and gui_admin.yml config files| Dependency | Type | Version |
|---|---|---|
| Paper | Required | 1.19.4 |
| Java | Required | 17+ |
| PlaceholderAPI | Optional | 2.11.6+ |
ApoTags.jar and drop it into your /plugins/ folderconfig.yml# ─────────────────────────────────────────────
# ApoTags Configuration
# Authors: ApoloCR & ApoStudios
# Version: 1.0.0
# ─────────────────────────────────────────────
# Plugin locale: en / es
locale: 'en'
# Storage type: H2 / FLATFILE
storage: 'H2'
# GUI Settings
gui_settings:
title: 'ApoTags - Select your Tag'
rows: 6
# Items for GUI navigation (Material names)
next_page_item: 'ARROW'
previous_page_item: 'ARROW'
reset_tag_item: 'BARRIER'
# Slot positions in row 6 (0-indexed from row start = slot 45)
# Row 6: slots 45-53
prev_slot: 45
next_slot: 53
reset_slot: 49
# Filler item for empty slots (set to 'NONE' to disable)
filler_item: 'GRAY_STAINED_GLASS_PANE'
filler_name: ' '
tags.yml — Default tagsVIP:
order: 1
tag: '&7[&eVIP&7]'
lore:
- '&eAwarded to VIP members'
- '&7Thank you for your support!'
permission: apotags.tag.vip
enabled: true
MVP:
order: 2
tag: '&7[&bMVP&7]'
lore:
- '&bAwarded to MVP members'
- '&7The highest donor rank.'
permission: apotags.tag.mvp
enabled: true
Apolo:
order: 3
tag: '�f2ff&l[APO] '
lore:
- '�f2ffExclusive Developer Tag'
- '&7Reserved for ApoStudios staff.'
permission: none
enabled: true
Staff:
order: 4
tag: '&7[&cStaff&7]'
lore:
- '&cFor server staff members'
- '&7Helping keep the server safe.'
permission: apotags.tag.staff
enabled: true
Helper:
order: 5
tag: '&7[&aHelper&7]'
lore:
- '&aFor server helpers'
- '&7Always ready to assist.'
permission: apotags.tag.helper
enabled: true
Builder:
order: 6
tag: '&#ff9900&l[Builder] '
lore:
- '&#ff9900For talented builders'
- '&7Creating amazing things.'
permission: apotags.tag.builder
enabled: true
Tip: Tags with
permission: noneare available to every player for free.
gui/gui_user.yml — Player GUI appearancetitle: '�f2ff&lApoTags &8― &7Select your Tag'
rows: 6
tag_item_material: 'NAME_TAG'
tag_item_locked_material: 'PAPER'
filler_material: 'GRAY_STAINED_GLASS_PANE'
prev_page:
material: 'ARROW'
slot: 45 # leftmost slot of row 6
next_page:
material: 'ARROW'
slot: 53 # rightmost slot of row 6
reset_tag:
material: 'BARRIER'
slot: 49 # center of row 6
glow_active_tag: true
custom_model_data_available: 0
custom_model_data_active: 1
custom_model_data_locked: 2
gui/gui_admin.yml — Admin GUI appearancetitle_prefix: '&c&l[Admin] &r'
enabled_tag_material: 'NAME_TAG'
disabled_tag_material: 'PAPER'
glow_enabled_tags: true
filler_material: 'BLACK_STAINED_GLASS_PANE'
info_item:
material: 'COMMAND_BLOCK'
slot: 49
All commands use /tags as the main label. Aliases: /apotags, /tag
| Command | Description |
|---|---|
/tags |
Open the tag selector GUI |
/tags list |
List your available tags and active tag |
/tags select <id> |
Equip a tag |
/tags version |
Show plugin version |
/tags help |
Show all commands you have access to |
| Command | Description |
|---|---|
/tags admin |
Open the admin management GUI |
/tags list all |
List every loaded tag |
/tags list <player> |
List a specific player's available tags |
/tags set <player> <id> |
Assign a tag to a player |
/tags clear <player> |
Remove a player's active tag |
/tags create <id> <tag> |
Create a new tag |
/tags delete <id> |
Permanently delete a tag |
/tags enable <id> |
Enable a disabled tag |
/tags disable <id> |
Disable a tag (hides it from all players) |
/tags setorder <id> <n> |
Change a tag's display order |
/tags setdisplay <id> <tag> |
Change a tag's display string |
/tags setdesc <id> <desc> |
Change a tag's lore (| for multiple lines) |
/tags reload |
Reload all config files without restart |
| Permission | Default | Description |
|---|---|---|
apotags.* |
false | Grants every ApoTags permission |
apotags.use |
true | Grants all player commands |
apotags.admin |
op | Grants all admin commands (inherits apotags.use) |
apotags.reload |
op | Grants /tags reload |
apotags.tag.all |
op | Bypasses all per-tag permission checks |
| Permission | Default | Command |
|---|---|---|
apotags.command.tags |
true | /tags |
apotags.command.list |
true | /tags list |
apotags.command.select |
true | /tags select |
apotags.command.version |
true | /tags version |
apotags.command.help |
true | /tags help |
apotags.command.admin |
op | /tags admin |
apotags.command.list.all |
op | /tags list all |
apotags.command.list.player |
op | /tags list <player> |
apotags.command.set |
op | /tags set |
apotags.command.clear |
op | /tags clear |
apotags.command.create |
op | /tags create |
apotags.command.delete |
op | /tags delete |
apotags.command.enable |
op | /tags enable |
apotags.command.disable |
op | /tags disable |
apotags.command.setorder |
op | /tags setorder |
apotags.command.setdisplay |
op | /tags setdisplay |
apotags.command.setdesc |
op | /tags setdesc |
apotags.command.reload |
op | /tags reload |
Individual tag access follows the format apotags.tag.<TagID> where <TagID> exactly matches the key in tags.yml (case-sensitive).
These are not declared in plugin.yml — create them in your permissions plugin as needed.
apotags.tag.VIP → access to the VIP tag
apotags.tag.Staff → access to the Staff tag
apotags.tag.Legend → access to a custom Legend tag
Tags with
permission: noneintags.ymlare free for everyone — no node needed.
LuckPerms examples:
/lp user <player> permission set apotags.tag.VIP true
/lp group vip permission set apotags.tag.all true
/lp group moderator permission set apotags.command.admin true
Install PlaceholderAPI to display tags in chat, tab, scoreboards, and any other PAPI-compatible plugin.
| Placeholder | Returns |
|---|---|
%apotags_tag% |
Active tag with color codes (legacy §-format). Returns "" if none or disabled. |
%apotags_tag_plain% |
Active tag with all color codes stripped |
%apotags_tag_id% |
The raw Tag ID (e.g. VIP). Returns "" if none. |
Chat format example (EssentialsX):
format: '{prefix}%apotags_tag%%displayname%&r: {message}'
TAB plugin example:
tabprefix: '%apotags_tag%'
ApoTags ships with English (en) and Spanish (es).
To add a new language:
plugins/ApoTags/lang/en.yml → plugins/ApoTags/lang/<code>.yml{tokens} unchanged)locale: '<code>' in config.yml/tags reloadVia command (no restart):
/tags create Legend &#FFD700&l[LEGEND]
/tags setdesc Legend &6The most legendary rank|&7Achieved through glory.
/tags setorder Legend 3
Then grant the permission apotags.tag.Legend in your permissions plugin.
Directly in tags.yml:
Legend:
order: 3
tag: '&#FFD700&l[LEGEND] '
lore:
- '&6The most legendary rank'
- '&7Achieved through glory.'
permission: apotags.tag.Legend
enabled: true
Then run /tags reload.
ApoTags is built on Paper 1.19.4 + Adventure (Kyori) for native RGB rendering.
Color syntax supported everywhere:
&#RRGGBB → full hex color e.g. �f2ff
&a &b &c ... → legacy codes
&l &o &n ... → formatting codes
Storage:
playerdata.mv.dbplayerdata.ymlPackage: dev.apolostudios.apotags
Made with ❤️ by ApoloCR & ApoStudios