Allium icon

Allium -----

A modern, secure Essentials solution




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

Wiki: https://github.com/castledking/Allium/wiki

Highlights
- CrowBar same-world payloads — CrowBar player data is now built per recipient and only includes players in the recipient's current world.
- CrowBar quit refresh — Sends an immediate snapshot when a player quits so CrowBar clients can remove stale dots and name tags without waiting for expiry.
- CrowBar join/world snapshots — Sends delayed targeted snapshots after joins and world changes so reconnecting CrowBar clients get nearby player positions before movement updates.
- NPC filtering — Citizens NPCs are excluded from CrowBar player-data payloads.

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 1, 2026

Allium v0.2.0a

Wiki: https://github.com/castledking/Allium/wiki

Highlights
- CrowBarDataSender NPC Filter — Prevents NPCs from Citizens from having their data sent to CrowBar

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 1, 2026

Wiki: https://github.com/castledking/Allium/wiki

Highlights
- Citizens NPC body visibility fixed — Allium no longer strips unlisted PLAYER_INFO_UPDATE entries for unknown player UUIDs. Citizens uses those packets to send player-NPC profile/skin data while keeping NPCs out of the tab list; removing them made the client fail to render NPC bodies. NPCs are also exempted from PartyManager body visibility hiding.
- CrowBarDataSender UUID fix — Fixed a bug where the loop variable uuid (a String) was being used instead of player.getUniqueId(), causing all CrowBar clients to receive the same UUID for every player entry.

What's Fixed
- Citizens NPC bodies no longer invisible — The confirmed fix is in the PacketEvents tab-list interceptor: unknown/unlisted player-info entries now pass through unchanged instead of being removed. This preserves Citizens' spawn/profile handshake for player-type NPCs. Allium also detects Citizens NPC metadata live and skips hidePlayer() visibility management for those NPC entities.
- CrowBarDataSender player UUID — Each player object now correctly calls player.getUniqueId().toString(). Previously, a stray uuid variable from an unrelated context was serialized for every entry, meaning all players appeared as the same entity on the CrowBar locator bar.

Internal
- .release/discord-updater-webhook.ymlmessage_id updated for the current Discord release post.
- .release/src/spigot-release.js — Modrinth download link corrected.

Requirements
- Minecraft 1.21.11
- Fabric Loader 0.18.4 or newer
- Fabric API 0.141.4 or newer
- Java 21
----------, May 31, 2026

Allium v0.1.8

Wiki: https://github.com/castledking/Allium/wiki

Highlights
- Citizens NPC locator bar suppression — Allium now sets WAYPOINT_RECEIVE_RANGE = -1 on all Citizens NPCs at server startup, preventing them from appearing on the vanilla locator bar without affecting NPC body visibility.
- All NPC-specific handling code removed — All hand-rolled NPC filtering code has been stripped from PartyManager and CrowBarDataSender since Citizens API handles suppression natively.
- Fly permission fix/fly now accepts both allium.fly and allium.tfly permissions, fixing a regression where players with the old permission could not use the command.
- Flight restoration on cross-world teleport — Flight state is now captured before teleport and properly restored when the tfy module is active, preventing flight loss when changing worlds via portals or commands.

Citizens NPC Waypoint Suppression
- Added setupCitizensNpcWaypointRange() in PluginStart that runs 5 seconds after server startup.
- Uses reflection to call CitizensAPI.getNPCRegistry() (no compile dependency on Citizens).
- Iterates all NPCs and sets Attribute.WAYPOINT_RECEIVE_RANGE = -1 on spawned Player-type entities.
- NPC bodies remain fully visible — the attribute only suppresses the locator bar waypoint on the client side.
- Gracefully handles absence of Citizens plugin with a debug log.

Removed NPC Handling Code
- PartyManager: Removed isCitizensNpcUuid() method. NPCs are no longer special-cased in updatePlayerVisibility or hidePlayerAndRefreshTab.
- CrowBarDataSender: Removed NPC UUID filter and isCitizensNpcUuid() method. NPC data is now sent to CrowBar clients like any other player (CrowBar client also had its own NPC filtering stripped).

Fly Permission Fix
- CommandManager.hasPermissionForCommand() now checks both allium.fly and allium.tfly for the /fly command.
- Removed the special-case in getDerivedPluginCommandPermission() that mapped allium.fly to allium.tfly, since the check now happens at the permission evaluation level instead.
- Fixes a regression where players with only allium.fly (the documented permission) would get "You don't have permission" when running /fly.

Flight Restoration (World Teleport)
- Added PlayerTeleportEvent handler to capture allowFlight state before cross-world teleport.
- onPlayerChangedWorld now uses the pre-teleport state for the allow-flight check, fixing false restorations when the player was not flying before the world change.
- Added re-check that tfy is still enabled before restoring flight, preventing stale restores if the player toggled tfy off during the world transition.

Config And Dependencies
- VaultUnlockedAPI changed from compile (shaded) to provided scope — the actual plugin's classes are used at runtime, reducing JAR size.
- Version bumped to 0.1.8a.

Internal
- All Citizens/ZNPCs NPC filtering consolidated into a single setupCitizensNpcWaypointRange() reflection call, eliminating distributed UUID-pattern checks across PartyManager and CrowBarDataSender.
----------, May 31, 2026

Allium v0.1.7

Wiki: https://github.com/castledking/Allium/wiki

Highlights
- CrowBar mod companion - Allium now sends player position data to CrowBar client mod for enhanced locator bar features, including team colors and hidden player tracking.
- Permission-gated CrowBar data - CrowBar player data packets are only sent to players with the allium.crowbar permission.
- Gradient name pause control - Animated gradient names can now be paused programmatically.
- WorldEdit integration - Added soft-dependency support for FastAsyncWorldEdit and WorldEdit.

CrowBar Mod Companion
- Added CrowBarDataSender to broadcast player position data to CrowBar client mod.
- Data includes UUID, position, sneaking status, vanish status, carved pumpkin status, and team color.
- Packets are sent every 5 ticks (250ms) to connected clients.
- Only players with the allium.crowbar permission receive CrowBar data packets.
- Citizens2 and ZNPCsPlus NPCs are automatically filtered from CrowBar data.
- Team colors are extracted from scoreboard teams and included in the payload.

Animated Gradient Names
- Added setPaused(boolean) and isPaused() methods to GradientNameManager.
- Gradient phase advancement now respects the paused state.
- Allows external control over gradient animation for performance or aesthetic reasons.

TAB And NPC Filtering
- Improved TAB integration for far-away players and NPCs.
- PacketEvents tab add paths now actively re-add missing entries.
- TAB reflection is used where available for better skin/ping/format matching.
- Citizens2 NPCs are now filtered from TAB updates more reliably.
- Added NPC removal logic to prevent synthetic tab entries for Citizens2 NPCs.

Config And Permissions
- Added allium.crowbar permission for CrowBar mod companion access.
- Added FastAsyncWorldEdit and WorldEdit to soft-dependencies.
- Added FastAsyncWorldEdit and WorldEdit to load-after list.

Internal
- Package name changes completed from net.survivalfun.core to codes.castled.allium.
- Improved TAB packet handling for better performance and reliability.
----------, May 28, 2026

Allium v0.1.6a

Wiki: https://github.com/castledking/Allium/wiki

Highlights
- Chat channels are now split between global and local - /local and /l toggle radius chat, while /global and /g return players to global chat.
- Staff locator mode - /locatorbar now toggles a staff mode that can show every visible player on the party locator bar, regardless of party radius.
- ModGuard - new configurable client-mod detection framework with brand, plugin-channel, Forge/FML handshake, evidence logs, alerts, kicks, bypasses, and optional translation probes.
- Animated gradient names - %gradientdisplayname% can now be converted into MiniMessage gradient phase output for players with allium.gradientname.
- Item Renamer - new single-use custom item that grants temporary /rename access and is consumed after a successful rename.
- Safer End Gateway teleports - gateway/ender-pearl teleports near the main End island now search for a safe same-level landing instead of relying on vanilla highest-block behavior.
- Release automation - new GitHub Actions and .release tooling for Discord, Modrinth, and Spigot release publishing.

Chat Channels
- Added the dedicated local chat channel config at chat.channels.local-channel.
- Local chat defaults to a 100 block radius.
- Local chat defaults to &8[&eLocal&8] <prefix> &a%allium_nickname%&f: &f<message>.
- Local chat is excluded from Discord relay by default.
- Global channel aliases are now only g and global; local and l no longer point at global chat.
- /local and /l toggle between local chat and the default/global write channel.
- /global and /g always switch the player back to the default/global write channel.
- /channel join <channel> [read|write] still supports explicit read/write channel selection.
- Channel state continues to save per player in player-channels.yml.

DiscordSRV Integration
- Discord inbound messages are routed through Allium's channel system.
- Discord messages now use Allium channel formats only for explicitly configured Allium channel formats.
- Default or unmapped DiscordSRV channels fall back to DiscordSRV's native message format.
- Discord role alias, role color, username, effective name, channel, reply snippet, and message fields now pass through Discord emoji parsing.
- Discord inbound messages are mirrored to console because Allium cancels DiscordSRV's normal preprocess/postprocess event handling.
- Outbound chat loop detection now tracks local/staff/shortcut context so Allium avoids relaying duplicate chat events.
- Local chat is intentionally blocked from Discord relay when exclude-from-discord is true.

Party And Locator Bar
- Added staff locator mode for players with allium.party.staff.
- /locatorbar with no arguments now toggles staff locator mode.
- Added /locatorbar help.
- Added /locatorbar aliases: /partybar, /lbar, and /pbar.
- Added allium.locatorbar.help for viewing locator help.
- Staff locator mode lets staff see all non-vanished players on the locator bar, regardless of normal visibility distance.
- Locator bar show/hide/reset flows remain available for temporary manual visibility overrides.
- Party locator visibility updates keep the existing move throttling to reduce TAB packet pressure.

TAB And Far-Away Player Entries
- Improved TAB integration for players Allium hides in the world but keeps visible in tab.
- PacketEvents tab add paths now actively re-add missing entries instead of silently no-oping.
- TAB reflection is used where available so synthetic tab entries better match TAB-managed skins, ping, game mode, and format.
- PacketEvents fallback add packets are still available when TAB reflection cannot add an entry.
- TAB group formatting can be read from TAB's config/groups.yml when placeholders are unavailable.
- Placeholder fallbacks now reject unresolved %tab_...% strings instead of showing raw placeholder text in tab.
- Far-away animated gradient targets are tracked and refreshed with UPDATE_DISPLAY_NAME.
- Animated far-away tab entries use the same animated name builder as the normal tab display name.

Animated Gradient Names
- Added GradientNameManager.
- Players with allium.gradientname can have %gradientdisplayname% rewritten into MiniMessage <gradient:...:phase> output.
- The manager extracts first and last colors from existing gradient display names.
- Supported color input includes legacy &/section colors, &#RRGGBB, section hex, &x/section-x hex, and MiniMessage hex tags.
- The middle named color is chosen from the nearest general color name for MiniMessage's gradient tag.
- #phase-mm-g# and #-phase-mm-g# are updated every tick.
- The player list name is refreshed every tick for animated gradient players.
- TAB prefix and suffix are preserved when Allium builds the animated tab display name.
- Prefix/name spacing is normalized so TAB prefixes do not collapse directly into the player name.
- Added PlaceholderAPI outputs:
- %allium_gradientdisplayname%
- %allium_phase-mm-g%
- %allium_-phase-mm-g%
- %allium_phase_mm_g%
- %allium_negative_phase_mm_g%
- Added chat.minimessage.gradient.animation for animated gradient phase permission checks.

Nicknames
- Added /editnick for editing other players' nicknames through the nickname GUI.
- Nicknames now persist more reliably when TAB is installed.
- Allium now clears plugin-set tab overrides when TAB owns tab formatting.
- Nicknames are blocked when they match an existing online or offline player name.
- Added nickname.sync-to-essentials, enabled by default.
- When EssentialsX is present, Allium syncs nickname set/reset/restore into Essentials so commands such as /whois see the same nickname.
- Nickname placeholders can read stored offline nicknames by UUID.

ModGuard
- Added plugins/Allium/modguard/config.yml from bundled src/main/resources/modguard/config.yml.
- Legacy modguard settings from the root Allium/config.yml are migrated into modguard/config.yml.
- Added blacklist/whitelist detection mode.
- Added configurable join-time checks with check-on-join and check-delay-ticks.
- Added configurable punishment mode with kick-on-detection.
- Added modguard.bypass to skip checks.
- Added modguard.notify for staff notifications.
- Added allium.alerts support for staff alert delivery.
- Added /core alerts modguard [on|off|toggle].
- Added per-player ModGuard evidence logs at plugins/Allium/modguard/logs/{uuid}.yml.
- Evidence logs are only created once a player gets a hit, then later hits append to the same UUID file.
- Evidence entries include session, timestamp, method, check, raw value, confidence, action, and whether punishment happened.
- Brand checks listen for minecraft:brand.
- Channel checks inspect client plugin channel registrations.
- Forge/FML checks listen on fml:handshake, fml:login, forge:handshake, and forge:login.
- Matching supports case-sensitive and regex modes.
- Default banned mod patterns include Freecam, Inventory Profiles Next variants, Tweakeroo, Litematica, MiniHUD, Meteor, Wurst, Vape, LiquidBounce, Aristois, Baritone, and related client/mod ids.
- Default allowed mod examples for whitelist mode include OptiFabric, Sodium, Lithium, Phosphor, Iris, Fabric API, and Mod Menu.

Translation Probe Detection
- Added optional PacketEvents translation-key probing under modguard/config.yml.
- Translation probes are disabled by default.
- Probe checks can define translation keys, expected resolved text, action, timeout, fallback prefix, and whether kicks require corroboration.
- The default sample check targets key.meteorclient.opengui as an alert-only Meteor probe.
- Probe hits feed into ModGuard alerts and evidence logs.
- Probe defaults are intentionally alert-based because resource packs can define translation keys and cause false positives.

Security Alerts
- Added ModGuard as an individual security alert feed.
- /core alerts now shows gamemode audit, chat filter, and ModGuard alert state.
- /core alerts modguard toggles whether a staff member sees ModGuard alerts.
- Staff permission bundles now include allium.alerts and modguard.notify.

Custom Items
- Added the item_renamer custom item.
- Item Renamer uses a name tag item with Oraxen model oraxen:item_renamer.
- Holding an Item Renamer grants temporary ItemEdit rename permissions.
- Supported temporary permissions include MiniMessage, format, and color rename access.
- Players with direct ItemEdit rename permission are not managed by the Item Renamer system.
- /rename <name> and /ie rename <name> are intercepted for item consumption.
- The renamer cannot be used on air or to rename itself.
- One renamer is consumed shortly after a successful rename command.

World And Ore Generation
- Added the custom ore generation manager and listener for applying configured Oraxen ores to generated chunks.
- Added pre-generation plumbing in the ore manager for processing chunks around a configured center/radius.
- Ore generation remains configurable under ore-generation.
- Added safe End Gateway teleport handling near the main End island.
- End Gateway handling is configurable with end-gateway.max-distance-from-center and end-gateway.search-radius.
- The gateway safety search prioritizes same-Y landing positions, then nearby Y levels, then an expanding perimeter search.
- Gateway handling rejects unsafe ground and blocked feet/head positions.
- A short cooldown prevents repeated gateway handling spam.

Inventory And Restore QoL
- Offline inventory handling was expanded for restore workflows.
- Restore GUI support now works against target UUIDs so staff can restore offline players more easily.
- Inventory snapshot/restore GUI code was expanded across inventory, ender chest, options, and formatting views.

Command Hiding And Alt Accounts
- Added an alt hide group to hide.yml.
- The alt group is blacklist mode by default.
- The default blocked alt commands are pay, jobs, quests, tasks, ah, and auctionhouse.
- Tab completion hiding remains configured with ^.

Config And Permissions
- Added allium.gradientname.
- Added allium.party.staff.
- Added allium.locatorbar.help.
- Added chat.minimessage.gradient.animation.
- Added modguard.bypass.
- Added modguard.notify.
- Added nickname.sync-to-essentials.
- Added end-gateway.max-distance-from-center.
- Added end-gateway.search-radius.
- Plugin metadata now uses ${project.version} from Maven.
- Maven project version is now 0.1.6a.
- Plugin main class moved to codes.castled.allium.PluginStart.
- Plugin author metadata changed to castledking.

Fixes
- Fixed /local and /global alias handling by using the executed command label instead of only the Bukkit command name.
- Fixed local chat accidentally behaving like global chat through shared aliases.
- Fixed DiscordSRV inbound messages not appearing in console after Allium cancels DiscordSRV events.
- Fixed raw %tab_tabprefix%, %tab_customtabname%, and %tab_tabsuffix% placeholders showing in tab when TAB/PAPI could not resolve them.
- Fixed far-away animated names snapshotting once and appearing paused in synthetic tab entries.
- Fixed animated tab display names fighting TAB prefix/suffix formatting by preserving TAB formatting in the animated name builder.
- Fixed missing spacing between TAB prefix and animated name in common prefix formats.
- Fixed nickname persistence/restore behavior when TAB owns the tab list.
- Fixed same-name nicknames being accepted.
- Reduced max database pool connections to lower memory usage.
- Kept party movement/TAB visibility updates throttled to avoid excessive packet churn.

Internal And Release Engineering
- Java packages were renamed from net.survivalfun.core to codes.castled.allium.
- Removed the old command bridge manager.
- Added GitHub Actions for continuous delivery and Spigot release publishing.
- Added .release scripts for release note conversion, Modrinth publishing, Spigot publishing, cookie handling, and Discord notifications.
- Added a release Dockerfile and Discord webhook template.
----------, May 24, 2026

Allium v0.1.6a

Wiki: https://github.com/castledking/Allium/wiki

Highlights
- Chat channels are now split between global and local - /local and /l toggle radius chat, while /global and /g return players to global chat.
- Staff locator mode - /locatorbar now toggles a staff mode that can show every visible player on the party locator bar, regardless of party radius.
- ModGuard - new configurable client-mod detection framework with brand, plugin-channel, Forge/FML handshake, evidence logs, alerts, kicks, bypasses, and optional translation probes.
- Animated gradient names - %gradientdisplayname% can now be converted into MiniMessage gradient phase output for players with allium.gradientname.
- Item Renamer - new single-use custom item that grants temporary /rename access and is consumed after a successful rename.
- Safer End Gateway teleports - gateway/ender-pearl teleports near the main End island now search for a safe same-level landing instead of relying on vanilla highest-block behavior.
- Release automation - new GitHub Actions and .release tooling for Discord, Modrinth, and Spigot release publishing.

Chat Channels
- Added the dedicated local chat channel config at chat.channels.local-channel.
- Local chat defaults to a 100 block radius.
- Local chat defaults to &8[&eLocal&8] <prefix> &a%allium_nickname%&f: &f<message>.
- Local chat is excluded from Discord relay by default.
- Global channel aliases are now only g and global; local and l no longer point at global chat.
- /local and /l toggle between local chat and the default/global write channel.
- /global and /g always switch the player back to the default/global write channel.
- /channel join <channel> [read|write] still supports explicit read/write channel selection.
- Channel state continues to save per player in player-channels.yml.

DiscordSRV Integration
- Discord inbound messages are routed through Allium's channel system.
- Discord messages now use Allium channel formats only for explicitly configured Allium channel formats.
- Default or unmapped DiscordSRV channels fall back to DiscordSRV's native message format.
- Discord role alias, role color, username, effective name, channel, reply snippet, and message fields now pass through Discord emoji parsing.
- Discord inbound messages are mirrored to console because Allium cancels DiscordSRV's normal preprocess/postprocess event handling.
- Outbound chat loop detection now tracks local/staff/shortcut context so Allium avoids relaying duplicate chat events.
- Local chat is intentionally blocked from Discord relay when exclude-from-discord is true.

Party And Locator Bar
- Added staff locator mode for players with allium.party.staff.
- /locatorbar with no arguments now toggles staff locator mode.
- Added /locatorbar help.
- Added /locatorbar aliases: /partybar, /lbar, and /pbar.
- Added allium.locatorbar.help for viewing locator help.
- Staff locator mode lets staff see all non-vanished players on the locator bar, regardless of normal visibility distance.
- Locator bar show/hide/reset flows remain available for temporary manual visibility overrides.
- Party locator visibility updates keep the existing move throttling to reduce TAB packet pressure.

TAB And Far-Away Player Entries
- Improved TAB integration for players Allium hides in the world but keeps visible in tab.
- PacketEvents tab add paths now actively re-add missing entries instead of silently no-oping.
- TAB reflection is used where available so synthetic tab entries better match TAB-managed skins, ping, game mode, and format.
- PacketEvents fallback add packets are still available when TAB reflection cannot add an entry.
- TAB group formatting can be read from TAB's config/groups.yml when placeholders are unavailable.
- Placeholder fallbacks now reject unresolved %tab_...% strings instead of showing raw placeholder text in tab.
- Far-away animated gradient targets are tracked and refreshed with UPDATE_DISPLAY_NAME.
- Animated far-away tab entries use the same animated name builder as the normal tab display name.

Animated Gradient Names
- Added GradientNameManager.
- Players with allium.gradientname can have %gradientdisplayname% rewritten into MiniMessage <gradient:...:phase> output.
- The manager extracts first and last colors from existing gradient display names.
- Supported color input includes legacy &/section colors, &#RRGGBB, section hex, &x/section-x hex, and MiniMessage hex tags.
- The middle named color is chosen from the nearest general color name for MiniMessage's gradient tag.
- #phase-mm-g# and #-phase-mm-g# are updated every tick.
- The player list name is refreshed every tick for animated gradient players.
- TAB prefix and suffix are preserved when Allium builds the animated tab display name.
- Prefix/name spacing is normalized so TAB prefixes do not collapse directly into the player name.
- Added PlaceholderAPI outputs:
- %allium_gradientdisplayname%
- %allium_phase-mm-g%
- %allium_-phase-mm-g%
- %allium_phase_mm_g%
- %allium_negative_phase_mm_g%
- Added chat.minimessage.gradient.animation for animated gradient phase permission checks.

Nicknames
- Added /editnick for editing other players' nicknames through the nickname GUI.
- Nicknames now persist more reliably when TAB is installed.
- Allium now clears plugin-set tab overrides when TAB owns tab formatting.
- Nicknames are blocked when they match an existing online or offline player name.
- Added nickname.sync-to-essentials, enabled by default.
- When EssentialsX is present, Allium syncs nickname set/reset/restore into Essentials so commands such as /whois see the same nickname.
- Nickname placeholders can read stored offline nicknames by UUID.

ModGuard
- Added plugins/Allium/modguard/config.yml from bundled src/main/resources/modguard/config.yml.
- Legacy modguard settings from the root Allium/config.yml are migrated into modguard/config.yml.
- Added blacklist/whitelist detection mode.
- Added configurable join-time checks with check-on-join and check-delay-ticks.
- Added configurable punishment mode with kick-on-detection.
- Added modguard.bypass to skip checks.
- Added modguard.notify for staff notifications.
- Added allium.alerts support for staff alert delivery.
- Added /core alerts modguard [on|off|toggle].
- Added per-player ModGuard evidence logs at plugins/Allium/modguard/logs/{uuid}.yml.
- Evidence logs are only created once a player gets a hit, then later hits append to the same UUID file.
- Evidence entries include session, timestamp, method, check, raw value, confidence, action, and whether punishment happened.
- Brand checks listen for minecraft:brand.
- Channel checks inspect client plugin channel registrations.
- Forge/FML checks listen on fml:handshake, fml:login, forge:handshake, and forge:login.
- Matching supports case-sensitive and regex modes.
- Default banned mod patterns include Freecam, Inventory Profiles Next variants, Tweakeroo, Litematica, MiniHUD, Meteor, Wurst, Vape, LiquidBounce, Aristois, Baritone, and related client/mod ids.
- Default allowed mod examples for whitelist mode include OptiFabric, Sodium, Lithium, Phosphor, Iris, Fabric API, and Mod Menu.

Translation Probe Detection
- Added optional PacketEvents translation-key probing under modguard/config.yml.
- Translation probes are disabled by default.
- Probe checks can define translation keys, expected resolved text, action, timeout, fallback prefix, and whether kicks require corroboration.
- The default sample check targets key.meteorclient.opengui as an alert-only Meteor probe.
- Probe hits feed into ModGuard alerts and evidence logs.
- Probe defaults are intentionally alert-based because resource packs can define translation keys and cause false positives.

Security Alerts
- Added ModGuard as an individual security alert feed.
- /core alerts now shows gamemode audit, chat filter, and ModGuard alert state.
- /core alerts modguard toggles whether a staff member sees ModGuard alerts.
- Staff permission bundles now include allium.alerts and modguard.notify.

Custom Items
- Added the item_renamer custom item.
- Item Renamer uses a name tag item with Oraxen model oraxen:item_renamer.
- Holding an Item Renamer grants temporary ItemEdit rename permissions.
- Supported temporary permissions include MiniMessage, format, and color rename access.
- Players with direct ItemEdit rename permission are not managed by the Item Renamer system.
- /rename <name> and /ie rename <name> are intercepted for item consumption.
- The renamer cannot be used on air or to rename itself.
- One renamer is consumed shortly after a successful rename command.

World And Ore Generation
- Added the custom ore generation manager and listener for applying configured Oraxen ores to generated chunks.
- Added pre-generation plumbing in the ore manager for processing chunks around a configured center/radius.
- Ore generation remains configurable under ore-generation.
- Added safe End Gateway teleport handling near the main End island.
- End Gateway handling is configurable with end-gateway.max-distance-from-center and end-gateway.search-radius.
- The gateway safety search prioritizes same-Y landing positions, then nearby Y levels, then an expanding perimeter search.
- Gateway handling rejects unsafe ground and blocked feet/head positions.
- A short cooldown prevents repeated gateway handling spam.

Inventory And Restore QoL
- Offline inventory handling was expanded for restore workflows.
- Restore GUI support now works against target UUIDs so staff can restore offline players more easily.
- Inventory snapshot/restore GUI code was expanded across inventory, ender chest, options, and formatting views.

Command Hiding And Alt Accounts
- Added an alt hide group to hide.yml.
- The alt group is blacklist mode by default.
- The default blocked alt commands are pay, jobs, quests, tasks, ah, and auctionhouse.
- Tab completion hiding remains configured with ^.

Config And Permissions
- Added allium.gradientname.
- Added allium.party.staff.
- Added allium.locatorbar.help.
- Added chat.minimessage.gradient.animation.
- Added modguard.bypass.
- Added modguard.notify.
- Added nickname.sync-to-essentials.
- Added end-gateway.max-distance-from-center.
- Added end-gateway.search-radius.
- Plugin metadata now uses ${project.version} from Maven.
- Maven project version is now 0.1.6a.
- Plugin main class moved to codes.castled.allium.PluginStart.
- Plugin author metadata changed to castledking.

Fixes
- Fixed /local and /global alias handling by using the executed command label instead of only the Bukkit command name.
- Fixed local chat accidentally behaving like global chat through shared aliases.
- Fixed DiscordSRV inbound messages not appearing in console after Allium cancels DiscordSRV events.
- Fixed raw %tab_tabprefix%, %tab_customtabname%, and %tab_tabsuffix% placeholders showing in tab when TAB/PAPI could not resolve them.
- Fixed far-away animated names snapshotting once and appearing paused in synthetic tab entries.
- Fixed animated tab display names fighting TAB prefix/suffix formatting by preserving TAB formatting in the animated name builder.
- Fixed missing spacing between TAB prefix and animated name in common prefix formats.
- Fixed nickname persistence/restore behavior when TAB owns the tab list.
- Fixed same-name nicknames being accepted.
- Reduced max database pool connections to lower memory usage.
- Kept party movement/TAB visibility updates throttled to avoid excessive packet churn.

Internal And Release Engineering
- Java packages were renamed from net.survivalfun.core to codes.castled.allium.
- Removed the old command bridge manager.
- Added GitHub Actions for continuous delivery and Spigot release publishing.
- Added .release scripts for release note conversion, Modrinth publishing, Spigot publishing, cookie handling, and Discord notifications.
- Added a release Dockerfile and Discord webhook template.
----------, May 17, 2026

Allium v0.1.5a

✨ New Commands:
  • Code (Text):
    /core migrate [homes|economy|warps|all] [path]
    - Migrate data from Essentials (userdata. homs and/or warps)..

✨ New Features:
  • Dialog editing for items and nicknames:
    Code (Text):
    /rename
    - Edit item names via a native Minecraft dialog screen
    Code (Text):
    /lore
    - Edit item lore via a native Minecraft dialog screen
    Code (Text):
    /nick
    - Nickname editing now uses the new dialog screen​

Fixed:
  • Code (Text):
    /give
    - Many fixes; command is now fully working (including aliases and multi-item usage)
  • Code (Text):
    /nick
    - Nicknames now persist correctly after server restarts (saved to database)
  • Code (Text):
    /delmsg
    - Command works again
  • Resource pack - Compatibility fixes for 1.21.11+
  • Command registration - Multiple issues with aliased commands fixed; commands register and resolve correctly
  • Translations - Various translation/language fixes

⚙️ Config / behavior:
  • No new config options; existing config and lang files remain compatible

⚠️ Migration Notes:
  • No migration steps required; existing data and settings are preserved
  • If you had custom nicknames before, they will now persist across restarts

Technical:
  • Database: Nickname persistence uses player_data.player_displayname with upsert so display names save even when no row existed before
  • Commands: Improved registration and alias handling for core and bridged commands
----------, Mar 9, 2026

Allium v0.1.4a



✨ New Commands:

  • Code (Text):
    /dialog show <player> allium:<dialog>
    - Show native Minecraft dialogs to players
  • Code (Text):
    /speed [walk|fly] [value]
    - Adjust walk/fly speed
  • Code (Text):
    /trash
    - Open a disposal inventory
  • Code (Text):
    /warpinfo <warp>
    - View warp details
  • Code (Text):
    /withertoggle
    - Toggle wither spawn blocking
  • Code (Text):
    /locatorbar
    - Toggle party locator bar
  • Code (Text):
    /restore
    - Restore items from death
  • Code (Text):
    /invsee <player>
    - View player inventory
  • Code (Text):
    /handcuffs
    - Restrain players
  • Code (Text):
    /unrestrain <player>
    - Remove restraints
  • Code (Text):
    /freeze [player]
    - Freeze players
  • Code (Text):
    /enchant <enchantment> [level]
    - Enchant held item
  • Code (Text):
    /enderchest [player]
    - Open ender chest
  • Code (Text):
    /autorestart
    or
    Code (Text):
    /ar
    - Auto-restart scheduling
  • Code (Text):
    /warp [name]
    - Teleport to warps
  • Code (Text):
    /give <player> <item>[:amount]
    - Give items; comma-separate for multiple types (e.g. /give Steve diamond_sword:1,diamond 64)
  • Code (Text):
    /nick
    - Nickname GUI with animation presets
  • Code (Text):
    /party
    - Party system with locator bar
  • Code (Text):
    /vanish
    - Vanish with see-levels system



✨ New Features:

  • Resource Pack Hosting (experimental): Built-in hosting with custom items

    Lazy Axe - efficient tree chopping | Spawner Changer - change spawner types in-world

    Get items:
    Code (Text):
    /core item give|list
    or
    Code (Text):
    /i ci:lazy_axe
    ,
    Code (Text):
    /i ci:spawner_changer
  • Entity Selectors: Full support for @a, @e, @p etc. on common commands

    Examples:
    Code (Text):
    /heal @a
    ,
    Code (Text):
    /give @a diamond_sword
    ,
    Code (Text):
    /tphere @a
  • Configurable Sounds: Play sounds when command messages are sent

    Configure in lang.yml:
    Code (Text):
    [sound] entity.player.levelup 0.5 1.5
    (format: sound_id volume pitch)​
  • Dialog System: Native Minecraft-style menus in
    Code (Text):
    Allium/dialogs/
    Types: notice, confirmation, multi_action, dialog_list. Example:
    Code (Text):
    /dialog show <player> allium:welcome
  • Wolf Behavior: Right-click your owned dog while it attacks a player to calm it down



Fixed Commands:

  • Code (Text):
    /skull
    - Fixed head retrieval



⚙️ Config Changes:

  • Added
    Code (Text):
    dialog.use-datapack
    and
    Code (Text):
    dialog.auto-show-join-delay-ticks
  • Sound/particle support in lang.yml for command feedback



⚠️ Migration Notes:

  • Config and lang files auto-migrate from previous versions
  • Existing settings preserved during migration
  • Check console for migration details on first load



Technical Improvements:

  • Database: HikariCP connection pooling, various DB fixes
  • Improved config management with version tracking
  • Better error handling and logging
  • Optimized command processing
  • Add Folia support
----------, Mar 1, 2026

Allium v0.1.3a

✨ New Commands:
  • Code (Text):
    /time <set|add> <time>
    - Modify world time
  • Code (Text):
    /time <day|night|noon|midnight>
    - Set time to preset values
  • Code (Text):
    /home [home_name]
    - Teleport to your home
  • Code (Text):
    /sethome [home_name]
    - Set a home location
  • Code (Text):
    /delhome <home_name>
    - Delete a home location
  • Code (Text):
    /homes
    - List all your homes

✨ New Features:
  • Time Management: Full time control with support for both numeric values and preset times
    Examples:
    Code (Text):
    /time set 1000
    ,
    Code (Text):
    /time set day
    ,
    Code (Text):
    /time add 6000
  • Home System: Complete home management with multiple home support
    Set cooldowns and spawn fallback options via config​
  • Enhanced Config: Automatic version migration system for seamless updates
  • Economy Integration: Updated economy commands from
    Code (Text):
    eco
    to
    Code (Text):
    money
    format

Config Changes:
  • Added versioning system with automatic migration
  • Economy commands updated:
    Code (Text):
    eco give
    Code (Text):
    money give
  • Removed deprecated
    Code (Text):
    teleport.auto-disable
    section
  • Added
    Code (Text):
    home.cooldown
    and
    Code (Text):
    home.spawn-if-no-home
    settings

⚠️ Migration Notes:
  • Config will automatically update from previous versions
  • All existing settings will be preserved during migration
  • Check console for migration details during first load

️ Technical Improvements:
  • Improved config management with version tracking
  • Better error handling and logging
  • Optimized command processing
----------, Jul 15, 2025

Allium v0.1.2a

⚠️ IMPORTANT: This plugin has been renamed from SFCore to Allium. An auto-migrator will seamlessly transfer all your SFCore data to Allium during the update.

New Commands:
  • Code (Text):
    /maintenance [on/off] [reason]
  • Code (Text):
    /note <player> <reason>
  • Code (Text):
    /unnote <id>
  • Code (Text):
    /notes [player]

✨ New Features:
  • Raw Text Display: Messages wrapped in
    Code (Text):
    []
    now display raw text without color processing

    Example:
    Code (Text):
    [Owner] CoolGuy33: This is how you use [&dcolor] in chat.

    Note: Requires appropriate
    Code (Text):
    chat.color.<color>
    permissions
  • Auto-Cleanup: Deprecated lang.yml keys are now automatically removed
  • Enhanced Permissions:
    Code (Text):
    core.admin
    and
    Code (Text):
    core.staff
    now include useful child permissions

    See documentation for details

Known Issues:
  • Colored bracketed messages need proper
    Code (Text):
    &6[&araw text&6]&r
    escaping fix

Config Changes:
  • lang.yml structure updated
----------, Jul 14, 2025

Allium v0.1.2a

⚠️ IMPORTANT: This plugin has been renamed from SFCore to Allium. An auto-migrator will seamlessly transfer all your SFCore data to Allium during the update.

New Commands:
  • Code (Text):
    /maintenance [on/off] [reason]
  • Code (Text):
    /note <player> <reason>
  • Code (Text):
    /unnote <id>
  • Code (Text):
    /notes [player]

✨ New Features:
  • Raw Text Display: Messages wrapped in
    Code (Text):
    []
    now display raw text without color processing

    Example:
    Code (Text):
    [Owner] CoolGuy33: This is how you use [&dcolor] in chat.

    Note: Requires appropriate
    Code (Text):
    chat.color.<color>
    permissions
  • Auto-Cleanup: Deprecated lang.yml keys are now automatically removed
  • Enhanced Permissions:
    Code (Text):
    core.admin
    and
    Code (Text):
    core.staff
    now include useful child permissions

    See documentation for details

Known Issues:
  • Colored bracketed messages need proper
    Code (Text):
    &6[&araw text&6]&r
    escaping fix

Config Changes:
  • lang.yml structure updated
----------, Jul 14, 2025

Allium v0.1.2a

⚠️ IMPORTANT: This plugin has been renamed from SFCore to Allium. An auto-migrator will seamlessly transfer all your SFCore data to Allium during the update.

New Commands:
  • Code (Text):
    /maintenance [on/off] [reason]
  • Code (Text):
    /note <player> <reason>
  • Code (Text):
    /unnote <id>
  • Code (Text):
    /notes [player]

✨ New Features:
  • Raw Text Display: Messages wrapped in
    Code (Text):
    []
    now display raw text without color processing

    Example:
    Code (Text):
    [Owner] CoolGuy33: This is how you use [&dcolor] in chat.

    Note: Requires appropriate
    Code (Text):
    chat.color.<color>
    permissions
  • Auto-Cleanup: Deprecated lang.yml keys are now automatically removed
  • Enhanced Permissions:
    Code (Text):
    core.admin
    and
    Code (Text):
    core.staff
    now include useful child permissions

    See documentation for details

Known Issues:
  • Colored bracketed messages need proper
    Code (Text):
    &6[&araw text&6]&r
    escaping fix

Config Changes:
  • lang.yml structure updated
----------, Jul 14, 2025

Version 0.1.2a-rename

Just a name that better reflects the heart behind it, sounds nice and Alliums represent versatility.
----------, Jul 13, 2025

Version 0.1.2a

commands added:

/maintenance [on/off] [reason]
/note <player> <reason>
/unnote <id>
/notes [player]


new features:

1.
Added the ability to show raw text in chat if encapsulated with []
with no color codes before the first '['


Example chat:
Code (Text):
[Owner] CoolGuy33: This is how you use [&dcolor] in chat.
shows the raw &dcolor in the message!

You will still need the chat.<color> permission, check documentation.

2.
Added automatic removal of deprecated keys in lang.yml

3.
core.admin and core.staff permissions have useful children permissions now
check docs


Known bugs:

- Need to fix &6[&araw text&6]&r escaping to allow colored bracketed messages

lang.yml Changes:

check github
----------, Jul 13, 2025

Version 0.1.2a-hotfix4

Fixed an issue where the CreativeManager wasn't saving inventories in onDisable()
----------, Jul 12, 2025

Version 0.1.2a-hotfix3

Inventories weren't being saved/loaded correctly by CreativeManager still. Fixed.
----------, Jul 12, 2025

Version 0.1.2a-hotfix2

plugin.yml wasn't being compiled. Fixed.
----------, Jul 12, 2025

Version 0.1.2a-hotfix

There was a bug where players with the core.gamemode.creative.inventory permission weren't having their inventories saved on quit when in survival. Fixed.
----------, Jul 12, 2025

Version 0.1.2a

commands added:

/maintenance [on/off] [reason]
/note <player> <reason>
/unnote <id>
/notes [player]


new features:

1.
Added the ability to show raw text in chat if encapsulated with []
with no color codes before the first '['


Example chat:
Code (Text):
[Owner] CoolGuy33: This is how you use [&dcolor] in chat.
shows the raw &dcolor in the message!

You will still need the chat.<color> permission, check documentation.

2.
Added automatic removal of deprecated keys in lang.yml

3.
core.admin and core.staff permissions have useful children permissions now
check docs


Known bugs:
- Need to fix &6[&araw text&6]&r escaping to allow colored bracketed messages

lang.yml Changes:

check github
----------, Jul 11, 2025

Allium v0.1.1a

✨ Enhanced Potion System:
  • Multi-Effect Potions: Create custom potions with multiple effects and precise control over each parameter

    Syntax:
    Code (Text):
    /give|i <player> potion:<effect>[;<duration>][;<amplifier>][;<particles>][;<icon>][;<effect>][;<duration>][;<amplifier>][;<particles>]

    Example:
    Code (Text):
    /give Player potion;strength;120;2;speed;120;2

    Creates a mixed potion with Strength III and Speed III, both lasting 2 minutes

Lang Changes:
  • Removed:
    Code (Text):
    give.error
  • Added:
    Code (Text):
    give.invalid-mix
----------, Jun 29, 2025

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