ConquestDuels Beta icon

ConquestDuels Beta -----

Literally The Best Duel Plugin (Soon)




✨ 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
----------, Today at 1:32 AM

✅ 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

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!

[​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: 81
First Release: Apr 18, 2025
Last Update: Today at 1:32 AM
Category: ---------------
All-Time Rating:
2 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings