Party Extension for Duels Optimized 1.9.0
A plug-and-play party extension for Duels Optimized - supports party team & party FFA modes.
1.9.0
DuelsFlexParty v1.9.0
Kit-Arena Binding Fix & Cleaner Spawn Management
✦ Bug Fix
- Kit-bound arenas now respected FlexParty matches no longer try to start in arenas that are bound to a different kit in Duels. The arena lookup now checks each arena's kit binding before picking one, and risk-inventory matches treat every arena as available (since they don't use kits). If anything ever goes wrong reading an arena's binding, the system falls back to allowing the arena rather than blocking it, with a one-time log entry so you know
✦ New Feature: Targeted Spawn Removal
/flexparty removespawns <arena> <all|index>removes spawns precisely instead of all at onceallclears every spawn point for that arena<index>(1-based) removes a single spawn by its number- Running the command with no second argument shows usage only, so you can't accidentally wipe spawns by pressing Enter early
- Tab completion suggests
alland the valid index range for the arena - When the last spawn is removed, the arena entry is dropped automatically
✦ Changes
/flexparty setspawns <arena> clearremoved use the new/flexparty removespawnscommand instead, it's clearer and safer- Spectator spawn clear untouched
/flexparty setspawns <arena> spectator clearstill works exactly the same
✦ New Messages
spawn-removedremovespawns-usageremovespawns-invalid-indexremovespawns-out-of-rangeremovespawns-nonehelp-removespawns,help-removespawns-index
All auto-migrated on reload, no manual edits required.
Update now for proper kit-bound arena handling and cleaner, safer spawn management.
Drop in the new jar and restart, no config changes needed.
1.8.0
DuelsFlexParty v1.8.0
Shulker Boxes Allowed Mid-Match
✦ New Feature: Mid-Match Shulker Access
- Shulker boxes can now be opened inside an active match, even if Duels or other plugins would normally block them
- Perfect for risk-inventory loadouts where players bring a shulker full of gear and need to swap mid-fight
- Queue restriction still applies,
container-restriction-in-queuewill keep blocking shulkers before the match starts if you've enabled it - Disable with
allow-shulkers-in-match: falseif you want shulkers blocked during matches too
✦ New Config
allow-shulkers-in-match: true
Auto-migrated on reload, no manual edits required.
Update now to let players crack open shulkers mid-fight without third-party plugins getting in the way.
Defaults to on, queue-time restrictions remain untouched.
1.7.0
DuelsFlexParty v1.7.0
Manual Party Start, Begin Matches Without Filling Every Slot
✦ New Feature: Hybrid Manual Start
/flexparty start(alias/party start) lets the party leader kick off the match countdown without waiting for every slot to fill- Auto-start-when-full still works exactly the same, this is purely additive
- When the countdown is started manually, it won't auto-cancel if the party hasn't hit max players, partial-party starts are first-class
- Optional minimum, by default the leader needs at least
min-players(default 2) in the queue before/startis allowed - Teams mode honors your existing
odd-team-handlingconfig,denyblocks odd counts,allowdistributes 50/50 - Tab completion only suggests
startwhen manual start is enabled
✦ New Config
manual-start:
enabled: true
respect-min-players: true # leader needs at least min-players in queue
New messages added:
start-successstart-disabledstart-already-countingstart-not-enough-playershelp-start
All auto-migrated on first reload, no manual edits required.
Update now to let party leaders launch matches the moment the squad is ready, without waiting for the last slot to fill.
Auto-start-when-full keeps working untouched, manual start defaults to enabled with a 2-player floor.
1.6.3
DuelsFlexParty v1.6.3
Click-to-Join "Party Not Found" Race Fix
✦ Bug Fix
- Click-to-join no longer fails with "party not found" in some cases (especially during world transitions on Paper or right after a player logs in), clicking the join broadcast immediately would show "party not found" even though the party clearly existed, retrying a few seconds later worked. This was caused by the host's name briefly going unresolvable while their player session was settling. Host names are now cached when the party is created, so click-to-join, party access checks, broadcasts, and
/flexparty infoall resolve instantly without depending on a live player lookup
Update now for instant, reliable click-to-join on Paper and after-login flows.
No config changes needed, drop in the new jar and restart.
1.6.2
DuelsFlexParty v1.6.2
XP Save/Restore, Queue Container Lock & Cross-World Inventory Fixes
Combined 1.6.1 + 1.6.2 drop.
✦ New Features
1. XP Save & Restore
- Player XP level and progress are now saved alongside inventory and restored after matches
- Applies to both kit mode and risk-inventory mode, when their respective
save-inventorytoggles are enabled - No more losing levels to a match
2. Queue Container Restriction
- Optionally block opening chests, ender chests, shulker boxes, barrels, and trade menus while waiting for a match to start
- Stops players from stashing items in storage during the countdown
- Config:
container-restriction-in-queue: false(default off)
3. Force-Close GUIs on Match Start
- Any open menu (trade, chest, crafting) is automatically closed before the inventory snapshot is taken
- Items sitting in trade or crafting slots get returned to the player's inventory first, so the save always matches what they actually had
✦ Bug Fixes
- Inventory now saved at the right time on Paper and Purpur, the inventory save was happening too late, after the cross-world teleport to the arena, which let other server events modify or empty the inventory before it was captured. Now saved first, so the restored inventory matches what the player had going in
- Cross-world restore buffer all 5 restore paths (match end, death elimination, spectator leave, disconnect rejoin, player join) now add a small buffer between the teleport and the inventory restore, so the server doesn't overwrite the restored items on the same tick
- Arena no longer released early the arena is now released back to Duels a few ticks after match end instead of immediately, so Duels' cleanup can't fire before the inventory restore finishes
✦ New Config
container-restriction-in-queue: false
Auto-migrated on reload, no manual edits required.
✦ Version Breakdown
| Version | Focus |
|---|---|
1.6.1 |
Cross-world inventory save/restore fixes for Paper/Purpur, deferred arena release |
1.6.2 |
XP save/restore, queue container restriction, force-close GUIs on match start |
Update now to save player XP through matches, lock down inventory exploits in queue, and get rock-solid inventory restore on Paper, Purpur, and forks.
Container restriction defaults to off, existing setups behave exactly as before until you opt in.
1.6.0
DuelsFlexParty v1.6.0
Party Whitelist/Blacklist & Chat-Based Player Count Input
✦ New Feature: Party Whitelist & Blacklist
- Server owners pick the mode with
party-access.mode:none,whitelist, orblacklist - Players manage their own lists:
/fp whitelist add/remove/list/clear/fp blacklist add/remove/list/clear
- Lists persist across party creations, set them once and they stick
- Blocked players get a configurable title, message, and sound
- Using a command for the wrong mode tells you which mode is currently active
✦ Bug Fix
- Player count input the anvil input was instantly closing on some servers since the server-side anvil doesn't support typing. Replaced with chat input, click the paper, type a number in chat, and the GUI reopens with the new value. Type
cancelto go back
✦ New Config
party-access:
mode: none # none, whitelist, or blacklist
- Plus configurable blocked-player title, message, and sound, all auto-migrated on reload
Drop in the new jar and restart, new config keys are added automatically.
1.5.0
DuelsFlexParty v1.5.0
Party Disband & Kick, Better Player Count Controls & NotBounties Support
✦ New Features
1. Party Disband
/flexparty disbandremoves everyone from the queue and destroys the party- Leader only, cancels any active countdown, all members are notified
2. Party Kick
/flexparty kick <player>removes a specific player from the queue- Leader only, tab completion lists current members
- Kicked player and leader both get a message, you can't kick yourself (it suggests disband instead)
3. Social Group Behavior on Kick
- Control what happens to a player's social group when they're kicked, configurable under
social-groups.party-kick kick-leader(defaultcascade) kicking a group leader can pull their whole group from the queue, or just themkick-member(defaultmember-only) kicking a regular member can cascade to the whole group, or remove just that player- Cascade never removes the party leader doing the kicking, even if they share a group with the kicked player
4. Better Player Count Controls
- New
-5 / +5buttons flanking the existing-1 / +1in the creation GUI (teams mode steps by 10 to keep numbers even) - Click the player-count paper to open an anvil input and type an exact number, validates range and even-number rules for teams mode
5. NotBounties Integration
- Optional soft dependency, blocks bounty claims for kills during FlexParty matches
- Enable with
notbounties.block-bounty-claim: true, works fine if NotBounties isn't installed
✦ Changes
- GUI strings moved to gui.yml all menu names, lore, and titles now live in a separate
gui.yml. Existing customizations are migrated automatically on upgrade /flexparty helpnow lists the new disband and kick commands
✦ New Config
notbounties:
block-bounty-claim: false
social-groups:
party-kick:
kick-leader: cascade # cascade or leader-only
kick-member: member-only # cascade or member-only
- Plus new disband/kick messages, all auto-migrated on reload
Drop in the new jar and restart, gui.yml is created and your existing GUI customizations carry over automatically.
1.4.8
DuelsFlexParty v1.4.8
Match End Polish, Group Auto-Join Fixes, Configurable Sounds & 1.21.3+ Compatibility
Combined 1.4.7 + 1.4.8 + 1.4.8-2 + 1.4.8-3 drop.
✦ New Features
1. Configurable Match-End Sounds
- Separate win/lose sounds with volume and pitch
- Win default:
ENTITY_PLAYER_LEVELUP, lose default: empty (disabled) - Config under
match-end-sound.winandmatch-end-sound.lose(.sound,.volume,.pitch)
2. Configurable Title Duration
match-end-title.fade-in,.stay,.fade-outin ticks (20 = 1s)- Defaults:
10 / 60 / 20
✦ Bug Fixes
- 1.21.3+ Sound API crash string-based
playSoundreplacesSound.valueOf(). Fixes theIncompatibleClassChangeErrorthat was killing the match-end routine (and breaking titles as a side effect) on MC 1.21.3+ servers. Countdown sound rewritten the same way - getWinners() in teams mode returns all winning team members (including eliminated), not just alive. Dead teammates now see the win title and hear the win sound
- Killer not seeing win title title and sound are now deferred 2 ticks after the death event so the killer receives "Match Won!" properly
- Match-end titles for everyone all players in the match (winners, losers, spectators, eliminated) now get the title, previously only one team member saw it
- Group auto-join in cleanup window
isInActiveMatch()replacesisInMatch(), so members in the ended-match delay window can auto-join new parties - End-match restore guard deferred restore task now checks if the player moved to a new match before running, no more teleporting players out mid-match
- Risk-inventory subtitle scope "You have X seconds to pick up items" only shows for risk-inventory matches, kit mode shows the title alone
- Broadcast count + gate party creation announcement uses group size for
%count%(group of 2 in a 4-player party shows 2/4 instead of 1/4), and the broadcast is skipped entirely if the group already fills the party
✦ Improvements
- AutoJoin debug logging
[DuelsFlexParty] AutoJoin:lines in console show why members were skipped (offline, in queue, in active match, group null)
✦ Config
match-end-title:
fade-in: 10
stay: 60
fade-out: 20
match-end-sound:
win:
sound: ENTITY_PLAYER_LEVELUP
volume: 1.0
pitch: 1.0
lose:
sound: "" # empty = disabled
volume: 1.0
pitch: 1.0
Auto-migrated on reload, no manual edits required.
✦ Version Breakdown
| Version | Focus |
|---|---|
1.4.7 |
Titles show for everyone, configurable title duration, broadcast slot count fix |
1.4.8 |
Configurable sounds, getWinners() teams fix, killer title delay fix, auto-join + end-match guards, risk-inventory-only subtitle |
1.4.8-2 |
MC 1.21.3+ Sound API crash hotfix |
1.4.8-3 |
Broadcast count uses group size fallback, full-group broadcasts gated off, autoJoin debug logging |
Drop in the new jar and restart. Compatible with MC 1.21.3+.
1.4.6
DuelsFlexParty v1.4.6
Semantic Versioning, Match End Titles, Placeholders & CombatLogX Bypass
✦ New Features
1. Match End Titles
- Winners see a configurable title ("
Match Won!") with a subtitle showing how many seconds they have to pick up items - Losers see a separate title ("
Match Over") - Config keys:
match-end-title-winmatch-end-subtitle-win(supports%seconds%)match-end-title-losematch-end-subtitle-lose
- Set any to empty to disable that line
2. New Placeholders
%flexparty_warmup_remaining%seconds left in FFA warmup%flexparty_match_end_delay%config value%flexparty_match_time_limit%config value in minutes
3. CombatLogX Bypass
- Soft dependency, automatically prevents combat tagging for players in active FlexParty matches
- No config needed, activates when CombatLogX is detected
4. Config Migration Update Log
- New
update-log.ymltracks every config key added by auto-migration with version and default value - Helps debug missing config issues on customer servers, you can see at a glance what was added and when
- Config migration errors are now logged instead of silently swallowed
✦ Bug Fix
- Slot count in queue messages
joined-queue,player-joined, and the party creation broadcast now show the correct player count including auto-joined group members. Previously these messages fired before group members were added
✦ Changes
- Semantic Versioning adopted all future releases follow MAJOR.MINOR.PATCH starting from this version
- Internal
DuelPartyExtension.VERSIONconstant is now used throughout instead of hardcoded version strings
Drop in the new jar and restart, new config keys are added automatically and tracked in update-log.yml.
1.4.5.5
DuelsFlexParty v1.4.5.5
PlaceholderAPI Support, Team Colors for TAB & Nametags
✦ New Feature: PlaceholderAPI Integration
Use FlexParty team colors with TAB, nametag plugins, or anything that supports PlaceholderAPI.
Two Color Modes
- Absolute team 1 is always one color, team 2 is always another, everyone sees the same. Good for classic "red vs blue" setups
- Relative your teammates always show as one color and enemies as another, no matter which team you're on. In FFA, everyone else shows as enemy color
Player Placeholders
%flexparty_in_match%whether the player is in a match%flexparty_team_number%1 or 2%flexparty_team_color%the player's team color code%flexparty_match_mode%FFA or TEAMS%flexparty_match_kit%kit name%flexparty_is_alive%alive or eliminated%flexparty_is_spectator%spectating or not
Relational Placeholders
Perfect for TAB nametag prefixes and per-viewer coloring.
%rel_flexparty_team_color%color of the player you're looking at, based on whether they're on your team%rel_flexparty_is_ally%true if same team%rel_flexparty_is_enemy%true if different team or FFA
✦ Config
- All colors are configurable in
config.ymlunderteam-colors - PlaceholderAPI is optional, the plugin works fine without it, these placeholders just won't be available
- Auto-migrated on reload, no manual edits required
Swap the jar and restart. Install PlaceholderAPI if you don't have it already to enable team color placeholders.
1.4.5.4
DuelsFlexParty v1.4.5.4
Social Groups + Inventory Save/Restore
Combined 1.4.5.2 + 1.4.5.3 + 1.4.5.4 drop, the full Social Groups system with inventory fixes in one release.
✦ New Feature: Social Groups
A persistent group system, form a squad once and queue together every match without re-inviting.
Invites & Joining
/group invite <player>send an invite/group accept <player>accept (player must be in the spawn area if WorldGuard region is set)/group deny <player>deny- Invites expire after 60 seconds (configurable)
Queueing Together
- Group leader runs
/flexparty createlike normal, the whole group is pulled into the queue automatically - If anyone leaves the queue, the whole group is pulled out too
- The group itself stays intact, just queue again, no re-inviting needed
- Only the leader can create or join games, everyone else follows along
Teams Mode Priority
- Group members get priority placement on the same team
- Queue up 2v2 with a friend, you'll be on the same side
- Uses a greedy largest-group-first assignment so bigger groups stay together
- When a group is too large for one side (e.g. 4-player group in 2v2 or 3v3), members are split across teams using balance logic instead of all dumped on one team
Group Command Blocking
- Separate blacklist/whitelist for group-only contexts
- Trigger on group join, or only when entering a queue, your choice
Disconnect Handling
- Disconnecting removes the player from the group, everyone gets notified
- If the leader disconnects, leadership passes to the next member automatically
- Groups auto-disband when they drop to 1 person
✦ Risk-Inventory Save Option
- New config:
risk-inventory.save-inventory: false(default off) - When enabled, the original inventory is saved before the match and restored on all exits
- Disconnects skip item drops while this is on, items are restored on rejoin instead
- Lets you offer "soft" risk-inventory rounds where players don't actually lose their gear
✦ Bug Fixes
- Kit-mode inventory save/restore
beginMatch()was clearing inventory to equip kits but never saving the original, players ended up with an empty inventory after match end or death. Now saved before match start and restored on all exit paths: match end (winner + spectators), death elimination (non-spectating),/spec leave, disconnect and rejoin. Restore logic simplified, if a saved inventory exists it's restored, otherwise falls back to old behavior - Slot count in announcement the player count in the party announcement was hardcoded to
1, now uses%count%placeholder and reflects group auto-joins - Usage messages now respect command alias typing
/group inviteno longer shows "Usage: /socialgroup invite <player>", it shows the alias you actually used
✦ Commands
/group invite <player>send an invite/group accept <player>accept an invite/group deny <player>deny an invite/group leaveleave your current group/group disbandleader only, dissolve the group/group kick <player>leader only/group infoview current group details- Aliases:
/sgroup,/socialgroup,/socialg
✦ Config
save-inventory: true # kit mode (default on)
risk-inventory:
save-inventory: false # risk mode (default off)
social-groups:
enabled: false # off by default
- Social Groups feature is off by default, enable with
social-groups.enabled: true - Configurable: max group size, invite expiry, cooldowns, command blocking rules
- ~40 new group-related messages for full customization
- All config keys are auto-migrated on reload, no manual edits required
Swap the jar and restart. Set social-groups.enabled: true to turn on groups, all other keys are added automatically.
1.4.5.1
DuelsFlexParty v1.4.5.1
Faction PvP, Disconnect Recovery, Arena Reservation & Spectator Fixes
✦ New Features
1. Faction/Team PvP Override
- Same-faction or same-team players can now fight in FlexParty matches
- Overrides external faction/team plugin PvP blocking when both players are in the same match
- FlexParty's own rules (warmup, friendly fire, match ended) still apply on top
- Config:
force-allow-combat: false(set totrueto enable)
2. Arena Reservation
- FlexParty now reserves the arena while a party match is running, Duels can no longer send
/duelplayers into the same arena - Config:
reserve-arena: true(on by default)
3. Native Spectator Teleport Restriction
- Spectators can no longer teleport to other players via the spectator hotbar
- Built in natively, no external plugin required anymore
✦ Bug Fixes
- 3-player FFA respawn killing the second player no longer respawns them in the arena in survival, they're now teleported back correctly on match end
- Disconnect item drops in risk-inventory matches, disconnecting players now drop their items at their arena location instead of having them cleared, other players can pick them up
- Persistent location restore player locations are saved to disk when a match starts, so a server crash or restart no longer leaves players stranded, they're teleported back on rejoin
✦ New Config Options
force-allow-combat: false
reserve-arena: true
Drop in the new jar and restart, config keys are added automatically.
1.4.4.2
DuelsFlexParty v1.4.4.2
Spectator Reliability Pass + Instant Return + Boundary Limits
✦ Bug Fixes
1. Spectator Mode Activation, Reworked
- Root cause identified:
setGameMode(SPECTATOR)was being overridden during the respawn cycle - Now hooks into
PlayerRespawnEventto set the respawn location to the spectator spawn, then defersGameMode.SPECTATORby 1 tick after respawn completes - Much more reliable, works with the respawn system instead of racing it
2. Disconnect Restore Hardening
- Rejoin delay increased from 1 to 5 ticks to allow full player init before restoration
- Health, food, and active potion effects are now reset on rejoin
pendingSpectatorsis cleaned up on quit to prevent stale state from carrying over
✦ New Features
3. Instant Spectator Return on Match End
- New config:
spectator-on-death.instant-return-on-end: true - Spectators get a 1-tick teleport on match end so they don't sit watching dead air
- Alive players keep the normal
match-end-delayfor item pickup
4. Spectator Boundary Limit
- New config:
spectator-on-death.max-distance: 50 - Stops spectators flying off into the world to scout map areas they shouldn't see
- Checks horizontal (XZ) distance from arena center on block-change moves only (performance-safe, no per-tick cost)
- Teleports the spectator back and shows a warning when the limit is exceeded
- Set to
0for unlimited range
✦ New Config Options
Auto-migrated on reload, no manual edits required.
spectator-on-death:
instant-return-on-end: true
max-distance: 50
Update now for rock-solid spectator activation, faster match-end returns, and arena-bound spectators.
All changes layer on top of v1.4.4.1 with safe defaults.
1.4.4.1
DuelsFlexParty v1.4.4.1
Spectator Mode + Arena Spawn Polish + Hotfix Roll-up
Combined 1.4.3 + 1.4.4 + 1.4.4.1 drop, the full spectator system in one release.
✦ New Features
1. Spectator Mode on Death
- Eliminated players now enter
GameMode.SPECTATORinstead of being teleported back - Available in 3+ player matches only, smaller matches still teleport back instantly
- Lets eliminated players watch the rest of the match play out
2. /flexparty spec leave
- Exit spectator mode early at any time
- Returns the player to their pre-match location
- No need to wait for the match to end if you'd rather move on
3. Spectator Disconnect Handling
- If a spectator disconnects mid-match, they're restored to survival automatically on rejoin
- No more getting stuck in spectator mode after a crash or relog
4. Smart Spectator Spawn Location
- Spectators now teleport to the arena center (average of all spawn points) instead of staying at their death spot
- Optional per-arena spectator spawn, set it manually with
/flexparty setspawns <arena> spectator - Clear a custom spectator spawn with
/flexparty setspawns <arena> spectator clear - Falls back to auto-center if no custom spawn is set
- All spectator spawns stored in
arenas.yml
5. Left-Spectator Match-End Notification
- Players who used
/spec leavenow receive the normal match-end message plus an appended context line when their match finishes - Opt-in via
spectator-on-death.notify-on-match-end(defaultfalse) - New message key:
spectator-match-ended
✦ Bug Fixes
- Spectator mode now applies reliably previously, dying could teleport you to the arena center without actually entering spectator mode, you'd still be able to run commands and wouldn't get the spectator message. Fixed
- Disconnect-during-match restoration players who disconnect during a match are now teleported back to their previous location on rejoin (previously this only worked for spectators)
- Risk-inventory logout exploit closed disconnecting during a risk-inventory match now clears your inventory, no more keeping items by logging out
- Double teleport fix players who used
/spec leavemid-match were getting teleported again when the match ended.endMatch()now skips players already removed fromplayerMatches
✦ New Config Options
Auto-migrated on reload, no manual edits required.
spectator-on-death:
enabled: false
min-players: 3
notify-on-match-end: false
New messages added:
spectator-mode-startspectator-leftnot-spectatingspec-usagespectator-match-ended
✦ New Commands
/flexparty spec leaveexit spectator mode early/flexparty setspawns <arena> spectatorset a custom spectator spawn for an arena/flexparty setspawns <arena> spectator clearremove the custom spectator spawn (falls back to auto-center)
Update now for the full spectator system with all known issues patched.
Disabled by default, flip spectator-on-death.enabled: true to turn it on.
1.4.2
Latest
Statistics
Views
Purchases
Downloads
File size
Published
Updated