New features:
• Added multicolor tag creator items — create tags with full & codes, hex colors, MiniMessage and gradients via /tags create (display)
• /perftags givecreator now takes single or multi to give the matching creator item type
• Single-color creator unchanged — /tags create (color) (name) still works as before
Improvements:
• Tag creator config split into single-color and multicolor sections with separate item name and lore
Code:# plugins/PerfTags/config.yml — merge (config-version auto-migrates to 15): player-tag-item: single-color: enabled: true material: NAME_TAG item-name: "<#C4B5FD><bold>Tag Creator" item-lore: - "<#94A3B8>Create your own personal tag" - "<#64748B>Main hand · then run:" - "<#E2E8F0>/tags create <#F0ABFC>#RRGGBB <#F8FAFC>YourName" multicolor: enabled: true material: NAME_TAG item-name: "<#F0ABFC><bold>Multicolor Tag Creator" item-lore: - "<#94A3B8>Create a fully custom colored tag" - "<#64748B>Main hand · then run:" - "<#E2E8F0>/tags create <#F8FAFC>&8[&2formidi&3able&8]" # plugins/PerfTags/messages.yml — new keys merge: # usage-tags-create-multi, tag-create-invalid-display, tag-create-wrong-creator-item # admin-usage-givecreator, admin-givecreator-invalid-mode, admin-givecreator-mode-disabled
• Personal tag creation accepts legacy & color codes, hex colors, and MiniMessage tags — not just #RRGGBB
• Tag displays with & or § codes now render correctly in the GUI, tab list, and PlaceholderAPI
• /tags create tab-complete suggests common & and MiniMessage color examples
Code:# plugins/PerfTags/messages.yml — merge (optional, updated defaults in JAR): usage-tags-create: "<#FFD166>Usage: <white>/tags create <#RRGGBB|&color|<color>> <name> <gray>(hold the tag creator in main hand)" tag-create-invalid-color: "<#FF6B9E>Invalid color or format. Use <white>#RRGGBB<#FF6B9E>, <white>& codes<#FF6B9E>, or MiniMessage tags like <white><red><#FF6B9E>."
Bug fixes:
• /perftags reload no longer clears tags and placeholders for online players until they rejoin
• Tag Creator tags you redeem are only visible and equippable by you in /tags
• You can redeem multiple Tag Creator items and keep more than one personal tag
• Admin command is now /perftags givecreator (player) (amount) instead of "giveitem"
• Staff need the new perftags.admin.givecreator permission to hand out creator items
Code:# plugins/PerfTags/messages.yml — merge if you customized admin help: # admin-usage now lists givecreator instead of giveitem # admin-usage-givecreator, admin-givecreator-done, admin-givecreator-self
New features:
• Optional category sidebar in /tags with All tags and per-category buttons
Bug fixes:
• tags.yml category and sort-order now override database values for tag order in the GUI
Code:# plugins/PerfTags/gui/tags-gui.yml — merge category-sidebar section: filler: enabled: true material: "LIGHT_GRAY_STAINED_GLASS_PANE" name: " " uncategorized-label: "<#CBD5E1>Uncategorized" category-sidebar: enabled: true # Allowed sidebar slots — each category picks one via slot: slots: [0, 9, 18, 27, 36] hide-empty: true open-default: all-tags # all-tags, example1, example2, example3 all-tags: enabled: true category: default slot: 0 material: BOOK name: "<#818CF8><bold>All tags" lore: - "" - "<#94A3B8>{tag_count} tags available" - "" - "<#FDE047>▶ Click to browse" selected: material: ENCHANTED_BOOK name: "<#62FF67><bold>All tags" lore: - "" - "<#94A3B8>{tag_count} tags available" - "" - "<#FDE047>▶ Selected" # Block name is a GUI id only — category: must match tags.yml (category: …) example1: enabled: false category: example1 slot: 9 material: BOOK name: "<#F472B6><bold>Example Category 1" lore: - "" - "<#94A3B8>{tag_count} tags available" - "" - "<#FDE047>▶ Click to browse" selected: material: ENCHANTED_BOOK name: "<#62FF67><bold>Example Category 1" lore: - "" - "<#94A3B8>{tag_count} tags available" - "" - "<#FDE047>▶ Selected" example2: enabled: false category: example2 slot: 18 material: BOOK name: "<#38BDF8><bold>Example Category 2" lore: - "" - "<#94A3B8>{tag_count} tags available" - "" - "<#FDE047>▶ Click to browse" selected: material: ENCHANTED_BOOK name: "<#62FF67><bold>Example Category 2" lore: - "" - "<#94A3B8>{tag_count} tags available" - "" - "<#FDE047>▶ Selected" example3: enabled: false category: example3 slot: 27 material: BOOK name: "<#FDE68A><bold>Example Category 3" lore: - "" - "<#94A3B8>{tag_count} tags available" - "" - "<#FDE047>▶ Click to browse" selected: material: ENCHANTED_BOOK name: "<#62FF67><bold>Example Category 3" lore: - "" - "<#94A3B8>{tag_count} tags available" - "" - "<#FDE047>▶ Selected" # Fallback when a category block omits material/name/lore category-template: material: BOOK name: "<white>{category_display}" lore: - "<#94A3B8>{tag_count} tags available" - "" - "<#FDE047>▶ Click to browse" selected: material: ENCHANTED_BOOK name: "<#62FF67>{category_display}" lore: - "<#94A3B8>{tag_count} tags available" - "" - "<#FDE047>▶ Selected" tags-menu: title: "<#818CF8>Tags <#94A3B8>• <white>{category_display} <#94A3B8>| <#CBD5E1>Page {page}" all-tags-label: "<#818CF8>All tags available" rows: 5 slots: [10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34] player-profile: enabled: true slot: 4 material: "PLAYER_HEAD" name: "<#C4B5FD><bold>CURRENT TAG" lore-active: - "<#94A3B8>Current tag:" - "{tag_display}" - "" - "<#FDA4AF>Click to remove" lore-empty: - "<#94A3B8>No tag active" - "" - "<#64748B>Choose a tag below" tags-nav: prev-slot: 39 next-slot: 41 close-slot: 40 prev-page: material: "RED_STAINED_GLASS_PANE" name: "<#FDE68A>← Previous" lore: [] next-page: material: "LIME_STAINED_GLASS_PANE" name: "<#FDE68A>Next →" lore: [] close: material: "BARRIER" name: "<#FDA4AF>✖ Close" lore: [] active: material: "NAME_TAG" name: "<#62FF67>{tag_display}" lore: - "<gray>Player Tag" - "" - "<#FDE047>Description:" - "<white>Adds a <#22D3EE>stylish <white>tag that" - "<white>appears <#FDE047>after your name <white>in <#F0ABFC>chat." - "" - "<#FDE047>▶ Currently selected" unlocked: material: "NAME_TAG" name: "<#FDE68A>{tag_display}" lore: - "<gray>Player Tag" - "" - "<#FDE047>Description:" - "<white>Adds a <#22D3EE>stylish <white>tag that" - "<white>appears <#FDE047>after your name <white>in <#F0ABFC>chat." - "" - "<#FDE047>▶ Click to select" locked: material: "NAME_TAG" name: "<#CBD5E1>{tag_display}" lore: - "<gray>Player Tag" - "" - "<#FDE047>Description:" - "<white>Adds a <#22D3EE>stylish <white>tag that" - "<white>appears <#FDE047>after your name <white>in <#F0ABFC>chat." - "" - "<#FDE047>Requirement:" - "<white>Coins: <#FDE047><underlined>{price}</underlined>" - "" - "<#FDE047>▶ Click to buy"
New features:
• Added default-tag-on-join to automatically equip a tag from tags.yml when players join without an active tag
• Optional world list and perftags.bypass.default-tag permission to control who receives the default tag
Code:# plugins/PerfTags/config.yml — add (config-version bumps to 14 on reload): default-tag-on-join: enabled: false tag-id: member only-if-none: true worlds: [] permission-bypass: perftags.bypass.default-tag
Bug fixes:
• EternalTags migration now reads split tag files, content fields, and stored tag data
Improvements:
• /perftags migrate appends imported tag definitions to tags.yml by default
• Player tag assignments and purchases still import into the database as before
Code:# plugins/PerfTags/config.yml — merge (config-version: 13): migrate: default-category: imported # or default write-tags-to-yaml: true
