ModsJava
Practice - Complete PvP Practice & Duels
Everything a PvP practice server needs: duels, ranked matchmaking, parties, tournaments, FFA
⬇ Download on Spigot
Practice
A complete PvP practice core for Paper 1.21
A complete PvP practice core for Paper 1.21
What this is
Practice is a full practice-server core: matchmaking, duels, kits, arenas, parties,
tournaments, free-for-all, statistics and leaderboards. It is not a duel plugin with
extras bolted on — the match state machine, arena allocation and persistence layer
were designed together so the whole thing behaves consistently under load.
Everything a player sees is configurable. Every message, menu title, scoreboard line
and kit lives in YAML. Nothing user-facing is hardcoded.
Core features
- Ranked & unranked queues — ELO-based matchmaking with a search window that
widens the longer you wait, so nobody sits in queue forever - Duels — direct challenges, kit picker, party-vs-party challenges
- 17 kits included — NoDebuff, Debuff, Boxing, Classic, Sumo, Combo, Gapple,
BuildUHC, BedWars, Archer, Bow, Axe, Sword, Fireball, TNT, OP, FFA - Per-kit ELO — separate rating per kit, plus a global average
- Parties — invite, promote, kick, party chat, party queue, party-vs-party,
party split fights - Tournaments — single and double elimination, automatic brackets, byes,
forfeit handling, round scheduling - Free-for-all — persistent open arenas with instant respawn
- Spectating — watch any live match, with proper visibility handling so
fighters never see spectators - Statistics — wins, losses, kills, deaths, K/D, winrate, winstreaks, best
streak, tournament wins, full match history - Leaderboards — global ELO, per-kit ELO, wins, kills, streaks, tournament wins
- Custom kit layouts — players rearrange their own kit; the editor only keeps
items the kit already grants, so it cannot be abused for extra gear
Parallel arenas
One map can host many simultaneous matches. Set the instance count, run one command,
and the plugin duplicates your arena to offset copies automatically — no WorldEdit needed.
Code (Text):
/arena instances classic1 4
/arena copy classic1
/arena copy classic1
recorded and rolled back. Reset cost scales with what players did, not with the size
of your map, which is what makes a lot of concurrent matches practical.
Built for performance
- All database work is asynchronous and pooled with HikariCP. The main thread never
blocks on I/O. - One shared tick loop per subsystem instead of one scheduler task per match — 200
concurrent matches cost one timer, not 200. - Arena resets and arena copying are budgeted per tick, so they never spike.
- Every subsystem releases its reference to a player on quit; disconnects do not leak.
In-game setup
No YAML editing required to get started. Build your map, then:
Code (Text):
/practice setlobby
/arena create classic1
/arena pos1 classic1
/arena pos2 classic1
/arena spawn1 classic1
/arena spawn2 classic1
/arena enable classic1
/arena create classic1
/arena pos1 classic1
/arena pos2 classic1
/arena spawn1 classic1
/arena spawn2 classic1
/arena enable classic1
Configuration
- config.yml — database, lobby hotbar, arenas, matches, queues, ELO, parties
- messages.yml — every player-facing string (MiniMessage, legacy &-codes work too)
- scoreboard.yml — per-state sidebar layouts and tablist
- menus.yml — menu titles and sizes
- kits/ — one file per kit; drop in a file to add a kit, no restart
Kits are readable, not base64 blobs:
Code (Text):
items:
armor:
helmet: 'DIAMOND_HELMET protection:2 unbreaking:3 unbreakable hideflags'
inventory:
0: 'DIAMOND_SWORD sharpness:3 fire_aspect:1 unbreakable name:"<red>Blade"'
1: 'ENCHANTED_GOLDEN_APPLE:8'
armor:
helmet: 'DIAMOND_HELMET protection:2 unbreaking:3 unbreakable hideflags'
inventory:
0: 'DIAMOND_SWORD sharpness:3 fire_aspect:1 unbreakable name:"<red>Blade"'
1: 'ENCHANTED_GOLDEN_APPLE:8'
building, hunger, regeneration, fall damage, knockback, hit delay, time limit, lives,
allowed potions and pearls, pearl cooldown, void and liquid death, allowed commands.
Database
SQLite by default — zero setup, works out of the box. Switch to PostgreSQL with four
lines of config when you outgrow it. Nothing else changes.
PlaceholderAPI
Optional. When installed, every stat is exposed as %practice_<key>% —
ELO, wins, losses, K/D, streaks, queue time, opponent name and ping, party size and more.
Third-party placeholders also work inside Practice's own scoreboard and messages.
Commands
Code (Text):
/duel <player> [kit] /queue [ranked|unranked] [kit]
/party <...> /profile [player] /stats [player]
/leaderboard [type] /spectate [player] /rematch
/tournament <...> /kit [edit|save] /ffa [arena]
/leave /arena <...> /practice <...>
/party <...> /profile [player] /stats [player]
/leaderboard [type] /spectate [player] /rematch
/tournament <...> /kit [edit|save] /ffa [arena]
/leave /arena <...> /practice <...>
Requirements
- Paper 1.21.11 (or a Paper fork). Spigot is not supported — the plugin uses the
Paper API directly. - Java 21
- PlaceholderAPI is optional
Support
https://discord.gg/9bNgeVAWYd
SHA-256: 4ECC51884B80B8507D956639CCF8319D117C5174A6C0D11A662AF972982BB7F6
Notes
This is the 1.0.1 release. It has been verified end to end on a live Paper 1.21.11
server — joining, queueing, duelling, match start and finish, ELO application,
parties, tournaments, spectating and all GUIs. If you hit something, open a ticket
and I will fix it.
Practice - Complete PvP Practice & Duels is a free Minecraft Java mod. Compatible with Minecraft 1.21. Downloaded 16 times (via Spigot). Download it and open it directly in the game.