COWMODSКаталог модов

PvPIndex Battles

Official plugin for PvPIndex leaderboard

Автор: pvpindex2310обновлён 26 июл. 2026 г.
ЭкономикаМеханики игрыМини-игры

Описание

PvPIndex Battles is a competitive PvP plugin for Paper, Folia, Purpur, Spigot, BungeeCord, and Velocity servers. It adds a full 1v1 duel and ranked matchmaking system with per-mode ELO ratings, persistent global leaderboards, battle replays, and a moderation suite - all synced to pvpindex.com so your players' rankings persist across the entire network.

Supported game modes: Crystal PvP · Sword PvP · Pot PvP · NoDebuff · Soup PvP · Axe PvP · Mace PvP · Boxing · Sumo · UHC · SMP


Features

  • 11 ranked game modes - Crystal, Sword, Pot, NoDebuff, Soup, Axe, Mace, Boxing, Sumo, UHC, SMP - each with independent ELO ladders and separate leaderboards
  • 1v1 matchmaking queue - fully configurable 54-slot GUI with per-mode ELO, countdowns, and automatic arena teleportation
  • Cross-server duels - /battle challenge <player> [mode] works standalone or routes through a Velocity or BungeeCord proxy
  • Network-wide tab completion - proxy broadcasts all online players so /battle challenge <TAB> shows names from every backend server
  • Battle replay system - frame-by-frame recording, reviewable in-game with /pvpmod replay <id>
  • Arena pool - procedural, schematic, and world-copy generation strategies; four bundled schematics included
  • Moderation suite - player reports, local bans, federated network-wide bans, real-time spectating
  • PlaceholderAPI integration - ELO, rank, win/loss, queue state, and active mode placeholders for scoreboards and tab lists
  • Fully configurable messages via messages.yml
  • HMAC-signed payloads - battles are cryptographically signed before submission; the API rejects anything tampered with
  • Open ELO formula - K=32 trust-weighted implementation published under MIT at github.com/PVP-Index/battle-validator
  • Folia compatible - runs on Folia, Paper, Purpur, Spigot, and Bukkit (1.21+)

Requirements

RequirementVersion
Java21+ (25+ for Paper API 26.1.x)
Paper / Folia / Purpur / Spigot1.21.x or 1.21.4+ (API 26.1.x)
Velocity or BungeeCord (optional)Velocity 3.x / BungeeCord 1.21+
PlaceholderAPI (optional)2.11+
PvPIndex API keyFree at pvpindex.com

Installation

Paper / Folia / Purpur / Spigot

  1. Drop PvPIndexBattles-<version>.jar into plugins/.
  2. Start the server, configs are generated automatically.
  3. Stop the server, then add your API key to plugins/PvPIndexBattles/config.yml:
api:
  api_key: "your-api-key-here"

server:
  id: "my-server"
  1. Restart and run /pvpindex to confirm everything loaded correctly.

Velocity / BungeeCord (optional)

Drop PvPIndexBattles-velocity-<version>.jar into your proxy plugins/ folder and configure plugins/pvpindex-battles/config.properties with the same API key and shared secret as your backend servers.

→ Full proxy setup guide: docs.pvpindex.com/server_owner/proxy-setup


Commands

/battle Players

CommandDescription
/battleOpen the matchmaking mode selection GUI
/battle challenge <player> [mode]Send a duel challenge
/battle accept <id>Accept a challenge
/battle decline <id>Decline a challenge
/battle leaveLeave the queue or forfeit an active battle

/pvpindex Admins

CommandPermissionDescription
/pvpindex reloadpvpindex.reloadReload plugin config
/pvpindex submissionspvpindex.adminView pending battle submissions
/pvpindex syncpvpindex.adminRetry unsubmitted battles
/pvpindex retryfailedpvpindex.adminRetry failed API submissions

/pvpmod Moderation

CommandPermissionDescription
/pvpmod watch <player>pvpindex.modSpectate a live battle
/pvpmod replay <id>pvpindex.modPlay back a recorded battle
/pvpmod report <player> <reason>pvpindex.mod.reportReport a player
/pvpmod ban <player> <duration> <reason>pvpindex.mod.banBan a player from battles
/pvpmod unban <player>pvpindex.mod.banUnban a player

PlaceholderAPI

PlaceholderReturns
%pvpindex_elo%Overall ELO rating
%pvpindex_elo_<mode>%ELO for a specific mode
%pvpindex_rank%Global ladder position
%pvpindex_wins%Session wins
%pvpindex_losses%Session losses
%pvpindex_kd%Win/loss ratio
%pvpindex_in_battle%true / false
%pvpindex_queued%true / false
%pvpindex_queued_mode%Current queue mode or none
%pvpindex_battle_type%Display name of the active mode

Configuration

# plugins/PvPIndexBattles/config.yml
api:
  api_key: ""
  base_url: "https://api.pvpindex.com/api"

server:
  id: "my-server"
  require_signature: false   # Recommended: set to true in production
  debug: false

arena:
  world_prefix: "pvpindex_arena"
  cleanup_delay_ticks: 100

queue:
  max_wait_seconds: 120

→ Full reference: docs.pvpindex.com/server_owner/configuration


Links


Licence

The ELO validator is published under MIT. See LICENSE for the plugin itself.

Последние версии

Все версии →
release

PvPIndex Battles 1.1.2 (BungeeCord)

1.1.2-bungeecord
26 июл. 2026 г.18Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2bungeecord, waterfall
Скачать
Что нового
### Added - Configurable `api.max_api_payload_bytes` limit (default 5 MB) guarding outgoing battle submissions; oversized payloads are automatically trimmed before submission via the new `BattlePayloadSizeGuard`. - Battle submissions to the PvPIndex API are now gzip-compressed (`Content-Encoding: gzip`), reducing bandwidth for large replay payloads. - Oversized submissions rejected by the API with HTTP 413 are automatically retried with replay frames stripped, instead of failing outright. - New message key `queue.arena_teleport_failed` shown when a match cannot start because the arena world was not ready. ### Changed - Split the monolithic `BattleService` into focused collaborators (`BattleStartHandler`, `BattleEndHandler`, `BattleSubmissionFlow`, `BattleSubmissionRetryHandler`, `BattlePayloadBuilder`, `BattleStartSetupStore`) for clearer separation of concerns and easier testing. - Extracted API request/compression helpers (`ApiRequestBuilder`, `CompressionService`) shared by the Paper API client. ### Fixed - **Arena teleport failures no longer strand players in survival with their kit.** `BattleQueueService` now checks the result of the arena teleport; on failure the match is aborted, both players' pre-battle state is restored, and queued players are automatically re-queued instead of being left in the arena template world wearing battle gear. - **Arena world save race on cleanup**: arena worlds now have autosave disabled immediately after creation, and their folders are deleted a few ticks after unload (with retries) instead of synchronously, preventing `NoSuchFileException` on `raids.dat` / `level.dat` under Multiverse and similar world-management plugins. ---
release

PvPIndex Battles 1.1.2 (Velocity)

1.1.2-velocity
26 июл. 2026 г.13Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2velocity
Скачать
Что нового
### Added - Configurable `api.max_api_payload_bytes` limit (default 5 MB) guarding outgoing battle submissions; oversized payloads are automatically trimmed before submission via the new `BattlePayloadSizeGuard`. - Battle submissions to the PvPIndex API are now gzip-compressed (`Content-Encoding: gzip`), reducing bandwidth for large replay payloads. - Oversized submissions rejected by the API with HTTP 413 are automatically retried with replay frames stripped, instead of failing outright. - New message key `queue.arena_teleport_failed` shown when a match cannot start because the arena world was not ready. ### Changed - Split the monolithic `BattleService` into focused collaborators (`BattleStartHandler`, `BattleEndHandler`, `BattleSubmissionFlow`, `BattleSubmissionRetryHandler`, `BattlePayloadBuilder`, `BattleStartSetupStore`) for clearer separation of concerns and easier testing. - Extracted API request/compression helpers (`ApiRequestBuilder`, `CompressionService`) shared by the Paper API client. ### Fixed - **Arena teleport failures no longer strand players in survival with their kit.** `BattleQueueService` now checks the result of the arena teleport; on failure the match is aborted, both players' pre-battle state is restored, and queued players are automatically re-queued instead of being left in the arena template world wearing battle gear. - **Arena world save race on cleanup**: arena worlds now have autosave disabled immediately after creation, and their folders are deleted a few ticks after unload (with retries) instead of synchronously, preventing `NoSuchFileException` on `raids.dat` / `level.dat` under Multiverse and similar world-management plugins. ---
release

PvPIndex Battles 1.1.2 (Paper)

1.1.2-paper
26 июл. 2026 г.130Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2bukkit, folia, paper, purpur, spigot
Скачать
Что нового
### Added - Configurable `api.max_api_payload_bytes` limit (default 5 MB) guarding outgoing battle submissions; oversized payloads are automatically trimmed before submission via the new `BattlePayloadSizeGuard`. - Battle submissions to the PvPIndex API are now gzip-compressed (`Content-Encoding: gzip`), reducing bandwidth for large replay payloads. - Oversized submissions rejected by the API with HTTP 413 are automatically retried with replay frames stripped, instead of failing outright. - New message key `queue.arena_teleport_failed` shown when a match cannot start because the arena world was not ready. ### Changed - Split the monolithic `BattleService` into focused collaborators (`BattleStartHandler`, `BattleEndHandler`, `BattleSubmissionFlow`, `BattleSubmissionRetryHandler`, `BattlePayloadBuilder`, `BattleStartSetupStore`) for clearer separation of concerns and easier testing. - Extracted API request/compression helpers (`ApiRequestBuilder`, `CompressionService`) shared by the Paper API client. ### Fixed - **Arena teleport failures no longer strand players in survival with their kit.** `BattleQueueService` now checks the result of the arena teleport; on failure the match is aborted, both players' pre-battle state is restored, and queued players are automatically re-queued instead of being left in the arena template world wearing battle gear. - **Arena world save race on cleanup**: arena worlds now have autosave disabled immediately after creation, and their folders are deleted a few ticks after unload (with retries) instead of synchronously, preventing `NoSuchFileException` on `raids.dat` / `level.dat` under Multiverse and similar world-management plugins. ---
release

PvPIndex Battles 1.1.1 (BungeeCord)

1.1.1-bungeecord
16 июл. 2026 г.8Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2bungeecord, waterfall
Скачать
Что нового
### Added - Kit item support for per-item `potion_effects` in `gamemodes.yml`. Potion items can now define explicit effects using `TYPE:durationTicks:amplifier` (for example, `INSTANT_HEALTH:1:1`). - New PlaceholderAPI placeholder `%pvpindex_battle_short_id%` returning the current game mode plus the first segment of the active battle UUID (e.g. `mace-550e8400`). - New PlaceholderAPI placeholders `%pvpindex_battle_id%` (full battle UUID) and `%pvpindex_short_battle_id%` (first segment only). - Configurable double-teleport to prevent `/back` commands from teleporting to the arena after battle end. When `battle_commands.prevent_back_command` is enabled (default), players are teleported twice to their restored location so `/back` points to a safe post-battle location instead of the arena. ### Fixed - Ender pearls, chorus fruit, bows, crossbows, fire charges, and wind charges can no longer be used during the pre-battle countdown, preventing players from moving or attacking before the battle has officially started. - Added `BattleSessionCache` for O(1) player-to-active-battle lookups, replacing linear scans in event handlers. - Split `BattleEventListener` into focused listener classes under `com.pvpindex.battles.listener.battle` (one `@EventHandler` per class) and a thin backward-compatible facade. - Pot PvP and NoDebuff starter kits no longer give empty splash potions. The default `SPLASH_POTION` entries in `gamemodes.yml` now include explicit potion effects (Healing II, Strength II, Speed II, and Regeneration II where applicable). - Kit item display names and lore now translate legacy `&` colour codes when applied, so potion names like `&aHealing II` render with colours in-game instead of raw ampersand codes. - Tipped arrows in kits now apply their configured potion effect on hit. `KitApplier` derives a base `PotionType` from the first item effect so the game recognises the arrow payload. - Network node timeout boundary handling is now inclusive, fixing `proxyNodeTimeoutDetection` for `isTimedOut(0)` and preventing zero-second timeout edge-case mismatches. - README build output examples now reference `1.1.1` JAR filenames to match the current Maven project version. ---
release

PvPIndex Battles 1.1.1 (Velocity)

1.1.1-velocity
16 июл. 2026 г.11Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2velocity
Скачать
Что нового
### Added - Kit item support for per-item `potion_effects` in `gamemodes.yml`. Potion items can now define explicit effects using `TYPE:durationTicks:amplifier` (for example, `INSTANT_HEALTH:1:1`). - New PlaceholderAPI placeholder `%pvpindex_battle_short_id%` returning the current game mode plus the first segment of the active battle UUID (e.g. `mace-550e8400`). - New PlaceholderAPI placeholders `%pvpindex_battle_id%` (full battle UUID) and `%pvpindex_short_battle_id%` (first segment only). - Configurable double-teleport to prevent `/back` commands from teleporting to the arena after battle end. When `battle_commands.prevent_back_command` is enabled (default), players are teleported twice to their restored location so `/back` points to a safe post-battle location instead of the arena. ### Fixed - Ender pearls, chorus fruit, bows, crossbows, fire charges, and wind charges can no longer be used during the pre-battle countdown, preventing players from moving or attacking before the battle has officially started. - Added `BattleSessionCache` for O(1) player-to-active-battle lookups, replacing linear scans in event handlers. - Split `BattleEventListener` into focused listener classes under `com.pvpindex.battles.listener.battle` (one `@EventHandler` per class) and a thin backward-compatible facade. - Pot PvP and NoDebuff starter kits no longer give empty splash potions. The default `SPLASH_POTION` entries in `gamemodes.yml` now include explicit potion effects (Healing II, Strength II, Speed II, and Regeneration II where applicable). - Kit item display names and lore now translate legacy `&` colour codes when applied, so potion names like `&aHealing II` render with colours in-game instead of raw ampersand codes. - Tipped arrows in kits now apply their configured potion effect on hit. `KitApplier` derives a base `PotionType` from the first item effect so the game recognises the arrow payload. - Network node timeout boundary handling is now inclusive, fixing `proxyNodeTimeoutDetection` for `isTimedOut(0)` and preventing zero-second timeout edge-case mismatches. - README build output examples now reference `1.1.1` JAR filenames to match the current Maven project version. ---
release

PvPIndex Battles 1.1.1 (Paper)

1.1.1-paper
16 июл. 2026 г.32Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2bukkit, folia, paper, purpur, spigot
Скачать
Что нового
### Added - Kit item support for per-item `potion_effects` in `gamemodes.yml`. Potion items can now define explicit effects using `TYPE:durationTicks:amplifier` (for example, `INSTANT_HEALTH:1:1`). - New PlaceholderAPI placeholder `%pvpindex_battle_short_id%` returning the current game mode plus the first segment of the active battle UUID (e.g. `mace-550e8400`). - New PlaceholderAPI placeholders `%pvpindex_battle_id%` (full battle UUID) and `%pvpindex_short_battle_id%` (first segment only). - Configurable double-teleport to prevent `/back` commands from teleporting to the arena after battle end. When `battle_commands.prevent_back_command` is enabled (default), players are teleported twice to their restored location so `/back` points to a safe post-battle location instead of the arena. ### Fixed - Ender pearls, chorus fruit, bows, crossbows, fire charges, and wind charges can no longer be used during the pre-battle countdown, preventing players from moving or attacking before the battle has officially started. - Added `BattleSessionCache` for O(1) player-to-active-battle lookups, replacing linear scans in event handlers. - Split `BattleEventListener` into focused listener classes under `com.pvpindex.battles.listener.battle` (one `@EventHandler` per class) and a thin backward-compatible facade. - Pot PvP and NoDebuff starter kits no longer give empty splash potions. The default `SPLASH_POTION` entries in `gamemodes.yml` now include explicit potion effects (Healing II, Strength II, Speed II, and Regeneration II where applicable). - Kit item display names and lore now translate legacy `&` colour codes when applied, so potion names like `&aHealing II` render with colours in-game instead of raw ampersand codes. - Tipped arrows in kits now apply their configured potion effect on hit. `KitApplier` derives a base `PotionType` from the first item effect so the game recognises the arrow payload. - Network node timeout boundary handling is now inclusive, fixing `proxyNodeTimeoutDetection` for `isTimedOut(0)` and preventing zero-second timeout edge-case mismatches. - README build output examples now reference `1.1.1` JAR filenames to match the current Maven project version. ---
release

PvPIndex Battles 1.1.0

1.1.0
1 июл. 2026 г.19Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, folia, paper, purpur, spigot
Скачать
Что нового
## What's Changed ### Added - **Vault economy rewards** ([#15](https://github.com/PVP-Index/pvpindex-battles/issues/15)): battle winners now receive configurable currency payouts via the Vault API. Fully configured through `vault-rewards.yml` with per-game-mode base amounts and an optional win streak multiplier. Vault is a soft dependency: if not installed, rewards are silently disabled. Closes [#15](https://github.com/PVP-Index/pvpindex-battles/issues/15). - New `vault-rewards.yml` configuration file. All settings live under a top-level `economy:` key with `enabled`, `rewards` (per-mode amounts), and `streak_multiplier` (enabled, increment, max, min_streak) sections. The bundled default ships with `economy.enabled: false` so a fresh install does not pay out until opted in. - New `VaultRewardService` in `platform-paper` that hooks into Vault, listens for `PvPIndexBattleFinishEvent`, and deposits rewards. - New `VaultRewardConfig` record for parsing and validating reward configuration from the `economy` section. - New PlaceholderAPI placeholders: `%pvpindex_reward_last%` (last reward received) and `%pvpindex_streak%` (current win streak). - New lang keys `reward.received` and `reward.received_streak` in all 6 bundled locale files (en, de, nl, es, pl, zh). - Vault status line in the startup summary showing whether economy rewards are active. ### Changed - **Console banner redesign**: startup banner now displays a large ASCII art "PVP INDEX" with a Green-Yellow-Red gradient. Info line shows version, platform, and author (PVP Index). - **Shutdown message**: updated to display "PVP INDEX has been disabled. Goodbye!" in red/grey styling. - **Paper 26.1.x adapter build**: the `paper.26.1.x` version module now compiles against the stable Paper API `26.1.2.build.57-stable` using the Java 25 toolchain, so the adapter builds cleanly across the supported 1.21.x to 26.1.x range. - Upgraded `maven-shade-plugin` to `3.6.2` (bundles ASM 9.8+) so the relocated bStats and Jackson dependencies shade correctly against Java 25 bytecode. ### Fixed - **Cross-server challenges from a lobby**: challenging a player who was on a backend server (or behind another proxy) from a lobby silently timed out. Lobby servers relied on a player-location cache that went stale once a player moved to a non-lobby backend, so the challenge was routed to a node where the target was not present. The lobby now only uses the direct lobby-to-lobby Redis path when the cache confirms the target is on a live lobby node; otherwise it broadcasts the challenge over Redis to the proxies, which authoritatively resolve the target's current server and forward it. Challenges now work from any server to any server. - **Proxy challenge routing over Redis**: Velocity proxies now handle inbound `CHALLENGE_SEND` messages over Redis (not only plugin messaging), resolving the target across all connected backends and forwarding the challenge. This removes the dependency on plugin messaging channels, which could break after a backend restarted independently of the proxy. - **SMP challenge confirmation**: accepting an SMP-mode challenge through the risk-confirmation dialog did nothing because closing the inventory cleared the pending GUI state before it was read. The mode and challenge target are now captured before the inventory closes. - **Return-to-origin after a cross-server battle**: players transferred to another server for a battle were left waiting on the host server for two seconds before being returned, which looked like a double teleport. They are now sent straight back to the server they came from once the battle ends. --- --- ### Downloads | JAR | Target | |-----|--------| | `PvPIndexBattles-1.1.0.jar` | Paper 1.21.x / 1.21.4+ | | `PvPIndexBattles-velocity-1.1.0.jar` | Velocity 3.x | | `PvPIndexBattles-bungeecord-1.1.0.jar` | BungeeCord / Waterfall | Full documentation: https://docs.pvpindex.com