Releases: castledking/Allium
Releases · castledking/Allium
# Allium v0.2.1a
Allium v0.2.1a
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/
v0.2.0: Supress Citizens NPC data from being sent to CrowBar for 26.1.2 clients
Allium v0.1.9a
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/
v0.1.9a
Allium v0.1.9a
Wiki: https://github.com/castledking/Allium/wiki
Highlights
- Citizens NPC body visibility fixed — Allium no longer strips unlisted
PLAYER_INFO_UPDATEentries 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 ofplayer.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 strayuuidvariable 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.yml—message_idupdated 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
v0.1.8a: Citizens NPC locator suppression, fly permission fix, flight restoration improvements
Allium v0.1.8
Wiki: https://github.com/castledking/Allium/wiki
Highlights
- Citizens NPC locator bar suppression — Allium now sets
WAYPOINT_RECEIVE_RANGE = -1on 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 —
/flynow accepts bothallium.flyandallium.tflypermissions, 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 = -1on 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 inupdatePlayerVisibilityorhidePlayerAndRefreshTab. - 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 bothallium.flyandallium.tflyfor the/flycommand.- Removed the special-case in
getDerivedPluginCommandPermission()that mappedallium.flytoallium.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
PlayerTeleportEventhandler to captureallowFlightstate before cross-world teleport. onPlayerChangedWorldnow 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) toprovidedscope — 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.
v0.1.7a: Fixed TAB integration and added CrowBar mod companion
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.crowbarpermission. - Gradient name pause control - Animated gradient names can now be paused programmatically.
- NPC filtering improvements - Better TAB integration for Citizens2 and ZNPCsPlus NPCs.
- WorldEdit integration - Added soft-dependency support for FastAsyncWorldEdit and WorldEdit.
CrowBar Mod Companion
- Added
CrowBarDataSenderto 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.crowbarpermission 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)andisPaused()methods toGradientNameManager. - 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.crowbarpermission 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.coretocodes.castled.allium. - Improved TAB packet handling for better performance and reliability.
v0.1.6a: Staff Party Bar, Local Chat, ModGuard, Animated Names, and Release Automation
v0.1.6a: Staff Party Bar, Local Chat, ModGuard, Animated Names, and Release Automation
Allium v0.1.6a
Wiki: https://github.com/castledking/Allium/wiki
Highlights
- Chat channels are now split between global and local -
/localand/ltoggle radius chat, while/globaland/greturn players to global chat. - Staff locator mode -
/locatorbarnow 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 withallium.gradientname. - Item Renamer - new single-use custom item that grants temporary
/renameaccess 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
.releasetooling 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
gandglobal;localandlno longer point at global chat. /localand/ltoggle between local chat and the default/global write channel./globaland/galways 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-discordis true.
Party And Locator Bar
- Added staff locator mode for players with
allium.party.staff. /locatorbarwith no arguments now toggles staff locator mode.- Added
/locatorbar help. - Added
/locatorbaraliases:/partybar,/lbar, and/pbar. - Added
allium.locatorbar.helpfor 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.ymlwhen 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.gradientnamecan 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.animationfor animated gradient phase permission checks.
Nicknames
- Added
/editnickfor 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
/whoissee the same nickname. - Nickname placeholders can read stored offline nicknames by UUID.
ModGuard
- Added
plugins/Allium/modguard/config.ymlfrom bundledsrc/main/resources/modguard/config.yml. - Legacy
modguardsettings from the rootAllium/config.ymlare migrated intomodguard/config.yml. - Added blacklist/whitelist detection mode.
- Added configurable join-time checks with
check-on-joinandcheck-delay-ticks. - Added configurable punishment mode with
kick-on-detection. - Added
modguard.bypassto skip checks. - Added
modguard.notifyfor staff notifications. - Added
allium.alertssupport 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, andforge: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.openguias 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 alertsnow shows gamemode audit, chat filter, and ModGuard alert state./core alerts modguardtoggles whether a staff member sees ModGuard alerts.- Staff permission bundles now include
allium.alertsandmodguard.notify.
Custom Items
- Added the
item_renamercustom 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-centerandend-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...