•
Live Arena Snapshots — Captures a full state of an arena’s blocks using TPS-aware slice batching.
•
Auto-compare to Disk Snapshots — Detects which chunks have changed and only regenerates those.
•
Partial Snapshot Loading — Avoids full-world writes. Only modified areas are rewritten.
•
Block Type-Aware Rebuild Waves — Solids, liquids, gravity blocks, and dependent structures (like ladders, torches) are placed in the correct order.
•
Smart TPS-Based Batching (Spark Integration) — Dynamically scales regeneration speed based on real-time server performance using Spark’s live TPS readings.
•
Parallel Chunk Comparison Engine — Compares thousands of chunks per tick asynchronously with adaptive delay control.
•
Auto-Cleanup for Entities — Purges dropped items, projectiles, and mobs before restoration.
•
Built-in Safety Locks — Prevents duplicate regeneration or overlapping snapshot tasks on the same arena.
•
Snapshot Verification on Startup — Pre-checks all enabled arenas and optionally restores them before first use.
•
Persistent Arena Cache — In-memory cache via `SnapshotCacheManager` enables lightning-fast restoration.
•
Chunk-Level Hashing — Uses SHA-256 hashing and deterministic ordering to detect even minor block changes.
•
Fallback Logging — Detects and reports invalid blocks, height mismatches, or failed writes.
•
No External Dependencies Required — Spark is optional; fallback logic activates if missing.
•
Multi-Mode Arena Support — Each arena can support multiple gamemodes (1v1, 2v2, etc) with distinct spawn configurations.
•
Admin Region Wand — A custom-configured setup wand with MiniMessage name, lore, enchant glint, and item flag hiding.
•
Region Selection with Volume Calculation — Position 1 and 2 confirmation with accurate block volume tracking and max size enforcement.
•
Gamemode-Based Spawn Assignment — Store exact spawn locations per team index for each supported DuelGameMode.
•
Dynamic Kit Compatibility — Admins can assign or remove allowed kits per arena via command.
•
Admin Teleport Anchors — Each arena supports an optional admin spawn point for editing or review sessions.
•
Custom Load Modes — Switch between
ON_DEMAND,
ALWAYS_LOADED,
HYBRID, and
ALWAYS_FORCED chunk load behavior.
•
Snapshot-Gated Enable Logic — Arenas with regeneration cannot be enabled unless a valid snapshot is cached or generated.
•
Arena Editing Sessions — Edits are sandboxed per admin; arenas disable themselves from matchmaking while being edited.
•
Auto-Wand Return System — Handles inventory events like death, respawn, drop, or container move to ensure wand persistence.
•
Safe Cleanup Hooks — On player logout or session end, wand is removed and arena is safely restored to pre-edit state.
•
Persistent Arena Registry — Centralized `ArenaRegistry` manages all loaded models, checks readiness, and finds available arenas for matchmaking.
•
API Access to Arena Info — Commands and UI can request structured arena metadata including spawns, block volume, kit list, and more.
•
Player-to-Player Duel Blocking — Players can block incoming duel requests from specific users without affecting global matchmaking.
•
Persistent YAML Block Data — Block relationships are saved in `userBlockingData.yml`, auto-loaded on join and auto-saved asynchronously.
•
Full GUI and Queue Syncing — If a player is blocked, active GUIs like gamemode selectors or confirm menus are closed and redirected.
•
Queue Safety Integration — Blocked teammates are force-removed from queues to prevent awkward matchups.
•
Reverse Request Handling — If two players send identical duel requests, they are instantly matched into a duel queue.
•
Dynamic Request Expiry — Configurable timeout clears stale duel requests automatically via scheduled async cleanup.
•
Block & Unblock Commands — Use
/duel block <player> and
/duel unblock <player> to manage your list.
•
Blocked List Viewer — Players can run
/duel blockedlist to see who they've blocked, with username resolution.
•
Safe Identity Mapping — Uses Bukkit's offline player cache to resolve names ⇄ UUIDs reliably, ensuring name changes don't break configs.
•
Configurable Blocking Toggle — Server owners can fully disable the feature via `duel-requests.allow-blocking` in config.yml.
•
Fully Modular GUI Definitions — All core menus (Challenge, Confirm, Kit Select) are loaded from YAML and overrideable per-server.
•
Live Reload from Config — Admins can hot-reload menus from disk by reloading the plugin, no restart needed.
•
Dynamic Challenge Menus — The challenge menu auto-adapts to team dueling status, player list size, and gamemode.
•
Kit Selector Menu — Display kits in a beautiful grid layout, pulled from saved inventory snapshots.
•
Confirm Menu — Finalizes your duel selection with a clean accept/cancel UI.
•
MiniMessage Formatting Support — GUI item names and lores support advanced color, gradients, and hover formatting.
•
Failsafe YAML Bootstrapping — If a config file doesn’t exist, it’s automatically copied from your plugin JAR.
•
Smart Session Timeout Logic — Inactive GUI sessions auto-expire with async monitoring to clean memory.
•
Localization Support via YAML — GUI messages like buttons, headers, tooltips come from customizable message files (arena, queue, kit, etc).
•
Structured Message Loaders — Each message type (arena, queue, kit) has its own file and loader class for clarity and modularity.
•
Full Player State Serialization — Kits store entire player state: inventory, armor, offhand, gamemode, health, XP, fireTicks, walk/fly speed, and potion effects.
•
YAML Kit Format — Kits are stored as `.yml` files in `/SavedKitsData`, fully editable and version-safe.
•
Default Kit Bootstrapper — If no kits are found, the plugin auto-generates 5 starter kits: leather, gold, iron, diamond, and netherite.
•
MiniMessage Display Format — Custom name/lore for both
select and
vote icons via placeholders like `{kit_name}`, `{total_votes_for_kit}`.
•
GUI-Defined Icons — Kits use custom icons and lores loaded from `kitSelectorGUI.yml`, which admins can theme server-wide.
•
Vote & Select Appearance Separation — Kits have separate icon definitions for kit-voting and pre-duel selection stages.
•
Potion Effect Compatibility — All potion effects, amplifiers, durations, and flags are safely serialized and restored.
•
GameMode Enforcement — Kits support toggling between Survival, Adventure, and Spectator modes.
•
Kit Registry in Memory — `kitManager` keeps all kits hot-loaded for GUI and queue performance, no disk access at runtime.
•
Arena Kit Validation — Arenas auto-unlink invalid kit names during load, ensuring stability if kits are deleted or renamed.
•
Offhand-Aware Logic — Full offhand support including empty or air-item fallback detection.
•
API-Ready Access — Other modules access kits by name via `kitManager.getKit(...)`, making external GUI or vote extensions easy to build.
•
Per-Arena Queues — Each arena has an isolated queue line with tracked match groups (`QueueModel`) and lifecycle state (`QueueState`).
•
Support for Team-Based Modes — Queues support flexible team sizes and auto-fill logic based on game mode settings.
•
Smart Matchmaking Algorithm — Dynamically assembles fair teams while checking for player block relationships and balance.
•
Automatic Kit Voting — If multiple kits are allowed, a kit vote menu opens with timeout fallback and fair-tiebreaking.
•
KitVoteSessionManager Integration — Tracks votes, finalizes the winning kit, and integrates into the queue’s lifecycle.
•
Stale Queue Cleanup — Queues automatically expire after 30 minutes of inactivity, with timeout messages to players.
•
Real-Time GUI Refreshing — All selector menus update every time a queue changes (joins, leaves, reorders).
•
Reconnection Safety — If players leave mid-queue due to world change or quit, the rest of the queue is safely repaired or canceled.
•
Teleport Failure Handling — If teleportation fails, players are split and re-queued based on arena availability and valid teammates.
•
Custom Match Lifecycle States — Queues transition through `WAITING`, `TELEPORTING`, `IN_DUEL`, and `CANCELLED` with corresponding logic.
•
Block-Aware Team Assembly — Blocked players are never paired in teams or opposing sides, even in full queues.
•
Arena Assignment on Full Queue — Arenas are only bound once the queue is full and players pass all checks.
•
Queue Voting Timer — 30-second kit voting timers are auto-started if not all players vote, preventing stalls.
•
Multi-Team Session Model — `DuelSessionModel` tracks both teams, player teleportation, win/loss outcome, and disconnects.
•
Complete Pre-Duel State Saving — Player inventory, armor, offhand, potion effects, XP, health, gamemode, flight flags, speeds, and fire ticks are stored and restored exactly.
•
Duel Freeze Phase — Players are frozen in place at the start of the match, complete with countdown timer and fully-blocked interactions.
•
Ender Pearl Cleanup — All preduel and leftover pearls are removed from the arena to prevent teleport exploits.
•
Join & Respawn Recovery — If a player crashes or dies mid-duel, they are safely teleported back and restored when they return.
•
Custom Duel End Logic — Winners and losers are determined via elimination. Sessions finalize only when all players are teleported back.
•
Premature Cancellation Handling — Covers disconnects, deaths, and interaction violations. Sends context-aware cancellation messages.
•
Live Arena Marking — Arenas are flagged as “in use” during duels and released once the session ends or cancels.
•
Win/Loss Announcements — Broadcast duel outcomes server-wide with formatted messages, including winner/loser placeholders.
•
Snapshot Auto-Save Post Duel — Regeneration snapshots are re-taken after each match to prepare for the next round.
•
Full Duel Restoration Audit — Sessions only finalize when all survivors are restored and cleanup is confirmed.
•
Teleport Double-Check Mechanism — A two-phase delayed teleport ensures players land properly on duel start or end.
•
Modular Countdown Visuals — Freeze countdown via action bar and placeholders (`{seconds}`) for customizable translations.
•
Multi-Stage GUI Flow — Players move through
Gamemode → Challenge → Arena → Kit → Confirm menus in a stateful session.
•
Builder Session Memory — Each player has a `DuelBuilderSession` that stores selected target, kit, arena, gamemode, and confirm actions.
•
Smart GUI Pagination — All menus (challenge, arenas, kits) support paged layouts with MiniMessage-formatted titles and dynamic sizing.
•
Fully Configurable Layouts — All buttons (filler, icons, nav) are defined via YAML configs and support item name, lore, glow, and slot.
•
Player Selector Menu — Auto-hides blocked players, sorts alphabetically, and respects duel cooldowns.
•
Gamemode Selector Menu — Fully configurable, supports click-to-branch flow logic and per-button actions.
•
Arena Selector Menu — Filters by selected gamemode, shows live arena state (ready, regenerating, disabled), and uses status placeholders.
•
Kit Selector & Vote Menus — Distinct UI for kit selection vs voting, with individual config for "use-own-inventory" buttons.
•
Confirm Menu Context Routing — Confirms either a duel request or queue entry based on a structured context key like `challenge
layer:1v1:Arena:Kit`.
•
Custom Sounds & Effects — Each menu action (select, exit, confirm, page next/prev) supports optional sound or particle via config.
•
Live Refresh on Player Join/Quit — GUIs update in real-time when players join or leave to prevent stale head lists or broken queues.
•
GUI Cooldown System — Prevents click-spamming by rate-limiting menu interactions with user feedback.
•
Hotbar, Drop, and Drag Protection — All item move types are blocked while GUI menus are open to maintain state integrity.
•
Fallback Safety Paths — If a player closes or disconnects mid-flow, the builder session marks itself cleanly closed to prevent memory leaks.
•
Right-Click to Duel — Players can initiate a duel by right-clicking other players directly (configurable).
•
Sneak Variants Supported — Different duel types can be triggered via shift-right-click or shift-left-click.
•
Attack-Based Challenges — Punching or hitting another player (via EntityDamageByEntityEvent) can trigger a duel offer if enabled.
•
Drop Item & Swap Hand Detection — Unique interaction types like dropping an item while looking at a player, or pressing F (swap-hand), are fully supported.
•
Customizable via YAML — Interaction types are defined in `challengePlayer.yml` under `action-type`, parsed into `InteractionTypeModels`.
•
Raycast-Based Targeting — Swap-hand and drop interactions raycast up to 5 blocks for a valid player in view.
•
Permission-Based Access — Uses `conquestduels.user.challenge.interact` permission node to restrict feature access.
•
Cooldown Protection — A separate cooldown manager prevents spam attempts, with full message feedback.
•
Required Item Enforcement — You can define a specific item (e.g., sword or stick) players must be holding to initiate a challenge.
•
World Whitelist Support — Prevent duel interactions in specific worlds if enabled in config.
•
Block Check Integration — Fully respects player block lists in both directions before triggering GUI flow.
•
Request Auto-Accept Logic — If two players interact at the same time, the request is automatically accepted with no GUI steps.
•
Fallback Arena Menu Path — If no prior request exists, the interaction leads directly into the gamemode + arena selection flow.
•
Safe Async Teleportation — Players are teleported only after their destination chunk is fully loaded asynchronously.
•
Arena Chunk Load Modes — Supports `
ON_DEMAND`, `
ALWAYS_LOADED`, `
HYBRID`, and `
ALWAYS_FORCED` for per-arena control.
•
Arena Usage Tracking — Used arenas are auto-marked for chunk ticket persistence (HYBRID/ON_DEMAND).
•
Teleport Delay Countdown — Configurable wait time with countdown messages like “Teleporting in {seconds}...”.
•
Cancel-on-Move/Interact/Damage — Players who move, click, or take damage during delay can cancel the teleport mid-way.
•
Duel-Aware Validation — If a teleport is duel-related, it verifies duel session validity before completing.
•
Chunk Keep-Alive System — Actively used arenas retain chunk tickets for 30 minutes after last usage, then auto-unload.
•
Teleport Session Model — Tracks chunk readiness, countdown, arena metadata, cancellation conditions, and teleport lifecycle flags.
•
Graceful Cleanup Hooks — Automatically clears session memory and cancels countdown tasks if a teleport is interrupted or completed.
•
Optimized for PvP Flow — Works seamlessly for solo and team duels, admin teleports, and arena returns.
•
Player Death & Quit Detection — Cancels pending teleports if a player logs out or dies during countdown.
•
Integrated Queue Fallback — On teleport failure (e.g. arena unload), players are re-queued safely or given feedback.
•
Full Config Toggles — Every cancellation trigger and delay timer is toggleable in `config.yml`.
•
MiniMessage Everywhere — Every message, title, lore, button, hover, and prefix supports full MiniMessage formatting.
•
PlaceholderAPI Integration — Player data and placeholders are resolved dynamically in every response message.
•
Hover & Click Metadata — Messages support tooltips, clickable actions (suggest/run/open URL), and button components.
•
Configurable Prefix System — Prefixes are centrally controlled and can be toggled per-message.
•
BossBar Announcements — Show animated bossbars with optional progress fade and timed hide logic.
•
ActionBar Messaging — Send color-coded actionbars with fade-in/fade-out and duration control.
•
Sound Feedback System — Trigger multi-version-compatible sounds per message using the `SoundCompatModel`.
•
Particle Response Manager — Send particles above players with offset, speed, and count — fully defined in YAML.
•
Potion Effect Triggers — Apply potion effects like Speed or Haste from messages, configurable in message sections.
•
Paginated Help with Effects — Help menus trigger bossbars, particles, and sounds to guide user flow.
•
Component Builders for Buttons — Fully structured buttons with hover/click/clickType, dynamically inserted via `{components}` lists.
•
Arena + Queue Message Models — Each subsystem (arena, kit, queue) has its own YAML message file and models for separation of concerns.
•
Failsafe Logging & Deserialization — Invalid configs are caught and reported, with player fallback messaging.
Need help, found a bug, or have a feature suggestion?
Join our official Discord for fast responses and community discussion!