Skip to content

Releases: castledking/Allium

# Allium v0.2.1a

01 Jun 22:55

Choose a tag to compare

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

01 Jun 08:49

Choose a tag to compare

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

31 May 20:09

Choose a tag to compare

Allium v0.1.9a

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

v0.1.8a: Citizens NPC locator suppression, fly permission fix, flight restoration improvements

31 May 03:51

Choose a tag to compare

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.

v0.1.7a: Fixed TAB integration and added CrowBar mod companion

28 May 09:50

Choose a tag to compare

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.
  • 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 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.

v0.1.6a: Staff Party Bar, Local Chat, ModGuard, Animated Names, and Release Automation

17 May 18:15

Choose a tag to compare

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 - /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...
Read more