ConquestDuels icon

ConquestDuels -----

Literally The Best FREE Duel Plugin




♻️ ConquestDuels Update – Smarter Reload & Team Protection
✅ Improved /duels reload behavior:
  • Dead players are now force-respawned and safely teleported back
  • All boss bars (including animated ones) are now cleared on reload
  • GUI/editor states and matchmaking queues fully reset
  • Recovering duel sessions now handles teleportation, state restore, and clean unregistering
️ Added teammate PvP protection during duels:
  • Prevents players from damaging their own team during an active duel
  • Supports both melee and projectile (arrow/snowball/etc.) attacks
  • Optional message when damage is blocked
This update ensures cleaner mid-game reloads, safer state restoration, and fairer fights — no more accidental friendly fire!
Thanks as always for testing, reporting, and playing!
----------, May 21, 2025

[​IMG]
⚔️ ConquestDuels – Command Restrictions Update
We're excited to introduce a powerful new feature for server owners who want more control over player actions during duels!
️ Command Whitelist System
Prevent abuse, cheating, or unfair advantages by blocking all non-whitelisted commands for players who are actively in a duel.
  • While a player is in an active duel session, any command they try to use will be intercepted.
  • If that command is not in your config.yml whitelist, it will be cancelled — unless they have the
    Code (Text):
    conquestduels.admin.duel.bypass
    permission.
  • This feature is perfect for ensuring fair PvP — no more using /spawn or /heal mid-fight!
✅ Configuration Example
Add this to your
Code (Text):
config.yml
:
Code (YAML):

command-restrictions
:
  restrict-during-duel
: true
  whitelist
:
   - duel
    - msg
    - r
 
Permission Node
Give players the following permission to bypass the command restriction:
Code (Text):
conquestduels.admin.duel.bypass
Customizable Message
If a command is blocked, players will see the message:
Code (Text):
system.commands-disabled-in-duel
Make it shine with sounds, particles, and MiniMessage formatting in your generalMessages.yml.
Need More Power?
Combine this feature with world restrictions for full control over where and how duels operate.
Fair Duels, Zero Exploits. Update Today!
----------, May 18, 2025

✅ FIX: Citizens NPCs Triggering Player Interaction Events
----------, May 16, 2025

✅ Update: Citizens NPC Protection for Duel Interactions
We've patched a key issue where duel interactions were triggering on NPCs created by the Citizens plugin. This led to unintended duel menu openings when right-clicking or attacking NPCs.
What’s Fixed:
  • All duel-triggering interactions now properly ignore Citizens NPCs.
  • PlayerInteractEntityEvent, EntityDamageByEntityEvent, and ray-trace triggers are all filtered.
  • Added a helper method isNPC(Player) for centralized Citizens checks.
  • Updated pom.xml to include the Citizens API as a provided dependency.
----------, May 14, 2025

Small improvements to code
----------, May 13, 2025

ConquestDuels is no longer in BETA!
Team queueing, kit voting, session persistence, live menus — all systems are GO.

✅ What's New in This Release
  • [] Full Kit Voting System — Players in team queues can now vote on their preferred kit using a beautiful in-game menu, complete with vote counts and live refreshes. All selections persist using Bukkit's PersistentDataContainer.
    [
    ] Team Queueing Enabled — Queue with your party or premade team for 2v2 and beyond. Our new system uses clean identifiers and context keys to scale smoothly for multiplayer duels.
    [] Kit Vote Menu Rebuilt — Fully rewritten layout manager now supports pagination, dynamic layout slots, and custom formatting (including {kit_name} and {total_votes_for_kit} in lore).
    [
    ]️ Menu Persistence & Stability — GUI switching now respects context and cooldowns. Menus won’t close or redirect unexpectedly during kit votes or duel setups.
    [] Confirm Menus Improved — Kit selections, targets, and context keys are now reliably passed through to confirmation, with proper fallbacks and cancel actions.
    [
    ] Smarter Metadata Handling — All vote buttons now embed kit_id tags to support universal logic in click handlers, minimizing code duplication.
  • Vote Effects & Sound Hooks — Kit selection and voting now play custom effects for that perfect feedback loop.

Under-the-Hood Upgrades
  • []Modular GUI system using DuelMenuMeta and DuelMenuHolder for all inventory logic
    [
    ]Cooldown-managed GUI clicks to prevent spamming and race conditions
    []Safe metadata extraction with error handling
    [
    ]Navigation buttons updated for all menu types (including KIT_SELECTOR and KIT_VOTE)
    []Live menu re-opening after vote cast via KitVoteMenuManager.open(...)
    [
    ]Support for "own-inventory" kit type with consistent key tracking
  • Context-aware ConfirmMenu logic: challenge:[target]:[mode]:[arena]:[kit]

How to Use Kit Voting

  1. []Join a team queue (2v2+).
    [
    ]When a match is preparing, the vote menu will open.
    []Click any kit to vote — even "Use Your Own Inventory".
    [
    ]The menu refreshes live with updated vote counts.
  2. Once a vote wins, all players will duel using that kit.

Tested and Production-Ready
  • []Live tested in 1v1 and team queues
    [
    ]No duplicate queue joins or invalid kits
    []Clean vote session tracking per arena+gamemode
    [
    ]Automatic fallback to "own-inventory" if no kits configured
  • Session cleanup on player quit
----------, Apr 30, 2025

⚔ ConquestDuels Update - Major Enhancements! ⚔

  • Added full per-arena customization for queue icons! Now each arena has its own icon: section inside its data.yml, allowing different material, name formatting, lore lines, and enchant effects!
    If missing, it safely falls back to your global default icon.
  • Dynamic Arena Button Generation! Arena Selector GUI now uses your arena's personal settings to build the item, dynamically showing queue sizes, statuses, and more.
  • ✅ Queue Handling Improvements Players are now automatically kicked from the queue if they leave or teleport into a disallowed world.
    Also added proper messages when a player joins or leaves a queue!
  • Safe Data Loading and Saving We improved arena data.yml saves to:
    • Preserve custom sections (like icon).

    • Write "icon" before spawn data to prevent scrolling issues.

    • Handle missing sections gracefully without throwing errors.
  • New Commands in Help Page Updated /duel help with /duel queue join and /duel queue leave commands, complete with hover and click-to-suggest support.
  • Queue Rejoining Prevention Players can no longer accidentally rejoin a queue they are already inside of — the system now smartly checks and prevents this, sending a friendly "already in queue" message.
  • Player Feedback All join, leave, kick, and timeout actions now send clear and immediate feedback to players, with polished message formats.
  • Crash Fixes Fixed an important NullPointerException caused when an arena was missing an icon section — now defaults are automatically used, keeping the server stable and error-free.
  • Clean BBCode & Better Visual Feedback We continue enhancing command feedback (help pages, actionbars, particles, sounds) to make every interaction smooth and satisfying!

Thanks for supporting ConquestDuels! More amazing updates are coming soon. ⚔✨
----------, Apr 28, 2025

Update: ConquestDuels - Major Queue System Expansion!

⚔ New Features:

✔️ Duel Queue System Implemented

  • Players can now use /duel queue join <gamemode> <arena> to enter matchmaking queues.

  • Players can leave queues anytime using /duel queue leave.

  • Full support for Arena assignment and Gamemode restrictions.
✔️ World Restrictions for Queues

  • If a player enters a non-allowed world, they are automatically kicked from the queue.

  • Seamless integration with command-restrictions in the config:
    • Whitelist Worlds option now applies to both commands and queue system.
✔️ Queue Leave & Join Messages

  • All queue actions now send dynamic MiniMessage-based messages:
    • Session expired

    • Left queue

    • Abandoned queue

    • Arena not enabled

    • Gamemode not supported, and more!
✔️ Abandon Handling During Reload

  • When an admin uses /duel admin reload, all players in queues are notified that their queue session was abandoned.

  • Both queue models and arena queue counters are properly cleared.

  • No more stuck players in phantom queues!
✔️ Proper 'Already In Queue' Handling

  • Players trying to join a queue they are already in now get a friendly "Already queued" message.

  • Prevents duplicate entries or queue exploits.
✔️ Auto-Tab Completion Improvements

  • /duel queue join now fully supports tab-completion:
    • Suggests available gamemodes and arenas dynamically.
  • /duel queue leave and /duel queue join commands are now first-class citizens in the tab system.
✔️ Help Page Expansion

  • The /duel help menu now includes:
    • /duel queue join description

    • /duel queue leave description
  • Autofill click suggestions are available from help components.
Technical Changes:

  • Added QueueMessageModels enum for clean message references.

  • Extended ArenaQueueManager to properly clear queues and abandon players.

  • Added new QueueWorldRestrictionListener for real-time world checking.

  • Enhanced GeneralUserCommands to support smarter queue join validations.

  • Updated AutoTabManager for all queue subcommands.

  • Updated CommandManager to fully register queue commands properly.
----------, Apr 28, 2025

ConquestDuels v2.4.0
The Ultimate Dueling Experience — Reforged.
[/center]
⚔️ 2.4.0 "Menu Mastery" Update
This is our biggest quality-of-life update yet!
We rebuilt the entire menu flow to deliver a buttery smooth, intuitive dueling experience.
⤵️ Highlights
  • Dynamic Pagination (Gamemodes & Arenas)
    Menus now automatically split across pages when needed.
    No more manual slot limits! Whether you have 5 gamemodes or 100 arenas — ConquestDuels now dynamically paginates based on your `rows-per-page` config!
    Example:
    Code (YAML):

    menu
    :
      rows-per-page
    : 4
     
    - Respects filler areas.
    - Adds a navigation bar automatically.
    - Enforces a smart minimum of 2 rows.
  • Configurable Rows-Per-Page
    You now control how many rows each menu shows!
    Make menus bigger, smaller, or dynamic to match your server's style.
  • Full Live Reload Support
    Need to tweak your menus? No server restart needed!
    Simply edit your YAML files and run:
    Code (Text):

    /duel reload
     
    Instantly updates:
    - Gamemode Selection
    - Arena Selector
    - Confirm/Cancel menus
  • Smart Empty-State Icons
    If no arenas are available, players now see a gorgeous "No Arenas Available" icon, fully customizable in your config!
    Centered automatically on the first row for maximum visual impact.
    Example:
    Code (YAML):

    empty-item
    :
      enabled
    : true
      material
    : BEDROCK
      name
    : "<dark_gray>No available arenas"
      lore
    :
       - "<gray>All arenas are currently busy."
        - "<dark_gray>Try again later!"
     
  • Duel Session Tracking
    Each player now tracks:
    - Last Menu Opened (Gamemode, Arena, Confirm)
    This ensures perfect menu back-navigation after any confirm/cancel action.
  • Cleaner Inventory Interactions
    - Dragging into menus blocked
    - Shift-clicking protected
    - Hotbar swapping disabled
    - Empty clicks safely ignored
    - Cooldowns respected
  • Sounds & Particles on Every Action
    Every action (page flip, confirm, cancel, invalid click) can now play sounds and particles, fully configurable per menu.
    Example:
    Code (YAML):

    sounds
    :
      page-next
    :
        type
    : UI_BUTTON_CLICK
        volume
    : 1.0
        pitch
    : 1.1
        particles
    :
          - type
    : NOTE
            count
    : 8
     
  • ⚡ Ultra-Optimized Codebase
    - Centralized filler placement
    - Shared navigation code
    - Smarter slot checking
    - Cleaner event flow
    - Fully modular for future expansions
✨ Overall: Menus now feel like premium UI systems you’d see in AAA games!
✅ Upgrade Instructions
  1. Update your ConquestDuels-2.4.0.jar
  2. Check your selectGameModeGUI.yml and arenaSelectorGUI.yml for `rows-per-page` and `empty-item` options
  3. Use /duel reload to apply changes instantly
  4. Profit: Enjoy flawless GUIs!
⚡ Download 2.4.0 Now and Elevate Your Duels! ⚡
---
----------, Apr 27, 2025

⚔️ ConquestDuels - Major Duel Flow Revamp! ⚔️
  • ✅ Select Gamemode Menu Added
    • Players can now choose their Duel Gamemode before selecting an opponent!
    • Clean navigation UI between Gamemode ➔ Challenge ➔ Confirm stages.
  • ✅ Challenge Menu Improvements
    • Exit behavior now respects team-dueling config:
      • If team-dueling is enabled, clicking "Back" returns to Gamemode Selector.
      • If disabled, clicking "Back" closes the menu directly.
    • Clicking on a player head now intelligently leads to the right flow based on configuration.
  • ✅ Confirm Menu Auto-Cleanup
    • If your duel target logs off, the Confirm Menu will auto-close and notify you!
    • No stuck confirm states, clean user experience.
  • ✅ Team Dueling Config Toggle
    • New config option: team-dueling.enabled
    • Easily control if players go through Gamemode selection or direct Challenge flow.
  • ✅ Arena Registry Integration
    • Cleaned up ArenaModel and ArenaRegistry methods.
    • Gamemodes are now tied to Arenas properly for future arena selection support.
  • ✅ DuelBuilderSession Upgrades
    • Added selectedGamemode to track player choices during menus.
    • Reset selectedGamemode and selectedTarget when a duel officially starts.
  • ✅ GUIStarter Overhaul
    • Now cleanly supports dynamic menu building for Challenge and SelectGamemode menus.
    • Easier to expand for new menus later (e.g., ArenaSelector).
  • ✅ Bug Proofing and Session Management
    • No more stale menu sessions.
    • Clean task scheduling with safe reopen/close logic.
    • Open sound effects and smooth transitions.
  • Using DuelBuilderSession to track in-progress player session memory.
  • Using DuelSessionModel for active battles.
  • Full async-safe scheduler handling for open/close menus.
  • Full Bukkit.getPlayer() safety guards to prevent NPEs.
  • Arena filtering for future ArenaSelector menu is already in progress!
The duel experience is now modular, scalable, and ready for Team Duels and Arena Queues!
View Resource Page
----------, Apr 27, 2025

ConquestDuels v2.3.2 — Polished and Powerful![/BIG]
What's new in 2.3.2:
  • AdminSpawn Teleport Polishing
    Admins teleporting to arenas now get proper feedback if an arena isn't found, and a "Teleport Complete" message after successful teleports!
  • Spectator Smart Teleport
    If an adminspawn isn't set, players in Spectator mode will automatically teleport to the arena center (with visual and sound effects!).
  • Duel Request Safety Upgrade
    Challengers can no longer send duel requests to players who are editing arenas! Full protection added both ways.
  • Arena Message System Refactor
    Better error handling, better MiniMessage support, and future-proofed YAML loading. New interactive messages now support hover, click, sound, and particle effects across all duel statuses!
  • Usage Hints & Interactive Buttons
    Dynamic buttons like [Accept], [Deny], [Cancel], [Challenge], [Block] now show up inside messages — with SUGGEST_COMMAND and RUN_COMMAND actions prebuilt for players!
  • Under-the-Hood Optimizations
    Improved async handling for teleportations, minimized config lookups, cleaner task scheduling, and a lighter memory footprint for active duels.
Why upgrade?
  • Smoother arena setup for admins
  • Cleaner, more responsive experience for players
  • Interactive chat actions (hover, click, particles, sounds)
  • Stronger validation and safety for duels
  • Foundation for even bigger 2.4 features
⚡ Update Recommendations:
  • Backup your arenaData/, arenaMessages.yml, and generalMessages.yml if you've customized them!
  • Drop in the new ConquestDuels-2.3.2.jar
  • Restart or reload using a safe plugin manager like PlReloader
  • Test with /duel admin arena list, /duel challenge, and /duel accept to confirm smoothness
What's Next:
- Custom Duel Kits editor
- Arena leaderboards
- Duel seasons (ranking resets and rewards!)
- PlaceholderAPI expansion for more placeholders
Thanks for growing ConquestDuels with us! ❤️
Built with love, crafted for battle.
----------, Apr 26, 2025

⚔ ConquestDuels 2.3. – Duel Finalization Overhaul ⚔
Maximum reliability, zero ghost sessions.
[/center]
Hey duelers!
We've just pushed a major behind-the-scenes improvement to ConquestDuels, focusing on duel session integrity, player reconnection, and flawless cleanup even during chaotic situations.
Here's what's new in 2.2.4:
✅ Bulletproof Player Clearing
  • Players are now properly marked as cleared after respawning, rejoining, or finishing post-match teleportation.
  • Surviving winners are batch-verified after teleporting back to guarantee full session closure.
  • Edge Cases Fixed: Players who disconnected or delayed their respawn are correctly processed without leaving stuck duels.
️ True Session Finalization
  • A duel session now only finalizes once every player is:
    • Teleported back
    • Marked as cleared
  • This prevents ghost sessions and ensures that clean duels properly unregister.
  • Players can still be involved in multiple sessions if necessary (for stubborn / unexpected cases).
Technical Improvements
  • Survivors who teleport back are now batch processed to force clearance immediately.
  • Clean handling of players during onJoin and onRespawn to finish post-duel recovery.
  • Safer unregistering to guarantee arenas are not left locked or flagged as "in-use" unnecessarily.
Why This Matters
  • Zero stuck sessions – no more weird "still in a duel" bugs.
  • Clean duel lifecycle – everything resets properly, even after crashes or disconnects.
  • Rock solid event handling – ensuring ConquestDuels scales up reliably for bigger servers.
This update lays the critical foundation for:
  • New gamemode expansions
  • More flexible team balancing
  • Cleaner duel lifecycle even at massive scale

ConquestDuels: The most polished PvP duel system for Bukkit/Spigot servers!
----------, Apr 26, 2025

ConquestDuels v2.3.0 — Duel Lifecycle Overhaul
The next evolution of competitive dueling is here.[/center]
⚔️ COMPLETE DUEL LOGIC REWRITE
We've restructured the entire way duels are handled under the hood. Whether you're doing 1v1s or large team fights, the new session system is smarter, safer, and more resilient than ever.
  • New Session Engine – Every duel now runs in a dedicated DuelSession, tracking player states, locations, eliminations, and lifecycle events.
  • True Disconnect Recovery – Players who disconnect mid-fight can return to their match if it's still ongoing.
  • Death & Quit Elimination – Players are now eliminated instantly upon quitting or dying mid-duel.
  • Delayed Cleanup – Only surviving winners are teleported back. Eliminated players remain out of play.
  • New Forfeit Handling – Forfeits are automatically declared when all players on a team are eliminated or disconnected.
SMARTER STATE MANAGEMENT
  • Player inventories, health, and effects are stored and restored seamlessly using new snapshot models.
  • No more random teleports after death — eliminated players are NOT returned to their pre-duel location.
  • Join/Respawn logic now cleanly restores state only for players who disconnected, not those eliminated.
POST-DUEL ARENA REGENERATION REWORKED
  • Arenas no longer stall in "saving" or "in use" state.
  • Smart regeneration detects when no changes are needed — and skips regen gracefully.
  • Arenas are now marked ready correctly even after instant or null regen.
WHAT THIS MEANS FOR YOU:
  • More stable duels in high-latency or crash-prone environments.
  • Cleaner transitions between rounds with no ghost players or leftover data.
  • Improved performance across the board with modular event handling and async snapshot checks.
Looking ahead...
More team modes. Better Spectator tools. Real ELO ladders.
Thank you for your support, testers, and every bug report ❤️
– The ConquestDev Team
----------, Apr 25, 2025

[​IMG]
ConquestDuels Update – Smarter Menus, Dynamic Rows, Maximum Style
[hr]
Hey duelers!
We’ve just released a game-changing update to ConquestDuels that makes the challenge menu faster, cleaner, and more responsive than ever — especially for large servers or events. Here's what's new:
[hr]
Dynamic GUI Rows
You asked for it, we built it. The challenge menu now automatically expands its rows based on how many players are available to duel — with zero wasted space.
  • Dynamic row growth (1–5 content rows max)
  • Always includes a nav bar
  • Automatically paginates when full
  • First and later pages dynamically size individually
Set this in your `challengeGUI.yml`:
Code (YAML):

menu
:
  rows-per-page
: 0
 
Need a fixed-height layout instead? Use any number 2–5 to enforce static rows per page. Simple.
[hr]
Smarter Pagination
Each GUI page is now dynamically sized based on that page's player count.
This means Page 1 can be 1 row, Page 2 can be 2 rows, and so on — no more always-start-at-5 nonsense.
Benefits:
  • Faster menu opens
  • Reduced scroll fatigue
  • Cleaner layout on smaller servers
  • Scales up for larger communities
[hr]
Config-Driven & Fail-Safe
This update also tightens the config integration:
  • Proper key binding to menu.rows-per-page
  • Defensive fallbacks for empty items, effects, and sounds
  • Fully hot-reloadable via /duel reload
  • Debug logs for row parsing and sizing (optional)
[hr]
Smarter Performance with Spark
We’ve upgraded our arena regeneration system with **TPS-aware logic powered by Spark** — and it’s smarter than ever:
  • Always delays Spark initialization by 1 second after boot
  • If Spark isn’t ready, it retries 3 times at 5-second intervals
  • Smoothly adjusts chunk + block restore batching based on server TPS
  • Falls back to defaults if Spark is missing or delayed too long
This ensures super smooth regenerations even under heavy load, and gives Spark time to register fully on server boot.
No more early boot crashes. No more guesswork. Just reliable tuning.
[hr]
️ Upgrade Instructions
1. Replace your plugin jar with the latest version
2. In `challengeGUI.yml`, set:
Code (YAML):

menu
:
  rows-per-page
: 0
 
3. Reload with `/duel reload`
4. Enjoy beautiful auto-sized GUIs across every duel page
[hr]
Feedback, Bugs, Suggestions?
Let us know in the discussion thread or via GitHub issues — we love tuning for your server’s needs.
Happy dueling!
– The ConquestDuels Team​
----------, Apr 25, 2025

ConquestDuels Regeneration System Update – April 2025
A rock-solid overhaul of our regeneration engine – optimized, future-proofed, and ready for massive arenas.
✅ What's New:
➤ Int-to-Long Upgrade Across the Board

- All block-level operations (snapshot capture, regeneration, volume checks) now use long for X/Y/Z coordinates.
- Prevents silent overflows on large regions (over 2.1 billion blocks).
- Snapshot keys now safely store and load long-based coordinates without truncation.
➤ Volume Check Fixes for Large Arenas
- /arena setregion and /arena enableregen now use long volume math to safely support arenas larger than 32-bit limits.
- Configurable limits now pulled via getLong() to match.
➤ Smart Snapshot Loading & Saving
- Snapshot saving no longer skips tiny arenas due to false "empty" detection.
- Chunk loading now handles large file names with long-safe parsing ( chunk_-187442_442.dat.gz fully supported).
- Async batch writing tuned for low TPS impact and reliability.
➤ Locking & Queued Task Safety
- All async snapshot and regen operations now respect safe locking via SnapshotTaskController and queue states.
- Prevents double-snapshot issues or regen from launching twice mid-restore.
Behind the Scenes:
- Optimized ChunkCoordModel and ChunkSnapshotModel for scalable memory usage.
- TPS-aware snapshot batching with Spark still in place — no changes needed.
- Regen manager now gracefully recovers from invalid snapshots or missing chunk data.
Ready for deployment — and fully backward-compatible with existing saves.
Got questions, bugs, or want to showcase your arena builds? Drop them below!
----------, Apr 24, 2025

⭐ ConquestDuels v2.2.1 — Total Regeneration Overhaul!
The arena engine is smarter, faster, and leaner than ever.
  • ✔ Asynchronous Block Snapshotting (w/ Adaptive TPS Scaling)
    We’ve completely rewritten how ConquestDuels snapshots and saves arenas. It now:
    • Runs in micro-batches every tick
    • Detects live server TPS with Spark and adjusts batch size dynamically
    • Captures 3M+ blocks in under 3 seconds on most machines
    • Avoids TPS drops by adjusting load per tick
    • Uses Bukkit-safe async reads with perfect block data accuracy
  • Snapshot Caching + Smart Arena Comparison
    New arenas are now snapshot-cached on disk + memory, and we:
    • Compare chunks on each save
    • Only write changed chunks back to file (async batched)
    • Prevent redundant saves or regeneration unless required
    • Lock snapshot saves per arena (no more overlaps or race conditions!)
  • ⚔ Smarter Duel Flow
    Snapshots now happen only if needed. Here's the new flow:
    • On duel start: we only snapshot if the cache doesn't already exist
    • On duel end: we compare current state to the original and regenerate if needed
    • No more regeneration crashes or delays from invalid snapshots
  • ️ Protection + Save Locks
    • Admins are blocked from saving if regeneration is currently running
    • All save + regen processes now clean up locks safely on plugin disable
    • Saves and regenerations are mutex-safe and log their completion
  • Disk I/O Optimization
    • Only changed chunks are saved
    • Snapshot files are smaller and faster to load
    • Heavy file writes now run in batched tasks
  • Developer Utilities
    • Verbose logs during batch saves, chunk diffs, and snapshot finishes
    • Save success messages are now shown only once the batch is fully done
    • Arena saving shows “in-progress” if a save or regen is active
This update is the foundation for larger arena scaling, dynamic resetting, and live editing in future releases. Your arenas will never be the same.
Built with ❤️ by ZoneZone & ZanderCraft
----------, Apr 24, 2025

[​IMG]
ConquestDuels v2.2.0
Precision PvP Duel System · Arena Snapshots · Total Inventory Sync · Freeze Logic · Reload Resilience
[HR][/HR]
What's New in v2.2
  • ⛔ Full Freeze System — Players are now fully frozen at the start of duels (no item drop, block break/place, or jumping).
  • Smart Teleport Validation — Duels no longer begin unless teleportation for both players is fully confirmed.
  • Pre-Duel Player State Saved — Inventory, armor, health, hunger, experience, and potion effects are all restored post-duel.
  • Async Snapshot Verification — Arenas validate themselves pre-duel and regenerate automatically if changes are detected.
  • Arena Entity Cleanup — After duels end, dropped items, XP, arrows, projectiles, and more are removed with cloud particles.
  • Duel Recovery on Reload — If the server reloads, any in-progress duel is cleanly restored or cancelled, returning players to safety.
  • Async Chunk Save (Optimized) — Snapshot disk writes now occur in safe batches, reducing TPS impact.
Config Additions
Code (YAML):

duel
:
  freeze-ticks
: 60   # Players frozen before duel (at least 40 ticks recommended)
teleportation
:
  delay-ticks
: 100       # Delay before duel begins
  return-delay-ticks
: 100   # Delay before players are teleported back after duel
 
Notable API/Internal Changes
  • DuelSessionModel expanded with full player state capture (health, hunger, exp, etc).
  • TeleportationManager now tracks completion and provides `hasCompletedTeleport(UUID)` check.
  • ArenaManager.finalizeArenaCleanup() clears all debris (XP, arrows, etc).
  • DuelFreezeListener added for total freeze enforcement (drop, move, swap, damage, etc).
  • DuelManager.recoverAllSessions() ensures sessions recover properly during plugin reloads.
Tested Against:
  • Paper 1.20.4 & 1.21.4
  • Vault + PlaceholderAPI (optional integrations)
  • UltraPermissions, EssentialsX, WorldEdit (compatible)
Feedback & Support
Need help? Join the discussion thread or PM me directly for integration or bug reports. We're building this for high-tier PvP communities!
⚔ ConquestDuels v2.2 – Tactical PvP Starts Here
----------, Apr 23, 2025

ConquestDuels v2.1.0 — Regeneration & Snapshot Revolution
Smart Arena System Upgrade
Enjoy a fully reworked snapshot caching, chunk-based regeneration, and save protection system — built for performance, safety, and ease of use.
  • Snapshots cached on startup (not overwritten!)
  • ♻️ Async regeneration using chunk diffs
  • Save commands now guarded against spam
  • ⏳ Enable/load locks and real-time feedback
  • 1.20 & 1.21 cross-version compatibility built-in
Snapshot System (New Memory Layer)
• Snapshots are loaded from disk once at startup
• Snapshot comparisons detect live → modified chunks
• Used only to validate post-duel changes and trigger regeneration
• Never overwritten mid-duel = truth state preserved
✅ No more accidental mid-match regen overwrites
♻️ Regeneration Manager 2.0
Diff-based chunk detection: only modified chunks are restored
Multi-stage async block placement:
→ Solids → Gravity → Dependents → Liquids​
Batch queueing and tick-safe updates
• TPS-safe even on large arenas
Only changed areas are updated. No more mass block loops!
️ Command Locking + Cooldowns
• `/duel admin arena enable` → Prevents re-enabling while snapshot is loading
• `/duel admin arena save` → Won’t double-save while in progress
• `/duel admin arena regenerate` → Now checks:
  • Region defined?
  • Regen enabled?
  • Not already regenerating?
• All commands respond with clear messages
Save System Upgrade
• Marked as saving → locks command
• Skips saving if no changes
• Automatically saves regen snapshot (if regen is enabled)
• New result codes:
→ `SAVE_SUCCESS`, `SAVE_ALREADY_SAVED`, `SAVE_FAILED`, `SAVE_ALREADY_IN_PROGRESS`​
Built for auto-sync, disk stability, and safe reloads.
Snapshot Verification (Startup Safety)
Each arena’s disk snapshot is compared to live state
• Mismatch? The plugin queues auto-regeneration
• Avoids corrupted arenas after world edits or crashes
• Full logs like:
⚠ Missing chunk data for (30, 104) in disk snapshot​
1.21 Runtime Compatibility (Back to 1.20.1)
• `Attribute.ATTACK_DAMAGE` no longer crashes on older servers
• Setup wand uses reflection fallback
• Enchant glint + hidden attack bar still work
✨ Safe to build in 1.21 and deploy on 1.20.1
New Admin Command Features
• ` /duel admin arena regenerate <name>` → now validated before running
• ` /duel admin arena save` → only triggers when needed
• ` /duel admin arena enable/disable` → safe load/unload snapshot cache
• ` /duel admin arena enableregen` → guides user if region is too large
Message Models Expanded
• ` REGENERATE_DISABLED` → When regen isn’t enabled
• ` REGENERATE_ALREADY_RUNNING` → If regen is queued
• ` SAVE_ALREADY_IN_PROGRESS` → Save guard
• ` TOGGLE_ALREADY_LOADING` → Snapshot still loading
All messages use rich placeholder formatting: `[arena]`, `[size]`, `[max]`
✅ Server-Proof System
• Auto-detects arena damage
• Verifies live state against snapshot
• Handles plugin reloads or partial saves
• Optimized for real-world servers and testing environments

Feedback Welcome!
Spotted a bug? Have an idea? Post in Discussion or PM me directly. I read and respond to every report!
❤️ Thank you for supporting ConquestDuels!
If this update helped your server, leave a review — it means a lot!
----------, Apr 23, 2025

✨ ConquestDuels v2.0.0 — Async Regen, Crash Recovery, and Performance Overhaul
Biggest update yet! This version rewrites how arenas are loaded, regenerated, and saved — now fully async, crash-safe, and ready for massive scale.
━━━━━━━━━━━━━━━━━━━━━━━━━
Core Changes
Asynchronous Arena Regeneration
Arena regen and snapshot checks are now fully async, batched one arena every 0.5s, and start 10 seconds after boot.
→ No more TPS drops during startup or reloads.
Smart Snapshot Lifecycle
Snapshots are:
- Only captured if enabled + regen-enabled
- Auto-expire from memory after 30 minutes
- Loaded from disk only if not already cached
Compressed Binary Snapshot Storage
Each arena uses its own compressed `.bin.gz` file — drastically reduces file size and speeds up read/write.
━━━━━━━━━━━━━━━━━━━━━━━━━
⚙️ Admin & Developer Enhancements
Arena File Refactor
Arenas now save in clean subfolders:
Code (Text):

/plugins/ConquestDuels/SavedArenaData/
  └── ArenaName/
      ├── data.yml
      └── snapshot
              └── arenaSnapshot.bin.gz
 
/dueladmin reload is instant
No more re-checking snapshots or triggering slow regen during reload. It's now near-instant.
Crash Recovery & Protection
If the server shuts down mid-duel:
- Arena snapshot restores from disk
- Regen continues after boot
- No arena corruption or weird states
Safe mkdirs(), async I/O, and write validation
No more silent failures. All file operations are validated and fail-safe.
━━━━━━━━━━━━━━━━━━━━━━━━━
Migration & Compatibility
• Legacy arenas will auto-migrate to new folder format
• No config changes required
• Existing snapshots remain valid
• Fully compatible with 1.20.4+ and Java 17+
━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Summary
Everything is faster, safer, and more scalable.
This update powers servers running hundreds of arenas with no lag or crashes.
If you find this helpful or need support, drop a comment or join our Discord.
Enjoy v2.0.0!
– Zander & Joe
----------, Apr 22, 2025

✅ ConquestDuels v1.3.0
GUI Interaction Enhancements • Blocking System Integration • Stability Improvements

New Features

✅ Empty Icon Click Feedback
The empty-state "No available players" skull now plays custom sounds & particles when clicked — just like all your other GUI buttons!

✅ Block-Aware GUI Handling
If a player blocks you while you have them selected:
  • []Your menu will automatically close []You'll receive a message: “{target} has blocked you.
  • You'll be redirected back to the Challenge Menu

✅ Unblock Auto-Refresh
Unblocking a player now immediately refreshes Challenge Menus to allow dueling again without relogging.

️ Fixes & Changes

  • [] Improved timeout logic: Menus only mark as "closed" if the player truly exits (not when switching menus) [] Better filler/navigation item handling to avoid overlaps or ignored clicks [] Fixed empty-state skull not playing its sound/particle effects [] Cleaner transitions between Challenge, Select, and Confirm menus

⚙️ Technical Improvements

  • []New method: DuelBlockManager#handlePostBlockEffects() []Updated: DuelChallengeMenuManager#open() — now filters out blocked players []Confirm actions now run safely with pre-cleared context []Every GUI click now routes through playEffect() if configured in the YML
----------, Apr 21, 2025

Update v1.8.0 – Smarter GUI Flow, Confirm Menus, Session Expiry & Empty States
April 2025 – Major infrastructure & UX improvements
✨ New Features
✅ Confirm Menu System
• Added ConfirmMenuManager for confirmation workflows (accept/cancel)
• Fully integrated with SelectGamemodeMenuManager and session tracking
• Customizable title, layout, filler from confirmGUI.yml
• Supports:
- setConfirmContext(...) in DuelBuilderSession
- ConfirmMenuManager.reopen(...) to go back if needed
Empty State Item Support
• When no players are online, a custom "no players" icon is displayed in the top row
• Configurable via menu.empty-item in challengeGUI.yml
• Supports material, MiniMessage title, lore, enchantment, sound & particles
Seamless Menu Navigation
• Confirm Cancel button now returns to Gamemode Selector (with delay fix)
• "Back" buttons use BukkitScheduler.runTaskLater for smooth reopening
• Session tracking retains previous page when switching menus
Internal Improvements
Centralized Session Expiration
• New async cleanup task via DuelBuilderManager.expireStaleSessions()
• Automatically removes stale DuelBuilderSession objects
• Configurable via gui-settings.timeout-seconds in your config.yml
⚙️ Improved GUI Parsing
DuelBuildingManager now cleanly parses:
- menu.empty-item
- menu.sounds
- menu.navigation.layout
- menu.filler-item
• All GUI metadata now stored in DuelMenuMeta
ItemBuilder Enhancements
• Material parsing now logs invalid types and defaults to BARRIER
• Filler and button slots only update if empty (null or AIR)
Config Changes
challengeGUI.yml
Make sure empty-item is under menu:
Code (YAML):

menu
:
  ...
  empty-item
:
    enabled
: true
    material
: SKELETON_SKULL
    name
: "<gray>No players found"
    lore
:
     - "<dark_gray>Try again later."
    enchanted
: false
 
config.yml
Set the global GUI timeout (in seconds):
Code (YAML):

gui-settings
:
  timeout-seconds
: 60
 
Developer Notes
• Compatible with older GUI configs
• Uses full MiniMessage support for titles, lore
• Works with PlaceholderAPI (%player_name%, etc.)
• Reload menus anytime with /duel reload
✅ Ready for smoother menu navigation, confirmation control, and cleaner sessions!
----------, Apr 21, 2025

[​IMG]
ConquestDuels v1.6.1
⚔️ Regeneration Rework, Request System Fixes, & More! ⚔️​
Arena Regeneration System Rework
  • Complete overhaul of the regeneration pipeline:
    • Restores blocks in order: Foundation ➜ Gravity ➜ Dependent
    • Physics are disabled during restoration to avoid block loss
    • Gravity blocks placed bottom to top to prevent falling
    • Auto-retries regeneration up to configurable max-retries
    • Regeneration runs even in unloaded chunks now!
    • Arena marked ready & available only after full regeneration
  • Fully configurable via config.yml:
    Code (YAML):
    regeneration:
      batch-size
    : 1000
      max-retries
    : 5
️ Command & Duel Fixes
  • Fixed duel request limitations — you can now send requests to multiple players
  • /duel challenge <player> no longer blocked if you sent a request to someone else
  • Improved internal request map & expiration handling
  • Fixed ArrayIndexOutOfBounds errors in GUI menus & interactions
Arena Session Improvements
  • Arena is only marked not in use after full regen is completed
  • Added isReady() flag to track readiness state
  • getRandomAvailableArena() now filters by !beingUsed && isReady
  • Arena reload now safely restores all configuration & readiness state
Other Fixes & QoL
  • Better debug logging during regeneration phases
  • Reduced tick strain with batch-configurable regen
  • Cleaner location serialization & loading with fallbacks
  • Removed unsafe physics calls during async ops
❤️ Thank You
Thanks to our amazing community for the detailed bug reports, logs, and feedback! Your help continues to shape ConquestDuels into the most reliable and flexible 1v1 PvP plugin on Spigot.
Happy dueling, champions.
~ ZoneZoneOfficial Dev Team​
----------, Apr 20, 2025

[​IMG]
Update v1.5.1 — Chunk Handling & Teleport Optimizations!
More responsive teleports. Less memory. Cleaner chunk management.
Teleportation Engine Rewritten
Our teleportation system is now faster, smarter, and safer for memory:
  • ⏳ Cancels cleanly when moving, dying, or disconnecting.
  • Validates duel sessions before teleport completes.
  • ❌ Only unloads target chunks on cancel if arena uses ON_DEMAND.
New Default: HYBRID Chunk Load Method
Introducing the HYBRID method — now the default for all new arenas!
  • Loads arena chunks on-demand (like ON_DEMAND)
  • Keeps them alive for 30 minutes after last duel
  • Cleans up unused regions automatically every 60s
Recommended for performance + readiness on medium/large servers
Code (YAML):
load-method : HYBRID
Other Fixes & Internal Improvements
  • Teleport countdown no longer bugs out from command spam
  • No memory leaks from abandoned Bukkit tasks
  • Smarter arena chunk retention via ChunkLoadingManager
----------, Apr 20, 2025

✅ Update: vX.X.X — Arena Setup Protection, Duel Lifecycle Fixes, and Teleport Improvements

Arena Setup Mode Now Blocks Duel Requests
Players in setup mode can no longer be bothered by duel requests. We've added full protections:
  • ✅ When entering setup mode:
    - All existing duel requests to/from the player are cleared
    - Duel requests cannot be sent to OR from them while editing
  • Automatically unblocked when exiting setup mode
  • Fully integrated with GUI, tab completion, and interaction-based requests
Duel Lifecycle Now Fully Guarded
Every state of the duel lifecycle is now smartly enforced:
  • ❌ Players already in a duel can't send/receive requests
  • ❌ Target already in a duel? Request blocked
  • ✅ Reverse request? Duel starts automatically
  • ❌ Players in setup mode can't send/receive requests
  • ⏳ Expiry system clears old requests every 5s (configurable)
Setup Wand Is Now Indestructible
Admins can't accidentally lose their setup wand — no matter what they try.
  • Drops blocked
  • Wand removed from death drops + re-given on respawn
  • Protected from `/clear`, hotbar moves, creative trash, container moves
  • InventoryCloseEvent monitors for deletion and re-issues the wand silently
Teleportation: Async, Cancel-Aware, and Safe
Teleport handling is smarter than ever:
  • Async chunk loading before any teleport happens
  • ⏳ Delays respected for admin, duel, or return types
  • Cancel on:
    - Movement
    - Interaction
    - Damage (skips if hit was fatal)
  • Teleport sessions clean up safely
  • ✅ Sends appropriate cancellation reason to the player
  • Unloads chunks if canceled (non-duel types only)
Config Additions
Code (YAML):

teleportation
:
  cancel-on-move
: true
  cancel-on-interact
: true
  cancel-on-damage
: true
 
New Messages (messageModels.yml)
Code (YAML):

DUEL_CHALLENGE_DISABLED_IN_SETUP
: "<red>You can’t send duel requests while editing an arena!"
DUEL_CHALLENGE_TARGET_IN_SETUP
: "<yellow>{target} <red>is currently editing an arena and cannot accept duel requests."
 
Example Setup Commands
Code (Text):

/duel admin arena setup <arena>        → enters edit mode
/duel admin arena setup                → exits edit mode
/duel admin arena setup wand <arena>  → gives the setup wand
 
✅ Summary
✔ Full lifecycle protection for duels
✔ Setup mode now properly blocks duel flow
✔ Wands are protected, replaced, and never dropped
✔ Teleports are async, cancelable, and chunk-safe
✔ All features hot-reload compatible
Tested on: Paper 1.20.4
Report issues or ideas: DM me or post in the discussion thread!
— ZanderCraft ⚔️
----------, Apr 20, 2025

Update Log – vX.X.X
✅ Confirm & Challenge GUI Rewrite — Now with timeout support, paging stability, and smoother UX!
New Features
  • ✅ Confirm Menu Timeout System
    Menus now auto-close after `confirm-menu-timeout-seconds`, configurable in `config.yml`.
  • ✅ Challenge Menu Timeout System
    Fully respects `challenge-menu-timeout-seconds`, with smart handling during player joins/quits.
  • ✅ Page-Aware GUI Refreshing
    Reopening or canceling from Confirm menu brings players back to the correct Challenge GUI page.
️ Fixes
  • Fixed Confirm GUI closing too early by separating timeout logic from Challenge GUI.
  • Fixed broken click handling when page 2+ existed (45+ online players).
  • Fixed navigation arrows becoming unresponsive when more than one page was available.
  • Confirm GUIs now clean up safely even when players disconnect.
⚙️ Configuration Changes
Code (YAML):

gui-settings
:
  challenge-menu-timeout-seconds
: 5     # ⏱ closes inactive player GUIs automatically
  confirm-menu-timeout-seconds
: 60       # ⏱ gives time to confirm/cancel properly
 
Developer-Level Enhancements
  • Added `ConfirmMenuManager.openMenuTimestamps` for per-player timeout tracking.
  • Respect `DuelChallengeMenuManager.staleViewers` for join/quit-safe refreshes.
  • Callbacks auto-clear on confirm/cancel through `GUICallBackRegistryManager`.
  • Both menus use `expireStaleEntries()` scheduled async via `ConfigurationManager`.
  • Smart context keys: `challenge:{target}|{page}` to track last open page.
GUI timeout now works exactly as configured. Less memory used, less clutter. Clean and optimized.
[hr]
Need help customizing? Drop a message in the Discussion tab or ping on Discord!
----------, Apr 19, 2025

ConquestDuels vX.X.X - GUI Overhaul & Smarter Duels
✅ Tested on 1.20.4 | Highly recommended for performance + usability
[HR][/HR]
✨ New Features
  • Per-GUI Timeout Control
    └ Individual timeout settings for each menu type:
    Code (YAML):

    gui-settings
    :
      challenge-menu-timeout-seconds
    : 60
      confirm-menu-timeout-seconds
    : 30
     
    └ Menus now auto-close based on their own config.
    └ Controlled by `expireStaleEntries()` in each menu manager.
  • Dynamic Multi-Page Titles
    └ GUI titles now reflect actual page number with `{page}/{pages}` placeholders.
    └ Fully supported in config with MiniMessage styling.
  • Refined Join/Quit Behavior
    └ Menus no longer reopen after manually closing.
    └ Stale player detection properly avoids forced reopen on join.
[HR][/HR]
⚔ Duel Request Enhancements
  • Better Context Handling
    └ When challenging via GUI, the system now passes `[challenge:{player}|{page}]` context keys.
    └ This enables correct return behavior from confirmation screens.
  • Stale Challenge Cleanup
    └ Player disconnects now mark viewers as stale if relevant.
    └ Join events auto-refresh menus but never override manual closure.
  • Duel Request Expiry (Configurable)
    Code (YAML):

    duel-requests
    :
      request-expiry-ms
    : 30000
      allow-blocking
    : true
     
    └ Expired duel requests are now silently cleared.
[HR][/HR]
Refactors & Internal Improvements
  • Centralized stale expiration scheduling in ConfigurationManager
  • Reduced scheduler overhead by binding refresh ticks to config timeout
  • Accurate placeholder injection based on current page + total
  • All GUIs tracked with timestamps for low-cost pruning
  • Replaced ambiguous `closeInventory()` overload with `HumanEntity` cast
[HR][/HR]
Bug Fixes
  • Fixed: Menu clicks not working when more than 1 page of targets exists
  • Fixed: Menu would reopen if closed while another player joined
  • Fixed: Placeholder parsing failing on challenge menu after page updates
  • Fixed: Confirm GUI not clearing on player quit
  • Fixed: Title detection failing on dynamic menus
[HR][/HR]
Performance Improvements
  • No more spammy refreshes every tick — now event-based!
  • Minimal allocations and iteration inside `expireStaleEntries()`
  • No GUI refresh if contents or title haven't changed
  • Click + drag handlers are tight and predictable
  • Confirmed stable under heavy concurrency (see Spark profile)
[HR][/HR]
✅ Recommended Action
If upgrading from any prior version:
  1. Back up your config.yml
  2. Let the plugin regenerate missing timeout keys
  3. /duel reload or restart
Let us know if you run into anything — feedback always welcome!
----------, Apr 19, 2025

[UPDATE] Revamped Duel Lifecycle & Respawn Handling (v1.1)
We’ve completely overhauled the duel lifecycle for ConquestDuels, ensuring every player transition (win, loss, quit, rejoin, respawn) is handled smoothly, securely, and asynchronously. Say goodbye to janky respawns and /back exploits!


What’s New?
Post-Death Respawn Teleport Fixes
  • Players now return to their exact pre-duel location after dying in a duel.

  • Resolved issue where losers were being sent to world spawn instead of their saved coordinates.

  • Ensures respawn logic is run after the player has fully re-entered the world.
Async Double Teleportation
  • All duel exits now use double async teleports with slight position offsets to:
    • Prevent /back abuse.

    • Guarantee chunks are loaded safely before the player arrives.

    • Smooth over Bukkit’s post-respawn quirks.
Unified Lifecycle Coverage
  • PlayerDeathEvent, PlayerRespawnEvent, PlayerQuitEvent, and PlayerJoinEvent are all now consistently tracked with pre-duel locations and async-safe teleport returns.

  • Rejoin logic now gracefully recovers players who disconnect mid-duel.
Smart Teleport Tracking
  • Central TeleportationManager handles:

    • Async chunk preloading.

    • Delayed teleport execution.

    • Cancelation and cleanup tracking.

️ Recommended Update Action
If you're updating from a previous version:

  • ✅ No config changes required.

  • Test a few duels with intentional deaths, disconnects, and /back attempts to verify smooth flow.
----------, Apr 19, 2025

Update v1.1.0 — EssentialsX-Compatible, Performance-Optimized, and Fully Battle-Tested!
We're back with a major leap in duel stability, teleportation handling, and plugin performance. After rigorous testing and feedback, this release brings deep polish, full EssentialsX support, and smoother player experiences across the board.
━━━━━━━━━━━━━━━━━━━━━━━
EssentialsX /back Compatibility
━━━━━━━━━━━━━━━━━━━━━━━
Your players can now safely use /back after duels! We’ve implemented:
✔️ Fake post-duel teleport to record a valid /back location
✔️ Smart offset handling so Essentials registers it
✔️ Fully async-safe with delay-respected real teleportation
This ensures that after dying in a duel or winning one, players are returned *after* their location is properly logged — no more issues with Essentials!
━━━━━━━━━━━━━━━━━━━━━━━
Duel Handling Improvements
━━━━━━━━━━━━━━━━━━━━━━━
DuelDeathListener has been rewritten and fortified. It now tracks:
✔️ Players who die → returned after respawn
✔️ Players who quit → dropped inventory, opponent wins
✔️ Players who rejoin → shown a forfeit message and returned
✔️ Cleaned up all potential duplication or teleport race issues
All duel logic respects tick delays and performs operations on the main thread *after* async chunk load is completed — maximum safety, zero NPEs.
━━━━━━━━━━━━━━━━━━━━━━━
⚙️ Config Additions
━━━━━━━━━━━━━━━━━━━━━━━
We've added new delay options to let you control timing:
```yaml
teleportation:
delay-ticks: 60
return-delay-ticks: 60
duel-requests:
announce-duel-start: true
----------, Apr 18, 2025

Resource Information
Author:
----------
Total Downloads: 403
First Release: Apr 18, 2025
Last Update: May 21, 2025
Category: ---------------
All-Time Rating:
3 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings