justDuel | Duel System v4.0.9

A survival/kit duel plugin.
[1] Added Canvas support. JustDuel would not start on Canvas at all, it crashed on boot. Canvas runs like Folia but does not call itself Folia, so the plugin did not know to use the right scheduling for it. It recognises Canvas now (and other Folia-based forks) and runs on it the same as it does on Folia. Purpur, Pufferfish and Leaf keep working like normal Paper.

[2] Forfeiting an SMP-Hard duel actually ends it now. Before, typing /duel leave in an SMP-Hard fight showed "Forfeited. All items lost." but nothing really happened, both players just stood in the arena and could keep hitting each other. Now a forfeit works like a death: your items drop for the winner to claim, you go into spectator, and the two of you can no longer damage each other.

[3] New setting to strip the menus off direct challenges, made for SMP. Turn on duel-requests.skip-menus and /duel <player> stops opening the "Select Arena" and "Duel Request" chest menus. The challenge goes straight to the target as a chat message with clickable [ACCEPT] and [DENY], the sender picks nothing, and a random arena is chosen when it is accepted. Set it to true in config.yml on any SMP where the arena and kit menus do not make sense.

[4] The Back button and glass filler are toggleable now. In gui.yml under common-items you can set back-button enabled to false to remove the Back arrow from every menu at once, or filler-primary enabled to false to drop the glass border. Handy on SMP where those menus are mostly gone anyway. The material, name and lore stay editable as before.

[5] No more building during the countdown. Players could place and break blocks during the "Starting in 5..1" phase before the fight actually began. Building is blocked until the match is live now.

[6] Fixed a random teleport for spectators. If you were watching an SMP-Hard duel and the winner ran /duel leave during their item-pickup window, you could get flung to a random spot in the overworld. Spectators return to where they were before they started watching now.

[7] The SMP and SMP-Hard inventory preview shows again. When you got challenged in an SMP mode you are meant to see a preview of the incoming request, and on SMP-Hard it was silently skipping straight past it. It shows correctly now, and like the rest it is editable in gui.yml.

[8] Cross-server fix. On a network, a direct challenge to a player sitting on another server could quietly get dropped and never reach them. That path is fixed.

[9] The "Request sent [CANCEL]" line is editable. Like the [ACCEPT]/[DENY] line, the sender's cancel message was baked in and ignored messages.yml. It reads chat-request-sent from messages.yml now, so you can translate or restyle it, button included.

[10] The spectator hotbar items are configurable. The "Leave Spectating" and "View Opponent Inventory" items a spectator gets used to be fixed; they live in gui.yml under a spectator section now, so you can change the item, name, lore and slot, and the click still works because it follows whatever material you set.

[11] The console stopped repeating itself. On a reload or the arena autosave, "Arena loading complete" was printed once per arena, so fifteen arenas meant fifteen identical lines. It logs once now.

[12] Fixed the version showing wrong. The plugin was reporting itself as 4.0.7 no matter which build you ran, which also made it nag about a fake update. It shows the real version now.

[13] Extra stability on Folia and Canvas. A few parts of the SMP-Hard win and loss flow were cleaned up so everything runs on the right thread, and the loser's dropped loot is protected the instant it hits the ground so nothing gets grabbed or despawns before the winner can claim it.

To drop it in: replace the jar and restart. For SMP servers, set duel-requests.skip-menus to true in config.yml to remove the arena and kit menus.
[1] Closed the queue teleport exploit for good. Joining the queue never moves you, so there was no reason to yank you back when you left it, and players had worked out they could use that. Queue up from a safe spot, walk off or get into a fight somewhere else, hit /duel leavequeue and you would warp straight back to where you started. Now leaving the queue just leaves you where you are. If you actually want the old teleport-back, there is a new switch, queue.teleport-back-on-leave, off by default. This covers every way out of the queue, the leave command, the leave button, and the wait-time running out.

[2] Set queue.teleport-back-on-leave to true and the queue restores your exact join position again like older builds did. Leave it false, the default, and nobody can use the queue as a free way home. It writes itself into config.yml on the next start.

[3] Your edits to the chat duel-request message finally do something. The line a player sees when someone challenges them, the one with the [ACCEPT] and [DENY] buttons, was hardcoded in the plugin, so no matter what you put in messages.yml under request-received-chat it never changed. It reads the message key properly now, translation, colours, buttons and all, and the click buttons still work because the plugin uses the server's own text engine.

[4] Fixed the opponent inventory preview for SMP-Hard spectators. When you watch a downed player you get a window of their gear, and the main inventory and hotbar were showing up empty because the layout in gui.yml and the code that read it had drifted apart. It fills in correctly now, and it refreshes live again while you watch instead of freezing on the first frame. The close button stays put through the refresh too.

[5] A few admin command replies were going missing. Some of the NPC cleanup and random-queue messages, things like "Removed 3 duplicate holograms", were being treated as if they were message-file keys, so instead of the line you got nothing in chat and a stray "missing key" warning in the console. They send as plain messages now.

To drop it in: replace the jar and restart. Nothing to configure, the exploit is closed out of the box.
[1] The menus got a full visual refresh to match the rest of the Just plugins. The borders are black glass now instead of the old light blue, and the titles and buttons use the same blue gradient you see in JustBans. It is all still yours to change in gui.yml, the filler material, the gradient colours, every menu title and every item. One thing for existing servers: your gui.yml keeps whatever values you already had, so to actually see the new look you delete or regenerate gui.yml.

[2] There is a PvP toggle for the lobby now. Set hub.allow-pvp to true and players can hit each other in the hub, leave it false, the default, and they stay protected. Either way fall and void damage in the hub is still blocked and duels are never affected. It writes itself into config.yml on the next start.

[3] Placeholders stopped lagging the server. Anything reading %justduel_...% stats or the top_ leaderboards, your scoreboard, tab list or nametag plugin, used to make justDuel hit the database on the main thread every single time it asked, which drags TPS down the more players you have. All of that is served from a cache now and refreshed in the background, so it never stalls a tick.

[4] Stats are safe under load. There was a race where a win, loss, kill or death that landed in the same moment justDuel was saving to the database could quietly get dropped. That is locked now, and anything batched since the last save is written on shutdown and reload instead of thrown away.

[5] The Folia side got a proper pass. A simultaneous death, both players dying at once in different regions, could run twice and send double draw messages. The world manager was spamming the console every couple of seconds trying to make temporary worlds Folia cannot make. And a few respawn and restore steps were running on the wrong thread. All fixed. On Folia you use preset, PERMANENT, arenas in real worlds, and justDuel now skips temporary worlds there on its own.

[6] Cross-server got two real bug fixes. Kit-version sync was throwing on every single run because of a broken database statement, and player-state updates were not refreshing which server a player is on, so a duel request could get sent to the wrong server. Both sorted.

[7] Everything feels smoother. Opening the settings menu and sending a duel request no longer do a database lookup on the main thread, they read from a cache. The scoreboard update path was made thread-safe. And a handful of wasteful allocations in the once-a-second loops are gone.

[8] Preset arenas are the default and clearer now. An arena you make with /dueladmin arena setup is already a permanent preset, it teleports both players to fixed spawn points in a real world and creates no throwaway world. If you want to be explicit, set world-manager.temporary-worlds to false in worlds.yml.

[9] The queue matcher is tighter. The 1v1 queue processor used a loose check before claiming its slot, it is a proper atomic compare-and-set now, so the same player cannot slip through twice.

[10] The config checker tells the truth now. Running /dueladmin validate on a perfectly healthy setup used to throw fourteen errors at you that were not real, it was hunting for an old database key name, a menu section that got renamed, and a kit layout the default kits do not even use. It reads the actual files now, so a clean install reports clean instead of scaring you into fixing things that were never broken.

[11] Works on Paper 1.21.11, Minecraft 26.1.x and 26.2.x, Folia and Spigot, single server or cross-server, same as always. Servers on Minecraft 26.1 or newer need Java 25. All of the teleports and player handling use Paper's region-aware scheduling so it stays safe on Folia.

To drop it in: replace the jar and restart. To see the new black and blue menus, delete or regenerate gui.yml.
[1] Kit creation works the way you'd actually type it now. Do /duel kit create <name> and it starts building your kit. Before this it just said "Player not found", because the command had no idea "kit" was a keyword and thought you were trying to duel a player named kit. Now /duel kit create, /duel kit save and /duel kit cancel all work and tab-complete as you type. The old /duel createkit, savekit and cancelkit still work too, nothing got removed, you've just got the obvious version on top of them.

[2] The admin menus aren't spitting out raw code anymore. A big chunk of /dueladmin was printing things like <yellow> and <gray> as literal text instead of the actual colors, the kit approval list, the world commands, validate, audit, the help pages, all of it. Every one of those lines runs through the proper formatter now, so the whole /dueladmin (or /da) interface reads clean instead of looking half broken.

[3] Players stop spawning inside blocks. People were landing stuck in terrain when they joined or respawned at the hub. Two separate things were wrong: the saved spawn wasn't centered on the block, so you could clip into the one next to it, and the join teleport never checked whether the spot was even open. Both are sorted. The spawn now saves dead-center on the block, and the join, respawn and back-to-hub teleports all look for a clear spot and lift you up out of any solid blocks before they drop you in.

[4] One thing worth doing after you update: stand where you want the hub and run /da system setspawn once. Your current saved spawn could still be a bad point from before the fix, and re-running it writes a clean centered one. If you forget, the new safety check still pulls players out of blocks on join, but setting it fresh gets you the exact spot you picked.

[5] Fixed the disconnects on 1.21.11. Players were getting booted with an "Internal Exception" the second the plugin tried to show an action bar, the queue timer, the idle hub bar, that kind of thing. The text library the plugin used to ship didn't know about the new Minecraft version and was quietly building broken packets, and the server kicked the player rather than send a bad one. That library is gone. The plugin uses Paper's own built-in text now, so action bars and titles show up and nobody gets dropped.

[6] Tidied up the Folia and reload side of things. Spawning a second queue NPC could throw an error, and the NPC bobbing animation could keep running after a reload and pile up. A scheduler fallback could also call itself in a loop and take the server down with it. All fixed. A few teleports that could error out on Folia now go through the safe async teleport that handles crossing regions and worlds.

[7] Keeping it off your survival worlds is just config. JustDuel only applies its arena rules inside arena worlds, so survival is already left alone there. The one thing that reaches everywhere is the hub pulling players in on join, so if you run duels next to a survival world, set hub.teleport-on-join and hub.hub-on-join to false and force-spawn-on-join to false, then put your duel hub and arenas in their own world. Players stay where they log out and only come to the hub when you send them.

[8] Runs on Paper 1.21.11, 26.1.x, Folia and Spigot, single server or cross-server over Redis, same as before.
### NEW

- Party menu. Open it with /duel party (or click the new Party item in /duel). You see your members, who the leader is, your pending invites, and shortcuts to queue the whole party for 2v2, 4v4 or FFA. Leader gets the kick / transfer / disband buttons. Everyone else gets a Leave button

### FIXED

  • Items from the previous match used to sit in the arena if a player didn't pick them up. They are cleaned out every time a new duel starts now
  • /queue jumped your mouse cursor to the middle of the screen when you clicked a kit.
  • Settings menu blinked when you set a default kit. It now updates in place
  • The Kit Editor and the Settings menu also stopped flickering when you click Back or the default-kit slot

### COMPATIBILITY

- Same single jar still works on Paper 1.21.1, 1.21.11, 26.1+, Folia 1.21.x and Folia 26.1+
### NEW

[1] Circular arenas. Use /dueladmin arena circle <name> and the tool walks you through center, edge, and the two spawn points. The fight is contained inside the actual circle, no more diagonal escapes. Particle preview during setup. No FAWE required
[2] 2v2, 4v4 and Free-For-All groundwork. The match types, the party commands, and the new config blocks are in this build. The team match itself goes live in the next build. 1v1 is unchanged

### FIXED

[3] When your opponent disconnected mid-duel, you used to get stuck in the arena with a frozen "Returning to Hub" bar. You now ride the countdown out and get sent home cleanly
[4] The plugin crashed when opening any GUI on Paper 1.21.4 and newer (and on Folia). Fixed
[5] Players sometimes lost the duel the instant they spawned with a "boundary violation" message. Fixed
[6] If the server crashed during a duel and the arena was in the same world as your spawn, you used to be left holding the kit inventory. The plugin now restores you correctly
[7] Spectators could send and accept duel requests while watching someone else fight. They can't anymore
[8] Cross-server matchmaking could occasionally start the same duel on two servers at the same time. Fixed
[9] The cross-server queue could freeze if a backend crashed at the wrong moment. The lock now expires on its own
[10] Startup banner used to say WorldEdit/FAWE was missing on installs that ship FAWE under its short name. Fixed
[11] Fixed a "Cannot open inventory" error in the kit-selection GUI
[12] Smooth teleport now reliably completes both hops on Folia
[13] The void-rescue safety net works on Folia again
[14] SMP-HARD loser restoration after the winner left works on Folia
[15] Servers like Leaf, Purpur, and Pufferfish are no longer mis-detected as Folia

### GUI POLISH

[16] Pages, sorts, filter changes and live opponent-inventory updates now refresh in place. Your cursor stays where it was instead of snapping to the centre on every page flip
[17] Menu transitions are smoother on Folia (no more 1-tick flicker between menus)

### TAB COMPLETION

[18] /duel and /dueladmin now suggest every subcommand the plugin actually accepts. Press Tab and you see the full menu instead of an empty list
[19] /queue suggests 1v1, 2v2, 4v4, ffa instead of returning nothing
[20] /duel party is fully tab-completable: invite, accept, deny, leave, kick, disband, transfer, list, queue
[21] Multi-mode arena setup commands (arena setup, arena addmode, arena removemode) now suggest the mode names too

### SMALL THINGS

[22] Pending party invites now expire on their own instead of piling up until you log out
[23] When a translation key is missing in messages.yml, players no longer see the raw key in chat. The admin gets a single warning in the console instead
[24] Permissions list in plugin.yml updated

### CONFIG

[25] New match-modes block: which modes are enabled, the default mode, FFA min/max players, team auto-balance toggle, glow colours, and win-condition rules
[26] New party block: enabled toggle, max party size, invite timeout, cross-server flag (reserved), disband-on-leader-quit, and leader transfer toggle
[27] Nothing in your existing config breaks. 1v1 servers can ignore both new blocks

### DOCUMENTATION

[28] New pages: Match Modes and Party System.
[29] Cleaned up an old broken section in the placeholders page

### COMPATIBILITY

[30] Verified on Paper 1.21.1, Paper 1.21.11, Paper 26.1+, Folia 1.21.x. The same single jar works on all of them

### FOR SERVER ADMINS

If your survivor was getting stuck on a frozen "Returning to Hub" bar after their opponent quit, this fixes it
If your console was full of Sound errors on Paper 1.21.4+ or 1.21.11, this fixes it
If your startup banner said WorldEdit was missing even with FAWE installed, this fixes it
Tab completion is fixed everywhere. Press Tab in /duel, /dueladmin, or /queue and you'll see the real menu
2v2 / 4v4 / FFA / parties land in stages. Data and commands are ready in this version, the actual team match flow ships in the next one. 1v1 stays exactly as it was
Just drop the new jar in. Your database upgrades itself on first start

---

### Fixed

  • SMP-HARD: items duplicated when a loser typed /duel leave. Inventory is now cleared safely on every code path
  • SMP-HARD: players sometimes got stuck on the "You Died" screen and couldn't respawn. They now respawn correctly
  • Servers like Leaf, Purpur and Pufferfish were being mistaken for Folia. They are now correctly identified
  • Plugin crashed at startup if WorldEdit wasn't installed. WorldEdit is now fully optional
  • WorldEdit, FAWE, and PlaceholderAPI sometimes weren't detected on startup. Detection now waits until the server is ready
  • Clickable chat messages and some text-formatting tags were being stripped. They render correctly now
  • Various startup compile/build issues fixed

### Improved

  • Internal database setup unified between the two storage paths (no more drift)
  • WorldEdit-related code restructured so the plugin loads safely with or without WorldEdit
  • Arena world initialization now waits for the server to finish booting
  • Startup console output cleaned up

### Added

- New plugin-integration manager that handles WorldEdit, FAWE and PlaceholderAPI detection in one place

---

## Earlier development

Earlier development changes (before structured release notes):

  • /duel leave now works correctly
  • Match-timeout teleport now sends you to the right place after the match expires
  • SMP-HARD restoration no longer leaves placeholder values showing N/A
  • Various item-restoration race conditions fixed
[1] Full Folia support
[2] Fixed duplicate config
[3] Fixed match summary display
[4] Fixed platform detection
[5] Fixed world creation errors
[6] Fixed chunk loading spam
[7] Fixed entity removal errors
[8] Fixed scoreboard errors
[9] Improved player state restoration
[10] Enhanced arena system
[11] Reduced console spam
[12] Performance optimizations
  • Fixed Random teleporting and double match starting
  • Some other fixes
Buy a license now
$11.99
EULA
Standard EULA
Use on any projects you own with attribution
Support
Standard
Includes:
Download the resource
Access new updates
Support from the creator
Support duration
Lifetime
Share and earn
Refer this resource and earn a 10% commission.
4,450 Views
32 Purchases
34 Downloads
Jul 7, 2025 Published
Jul 7, 2026 Updated
5.00 star(s)
Average rating (1)
14.6 MB File size
Open source
  1. No
DRM-free
  1. No
Unobfuscated
  1. No
AI use in marketing
No
AI Content Disclosure
Used Al to polish configuration, simulate high-load scenarios for testing, and help identify potential bugs.
Type
  1. Gameplay
  1. World
  1. GUI
Game mode
  1. Survival & SMP
  1. KitPVP
Game mode
  1. Survival
  1. KitPVP
Game mode (legacy)
  1. Survival
  1. KitPVP
Supported software
  1. Spigot
  1. Paper
  1. Folia
  1. Purpur
Supported versions
  1. 26.1
  1. 1.21.11
  1. 1.21.8
  1. 1.21.5
  1. 1.21.4
Supported languages
  1. English
Includes DRM
Yes
Source access (legacy)
Closed source & obfuscated
Creator
Owner
Recommended for you
A modern, high-performance, and network-ready punishment system.
5.00 star(s) 1 ratings
36 purchases
4.50 star(s) 3 ratings
6 purchases
Host all type of events your way - modular arenas, GUI setup, cross-server ready.
Not yet rated
1 purchase
RPG Skill Tree Plugin with Custom Enchant Skills
Not yet rated
1 purchase
#1 BuiltByBit Plugin ~ Protects your server from crash packet exploits ~ Folia Support
5.00 star(s) 140 ratings
4,231 purchases
Share and earn
Refer this resource and earn a 10% commission.
4,450 Views
32 Purchases
34 Downloads
Jul 7, 2025 Published
Jul 7, 2026 Updated
5.00 star(s)
Average rating (1)
14.6 MB File size
Open source
  1. No
DRM-free
  1. No
Unobfuscated
  1. No
AI use in marketing
No
AI Content Disclosure
Used Al to polish configuration, simulate high-load scenarios for testing, and help identify potential bugs.
Type
  1. Gameplay
  1. World
  1. GUI
Game mode
  1. Survival & SMP
  1. KitPVP
Game mode
  1. Survival
  1. KitPVP
Game mode (legacy)
  1. Survival
  1. KitPVP
Supported software
  1. Spigot
  1. Paper
  1. Folia
  1. Purpur
Supported versions
  1. 26.1
  1. 1.21.11
  1. 1.21.8
  1. 1.21.5
  1. 1.21.4
Supported languages
  1. English
Includes DRM
Yes
Source access (legacy)
Closed source & obfuscated
Creator
Owner
Recommended for you
A modern, high-performance, and network-ready punishment system.
5.00 star(s) 1 ratings
36 purchases
4.50 star(s) 3 ratings
6 purchases
Host all type of events your way - modular arenas, GUI setup, cross-server ready.
Not yet rated
1 purchase
RPG Skill Tree Plugin with Custom Enchant Skills
Not yet rated
1 purchase
#1 BuiltByBit Plugin ~ Protects your server from crash packet exploits ~ Folia Support
5.00 star(s) 140 ratings
4,231 purchases
Top