NovaFFA | Free For All Plugin 2.12.0
The ultimate Modern FFA PvP plugin | Editable Kits | Unlimited Kits/Arenas | PAPI | FAWE
Every kit in one shared arena, kits sold through your economy, and money or commands paid out on a kill.
🏟 One Arena Mode
Everyone fights in the same place, whatever kit they picked, so a sword player stands next to an axe player. Turn on one_arena at the bottom of config.yml, name the arena, and run /ffa reload. No restart.
- It is a switch, not an extra way in. While it is on, every join goes to that arena and the kit links are ignored. Turn it off and every link works again, nothing is deleted
one_arena.kitslimits which kits are offered, and an empty list offers them all- The mode reads its menus from
menus/one_arena/, a full second set worded for it, so each mode keeps its own layout and both folders stay there to edit /ffa join <arena>sends a player in with the kit they picked last, or opens the menu if they have not picked one- The console warns on start and on reload if the mode names an arena or a kit that does not exist
Find out more about how this works here: greenarrowlol.github.io/NovaFFA/docs/one-arena-mode
💰 Kits Sold Through Vault
Any kit can carry a price, paid in whatever currency your economy plugin runs. If it calls its money coins, so does NovaFFA.
/ffa kit edit <kit> price <amount>locks a kit until a player buys it. In the normal mode, a locked kit locks its arena too- A locked kit shows its price and the player's balance in the fight menu. Clicking it opens a confirm screen, nothing is taken until they confirm, and then they go straight into the fight
/ffa buy <kit>opens the same confirm screen from chat/ffa kit grantand/ffa kit revokehandle store deliveries and admin gifts, from the console and for offline playersnovaffa.kit.<kit>unlocks a kit for a rank, and operators do not get every kit for free- Without Vault and an economy plugin nothing changes, every kit stays free
Read more here: greenarrowlol.github.io/NovaFFA/docs/kit-prices-and-rewards
⚔️ Rewards for Kills
economy.kill_rewardpays money for every kill through Vaulton_kill.rewardsruns commands for the killer, for the victim, and on exact streaks, with{killer},{victim},{arena},{kit},{streak}and PlaceholderAPI placeholders. Lines run as the console unless they start withplayer:same_victim_cooldown,same_ipandon_combat_logstop rewards being farmed with a friend or an alt. None of them stop the kill counting
🔧 Fixes
- A kit could come out empty. A kit made with
/ffa kit createor updated withinventory importkept a live link to the admin's inventory, so later saves wrote whatever that admin happened to be holding. The items are copied now. A kit that already emptied needs one/ffa kit edit <kit> inventory import - Arena corners name whole blocks. They were compared as the exact spots an admin was standing in, so the bottom layer of an arena could fall outside its own region, and two corners set at the same height protected nothing at all. An arena is now every block from one corner to the other, like any region plugin. Nothing to change in your files
- Build protection hardened. The axe, shovel, hoe, flint and steel and armour stand checks no longer step aside for an interaction another plugin has touched, and they read whichever hand the tool is in
- The refill after a kill, the kit handed back after a regeneration and
%ffa_kit_name%all follow the kit the player actually picked
🔗 Placeholders and API
New placeholders: %ffa_owns_<kit>%, %ffa_price_<kit>%, %ffa_kits_owned% and %ffa_one_arena%.
For developers, FFAKillRewardEvent fires before a kill pays out, with editable command lists and money.
Read more here: greenarrowlol.github.io/NovaFFA/docs/developer-api
📦 Upgrading
Stop the server, swap in NovaFFA-2.12.0.jar, start it again. config.yml moves to version 5, menus/fight.yml to 4 and the language files to 9, with your own values kept and the new keys added on first start. menus/kit_buy.yml and the menus/one_arena/ folder are created for you.
Add Vault and an economy plugin if you want to sell kits or pay money for kills. Everything else works without them.
If you turned build off on an arena and it never seemed to do anything, check its corners with /ffa arena info <arena>. They are meant to be opposite corners of a box, one at the floor and one above the highest point you want covered.
📋 Version Breakdown
| Version | Focus |
2.12.0 |
One arena mode, kit prices through Vault, kill rewards, and the fix for kits emptying themselves. |
2.11.1 |
Arena corners cover whole blocks, so build protection works at the floor and at matching heights, plus harder tool checks. |
Read the documentation | Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
The stable one. Arena data can no longer be lost, joining by kit name works, and a long list of smaller fixes across the plugin.
If you are on 2.10.0 or 2.10.1, update. Nothing in your files needs changing by hand.
⌨️ Joining by Typing the Kit Name/ffa <kit> answered "Incorrect argument for command" on every server, and had never actually worked on Paper. It works now, and so does /ffa play <kit>, which is the same thing with tab completion. A word that is not a kit still fails the way it did.
🏟 Arena Data Cannot Be Lost Any More
2.10.1 stopped spawns being deleted. This goes after the cause, which was the plugin trusting what it had in memory over what the file already said.
- Setting corner 1 on an arena whose world was not loaded wrote both corners to wherever you were standing. Fixed,
corners 1sets corner 1 and nothing else /ffa arena inforeads the file, so an arena whose world is not up shows its real corners and spawn instead ofN/A- An arena knows where it is whether or not its world is loaded, and a save can never write out less than the file already holds
- Every arena, kit, layout, player and lobby file is now written whole or not at all, so a save cut short can no longer leave an empty file behind
- Two saves can no longer collide, and one broken arena no longer stops the rest of the shutdown from saving
🎒 Item Duplication in the Kit Editor
Players could take the kit's items out of /editkits into their own inventory, close the menu, press Reset and take another set, as many times as they liked. The editor now arranges the kit and nothing else: items cannot move between the grid and the player's inventory in either direction, and anything on the cursor at close goes back into the layout.
- A
custom_itemsdecoration on a grid square used to be saved into every player's kit and could be carried off. Decorations now leave the grid like the control items do - An editor menu under six rows, or one with a control item on a grid square, saved those slots as empty, armour first. The layout is rebuilt from what the player already had
🧹 /lobby Clearing Inventories/lobby, and /spawn as its alias, cleared the inventory of whoever ran it whether or not they had ever been in an arena. Only a player actually leaving an arena gets cleared now.
💾 Kits, Layouts and Statistics
- A kit whose items could not be read was loaded empty and then written back empty, destroying it. The file is left alone now and the console names the kit
- A player whose layout could not be read had the kit's layout saved over their file. The fallback is handed out but never saved
- One unreadable yml file used to stop the plugin starting. It is one warning and one skipped file
- Deleting a kit or arena could be undone by a save already on its way to disk
- Deleting an arena deletes its schematic too, so a new arena under the same name no longer inherits the old one's blocks
- Moving an arena's corners tells you the saved schematic needs saving again
- Kit and arena names are checked for letters, numbers,
-and_. A dot used to send a layout somewhere nothing could find again - Shutdown only writes the player files and layouts that actually changed
⚔️ Combat, Building and Commands
- A combat tagged player could step one block outside the arena and use any blocked command. The timer is what matters now, not where they stand
/essentials:spawnand every otherplugin:commandform walked past the block lists. They are matched now- A player logging out mid fight was killed wherever they were, even after leaving the arena, dropping what they carried
- With building off, an axe could still strip logs, a shovel could path, a hoe could till, flint and steel could set fires, and armour stands could be stripped. All held back
/ffa lobby,/ffa leaveand the menu's lobby button ran through the server's command map, so on a hub where another plugin owns/lobbythey sent players to that plugin's destination with no combat tag or leave handling
🔗 Placeholders, Menus and the Rest
- The top kills and deaths placeholders and
%ffa_players_<arena>%returned nothing unless an online player asked. They answer for the console, a hologram and an offline player now - The leaderboard sorted live counters while kills were landing, which printed a stack trace. It sorts a snapshot
- A head that cannot be resolved started a fresh network lookup on every menu draw. Failed lookups are remembered
- A typo in one menu file left the plugin with no menus at all until a restart. Files are only swapped in once all of them read
- A message set to an empty string, which is how you turn one off, was sent as a blank line
/ffa reloadputs the regeneration timers on the new interval- Deleting a kit unlinks the arenas pointing at it instead of leaving them broken
📦 Upgrading
Stop the server, swap in NovaFFA-2.11.0.jar, start it again. Language files move to lang-version: 8 on their own and your edits are kept.
Check /ffa arena info <arena> on each arena afterwards. Anything still missing from an arena an older version wiped has to be set once, and it will not be lost again.
Read the documentation | Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
Arena and lobby spawns no longer disappear on a restart.
🏟 Spawns Kept Through a Restart
If a world manager like Multiverse loads your worlds, arenas were coming back from a restart with their spawn point and corners wiped out of the arena file. Fixed. An arena now keeps whatever its file says, and an arena whose world loads late is picked up the moment it appears.
The lobby was losing its spawn the same way, and also had a habit of overwriting it with the main world's spawn. Both fixed.
📦 Upgrading
Stop the server, swap in NovaFFA-2.10.1.jar, start it again. No config or language changes.
Run /ffa arena info <arena> on each arena afterwards. Anything that already lost its spawn needs /ffa arena edit <arena> spawn once, standing where you want it. It stays put from here.
Compiled clean against Paper 1.21.1 and Paper 26.2.
Read the documentation | Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
An arena can protect its own blocks now. One command turns building off inside it, with no region plugin drawn around it.
🧱 Building On and Off, Per Arena/ffa arena edit <arena> build <on | off> decides whether players can place and break blocks inside that arena. true and false work in place of on and off.
- This is the whole of what a region plugin was being set up for on every arena. A sword arena or a gapple arena has nothing in it meant to be built on, and drawing a region around each one by hand to say so was work the plugin should have been doing itself
- The setting is per arena and lives in that arena's own file, so one arena can be locked down while the arena next door stays open
/ffa arena infoshows whether building is on
Find out more about how this works here: greenarrowlol.github.io/NovaFFA/docs/arenas-and-regeneration#protecting-the-blocks
🔍 What It Actually Covers
Breaking and placing are not the only ways an arena gets changed, so the flag covers every hand a player has on the blocks rather than those two alone.
- Beds, doors, tall flowers and anything else that lands in two squares at once, refused when either square is inside the arena
- A bucket of water emptied on the floor, and the arena's own water drained back out, neither of which is a place event
- Item frames and paintings going up and coming down, including one shot off a wall from across the arena, since the arrow is followed back to whoever fired it
- Armor stands, boats, minecarts and end crystals being put down, none of which are block places either
- The block is what gets checked, not the player. Standing outside the corners and reaching in is refused the same way, and a block outside the arena is never protected by it
What it deliberately does not cover is anything that is not a player changing a block by hand. Explosions, fire spread, liquid flow and pistons are left alone, because an arena can want its blocks left standing while explosions still do their damage. Those are getting flags of their own.
🔐 The Permission and the Default
- New
novaffa.arena.build.bypass, op by default, so an admin can still build the arena they are standing in - New
arenas.buildinconfig.ymlis only the value a newly created arena starts with. Set it tofalseand every arena made from then on is protected without being told to - An arena made before this release carries no setting of its own, so it falls back to that default and behaves exactly as it did. Nothing changes on an existing server until you turn something off
Read more here: greenarrowlol.github.io/NovaFFA/docs/permissions
💬 Told Once, Not Forty Times
A player who tries to build where they cannot is told so above the hotbar, where a held swing cannot turn into a wall of chat. It is held back to one message every second and a half either way, because the rate a block break arrives at is not a rate chat can take.
The line is arena.build_denied in the language file, translated in all five shipped languages, and it can be moved into the chat box like any other message.
📦 Upgrading
Stop the server, drop NovaFFA-2.10.0.jar in place of your old jar, and start it again. The new config and language keys are added to your files on their own, taking config.yml to config-version: 4 and the language files to lang-version: 7, and everything you had already set in them is kept.
Then run /ffa arena edit <arena> build off on any arena that is not meant to be built in. Nothing changes until you do.
Compiled clean against Paper 1.21.1 and Paper 26.2.
Read the documentation | Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
Heads wear the right face, an arena can be rebuilt without killing the people standing in it, and the items you write into a menu yourself can now do something.
All of it is documented here: greenarrowlol.github.io/NovaFFA/docs
🧑 Player Heads Show the Right Face
A head written as skull: viewer, skull: 'player:SomeName' or skull: 'uuid:<uuid>' now wears that player's skin. It was drawn with the default face before, on an online mode server as much as a cracked one, because a profile holding only a name or a uuid carries no skin and nothing was filling one in.
- An online player's skin is read from the player themselves, which costs nothing and covers the common case,
skull: vieweron a toolbar button - New optional SkinsRestorer hook, which is what makes heads work on a cracked server, where a player's uuid is made up locally and Mojang has never heard of it. Install it and NovaFFA reads the skin it holds, nothing to configure, and the hook is reported in the console at start
- Mojang is asked for anybody who has never been online on this server
- Neither of those last two blocks anything. The head goes down plain and is filled in the moment the answer lands, with the menu still open
- Answers are kept for half an hour, and
/ffa reloaddrops them, which is how a changed skin is picked up without waiting that out - Heads written as
texture:,url:orhash:carry their own skin and never needed any of this. They are unchanged
Where a player's skin comes from
🧱 Rebuilding an Arena Without Killing Anybody
- New
arenas.regeneration.protect_players, on by default. While an arena is being rebuilt, and for a few seconds after, the world cannot hurt anybody inside it. Suffocation, falling, fire, lava, drowning and the rest are all held back - Damage from another player is untouched, so a fight carries on through a rebuild rather than turning into a few seconds where nobody can die
protect_players.free_stucklifts anybody the new blocks sealed in up to the first open space above them, keeping the way they were facing. Somebody the arena has no room for is sent to the arena spawn- This is what makes
after.teleport_players.enabled: falsesafe to use. Turning the teleport off keeps a fight going through a rebuild, and until now that also meant the blocks came back around the players and suffocated them - New
arenas.regeneration.layers, off by default. Turned on, the arena goes back down a row at a time from the bottom up, so the floor returns under a player before the roof returns over them and there is time to walk out of the way layers.rowssets how many rows go down in one step andlayers.delay_tickshow long it waits between steps, so a tall arena can be put back faster or slower
Rebuilding without interrupting the fight
🖱 Menu Items That Do Something
A custom_items entry in a menu file was decoration and nothing else, so an item built to look like a kit button did nothing at all when a player clicked it.
- New
join: <kit or arena>drops the player into a fight. A kit name joins that kit, an arena name joins that arena with the kit it is linked to - New
commands:list runs command lines on click, as the player unless the line saysconsole:.{viewer}and{viewer_uuid}work in them - New
close:decides whether the menu closes first, on by default for an item that joins a fight - Read by every menu:
fight.yml,kit_list.yml,kit_editor.ymlandstatistics.yml
🎯 Joining One Arena by Name
- New
/ffa join <arena>joins that arena with the kit it is linked to, with tab completion over your arenas - This is the command to point an NPC, a sign or a command block at when each one should send players to a particular arena.
/ffa <kit>goes the other way round, naming the kit and letting the kit find its arena - It joins the arena that was named, so several arenas linked to one kit each get their own command
- Premium arenas are still gated on
novaffa.arena.<arena>, and the combat tag still blocks a kit switch mid fight
🎒 Kits That Came Out Empty
- A player's saved layout that holds nothing, while the kit itself has contents, is now read as the kit's own layout. An empty layout on disk, which is what an editor that drew nothing leaves behind, could otherwise leave a working kit handing out an empty inventory
/ffa kit createsays so when it captured nothing, from the console or from an admin standing there empty handed, and names the command to fill it/ffa kit edit <kit> inventory importrefuses an empty inventory rather than carrying out an import that would wipe the kit- A kit that hands out nothing is reported once in the console, naming the kit, so an empty kit reads as an empty kit rather than as the plugin being broken
📦 Upgrading
Stop the server, drop NovaFFA-2.9.0.jar in place of your old jar, and start it again. The new config, language and menu keys are added to your files on their own, taking config.yml to config-version: 3, the language files to lang-version: 6 and the menu files to menus-version: 3, and everything you had already set in them is kept. The four new messages are translated in all five shipped languages, and the help screen gains its /ffa join <arena> entry.
On a cracked server, install SkinsRestorer if you want player heads in menus to show real skins. Compiled clean against Paper 1.21.1 and Paper 26.2.
Read the documentation | Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
Any item in any menu can be a player head, the statistics menu takes a border like every other menu, and the lobby button no longer leaves a menu hanging over the player.
All of it is documented here: Borders, Fillers and Heads
🧑 Player Heads Anywhere
Any item in any menu file can be a player head. Set material: player_head, add a skull line, and it works in fight.yml, kit_list.yml and kit_editor.yml as well as the statistics menu, which was the only place a head worked before.
skull: vieweris the face of whoever is looking at the menu, so a toolbar button can be the player's own head- Heads from minecraft-heads.com and every other head site are read in whichever format the site hands them out:
texture:for the long Base64 value,url:for the Minecraft URL, andhash:for the trailing part of that address on its own - The prefix can be left off entirely. A uuid, a url, a Base64 value or a bare hash is recognised from its own shape, so a value pasted straight off a head site works exactly as it was copied, the line breaks it was wrapped in included
player:SomeNameanduuid:<uuid>work as they always did, and a uuid can now be written with or without its dashes- Nothing is fetched. The texture address is written onto the item and the client loads it like any other skin, so a menu full of custom heads costs no network call
- A head that does not resolve is drawn plain rather than failing the item, so one mistyped line never empties a menu
- New
{viewer}and{viewer_uuid}placeholders, the name and uuid of the player the menu is being drawn for, usable in the name and lore of every item in every menu
Every way to write a head, written up in full: greenarrowlol.github.io/NovaFFA/docs/borders-and-fillers#player-heads
🖼 Statistics Menu Borders
statistics.ymlgains anitems.bordersection, written exactly like the ones infight.yml,kit_list.ymlandkit_editor.yml- It was the one menu that read no border at all, so a border added to that file by hand was kept by the updater and then drawn by nothing, which looked like a broken key rather than a missing feature
- On by default, a black pane frame around the head and the five statistics.
enabled: falseturns it off - Decoration is drawn before the statistics, so a pane sharing a square with a number gives that square up rather than covering it. This is how the kit editor already behaved
🚪 The Lobby Button
Clicking the lobby button in the fight menu now closes the menu as it sends the player, so they land in the lobby looking at the world instead of at a menu they have to close.
- New
items.lobby_button_toolbar.close_menuinfight.yml, on by default. Set it tofalsefor the old behaviour - The other toolbar buttons were never affected, since each one opens another menu, which replaces the one on screen
📖 Borders, Fillers and Heads
A new documentation page covers the three separate ways to decorate a menu, items.border for the shipped frame, custom_items for anything you add yourself, and filler for the leftover squares on a part full page, plus every way to write a player head.
- A table of which menu takes which, how the squares are numbered, every key an
item:section reads, and what happens when decoration and real content claim the same square - It says plainly that
items.borderis read by name, so an invented second entry insideitems:is kept by the file and drawn by nothing. Extra decoration belongs incustom_items, which every menu reads
📦 Upgrading
Stop the server, drop NovaFFA-2.8.0.jar in place of your old jar, and start it again. The border section and the close_menu key are added to your menu files on their own, taking every menu file to menus-version: 2, and everything you had already set in them is kept.
Compiled clean against Paper 1.21.1 and Paper 26.2.
Read the documentation | Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
Put a kit on the square you want it on and keep it there, and reload the whole config without stopping the server.
📌 Kit Slots
Kits no longer have to sit wherever creation order put them. Pin one to a square and it stays there.
/ffa kit edit <kit> slot <square>pins a kit to one square of the fight menu, andslot autounpins it again/ffa kit slotsopens the fight menu as an editor: same size, same border, same toolbar. Click a kit to pick it up, click a square to put it down, right-click a kit to unpin it, and drop one kit onto another to swap the pair- Every change is written to the kit file as you make it, so closing the menu is not a step anyone can forget
- A pinned kit sits on its square on every page, so it is where players expect it however many kits come after it. Unpinned kits fill in whatever is left, exactly as every kit did before
- Only squares the menu actually draws kits into are accepted. Tab completion lists the free ones, and anything else is turned down with a message rather than quietly doing nothing
- A kit pinned to a square that a later menu edit hid behind a border flows back in with the rest instead of vanishing
/ffa kit info <kit>shows which square the kit is on. Kit files gainmenu_slot, with-1for an unpinned kit, so existing kits read as unpinned
🔄 Reload Without a Restart/ffa reload re-reads config.yml, the language file and every menu file, so a run of small menu edits is no longer a run of restarts. It needs novaffa.admin, like every other admin command.
- Kits, arenas, player layouts and player statistics are deliberately left alone, since they hold live state that a player standing in an arena is in the middle of
- A combat timer already running survives the reload, so nobody gets a free way out of a fight, unless the reload is what switched combat tagging off
- Command aliases still need a restart. Paper registers commands before a plugin is enabled and cannot be told a new name until the server starts
🔧 Fixes
- A potion or tipped arrow icon shows the kit's name again. Items that work their own name out from a component ignore the item name entirely, so a splash potion kit button read "Splash Potion of Healing" whatever the kit was called
kit_button.use_item_amount_to_display_playingwas capped at what the icon stacks to in game, so a sword or an axe could never show more than one. The count now shows on any icon, up to 99, so two axes or five crystals read at a glance- The help footer could throw on one build line. It was built through a method that erases differently between Adventure 4 and Adventure 5, so a jar built on one line failed drawing a help page on the other. Both builds are byte for byte identical again
📦 Upgrading
Stop the server, drop NovaFFA-2.7.0.jar in place of your old jar, and start it again. The new messages are added to your language file on their own, taking it to lang-version: 5, and your kits keep filling the menu in the order they were made until you pin one.
Compiled clean against Paper 1.21.1 and Paper 26.2.
Read the documentation | Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
Any item can be a kit icon now, and creating a kit is one command with your loadout already on.
🖼 Kit Icons From Your Hand
A kit icon no longer has to be a plain material, so a kit that fights with instant health splash potions can finally show one on its menu button.
/ffa kit edit <kit> icon handtakes the item in your main hand and saves it whole. A potion keeps its effect, and a dyed, enchanted or custom model item keeps whatever makes it look the way it does- A renamed item drops its own name on the way in, so the menu button still shows the kit's display name
- Running it empty-handed tells you to hold the item first
/ffa kit edit <kit> icon <icon>is unchanged for a plain material- The fight menu and the kit layout editor both draw the full item. A
materialline in the menu file still overrides every kit's icon, exactly as before - Kit files keep their readable
iconline. The full item is written beside it asicon_itemonly when the material on its own would lose something, so existing kits are left alone - For developers:
Kit#icon()still returns theMaterial, andKit#iconItem()returns the full item
🎒 Kits Built Straight From Your Inventory
Building a kit is one step. Set the loadout up in your own inventory, then create the kit, and it is captured on the spot, armour and off-hand included.
/ffa kit create <name>saves the creator's complete current inventory as the new kit's default layout- A kit created from the console still starts empty, since there is no player inventory to capture
- The update command is easier to find:
/ffa kit edit <kit> inventory import. The old/ffa kit edit <kit> import contentsis still accepted, so command blocks and habits keep working
📦 Upgrading
Stop the server, drop NovaFFA-2.6.0.jar in place of your old jar, and start it again. The new message is added to your language file on its own, taking it to lang-version: 4, and no kits, arenas, layouts or player data are touched.
One thing to redo by hand: any kit whose icon should be a potion or another item that a bare material cannot express needs its icon set once with icon hand. Compiled clean against Paper 1.21.1 and Paper 26.2.
📋 Version Breakdown
| Version | Focus |
2.6.0 |
Any item can be a kit icon, taken from your hand and saved whole, with the fight menu and layout editor drawing it in full. |
2.5.0 |
Creating a kit captures your current inventory as its default layout, and the import command was renamed while keeping the old form. |
Read the documentation | Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
Leaderboard placeholders, so a top kills or top deaths board needs nothing but NovaFFA and PlaceholderAPI.
🏆 Top Kills and Top Deaths
Building a leaderboard used to mean pointing a third party plugin at NovaFFA's stats. Now the ranks are placeholders of their own, for the top ten in each:
%ffa_statistics_top_kills_<1-10>% the kill count at that rank
%ffa_statistics_top_kills_name_<1-10>% the player at that rank
%ffa_statistics_top_deaths_<1-10>% the death count at that rank
%ffa_statistics_top_deaths_name_<1-10>% the player at that rank
- A rank nobody has reached yet reads cleanly,
0for a count and-for a name, rather than the placeholder failing to resolve and leaving raw text on your board - Cheap to poll. The ranking is held in memory and refreshed once a minute rather than worked out on every request, so a scoreboard or hologram reading it several times a second costs nothing extra
📦 Upgrading
Stop the server, replace the old jar in plugins/ with NovaFFA-2.4.0.jar, and start it again. Nothing to reset, migrate or set up again, and no config or language changes at all.
🧪 Compatibility
Paper 1.21.1 through 1.21.11 on Java 21, and Paper 26.1 through 26.2 on Java 25.
Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
Combat tagging held back the lobby command but not the lobby itself. Now a tagged player cannot walk or fly in either.
🚧 Lobby Entry Is Held Back Too
A tagged player could still run or fly straight into the lobby, since the timer only ever blocked the /lobby command. The lobby corners themselves are now held back as well.
- Walking or flying, both are stopped the moment the move would put a tagged player inside the lobby
- Movement anywhere else is untouched. Nothing happens until they actually try to cross in
- They are told on the action bar, same as the countdown, so it never floods chat
- On by default, as
combat_tag.block.lobby_region, alongside the existingcombat_tag.block.lobbythat holds back the command
📦 Upgrading
Stop the server, replace the old jar in plugins/ with NovaFFA-2.3.0.jar, and start it again. Your config.yml and language file pick up the new key and its message on their own, and everything you already set stays put.
🧪 Compatibility
Paper 1.21.1 through 1.21.11 on Java 21, and Paper 26.1 through 26.2 on Java 25.
Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
NovaFFA now runs on 26.1 and 26.2 as well as 1.21.1 through 1.21.11, from the same jar.
🧱 Both Version Lines, One Jar
Mojang changed the version scheme in 2026, counting the year and then the drop within it, so 1.21.11 is the last of the old line and 26.1 is the one after it. NovaFFA runs on both.
- 1.21.1 through 1.21.11, and 26.1 through 26.2
- One jar for both, there is no separate download to pick
- Nothing changes on a 1.21.x server. No config, kit, arena, layout or player file changes shape, and nothing needs migrating
Without this build the plugin would not have loaded on 26.x at all, so if you are moving up, this is the one you need.
📝 Before You Move to 26.x
FastAsyncWorldEdit is still required, and NovaFFA disables itself without it. FastAsyncWorldEdit publishes its own 26.x builds, so grab the one matching your server rather than the 1.21.x build.
26.x needs Java 25. That is the server's requirement rather than NovaFFA's. Staying on 1.21.x? Java 21 is still fine.
📦 Upgrading
Stop the server, replace the old jar in plugins/ with NovaFFA-2.2.0.jar, and start it again. Nothing to reset, migrate or set up again.
Moving to 26.1 or 26.2 as well? Update FastAsyncWorldEdit to its matching build and make sure your server is on Java 25 first.
🧪 Compatibility
Paper 1.21.1 through 1.21.11 on Java 21, and Paper 26.1 through 26.2 on Java 25.
Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
Getting hit now holds you in the fight, and a kit saved in the layout editor no longer comes back empty.
⚔️ Combat Tag
Being hit by another player starts a timer, and every fresh hit pushes it back out to full. While it runs, the player is held in the fight. Landing a kill clears their own timer straight away, since they have finished what they were in, and dying clears it too.
- Five seconds by default, set to whatever you like with
combat_tag.time - A countdown ticks away above the hotbar while the timer runs
- Escape commands are held back. Put whatever your server uses into
combat_tag.block.commands:/spawn,/home,/tpaand the rest /leaveffa,/lobbyand switching kit are held back too, each on its own switch- Logging out mid fight kills the player where they stood, credits the kill to whoever they were fighting, and tells the arena about it
- Only players inside an arena are ever tagged, so a fight elsewhere on your server is left alone
The whole thing switches off with combat_tag.enabled: false.blocked_commands.in_arena is unchanged and still blocks a command for as long as a player is in an arena. The combat tag only blocks while they are actually fighting, which is usually the one you want.
⌨️ Command Aliases Are Yours
Every alias is read from commands.aliases in config.yml, one list per command. Rename them, add your own, or leave a list empty to give a command no aliases at all./spawn ships as an alias of /lobby, because it is the word most players reach for.
If your server already has a /spawn, from EssentialsX or a hub plugin, take it out of commands.aliases.lobby. Two plugins claiming the same command means one wins it and the other is only reachable as novaffa:spawn.
🛠 The Kit Editor Keeps Your Work
A kit set up and saved in the layout editor could come back completely empty, and the editor kept reverting to empty on every later visit. This was carried over from ContinuumFFA and survived the 2.0.0 rebuild. It is fixed.
- A kit or layout that fails to read back is now reported in the console, instead of being dropped silently with nothing to point at why
- Clearing player layouts works properly after importing contents into a kit, so nobody is left on their old arrangement
🔗 Placeholders
Two new ones for your scoreboard or tab list:
%ffa_combat_tagged% true while the timer is running
%ffa_combat_time% seconds left, 0 when it is not
🔌 For DevelopersFFACombatTagEvent fires before a player is tagged. Cancel it and they walk away free.
📦 Upgrading
Stop the server, replace the old jar in plugins/ with NovaFFA-2.1.0.jar, and start it again. Your config.yml and language files pick up the new keys on their own, and your kits, arenas and layouts are untouched.
Two things to do afterwards: put your server's own escape commands into combat_tag.block.commands, and check commands.aliases.lobby if another plugin already owns /spawn.
📋 Version Breakdown
| Version | Focus |
2.1.0 |
Combat tagging with a countdown, blocked escape commands and a logout penalty, plus configurable command aliases and two new placeholders. |
2.0.1 |
Kits and layouts saved in the editor no longer come back empty, and a file that cannot be read is reported rather than dropped in silence. |
🧪 Compatibility
Paper 1.21.1 through 1.21.11, Java 21.
Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
ContinuumFFA is now NovaFFA, part of the Arrow Plugin Series. Every feature you had is still here, rebuilt on the current Paper API and shipping in five languages.
⚠️ Read Before You Update
Nothing carries over from the old folder. NovaFFA generates a fresh plugins/NovaFFA/ on first start and leaves your old ContinuumFFA folder completely alone, so nothing is deleted. Arenas, kits and player stats need setting up again.
The old permission nodes stop working. Update your permission plugin before you restart:
| Old node | New node |
ffa.admin |
novaffa.admin |
continuum.ffa.commands.ffa |
novaffa.commands.ffa |
continuum.ffa.openFFAMenu |
novaffa.openFFAMenu |
continuum.ffa.arena.<name> |
novaffa.arena.<name> |
/ffakit and /ffaarena no longer exist. If you have command blocks, macros or permission entries pointing at them, point those at /ffa kit and /ffa arena instead.
📋 What Changed For You
| Before | Now | |
| Main command | /ffa |
/novaffa, with /ffa still working |
| Admin commands | /ffakit, /ffaarena |
/ffa kit, /ffa arena |
| Help | One long wall of chat | Paginated, with clickable arrows |
| Permissions | ffa. and continuum.ffa. |
All under novaffa. |
| Minecraft | 1.21 and maybe upto 1.21.5? | 1.21.1 through 1.21.11 |
| Messages | One messages.yml |
A lang/ folder, five languages |
| Config updates | None | Automatic, your settings kept |
🧱 Runs on Modern Minecraft Again
The plugin had not been updated in about a year. It now targets Paper 1.21.1 up to 1.21.11 and uses the current API throughout, so it keeps working as 1.21 moves on. Both ends of that range were started on a clean server with FastAsyncWorldEdit and PlaceholderAPI installed.
⌨️ One Command Instead of Three
Everything an admin does now lives under /ffa:
/ffa opens the fight menu
/ffa <kit> joins that kit's arena
/ffa help the home help screen
/ffa kit ... everything to do with kits
/ffa arena ... everything to do with arenas
Every command is a proper Brigadier command now, so you get argument types, live suggestions for kit and arena names, and the client greys out anything invalid before you press enter.
📖 Help That Does Not Flood Your Chat
Help is paginated. /ffa help shows the home screen and points you at /ffa kit and /ffa arena. The Back and Next arrows are clickable, and clicking any command line drops it straight into your chat box ready to fill in. Jump to a page directly with /ffa arena help 2.
🎒 Your Kits Keep Their Custom Items
Kits and player layouts are stored using Paper's own item format now. Custom items, data components and anything a plugin like ItemsAdder or Nexo put on a stack all survive a restart intact. The old storage flattened them.
🌍 Five Languagesen_US, fr_FR, es_ES, zh_CN and hi_IN all ship with the plugin and are kept up to date automatically. Pick one with language: in config.yml, or drop your own file into the lang/ folder and name it there.
🖥 Menus You Can Actually Configure
- Every key has a plain comment above it explaining what it does
- Kit buttons honour the whole item spec, so
glow,flags,amount,custom_model_dataandenchantmentsall work. Add amaterialline to override the kit's own icon - Any item can play a
soundwhen it is clicked, withvolumeandpitch - A
filleritem fills the leftover squares on a part full page - A
no_kitsitem shows instead of an empty menu on a fresh install - Anything you add under
custom_itemssurvives every future update
🎨 Colour Syntax
Colours are written differently now, so any messages you had edited will need their tags updating:
# Plain colours and formatting
'&aGreen text, &land bold'
# Any hex colour
'�ccffA custom blue'
# Gradients and rainbows
'<GRADIENT:00ccff>fades across</GRADIENT:7fe5ff>'
'<RAINBOW1>rainbow text</RAINBOW>'
Placeholders the plugin fills in use curly brackets, so {kit}, {arena}, {display_name} and so on. Angle brackets inside the help text are command usage, not placeholders.
🛠 Fixed
All of these were broken in ContinuumFFA 1.1.81:
- Admin actions now confirm themselves. Deleting an arena, teleporting to one, toggling its permission, regenerating it, and starting or stopping the timer all sent nothing back before
/ffa kit infoand/ffa arena infoprint their output- Title messages appear instead of never showing at all
- Joining a fight can no longer corrupt an inventory. Health, hunger and inventory were being touched from a background thread
- The layout editor saves slots in order, so a saved kit no longer comes back scrambled
- Kill to death rate reads properly for a player with no deaths, instead of showing
Infinity - A kit icon written in lower case loads instead of failing
- The public API runs registered listeners as it always claimed to
- The
premiumoption on arenas is in the help text - A broken FastAsyncWorldEdit install is reported clearly. It was previously only checked for being installed, not for having actually started, so a failed copy left the plugin half working with no explanation
📜 Commands
| Command | Aliases | What it does |
/novaffa |
/ffa |
Opens the fight menu |
/ffa <kit> |
Joins the arena linked to that kit | |
/ffa help [page] |
The home help screen | |
/ffa kit ... |
Creates and edits kits, clears player layouts | |
/ffa arena ... |
Creates and edits arenas, drives regeneration | |
/leaveffa |
/leave, /exit, /ffaleave, /exitffa, /ffaexit |
Leaves the arena |
/lobby |
/ffalobby |
Goes to the FFA lobby |
/statistics |
/stats |
Opens the statistics menu |
/editkits |
/kiteditor, /kitlayouts, /layouts |
Opens the kit layout editor |
/ffa leave, /ffa lobby, /ffa stats and /ffa editkits do the same as their standalone versions.
🔐 Permissions
| Node | Default | Covers |
novaffa.admin |
op | /ffa kit, /ffa arena, and the admin arguments on /lobby |
novaffa.commands.ffa |
true | /novaffa and /ffa |
novaffa.openFFAMenu |
true | Opening the fight menu |
novaffa.arena.<arena> |
false | Joining an arena with premium turned on |
🔗 Placeholders
The identifier is still ffa, so anything you already reference keeps working.
%ffa_statistics_kills% %ffa_statistics_deaths%
%ffa_statistics_kdr% %ffa_statistics_current_streak%
%ffa_statistics_highest_streak%
%ffa_arena_name% %ffa_kit_name%
%ffa_kit_display% %ffa_is_playing%
%ffa_players_<arena>%
📦 Upgrading
- Stop your server
- Delete the old
ContinuumFFA.jar. Leave theContinuumFFAfolder alone if you want to keep it for reference, NovaFFA will not touch it - Drop in
NovaFFA-2.0.0.jar - Update your permission plugin to the
novaffa.nodes - Start the server, then rebuild your arenas and kits
FastAsyncWorldEdit is required, it is what rebuilds arenas. PlaceholderAPI is optional. If FastAsyncWorldEdit is missing or fails to start, NovaFFA now tells you clearly in the console instead of half working.
Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
Statistics
Views
Purchases
Downloads
File size
Published
Updated