Allium icon

Allium -----

A modern, secure Essentials solution



Allium v0.2.2a
Wiki: https://github.com/castledking/Allium/wiki

Highlights

  • Glow command — New /glow command for per-player colored glow outlines using PacketEvents virtual team packets. Supports all 16 vanilla colors, rainbow cycling, and per-color permissions. No scoreboard pollution — teams are sent directly to viewers and never registered on any Bukkit scoreboard.
  • Join/Quit message permissions — Permission-based join/quit message formats via allium.join_message. and allium.quit_message.. Set custom formats with LuckPerms metadata.
  • Chat system rewriteChatMessageManager, FormatChatListener, and PacketChatTrackerImpl significantly reworked for better PacketEvents integration and staff moderation features.
  • Flight restoration refactorFlightRestoration rewritten for improved Folia compatibility and reliability.
  • Command managementCommandManager now caches the server's known commands map with a 2-second TTL, eliminating repeated reflection calls. Help command caches available commands per-player with a 3-second TTL.
  • TP companion teleportation — Pet/entity teleport-on-TP moved from TP listener to dedicated TeleportBackListener for cleaner separation.
  • Inventory snapshot optimizationInventoryManager.saveSnapshot() simplified to run directly on the calling thread instead of through SchedulerAdapter.run().

New Commands

Command Description Permission
/glow [player] Set glow color (e.g. /glow red, /glow dark_aqua) allium.glow + allium.glow.
/glow rainbow [player] Enable rainbow cycling glow allium.glow.rainbow
/glow off [player] Remove glow effect allium.glow / allium.glow.others


New Permissions

Permission Description Default
allium.glow Base glow permission (grants all 16 color sub-permissions) op
allium.glow. Per-color (e.g. allium.glow.red, allium.glow.blue) via parent
allium.glow.rainbow Rainbow glow mode op
allium.glow.others Target other players op
allium.join_message. Custom join message format (value from LP metadata)
allium.quit_message. Custom quit message format (value from LP metadata)
allium.join_message.* Wildcard — grants all join message formats staff
allium.quit_message.* Wildcard — grants all quit message formats staff


New Config

Code (Text):
join-and-quit-messages:
join:
enabled: true
format: "&e%name% &7has joined the server"
quit:
enabled: true
format: "&e%name% &7has left the server"
broadcast-scope: server # server, world, or global
Setting Custom Join/Quit Messages with LuckPerms

Set a permission with a metadata value on a player:

Code (Text):
/lp user  meta set allium.join_message.vip.a "rift in the universe has spawned %player%"
/lp user  meta set allium.quit_message.vip.a "%player% has left through a rift"
Supported placeholders: %name% (display name, respects /nick), %player% (real name), %prefix% (Vault prefix), %suffix% (Vault suffix).

The first matching permission (alphabetical by suffix) is used. If no permission metadata is found, the default config format is used.

Technical Details

Glow
- Uses PacketEvents WrapperPlayServerTeams with TeamMode.CREATE (includes both team info and player entries in one packet)
- TeamMode.UPDATE for rainbow color changes, TeamMode.REMOVE for cleanup
- Packets sent to all online players including the target (the client needs to receive the team packet to render the colored outline)
- No Bukkit.getScoreboardManager() usage — completely virtual
- Folia-safe: no region-scheduled tasks needed

Join/Quit Messages
- Handled via standard PlayerJoinEvent / PlayerQuitEvent (main thread on both Bukkit and Folia)
- Permission metadata read through Vault Chat's getPlayerInfoString()
- Falls back to default config format if no permission match found
- Vanish check: vanished players don't show join/quit messages

Chat System
- ChatMessageManager rewritten with improved message storage and retrieval
- PacketChatTrackerImpl updated for better PacketEvents 2.11.1 compatibility
- FormatChatListener significantly expanded with new formatting options

SchedulerAdapter
- All scheduled tasks route through SchedulerAdapter which auto-detects Folia
- Folia path: uses EntityScheduler for entity-specific tasks, GlobalRegionScheduler for global tasks
- Bukkit path: uses standard BukkitScheduler
- No raw Bukkit.getScheduler() calls in new code

Files Changed (22)

File Change
PluginStart.java Glow command + listener registration, glow field
Glow.java New — /glow command with PacketEvents team packets
GlowListener.java New — cleanup on player quit
JoinQuitMessages.java New — permission-based join/quit messages
ChatMessageManager.java Rewritten — message storage, tracking, moderation
FormatChatListener.java Major rewrite — chat formatting, hover, click events
PacketChatTrackerImpl.java Major rewrite — PacketEvents 2.11.1 integration
FlightRestoration.java Major rewrite — Folia-safe flight state management
CommandManager.java Known commands caching, getCachedKnownCommands() API
Help.java Available commands caching, uses CommandManager cache
`TeleportBackListener.java** Extracted from TP — pet/entity companion teleport
TP.java Removed inline teleport listener, now delegates
InventoryManager.java Simplified snapshot saving, removed SchedulerAdapter wrapper
AlliumPlaceholder.java Import cleanup
GeneralPlaceholder.java Import cleanup
TFlyManager.java Import cleanup, formatting
SpawnerChangerManager.java Minor cleanup
config.yml New join-and-quit-messages section
lang.yml New glow.* message keys
plugin.yml New glow command, permission definitions
pom.xml Paper version 1.21.8


Support and Feedback
Issues: https://github.com/castledking/Allium/issues
Wiki: https://github.com/castledking/Allium/wiki
Discord: https://discord.com/invite/pCKdCX6nYr
Website: https://castled.codes/
----------, Jun 21, 2026
Resource Information
Author:
----------
Total Downloads: 254
First Release: Jun 28, 2025
Last Update: Jun 1, 2026
Category: ---------------
All-Time Rating:
0 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings