This release adds the delegated pricing system and a batch of fixes reported by the community (the /team invites menu, chat-plugin compatibility, and a few crashes caught by error tracking). If you already run 2.5.9, just drop this in, nothing to configure.
[1] Staff can teleport to a team's warps now. The warps in the admin GUI are clickable (click one to teleport, bypassing password and cost), and there's /team admin warp <team> <warpName> for the same thing in chat. If the warp is on another server you get told which one. Tab complete covers the admin subcommands properly now too, including points and quest.
[2] Fixed four errors reported by servers through error tracking:
- A crash playing sounds on newer Minecraft versions (Sound changed from an enum to an interface in the API; sounds are resolved version-safely now, so the same jar works on both).
- A Folia crash ("Cannot read world asynchronously") when a furnace or chest closed during a disconnect. The ender chest listener was inspecting every inventory that closed anywhere on the server; it now tracks its own chests directly and never touches foreign inventories.
- Typing NaN or Infinity as a bank amount crashed the economy plugin (EssentialsX can't represent NaN). All money inputs reject those now, including the admin balance editor.
- A join-time error when the glow system sent packets before the player's connection was ready. It now waits and retries once instead of erroring in the join handler.
[3] Team tag and name placeholders now output classic color codes instead of MiniMessage, so plugins like InteractiveChat, DeluxeMenus or custom TAB layouts render them correctly. Before, a team with a gradient showed up as raw markup like <>[CFE]</> in other plugins' chat and hover displays. Gradients still look identical (they're converted to per-character hex colors). This covers the tag, colored tag, colored name, description, the %justteams_display% profile string and all leaderboard placeholders; %justteams_tag_raw% still returns the untouched stored value if you need it. Also fixed /team setjoinfee accepting NaN as an amount (same crash family as the bank fix).
[4] Fixed /team invites showing "No Pending Invites" when you actually had one. Invites to online players were only kept in memory, but the invites menu reads them from the database, so the menu came up empty even though the join message told you that you had an invite. Invites go to the database now for online and offline players alike, so the menu, the join message and accepting or denying all agree. That also means invites survive a restart and show up on every server of a network. Denying, accepting or the team disbanding all clear the invite properly.
[5] Fixed the PvP button in the team menu ignoring the ON/OFF text you set. The gui.yml shipped with the keys named status-enabled and status-disabled, but the plugin reads status-on and status-off, so editing those lines did nothing. The default file uses the correct names now (gui-version 16), and the plugin also honors the old names if you already changed them, so your edit finally takes effect either way.
[6] Fixed the bank deposit and withdraw prompts treating "cancel" as an invalid amount. The prompt tells you to type cancel to abort, but it ran that through the number parser and showed an "invalid amount" error instead of just cancelling. It cancels cleanly now and reopens the bank menu. Same NaN and Infinity guard as the other money inputs.
[7] New: delegated pricing. Server owners decide which team actions team owners may price, and team owners set their own prices from an in-game menu. In config.yml the clan-settings section lists each action with editable (true lets team owners set the price, false locks it) and default-value (the price when a team hasn't set its own); max-editable-price caps what a team can charge, and join-fee-editable controls whether the join fee shows in the menu. Everything defaults to editable false, so nothing changes until you opt in, and existing prices are carried over on update. Team owners open the menu with /team prices (or /team settings): left-click an action to set its price, right-click to reset to the server default. The join fee is in the same menu with an enable/disable toggle and an amount (still capped by the justteams.joinfee.<amount> permission). Members pay the team's price; the owner and any co-owners the owner permits are not charged, since it is their toll to set. The owner can grant co-owners access to edit the team's prices and join fee from a toggle in the menu. Everything is stored per team in the database and syncs across a network, and the menu matches the small-caps look of the other menus. Team creation and rename stay admin-only.
For server admins: drop the new JAR in and restart, nothing to change.
This release is the team creation change the community suggested: clan names can have spaces now.
[1] You can put spaces in clan names now. The create command takes the tag first: /team create <tag> <name>, and everything after the tag becomes the name, so "/team create PIRATE The Salty Crew" makes a clan called "The Salty Crew" with the tag PIRATE. Because names can have spaces, you reference a clan by its TAG in commands like /team info, /team accept, ally and admin commands. The plain name still works too for single-word clans, so nothing you already do stops working. Tags are unique now (each tag points to one clan). Existing teams are completely untouched on update.
[2] Fixed %justteams_color_name% always showing white. The placeholder returned the plain name without applying the team's colour, so it never followed /clan setcolor in tab and the scoreboard. It now paints the name in the team's colour (or gradient) just like the tag placeholder does. Aliases %justteams_colored_name% and %justteams_gradient_name% work too.
[3] Staff can see any team's warps now, the same way you can already see their home. There's a View Warps button in the admin team GUI (next to the home and ender chest buttons) that opens a read-only list of the team's warps, and a /team admin warps <team> command that prints the same info in chat. Both show each warp's name, coordinates, server, and whether it's password protected. Reference a team by tag or name.
[4] Admins opening another team's ender chest with /team admin enderchest are no longer charged the ender chest cost. It was accidentally running the normal player payment; staff access is free now.
[5] Spaces in clan names are now a config toggle. settings.creation.allow_spaces_in_name (default true) lets you turn it off if you'd rather keep names to a single word. The tag still comes first either way.
[6] Fixed the quest menu showing everything in italic (cursive) text. The quest names and lore render normally now, matching the rest of the menus.
[7] Added 10 more built-in quests for more variety in the rotation: Monster Hunt (any mob), Creeper Cleanup, Spider Squashers, Void Walkers (endermen), Nether Purge (blazes), Wither Hunters, Deep Delvers (mining deepslate), Master Builders, Globetrotters (travel), and Champions Arena (PvP). New servers get them automatically; existing servers can add them from the updated quests.yml (or delete quests.yml to regenerate it).
[8] Fixed a race where a team's quest progress could get wiped (or a claimed reward unclaim itself) right after the first member logged back in. Quest progress from the last few seconds before a team went fully offline is saved now instead of dropped. On networks, only one server can pay out a quest reward, so the same reward can't be claimed once per server anymore.
[9] Quests rotate forever now. Once a quest was claimed or expired it was never offered again, so after roughly six days a team's quest menu could go permanently empty. Claimed and expired quests re-roll into fresh ones, and the rotation can no longer reset a quest a team is in the middle of.
[10] Quest anti-farm. Breaking blocks that were placed by a player no longer counts for mining quests, re-placing blocks at the same spot doesn't count for building quests, and killing the same player again only counts after 5 minutes. Kill farms and place-break loops don't print quest points anymore.
[11] Fixed /team admin enderchest on networks. It took the chest lock twice, so it always failed with "in use" and left the team's ender chest jammed for everyone until the lock timed out. Also fixed: if another plugin blocks the chest from opening, the locks are released instead of jamming the chest until restart.
[12] Security: team tags and descriptions can't contain MiniMessage click or hover actions anymore. A crafted tag could run a command as whoever clicked it in chat. This is enforced on input AND cleaned when loading existing data, so a tag that was saved with a click action on an older version is defused on update too. Colors, gradients and bold/italic still work exactly like before. The admin GUI tag editor now runs the same validation as /team settag.
[13] Cross-server fixes. Disbanding a team now reaches every server even when Redis is down, so members no longer stay "in" a deleted team on other servers. Renames sync instantly over Redis instead of waiting for the next poll. Colored tags are now found by the database tag lookup, so a colored tag can't be reported as free on a server with a cold cache.
[14] Invite fixes. /team accept and /team deny now work with the team's tag and with multi-word team names (before, only the exact name worked, while tab-complete happily suggested tags that were then rejected). And if two people create a team with the same name at the same moment, the loser gets the creation fee refunded instead of losing it.
[15] Renaming supports spaces now too (when allow_spaces_in_name is on), both /team rename and the admin GUI, matching create. Multi-word team names also work in /team join, /team unjoin, /team info and the admin disband/home/enderchest/warps commands now. Before, those read only the first word, so "/team admin disband Two Words" acted on "Two", which could even be a different team's tag.
[16] Performance and cleanup. Shutdown no longer drops the last batch of pending saves. Fixed small memory leaks (pending chat prompts of players who left, command cooldown maps). The global team cache isn't blocked during slow database loads anymore, which could stall chat and PvP checks. Teleports run on the correct thread on Folia, and Folia forks are detected by capability instead of by name so new forks work out of the box. Dragging items into plugin menus is blocked everywhere (three menus could eat dragged items).
[17] Database startup polish for networks. The name/tag column widening no longer runs on every boot (it locked the teams table each restart on MySQL, it only runs once now when actually needed). The accept_requests column is now created correctly on plain MySQL (it silently failed there before, so the ally request toggle never saved), and MariaDB no longer gets noisy H2-only commands at startup.
For server admins: drop the new JAR in and restart, nothing to change. Existing clans (including any with duplicate tags) keep working; only newly created clans are checked for a unique tag.
This one is all about memory and performance, the stuff that was making RAM climb and big servers chug.
[1] Fixed a memory leak that made RAM slowly climb the longer the server ran. The team ender chest was kept in memory forever after it was first opened, so on a busy network it just piled up. Ender chests are now released when the last person closes them (and reloaded from the database next time someone opens it), so memory stays flat. Also cleaned up a handful of smaller leaks while I was at it: team chat / chat-spy toggles, quest progress, glow data and a few per-team timers weren't being released when a player logged out or a team unloaded. All released properly now.
[2] Big optimization to team glow on large servers. It was doing a ton of wasted work every second, comparing every player against every other player and even sending "stop glowing" packets to pairs that weren't glowing in the first place. It now only checks players on the same team and only sends a packet when something actually changes, which is a massive cut in CPU and network traffic at 500+ players.
[3] Opening a team ender chest no longer causes a tiny hitch. The item data is decoded off the main thread now, so even chests full of shulkers or heavy items open smoothly.
[4] Trimmed repeated config reads on hot paths. Every PvP hit, kill, chat message and tab-list refresh was re-reading settings from the parsed config; those values are cached now, which lightens the constant background load on a full server.
[5] More Folia polish for 1.21.11 and the 2026 line (26.1.x). A few actions (disbanding a team, reopening the ally menu) were running on the wrong region thread and could error on strict Folia; they run on the right thread now. I also went over the whole plugin and confirmed all scheduling, teleports and entity access use the correct Folia-safe paths.
[6] Added the missing team glow toggle messages (team_glow_enabled / team_glow_disabled) so /team glow no longer logs a "message key not found" warning. They're added to your messages.yml automatically.
For server admins: drop the new JAR in and restart, nothing to change. If you've had a slowly climbing RAM graph, this is the build that fixes it.
[1] Fixed coloured team names breaking the team completely. If a team got created with colour codes in its name (like &eVelix), nobody could accept invites to it or look it up, /team accept Velix and /team info Velix just said "team not found", because the plugin was matching against the full coloured name instead of the plain text. Team names are now stored as plain text (which is what the name was always meant to be, colour belongs on the tag and /team setcolor), and every lookup, invite, ally request and admin command matches on the plain name. Teams that were already created with colours are findable again by typing the normal name.
[2] The allow_formatting_codes setting in config.yml actually works now. It was being read from the wrong place so it was always treated as on, which is how colored names slipped in even with it set to false. Set it to false and colour codes in names are rejected on creation like they should be.
[3] /team rename had the same problem, it would save a coloured name and then you couldn't find the team. It saves the plain name now and updates the cache so the team is immediately findable under the new name.
[4] Fixed a possible crash/desync around team invites on Folia. Invites are tracked in a list that could be touched by two threads at once (a cross-server invite arriving while you accept/deny one), which could throw or lose an invite. That list is thread-safe now.
[5] Built and tested on Paper 1.21.11, and went over every place a team is looked up by name to make sure none of them can hit this bug again.
For server admins: drop the new JAR in and restart, nothing to change. Existing teams (including ones with coloured names) keep working.
This release rolls in everything from 2.5.5 and finishes the job on a few of those fixes that weren't fully holding up yet. The team glow crash and the ender chest in particular got patched in 2.5.5 but a rarer version could still slip through, and those are properly sorted now.
[1] Fixed a crash that could take down a busy network. With a lot of teams online the plugin was firing off a separate background job for every single team every few seconds, and on a packed server those stacked up faster than they could finish until the server ran clean out of threads and fell over. It now runs that work through one small pool and asks the database once instead of once per team. On a 1000+ team stress test the background thread count went from around 2,400 down to about 12. If your server was randomly freezing or dying with an "unable to create native thread" error, this is the fix.
[2] The cross-server sync was hammering the database far more often than it should have, basically every tick with the shipped settings. It's capped to sensible intervals now (a few seconds), and since Redis already pushes changes the instant they happen you won't notice any difference except a much happier database.
[3] Your console isn't a waterfall anymore. It used to print a line for every member of every team each time it saved permissions, plus a line for every cross-server message and update. All of that noise is debug-only now.
[4] Fixed team points getting wiped or coming out wrong when more than one server, or more than one award at the same moment, touched them. Points are now added directly in the database and read back, so two awards landing together both count instead of one quietly overwriting the other. Team kills and deaths had the exact same problem across servers and got the same fix.
[5] The team glow crash is fully gone now. 2.5.5 took a first pass at the "Cannot remove from team" error that disconnected Fabric and other strict clients, but it could still trigger after a respawn, world change, or relog. It's been reworked so it never sends the packet that caused that at all. One small trade-off: a player's name might keep its glow colour until they glow again or relog.
[6] The team ender chest is fully sorted across the board now. 2.5.5 hardened it against item duplication and fixed it crashing on the 2026 server line (26.1.x, the Base64 error), and this release goes further: it no longer loses items when the chest gets smaller (dropping a tier, turning upgrades off, or lowering the rows) it loads what fits and just notes the rest in the console instead of wiping it and the cross-server sync can't build a broken, wrong-sized chest or stomp on someone who has it open right then.
[7] Fixed team bank balances drifting apart across servers. If the database hiccupped right after a deposit or withdraw, the plugin used to broadcast a guessed balance to your other servers; now it just re-reads the real number so everyone stays in sync.
[8] Team chat is solid now, local and cross-server. 2.5.5 stopped it eating messages on Paper and stopped it dropping anything containing "pass" (compass, passed, and so on); this release makes the cross-server side reliable too messages with certain characters could get dropped, a message could be deleted before it actually arrived, and on three-or-more-server setups some servers never got it. All fixed.
[9] Coloured clan names and tags (the &c&l kind, and the raw color tags 2.5.5 first tackled) show as actual colour everywhere they appear now, including chat across servers, instead of printing the raw codes.
[10] Private team chat was being relayed into your public Discord channel if you run DiscordSRV. It's properly private again.
[11] Team PvP toggle sticks properly. Turning PvP on with /team pvp could be quietly reverted by a background sync before its save landed, so teammates still couldn't hit each other. A local change is trusted for a few seconds now so the toggle holds.
[12] You can now set the team ender chest window title yourself in messages.yml, with colours, gradients and hex, instead of it being hard-coded. The key is added automatically when you update.
[13] New placeholder %justteams_tag_formatted% the team tag in brackets, painted in the team's color (follows /team setcolor), e.g. [EAGLE], and empty when the player has no team. Drop it straight into a TAB tabprefix, no condition needed. For reference, %justteams_tag_silent% is the plain one (no color, it inherits whatever's around it).
[14] /team quests now shows up in /team help and tab-complete when the quest system is on. The command always worked, it just wasn't easy to find.
[15] Opening team menus is much lighter on the server. The team menu, ally menu, warps and the leaderboards used to hit the database once for every row while you watched it draw; now they grab everything up front off the main thread, so big teams don't cause a hitch. Flipping permission and admin toggles in the menus no longer stalls the server for a moment either.
[16] Tab-completing team commands and running things like /team info no longer run database lookups on the main thread, so they can't cause a stutter on a busy server.
[17] Polished Folia support for 1.21.11 and the 2026 line (26.1.x). Sounds, particles, warp-setting, the ender chest and the glow range check all run on the correct thread now, and an ender chest can't get stuck locked if the player who opened it disconnects at the wrong moment.
[18] Made sure nothing slips through the cracks on shutdown or reload. Pending saves finish before the database closes, the cross-server sync can't get itself stuck, and background tasks stop cleanly.
[19] If you're not running cross-server, the plugin no longer does pointless cross-server database writes in the background.
[20] Raised the default MySQL connection pool size so it fits a bigger network out of the box, lifted an old hard limit on the H2 (file) database, and fixed a couple of pool settings that were quietly ignoring what you'd put in the config.
[21] Built and tested on a real Paper 1.21.11 server plus a 1000+ team stress simulation, and the whole plugin was gone over end to end for safety and stability. Runs on Paper, Folia, Purpur, Spigot and the 26.1.x line, no internal/NMS code anywhere. Java 21+.
For server admins: drop the new JAR in and restart. Your config, messages and team data are kept as-is and any new keys are added for you.
[1] Team chat works again.
[2] Team chat shows your team color now instead of raw tags like <red> or <gradient:...>.
[3] Team chat stopped eating messages with "pass" in them (compass, passed, etc.). It only catches actual "password" now.
[4] Team PvP toggle sticks now. Turning it on could get reverted by a background sync a second later, so teammates still couldn't hit.
[5] Ender chest hardened against dupes. Two people can't open it at once, and it's now snapshotted right before saving so a mid-drag item can't land in two slots.
[6] Works on Paper 1.21.x and 26.1.2, Folia, Purpur and Spigot.
[1] Your team bank can't be duped anymore. If two people in the same team hit withdraw at the same moment, both withdrawals went through on the same balance, so the team walked away with more money than the bank ever held. It was easiest to pull off from the bank menu, since the amount you type goes through chat and that runs on its own thread, but two people clicking at once was enough. The bank now takes the money out in one step straight on the database, so the same balance can't be spent twice, even by two players on two different servers. Nothing to migrate, just drop it in.
[2] That same fix covers everywhere else money moves through the bank. Deposits, tier upgrades, quest money rewards and anything you pay for out of the bank all use the same safe deduction now, so none of them can lose or double money when they happen at the same time as something else.
[3] People who weren't in your team stopped showing up in it. If you accepted an invite or joined a public team while you were already in another team, the database correctly turned you down, but the member list added you anyway and left a ghost behind. It listens to the database now, so that can't happen.
[4] Members actually show up across the network now. A join, leave or kick on one server didn't always reach the others, so the same team could look different depending on which server you were standing on. Membership is pulled fresh from the database on every server now, on both Redis and MySQL-only setups.
[5] No more duplicate or leftover names in the member list. The list you see and the internal "who's in which team" lookup could quietly fall out of step with each other. They're rebuilt together from one source now, so no doubles and no stragglers.
[6] Turning off an alias like /party works on /team reload now. Before, switching it off in commands.yml did nothing until a full server restart because the command stayed registered the whole time. Now /team reload drops it on the spot, and brings back any you switch on, so the name is free for other plugins right away. If someone still sees it in their tab-complete, they just need to rejoin.
[7] Works on Paper 1.21.x, Purpur, Folia and Spigot, with cross-server over Redis or MySQL.
CRITICAL FIXES
[1] Team bank not syncing between servers when cross-server mode is enabled. The Redis subscriber had no handler for BANK_DEPOSIT or BANK_WITHDRAW so balance changes were silently dropped on receiving servers. Added handlers and reordered the publish to fire after the async DB write completes with the new balance in the payload.
[2] /team create rejected hex colors in team names. Bare #RRGGBB and Bukkit-style &#RRGGBB are now stripped before the alphanumeric name validator, so /team create #96DF86CoolClan works. Legacy &-codes, <#RRGGBB>, and gradients continue to work
[3] /team setcolor with a single hex argument rejected with invalid_color. Single hex is now accepted and stored as a same-start/same-end gradient. /team setcolor #FF0000 works. Two arg gradient and named colors are unchanged
[4] Team chat duplicating as a global message with AlonsoChat installed. Added a parallel guard on the legacy AsyncPlayerChatEvent (cancel, clear recipients, empty message, empty format) so chat formatters that listen with ignoreCancelled = true and broadcast manually no longer produce a duplicate.
FEATURES
[5] ENABLED / DISABLED labels in the Member Edit GUI permission lores are now translatable. New messages.yml keys status_enabled and status_disabled. Auto-migration adds them to existing installs
[6] Cost-message feature labels are now translatable. The <feature> placeholder in economy_charged, economy_charged_bank, economy_charged_split, and items_taken now resolves through a new feature_names section in messages.yml instead of returning the raw internal key.
CONFIGURATION
[7] New messages.yml keys status_enabled and status_disabled
[8] New messages.yml section feature_names with 14 default keys
