Plugins / PracticeCore
PracticeCore Coming soon
Full practice PvP core: ranked ELO, duels, 2v2, parties, tournaments, kit editor, arena copies.
Get PracticeCore
Coming soon Not on sale yet. This page gets a buy button the day it is.
Try it live
PracticeCore runs on a public demo server, set up so you can use it yourself. Join, try it, then decide.
Address: try.zeropvp.xyz:25570 (Java Edition 1.21.11)
In Minecraft: Multiplayer, Add Server, paste the address, Join. Type /demo go practicecore to land at its booth, or right-click the compass and pick it. The world resets every night.
Free version: PracticeCoreLite
PracticeCoreLite is free to download and run on your servers. It does the basics of PracticeCore; the paid plugin adds the rest.
In PracticeCoreLite: Kits from your inventory, rules (hunger, regen, fall damage, sumo water), arena tags; Arena wizard, auto box; Unranked queue per kit; Duels with best of 1, 3 or 5 and an arena picker; Lobby hotbar, dialog menus, editable messages and theme; Fight summary with damage, hits, combo and potions.
Only in PracticeCore: Build kits and arena reset; Arena copies; Ranked queues, ELO, divisions, seasons; Kit editor; Parties, party fights, 2v2 queue; Tournaments; Spectating; Stats, history, leaderboards, match inventories; Scoreboard, PlaceholderAPI, reward commands, player settings.
Moving up: Lite turns itself off when PracticeCore is installed. To move up, copy plugins/PracticeCoreLite/kits.yml and arenas.yml into plugins/PracticeCore/, remove the Lite jar, and restart. Permission names are the same.
Overview
PracticeCore
A complete practice PvP server in one plugin: queues, ranked, duels, parties and tournaments
Everything a practice server needs, without a stack of plugins that do not know about each other. Save a kit from your inventory, walk an arena through a wizard, copy it five times with one command, and players can queue, duel, climb a ranked ladder, fight in parties and play tournaments. Every menu is a real Minecraft dialog window, and every word on it is yours to change in config.yml.
A NoDebuff duel: the action bar counts time, combo and hits, the sidebar the score.
- Latest version
- 1.2.0
- Server
- Paper or Purpur, Java 21
- BuiltByBit
- coming soon
What changed in 1.2.0
- New: leaderboard holograms. Stand in your lobby and run /practice hologram create <name> <kit|global> to place floating text that shows the top players of a ranked kit or the global board. It updates itself, needs no hologram plugin, and survives restarts (kept in holograms.yml).
- New commands: /practice hologram move <name> (moves it to where you stand), /practice hologram delete <name> and /practice hologram list. All need practicecore.admin and have tab completion.
- New config section holograms: enabled, lines (places shown), update-seconds, background (an #AARRGGBB colour) and scale (text size). The text is in the new messages hologram-title, hologram-line-top, hologram-line, hologram-empty and hologram-footer.
- New: a setup checklist. /practice setup lists what a new server still has to do (lobby, a kit, a ready arena, an arena for every kit), with the command for each missing step one click away. Staff who join while a step is open see it once per server start, and the staff screen (/practice admin) lists the open steps too. Once everything is done it stops showing on its own.
- New setting setup-hints (default true) turns the checklist on join off.
- /practice help lists the new commands for staff.
- An existing config.yml does not need the new keys: without them the defaults above are used. Add them only if you want to change a value or a text.
Features
Why server owners pick it
- One plugin instead of a stack that does not talk to each other
- Ranked ELO with divisions, plus unranked and a 2v2 queue
- Tournaments that run their own bracket
- Arenas copy themselves and reset after every fight
- Every menu is a real dialog window, every word in config.yml
What makes it different
- Queues, ranked, duels, parties and tournaments in one plugin, so every part knows about the others
- Arenas copy themselves with one command, and every block changed in a fight is put back when it ends
- Every menu is a dialog window, and every word on it is in config.yml
Works with
- Paper or Purpur 1.21.11 (or newer 1.21.x), Java 21+
- No other plugins required. PlaceholderAPI is optional.
- Data is stored in SQLite in the plugin folder; the driver is downloaded by the server on first start. MySQL is not supported in this version.
- Folia is not supported.
- Built for one server: no proxy or BungeeCord features. Fights happen in arenas inside your own worlds.
- Item pictures in menus need a 1.21.9 or newer client; older clients see the words only.
- No DRM, no licence key and no licence server; the code is not obfuscated
Highlights
- Set up in game: staff screens for kits and an arena wizard that says exactly what is still missing.
- One arena, many copies: /practice arena copy arena1 5 pastes the map side by side, a few thousand blocks per tick, and registers every copy.
- Arenas put themselves back: every block placed, broken, burned, flooded or blown up during a fight is restored when it ends. Build kits just work.
- Numbers after every fight: damage, hits, longest combo, potions and health left, the rating change, a rematch button and every fighter's inventory one click away.
What you get: kits and the kit editor
- New in v1.2.0: Leaderboard holograms: /practice hologram create places self-updating top lists of any ranked kit or the global board, no hologram plugin needed
- New in v1.2.0: Setup checklist: /practice setup lists what a new server still needs (lobby, kit, arena) with the fix one click away
- Create a kit from your inventory: items, armour, offhand and active potion effects, kept exactly (enchantments, names, trims, potions)
- Rules per kit: ranked, unranked, building, hunger, natural regeneration, fall damage, and "touching water loses the round" for sumo
- Arena tags per kit, so sumo fights only in sumo arenas and build kits only in build arenas
- Kit editor: a chest laid out like the player's own inventory; drag the items, press Save, used in every fight of that kit
- Items can only move inside the editor, never in or out
Arenas
- Two spawns and a box, set with a wizard; "Auto box" draws the box round both spawns in one click
- Arena copies: paste any number side by side (chests and signs keep their contents) and remove them again with one command
- Automatic reset after every round and every fight: blocks, water and lava, fire, falling blocks and explosions, plus dropped items, arrows, pearls and crystals
- One fight per arena; the plugin picks a free arena that fits the kit
- Pearls cannot leave the arena and falling out of it counts as a death
Queues and ratings
Ranked queues per kit, with your rating and how many are waiting.
- Unranked and ranked queues per kit, from the hotbar or /queue, /ranked, /unranked
- ELO per kit with a configurable start, K-factor and floor; the ranked search starts close and widens the longer you wait
- Divisions (Bronze to Master by default), named and placed in config.yml
- 2v2 party queue: a party of two queues and fights the next party of two
- Seasons: one command puts every ranked rating back to the start
- Optional: a number of unranked wins before ranked opens
Duels and fights
The countdown before a duel, players frozen in place.
The match summary in chat, with each fighter's hits, combo and pots.
- /duel <player> opens a duel screen: kit, best of 1, 3 or 5, and the arena; or skip it with /duel <player> <kit> [rounds] [arena]
- Clickable Accept and Decline; players can switch duel requests off in /settings
- Countdown with titles, frozen in place until it ends; an action bar with time, combo and hits
- Match inventories: each name in the summary opens what that fighter had left (items, armour, health, hunger, healing left, effects)
- Reward commands for winners and losers, separate for ranked
Parties and tournaments
- Parties: create, invite (clickable), join, leave, kick, disband, party chat
- Split fight, party FFA, party against party, and the 2v2 queue
- Tournaments: /event host <kit> opens sign-up with a clickable [JOIN] message and reminders, then a single-elimination bracket plays itself out
- Fights of a round run side by side, odd players get a bye, and a sumo kit makes a sumo event
- Winner commands for tournaments
Leaderboards, stats, scoreboard
Self-updating leaderboard holograms, global and per kit.
- /leaderboard: the top players of every ranked kit and a global board, with your own place
- /stats and /history for anybody who has played here
- A built-in sidebar with its own lines for the lobby, the queue, a fight, spectating and tournaments, all in config.yml; players can hide it
- /spectate any fight, or pick one from the list
Menus
The main menu: unranked, ranked, duels, party, kit editor, leaderboards, stats, tournaments.
- Every screen is a native Minecraft dialog window: the main menu, queues, duel setup, kit editor list, leaderboards, stats, history, party, tournaments, settings, spectate list and the staff screens
- Real item pictures beside the buttons, drawn from the client's own textures: no resource pack
- Every title, button, tooltip and message is a key in config.yml, in MiniMessage, with one theme block that re-colours everything
PlaceholderAPI
Optional. When PlaceholderAPI is installed, any scoreboard, tab or hologram plugin can show:
%practicecore_elo_<kit>% %practicecore_division_<kit>%
%practicecore_wins_<kit>% %practicecore_losses_<kit>%
%practicecore_ranked_wins_<kit>% %practicecore_ranked_losses_<kit>%
%practicecore_streak_<kit>% %practicecore_best_streak_<kit>%
%practicecore_position_<kit>% %practicecore_global_elo% %practicecore_global_division%
%practicecore_total_wins% %practicecore_total_losses%
%practicecore_lb_<kit|global>_<place>_<name|elo|wins|losses|division>%
%practicecore_status% %practicecore_queue_kit% %practicecore_queue_type% %practicecore_queue_time%
%practicecore_match_kit% %practicecore_match_opponent% %practicecore_match_score%
%practicecore_match_time% %practicecore_match_combo% %practicecore_match_hits%
%practicecore_party_size% %practicecore_party_leader%
%practicecore_queued_total% %practicecore_fighting_total%
%practicecore_queued_<kit>% %practicecore_fighting_<kit>%
%practicecore_event_state% %practicecore_event_kit% %practicecore_event_players%
%practicecore_event_round% %practicecore_event_seconds%
The built-in sidebar reads PlaceholderAPI placeholders of other plugins too.
FAQ
Which servers does it run on?
Paper or Purpur 1.21.11 or a newer 1.21.x, with Java 21.
Do I need other plugins?
No. PlaceholderAPI is optional, and SQLite is built in.
Is there DRM or a licence key?
No. There is nothing to activate and no licence server to reach, and the code is not obfuscated.
How long does setup take?
Drop the jar into /plugins and restart. The setup guide above has 6 short steps.
Can I try it before I buy?
Yes. This page has a test server with the plugin installed.
Where do I get help?
In the active support Discord, in the discussion tab on this page, or in the documentation.
Do I need a hologram plugin for leaderboards?
No. /practice hologram create places self-updating leaderboard holograms on its own.
Updates
Released on October 14, 2026 and updated once since. The latest version is v1.2.0 (October 16, 2026). Every update is free, new Minecraft versions included.
Also by Frostyh
- KitLayouts: kits players arrange themselves
- ArenaBots: PvP training bots that fight back
- TierTags: tier lists and tags in tab and above heads
- Complete Collection: all my published plugins in one purchase, 40% off
If this plugin helps your server, a short review on this page would mean a lot. Thank you!
Installation
Requirements
- Server software
- Paper, or a Paper fork such as Purpur. Spigot and CraftBukkit are not supported: the plugin uses Paper-only APIs.
- Minecraft version
- plugin.yml api-version 1.21; built against Paper API 1.21.11
- Java
- 21 or newer
- Required plugins
- none
- Optional plugins
PlaceholderAPI- Libraries
org.xerial:sqlite-jdbc:3.53.2.1, downloaded by the server at startup (plugin.yml libraries)
Steps
- Download
PracticeCore.jarfrom BuiltByBit. There is no licence key to enter. - Stop the server and put the jar into the
pluginsfolder. - Start the server. The plugin creates
plugins/PracticeCore/config.ymlwith the defaults shown under Configuration. - Edit
config.ymlto suit your server. - Apply the changes with
/practice reload, or restart the server.
Setup guide
- Drop PracticeCore.jar into /plugins and restart. (PlaceholderAPI is optional.)
- Stand in your lobby and run /practice setlobby.
- Put a kit in your inventory (armour on, offhand set, potion effects if you want them) and run /practice kit create nodebuff.
- Build an arena, run /practice arena setup arena1, and press Spawn 1, Spawn 2 and Auto box where you stand.
- Optional: /practice arena copy arena1 5 for five more, and kit rules and arena tags in /practice admin.
- Players right-click the hotbar items, or use /queue, /ranked, /duel, /party and /event.
Commands
From plugin.yml. "Not set" in the permission column means plugin.yml attaches no permission to the command itself; the nodes the plugin checks are listed under Permissions.
| Command | Aliases | Usage | Description | Permission |
|---|---|---|---|---|
/practice | /prac, /pc | /practice [help|admin|setup|kit|arena|hologram|setlobby|lobby|reload|refresh|end|elo|season] | The practice menu, and the staff tools behind it. | not set |
/duel | none | /duel <player> [kit] [rounds] [arena] | /duel accept|decline [player] | Challenge a player, or answer a challenge. | not set |
/queue | none | /queue [kit] [unranked|ranked] | Join a queue. | not set |
/ranked | none | /ranked [kit] | The ranked queues. | not set |
/unranked | none | /unranked [kit] | The unranked queues. | not set |
/leave | none | /leave | Leave your queue, your fight or the fight you are watching. | not set |
/spectate | /spec | /spectate [player] | Watch a fight. | not set |
/leaderboard | /lb, /leaderboards | /leaderboard [kit] | The leaderboards. | not set |
/stats | none | /stats [player] | Ratings and records. | not set |
/history | /matches | /history [player] | Recent fights. | not set |
/kiteditor | /editkit, /layout | /kiteditor [kit] | Arrange your kits. | not set |
/party | none | /party [create|invite|join|leave|kick|disband|chat|split|ffa|duel|info] | Parties and party fights. | not set |
/event | /tournament, /events | /event [join|leave|status|host <kit>|start|cancel] | Tournaments. Join, leave and watch; staff host, start and cancel. | not set |
/matchinv | /matchinventory, /minv | /matchinv <id> | Open a fighter's inventory from the end of a fight. | not set |
/settings | /practicesettings | /settings | Your own switches, such as duel requests and the scoreboard. | not set |
Subcommands in detail
Players:
/practice The main menu (aliases /prac, /pc).
/queue [kit] [unranked|ranked] Join a queue, or open the queue screen.
/ranked [kit] /unranked [kit] The ranked and unranked queues.
/duel <player> [kit] [rounds] [arena] Challenge somebody (no kit: the duel screen).
/duel accept|decline [player] Answer a challenge.
/leave Leave your queue, fight, audience or tournament.
/spectate [player] Watch a fight (alias /spec).
/kiteditor [kit] Arrange your kits (aliases /editkit, /layout).
/leaderboard [kit] Leaderboards (aliases /lb, /leaderboards).
/stats [player] Ratings and records.
/history [player] Recent fights (alias /matches).
/matchinv <id> A fighter's inventory after a fight.
/settings Duel requests and the scoreboard on or off.
/event [join|leave|status] Tournaments (alias /tournament).
/party create|invite|join|leave|kick|disband|chat|split|ffa|duel|queue|info
/practice setup What is still missing, with one-click fixes.
/practice hologram create <name> <kit|global> · move · delete · list
Staff:
/practice admin The staff screens: kits, arenas, lobby, reload.
/practice setlobby | lobby Set or visit the lobby spawn.
/practice kit create <kit> [player] Save an inventory as a kit.
/practice kit items <kit> [player] Replace a kit's items.
/practice kit load <kit> Put the kit on yourself to change it.
/practice kit set <kit> <rule> true|false ranked, unranked, build, hunger, regen, water-kills, fall-damage
/practice kit tags|icon|display|edit|delete|list ...
/practice arena setup <arena> Create it if needed and open the wizard.
/practice arena spawn1|spawn2|corner1|corner2 <arena> [x y z [yaw pitch] [world]]
/practice arena autobox|tags|enable|disable|tp|info|delete|list ...
/practice arena copy <arena> <count> Paste copies and register them.
/practice arena removecopies <arena> Remove the copies, blocks included.
/event host <kit> | start | cancel Run a tournament.
/practice end <player> End a fight with no winner.
/practice elo <player> <kit|all> <value|reset>
/practice season reset confirm A new ranked season.
/practice refresh | reload
Every staff command except the menus also works from the console.
Permissions
From plugin.yml.
| Node | Default | Description | Children |
|---|---|---|---|
practicecore.event.host | operators | Host, start early and cancel tournaments. | none |
practicecore.event.join | everyone | Join tournaments and hear about them. | none |
practicecore.duel.bypass | operators | Send duel requests to players who switched them off. | none |
practicecore.admin | operators | Kits, arenas, the lobby, reload, ending fights and setting ratings. | none |
practicecore.duel | everyone | Send duel requests. | none |
practicecore.ranked | everyone | Join ranked queues. | none |
practicecore.ranked.bypass | operators | Join ranked without the unranked wins the config may ask for. | none |
practicecore.party | everyone | Create and join parties. | none |
practicecore.spectate | everyone | Watch fights. | none |
practicecore.spectate.silent | operators | Watch a fight without the fighters being told. | none |
practicecore.bypass.commands | operators | Use any command during a fight. | none |
Placeholders
Registered with PlaceholderAPI under the identifier practicecore. PlaceholderAPI must be installed for these to work.
These work in any scoreboard, tab or hologram plugin. Kit names never contain an underscore, so the parts split cleanly.
| Placeholder | Value |
|---|---|
%practicecore_elo_<kit>%, %practicecore_division_<kit>% | Rating and division in a kit. |
%practicecore_wins_<kit>%, %practicecore_losses_<kit>% | All wins and losses in a kit. |
%practicecore_ranked_wins_<kit>%, %practicecore_ranked_losses_<kit>% | Ranked only. |
%practicecore_streak_<kit>%, %practicecore_best_streak_<kit>% | Win streaks. |
%practicecore_position_<kit>% | Place on the kit's leaderboard (0 when not on it). |
%practicecore_global_elo%, %practicecore_global_division% | The average over ranked kits. |
%practicecore_total_wins%, %practicecore_total_losses% | Over every kit. |
%practicecore_lb_<kit|global>_<place>_<name|elo|wins|losses|division>% | Leaderboard rows. |
%practicecore_status% | Lobby, queued, fighting or spectating. |
%practicecore_queue_kit%, %practicecore_queue_type%, %practicecore_queue_time% | The player's queue. |
%practicecore_match_kit%, %practicecore_match_opponent%, %practicecore_match_score%, %practicecore_match_time%, %practicecore_match_combo%, %practicecore_match_hits% | The player's fight. |
%practicecore_party_size%, %practicecore_party_leader% | The player's party. |
%practicecore_queued_total%, %practicecore_fighting_total% | Server-wide counts. |
%practicecore_queued_<kit>%, %practicecore_fighting_<kit>% | Per kit. |
%practicecore_event_state%, %practicecore_event_kit%, %practicecore_event_players%, %practicecore_event_round%, %practicecore_event_seconds% | The current tournament. |
With PlaceholderAPI installed, it fills in placeholders from other plugins inside its own text.
Configuration reference
The default files as they ship in the jar, with their comments. The plugin writes them to plugins/PracticeCore/ on first start.
config.yml
Top-level keys:
| Key | Default | Comment above it |
|---|---|---|
lobby | section, 2 keys | Where players wait between fights. Set the spawn with /practice setlobby. |
hotbar | section, 8 keys | The items players hold in the lobby. Right click runs the action. The hotbar empties the inventory before it hands the items out, so it only runs in the lobby: the worlds listed under worlds, or the lobby spawn's world when that list is empty. With no... |
match | section, 13 keys | none |
arena | section, 4 keys | none |
queue | section, 6 keys | none |
duel | section, 3 keys | none |
party | section, 4 keys | none |
elo | section, 3 keys | none |
divisions | list of 6 | Names for rating bands, shown in menus and as %practicecore_division_<kit>%. Lowest first. |
leaderboard | section, 2 keys | none |
holograms | section, 5 keys | Leaderboard holograms: floating text in your lobby that shows a board and keeps itself current. Stand where it should go and run /practice hologram create <name> <kit|global>. They are drawn with Minecraft's own text displays, so no hologram plugin is... |
setup-hints | true | Staff who join while the server is not set up yet (no lobby, no kit, no ready arena, or a kit with no arena) see a checklist with the command for each missing step, once per server start. It stops on its own when everything is done. /practice setup shows... |
history | section, 2 keys | none |
spectate | section, 1 key | none |
event | section, 6 keys | Tournaments: /event host <kit> (or the Events screen), players join while sign-up is open, then a single-elimination bracket plays itself out. A sumo kit makes a sumo event. |
scoreboard | section, 5 keys | The built-in sidebar. Switch it off if a scoreboard plugin draws yours (every number here is also a %practicecore_...% placeholder). Players can hide it for themselves in /settings. It gives each player a scoreboard of their own, which replaces team... |
theme | section, 12 keys | Every message below is written against these names, not against hex codes: <accent>Open</accent> rather than <#ff4f8b>Open</#ff4f8b>. Change a colour here and it changes everywhere at once. |
messages | section, 543 keys | none |
# PracticeCore: kits, arenas, duels, ranked and unranked queues, ratings, leaderboards and parties.
#
# Quick start (the whole thing is also in /practice admin as menus):
# 1. Stand in your lobby: /practice setlobby
# 2. Put a kit in your inventory: /practice kit create nodebuff
# 3. Build an arena and walk the wizard: /practice arena setup arena1
# 4. Players right-click the hotbar items, or use /queue, /ranked, /duel, /party.
# 5. Optional, a leaderboard in the lobby: /practice hologram create top global
# /practice setup shows which of these steps are still missing.
#
# Text is MiniMessage (<red>, <bold>, <gradient:#hex:#hex>, <click:...>, ...). Messages are written
# against the theme colours (<accent>, <text>, <muted>, ...), so one hex in the theme block below
# re-colours every screen.
#
# Updating: keys added in a new version work straight away, even if your config.yml is older,
# because the plugin falls back to its built-in defaults for anything missing here.
# ============================================================================
# █ ██ ███ ███ █ █
# █ █ █ █ █ █ █ █ █
# █ █ █ ███ ███ █
# █ █ █ █ █ █ █ █
# ████ ██ ███ ███ █
# ============================================================================
# Where players wait between fights. Set the spawn with /practice setlobby.
lobby:
# Send players to the lobby spawn when they join.
teleport-on-join: true
# Idle players in the lobby take no damage and get no hunger. The lobby is the hotbar's worlds
# (see hotbar.worlds), so this does nothing until a lobby exists.
protect: true
# ============================================================================
# █ █ ██ ███ ███ ██ ███
# █ █ █ █ █ █ █ █ █ █ █
# ████ █ █ █ ███ ████ ███
# █ █ █ █ █ █ █ █ █ █ █
# █ █ ██ █ ███ █ █ █ █
# ============================================================================
# The items players hold in the lobby. Right click runs the action.
#
# The hotbar empties the inventory before it hands the items out, so it only runs in the lobby:
# the worlds listed under worlds, or the lobby spawn's world when that list is empty. With no
# lobby and no worlds it does nothing at all, which keeps survival inventories safe on a server
# that also runs other modes.
#
# Actions: menu, unranked, ranked, duel, editor, leaderboard, party, stats, history, spectate,
# leave-queue, party-split, party-ffa, party-leave, event, event-leave, settings,
# or "command:<command without slash>".
# leader-only: true shows an item to the party leader only.
hotbar:
enabled: true
give-on-join: true
# Staff in creative keep their own inventory.
skip-creative: true
worlds: []
lobby:
unranked:
slot: 0
material: IRON_SWORD
name: "<accent>Unranked</accent> <muted>(right click)</muted>"
lore: ["<text>Fight anybody, no rating at stake.</text>"]
action: unranked
ranked:
slot: 1
material: DIAMOND_SWORD
name: "<accent>Ranked</accent> <muted>(right click)</muted>"
lore: ["<text>Fight players near your rating.</text>"]
action: ranked
event:
slot: 2
material: TOTEM_OF_UNDYING
name: "<accent>Events</accent> <muted>(right click)</muted>"
lore: ["<text>Tournaments: join one or watch it.</text>"]
action: event
editor:
slot: 4
material: BOOK
name: "<accent>Kit editor</accent> <muted>(right click)</muted>"
lore: ["<text>Put every item where your hands expect it.</text>"]
action: editor
leaderboard:
slot: 6
material: NETHER_STAR
name: "<accent>Leaderboards</accent> <muted>(right click)</muted>"
lore: ["<text>The best players of every kit.</text>"]
action: leaderboard
party:
slot: 7
material: NAME_TAG
name: "<accent>Party</accent> <muted>(right click)</muted>"
lore: ["<text>Play with your friends.</text>"]
action: party
menu:
slot: 8
material: COMPASS
name: "<accent>Practice menu</accent> <muted>(right click)</muted>"
lore: ["<text>Duels, stats, history and spectating.</text>"]
action: menu
queue:
editor:
slot: 4
material: BOOK
name: "<accent>Kit editor</accent> <muted>(right click)</muted>"
lore: ["<text>Arrange your kit while you wait.</text>"]
action: editor
leave:
slot: 8
material: RED_DYE
name: "<bad>Leave the queue</bad> <muted>(right click)</muted>"
lore: ["<text>Queued for {kit}.</text>"]
action: leave-queue
# While signed up for a tournament and waiting for the next fight.
event:
event:
slot: 0
material: TOTEM_OF_UNDYING
name: "<accent>Tournament</accent> <muted>(right click)</muted>"
lore: ["<text>The bracket and the fights going on.</text>"]
action: event
editor:
slot: 4
material: BOOK
name: "<accent>Kit editor</accent> <muted>(right click)</muted>"
lore: ["<text>Arrange your kit while you wait.</text>"]
action: editor
leave:
slot: 8
material: RED_DYE
name: "<bad>Leave the tournament</bad> <muted>(right click)</muted>"
lore: ["<text>Gives up your place in the bracket.</text>"]
action: event-leave
party:
menu:
slot: 0
material: NAME_TAG
name: "<accent>Party</accent> <muted>({party} players)</muted>"
lore: ["<text>Members, invites and party duels.</text>"]
action: party
split:
slot: 1
material: SHEARS
name: "<accent>Split fight</accent> <muted>(right click)</muted>"
lore: ["<text>Two random teams out of your party.</text>"]
action: party-split
leader-only: true
ffa:
slot: 2
material: BLAZE_POWDER
name: "<accent>Party FFA</accent> <muted>(right click)</muted>"
lore: ["<text>Everybody for themselves.</text>"]
action: party-ffa
leader-only: true
queue:
slot: 3
material: IRON_SWORD
name: "<accent>2v2 queue</accent> <muted>(right click)</muted>"
lore: ["<text>Your party against another party of two.</text>"]
action: party-queue
leader-only: true
editor:
slot: 4
material: BOOK
name: "<accent>Kit editor</accent> <muted>(right click)</muted>"
lore: ["<text>Put every item where your hands expect it.</text>"]
action: editor
leave:
slot: 8
material: RED_DYE
name: "<bad>Leave the party</bad> <muted>(right click)</muted>"
lore: ["<text>The next member becomes leader.</text>"]
action: party-leave
# ============================================================================
# █ █ ██ ███ ███ █ █ ████ ███
# ██ ██ █ █ █ █ █ █ █ █
# █ █ █ ████ █ █ ████ ███ ██
# █ █ █ █ █ █ █ █ █ █
# █ █ █ █ █ ███ █ █ ████ ███
# ============================================================================
match:
# Seconds of countdown before each round.
countdown: 5
# Players cannot walk during the countdown (looking around is fine).
freeze-countdown: true
# Seconds between rounds of a best-of match.
round-delay: 3
# Seconds the result stays on screen before everybody goes home.
end-delay: 4
# A fight still going after this many minutes ends with no winner. 0 for no limit.
max-minutes: 15
# The last hit counts as the kill when it landed within this many seconds.
kill-credit-seconds: 15
# Players go back to the lobby spawn afterwards. Off sends them back where they stood.
return-to-lobby: true
# A line above the hotbar during the fight (see messages.match-actionbar).
actionbar: true
# Drinking a potion leaves no empty bottle in your hand.
remove-empty-bottles: true
# Players listed in the summary at most (team fights).
summary-max-lines: 10
# Commands players may use during a fight (and while spectating). Everything else is blocked,
# except for practicecore.bypass.commands.
allowed-commands: [leave, msg, tell, w, r, reply, party, stats, history, matchinv]
# The inventory each fighter had left, linked by name in the summary (/matchinv <id>).
inventories:
enabled: true
# How long a fight's inventories can be opened, and how many are kept at most.
minutes: 10
keep: 300
# Console commands after a fight, for each winner and loser. Placeholders: {player} (the one the
# line runs for), {winner}, {loser}, {kit}, {mode}, and {elo} (the new rating, ranked only).
# Examples: "eco give {player} 10", "crates key give {player} vote 1".
commands:
win: []
lose: []
ranked-win: []
ranked-lose: []
arena:
# Spawns set from the wizard snap to the middle of the block, look straight ahead and face the
# nearest of the eight compass directions.
center-spawns: true
# Explosions cannot damage an arena that is not being fought in.
protect-idle: true
# The box "Auto box" draws around both spawns: blocks sideways, below and above.
auto-box:
side: 12
down: 6
up: 20
# /practice arena copy <arena> <count>: pastes the arena's box side by side and makes every copy
# an arena of its own with the same tags. A copy only goes into empty air that touches no other
# arena; an occupied spot is skipped.
copies:
# Blocks of air between two copies.
gap: 32
# Lay the copies out along "x" or "z".
direction: x
# Blocks placed per tick. Lower it if a big copy makes the server stutter.
blocks-per-tick: 4000
max-per-command: 20
# ============================================================================
# ██ █ █ ████ █ █ ████ ███
# █ █ █ █ █ █ █ █ █
# █ █ █ █ ███ █ █ ███ ██
# █ ██ █ █ █ █ █ █ █
# ███ ██ ████ ██ ████ ███
# ============================================================================
queue:
# Rounds a queue match is played to (best of). 1, 3 or 5.
unranked-best-of: 1
ranked-best-of: 1
# The party queue (/party queue <kit>): a party of exactly party-size players fights the next
# party of that size in the same kit. 2 makes it a 2v2 queue. Counts as unranked.
party-queue: true
party-size: 2
# Unranked wins a player needs before ranked opens. 0 opens it straight away.
ranked-min-unranked-wins: 0
# How far apart two ranked ratings may be: start, plus step every so many seconds, up to max.
ranked-range:
start: 75
step: 25
every-seconds: 5
max: 400
# ============================================================================
# ███ █ █ ████ █ ███
# █ █ █ █ █ █ █
# █ █ █ █ ███ █ ██
# █ █ █ █ █ █ █
# ███ ██ ████ ████ ███
# ============================================================================
duel:
# Seconds a request stays open.
request-seconds: 60
# The best-of choices on the duel screen and for /duel <player> <kit> <rounds>.
rounds: [1, 3, 5]
# Show an arena picker on the duel screen.
arena-choice: true
# ============================================================================
# ███ ██ ███ ███ ███ ████ ███
# █ █ █ █ █ █ █ █ █ █
# ███ ████ ███ █ █ ███ ██
# █ █ █ █ █ █ █ █ █
# █ █ █ █ █ █ ███ ████ ███
# ============================================================================
party:
max-size: 16
# Seconds an invite stays open.
invite-seconds: 60
# Best of for party split fights.
split-best-of: 1
# FFA spawns: "circle" spreads players round the middle of the arena (falling back to the two
# spawns when the circle would put somebody in a wall), "spawns" alternates the two spawns.
ffa-spawns: circle
# ============================================================================
# ███ ██ ███ ███ █ █ ███ ███
# █ █ █ █ █ █ ██ █ █ █
# ███ ████ █ █ █ ██ █ ██ ██
# █ █ █ █ █ █ █ █ █ █ █
# █ █ █ █ █ ███ █ █ ███ ███
# ============================================================================
elo:
# Everybody's rating in a kit before their first ranked fight.
start: 1000
# How much one fight can move a rating. 32 is chess's club value: higher swings faster.
k-factor: 32
# A rating never drops below this.
floor: 100
# Names for rating bands, shown in menus and as %practicecore_division_<kit>%. Lowest first.
divisions:
- {name: "Bronze", min: 0}
- {name: "Silver", min: 900}
- {name: "Gold", min: 1100}
- {name: "Platinum", min: 1300}
- {name: "Diamond", min: 1500}
- {name: "Master", min: 1700}
leaderboard:
# Places per board.
size: 10
# Seconds between refreshes from the database.
refresh-seconds: 120
# Leaderboard holograms: floating text in your lobby that shows a board and keeps itself current.
# Stand where it should go and run /practice hologram create <name> <kit|global>. They are drawn
# with Minecraft's own text displays, so no hologram plugin is needed, and kept in holograms.yml.
# The text is hologram-title, hologram-line-top, hologram-line, hologram-empty and hologram-footer
# under messages.
holograms:
enabled: true
# Places shown on each hologram (the board itself holds leaderboard.size places).
lines: 10
# Seconds between redraws. The numbers come from the leaderboard refresh above.
update-seconds: 5
# The box behind the text as "#AARRGGBB" (AA is the opacity), "#00000000" for none, or "" for
# Minecraft's default grey box.
background: "#60000000"
# Text size: 1.0 is normal, 1.5 is half as big again.
scale: 1.0
# Staff who join while the server is not set up yet (no lobby, no kit, no ready arena, or a kit with
# no arena) see a checklist with the command for each missing step, once per server start. It stops
# on its own when everything is done. /practice setup shows it any time.
setup-hints: true
# ============================================================================
# █ █ ███ ███ ███ ██ ███ █ █
# █ █ █ █ █ █ █ █ █ █ █
# ████ █ ██ █ █ █ ███ █
# █ █ █ █ █ █ █ █ █ █
# █ █ ███ ███ █ ██ █ █ █
# ============================================================================
history:
# Fights kept per player.
keep: 50
# Fights shown on the /history screen (up to 20).
show: 10
spectate:
# Tell the fighters when somebody starts watching (practicecore.spectate.silent skips it).
announce: true
# ============================================================================
# ████ █ █ ████ █ █ ███ ███
# █ █ █ █ ██ █ █ █
# ███ █ █ ███ █ ██ █ ██
# █ █ █ █ █ █ █ █
# ████ █ ████ █ █ █ ███
# ============================================================================
# Tournaments: /event host <kit> (or the Events screen), players join while sign-up is open, then
# a single-elimination bracket plays itself out. A sumo kit makes a sumo event.
event:
# Seconds the sign-up stays open. Staff can start early with /event start.
join-seconds: 60
min-players: 2
max-players: 64
# Seconds left on the sign-up at which everybody is reminded (with a [JOIN] button).
reminders: [30, 10]
# Rounds each tournament fight is played to.
best-of: 1
# Console commands for the winner. Placeholders: {player}, {kit}.
commands:
win: []
# ============================================================================
# ███ ███ ██ ███ ████ ███ ██ ██ ███ ███
# █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
# ██ █ █ █ ███ ███ ███ █ █ ████ ███ █ █
# █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
# ███ ███ ██ █ █ ████ ███ ██ █ █ █ █ ███
# ============================================================================
# The built-in sidebar. Switch it off if a scoreboard plugin draws yours (every number here is
# also a %practicecore_...% placeholder). Players can hide it for themselves in /settings.
# It gives each player a scoreboard of their own, which replaces team colours another plugin set
# on the main scoreboard while it shows.
scoreboard:
enabled: true
# Worlds it shows in when the player is idle. Empty: the lobby worlds (hotbar.worlds, or the
# lobby spawn's world). It always shows while queued, fighting, watching or in a tournament.
worlds: []
update-ticks: 10
title: "<accent><bold>PRACTICE</bold></accent>"
# Up to 15 lines each. Everywhere: {player} {online} {queued} {fighting} {elo} {division} {wins}
# {losses} {ping}. Queue: {kit} {mode} {time} {kit-elo}. Match and spectate: {kit} {arena} {time}
# {score} {opponent} {opponent-ping} {combo} {hits} {mode} {players} {spectators}.
# Event: {kit} {event-players} {event-round} {event-seconds} {event-status}.
# With PlaceholderAPI installed, %placeholders% of any plugin work too.
lines:
lobby:
- "<muted><strikethrough> </strikethrough></muted>"
- "<text>Online: </text><value>{online}</value>"
- "<text>Fighting: </text><value>{fighting}</value>"
- "<text>Queued: </text><value>{queued}</value>"
- ""
- "<text>Rating: </text><accent>{elo}</accent> <muted>{division}</muted>"
- "<text>Wins: </text><good>{wins}</good> <muted>·</muted> <text>Losses: </text><bad>{losses}</bad>"
- "<muted><strikethrough> </strikethrough></muted>"
queue:
- "<muted><strikethrough> </strikethrough></muted>"
- "<text>Queue: </text><value>{kit}</value>"
- "<text>Type: </text><value>{mode}</value>"
- "<text>Waiting: </text><value>{time}</value>"
- ""
- "<text>Online: </text><value>{online}</value>"
- "<muted><strikethrough> </strikethrough></muted>"
match:
- "<muted><strikethrough> </strikethrough></muted>"
- "<text>Opponent: </text><value>{opponent}</value>"
- "<text>Kit: </text><value>{kit}</value>"
- "<text>Time: </text><value>{time}</value>"
- "<text>Score: </text><value>{score}</value>"
- ""
- "<text>Combo: </text><accent>{combo}</accent> <muted>·</muted> <text>Hits: </text><accent>{hits}</accent>"
- "<text>Ping: </text><value>{ping}</value> <muted>vs</muted> <value>{opponent-ping}</value>"
- "<muted><strikethrough> </strikethrough></muted>"
spectate:
- "<muted><strikethrough> </strikethrough></muted>"
- "<text>Watching</text>"
- "<value>{players}</value>"
- "<text>Kit: </text><value>{kit}</value>"
- "<text>Time: </text><value>{time}</value>"
- "<muted><strikethrough> </strikethrough></muted>"
event:
- "<muted><strikethrough> </strikethrough></muted>"
- "<accent>Tournament</accent> <muted>{event-status}</muted>"
- "<text>Kit: </text><value>{kit}</value>"
- "<text>Players left: </text><value>{event-players}</value>"
- "<text>Round: </text><value>{event-round}</value>"
- "<muted><strikethrough> </strikethrough></muted>"
# ============================================================================
# ███ █ █ ████ █ █ ████
# █ █ █ █ ██ ██ █
# █ ████ ███ █ █ █ ███
# █ █ █ █ █ █ █
# █ █ █ ████ █ █ ████
# ============================================================================
# Every message below is written against these names, not against hex codes: <accent>Open</accent>
# rather than <#ff4f8b>Open</#ff4f8b>. Change a colour here and it changes everywhere at once.
theme:
accent: "#ff4f8b" # your colour: headings and anything the player is meant to click
accent2: "#ff9cc0" # a lighter accent, for a second level of emphasis
title: "#f4f7ff" # screen titles
text: "#c2ccdd" # ordinary prose
muted: "#6b7a94" # hints, separators, anything the eye should skip
value: "#ffffff" # the numbers and names the player opened the screen to read
good: "#57e08a"
warn: "#ffc857"
bad: "#ff6b6b"
small-caps: false # a garnish; whole menus in it read badly
# Real Minecraft item pictures beside the buttons, drawn from the client's own textures: no
# resource pack. Needs a 1.21.9 or newer client; older ones see the words only.
item-icons: true
# A short sound on every click, open and result.
sounds: true
# ============================================================================
# █ █ ████ ███ ███ ██ ███ ████ ███
# ██ ██ █ █ █ █ █ █ █ █
# █ █ █ ███ ██ ██ ████ █ ██ ███ ██
# █ █ █ █ █ █ █ █ █ █ █
# █ █ ████ ███ ███ █ █ ███ ████ ███
# ============================================================================
messages:
prefix: "<accent><bold>Practice</bold></accent> <muted>»</muted> "
# ---- general ----
no-permission: "<bad>You cannot do that.</bad>"
players-only: "<bad>Only players can do that.</bad>"
usage: "<text>Usage: </text><value>{usage}</value>"
reloaded: "<good>Config, kits and arenas reloaded.</good>"
player-offline: "<bad>{player} is not online.</bad>"
player-unknown: "<bad>Nobody called {player} has played here.</bad>"
profile-loading: "<warn>Your stats are still loading. Try again in a second.</warn>"
unknown-kit: "<bad>There is no kit called {kit}.</bad>"
unknown-arena: "<bad>There is no ready arena called {arena}.</bad>"
unknown-world: "<bad>There is no world called {world}.</bad>"
no-kits: "<bad>There are no kits yet.</bad>"
kit-empty: "<bad>The kit {kit} has no items yet.</bad>"
no-arena-for-kit: "<bad>No arena is set up for {kit} yet.</bad>"
no-free-arena: "<warn>Every arena is busy right now. Try again in a moment.</warn>"
arena-wrong-kit: "<bad>{arena} is not an arena for {kit}.</bad>"
busy-fighting: "<bad>You are in a fight.</bad>"
busy-dead: "<bad>Respawn first.</bad>"
busy-spectating: "<bad>You are watching a fight. </bad><text>/leave first.</text>"
busy-queued: "<bad>You are in a queue. </bad><text>/leave first.</text>"
nothing-to-leave: "<text>You are not in a queue, a fight or an audience.</text>"
command-blocked: "<bad>You cannot use that command right now.</bad>"
menu-error: "<bad>That did not work. </bad><text>The console has the details.</text>"
help-player: "<text>/queue <muted>·</muted> /ranked <muted>·</muted> /duel <player> <muted>·</muted> /party <muted>·</muted> /event <muted>·</muted> /kiteditor <muted>·</muted> /leaderboard <muted>·</muted> /stats <muted>·</muted> /history <muted>·</muted> /spectate <muted>·</muted> /settings <muted>·</muted> /leave</text>"
help-admin: "<accent>Staff</accent><br><text>/practice admin</text> <muted>the staff screens</muted><br><text>/practice kit create|items|load|delete|list|edit|set|tags|icon|display</text><br><text>/practice arena setup|create|delete|list|spawn1|spawn2|corner1|corner2|autobox|tags|enable|disable|tp|info</text><br><text>/practice arena copy <arena> <count> | removecopies <arena></text><br><text>/event host <kit> | start | cancel</text><br><text>/practice setlobby | lobby | reload | refresh | end <player> | elo <player> <kit|all> <value|reset> | season reset</text>"
busy-event: "<bad>You are signed up for a tournament. </bad><text>/event leave first.</text>"
duel-target-disabled: "<bad>{player} does not take duel requests.</bad>"
settings-saved: "<good>Settings saved.</good>"
season-confirm: "<warn>This sets every ranked rating back to the start and clears ranked wins and losses. Unranked records, layouts and history stay.</warn> <text>Run </text><value>/practice season reset confirm</value><text> to go ahead.</text>"
season-reset: "<good>New season: {rows} ratings are back at {elo}.</good>"
# More staff lines under help-admin (the setup checklist and the holograms).
help-admin-more: "<text>/practice setup</text> <muted>what a new server still has to do</muted><br><text>/practice hologram create <name> <kit|global> | move <name> | delete <name> | list</text>"
# ---- the setup checklist (/practice setup) ----
setup-head: "<accent><bold>Setup</bold></accent> <muted>{done} of {total} done</muted>"
setup-step-done: " <good>{n}. {step}</good> <muted>done</muted>"
setup-step-todo: " <bad>{n}.</bad> <text>{step}</text> <click:suggest_command:'{command}'><hover:show_text:'<text>Put the command in the chat box</text>'><accent>[{label}]</accent></hover></click>"
setup-lobby: "Set the lobby spawn where you stand"
setup-kit: "Create a kit from your inventory"
setup-arena: "Set up an arena: two spawns and a box"
setup-fit: "Give every kit an arena{missing}"
setup-fit-missing: " (no ready arena fits {kits})"
setup-complete: "<good>Everything is set up. Players can queue now.</good> <text>Next: a leaderboard hologram with </text><value>/practice hologram create top global</value>"
setup-join-note: "<muted>Shown to staff until setup is done. setup-hints: false in config.yml turns it off.</muted>"
setup-panel-head: "<warn>Still to do:</warn>"
setup-panel-line: "<bad>{n}.</bad> <text>{step}</text> <muted>{label}</muted>"
# ---- leaderboard holograms ----
hologram-title: "<accent><bold>{board}</bold></accent><br><muted>Ranked leaderboard</muted>"
hologram-line-top: "<accent>#{pos}</accent> <value>{name}</value> <muted>·</muted> <accent>{elo}</accent> <muted>{division}</muted>"
hologram-line: "<muted>#{pos}</muted> <text>{name}</text> <muted>·</muted> <value>{elo}</value>"
hologram-empty: "<muted>Nobody has played ranked here yet.</muted>"
# An extra line at the bottom; empty for none.
hologram-footer: ""
hologram-created: "<good>Hologram {name} placed here, showing {board}.</good>"
hologram-moved: "<good>Hologram {name} moved here.</good>"
hologram-deleted: "<text>Hologram {name} removed.</text>"
hologram-exists: "<bad>There is already a hologram called {name}.</bad> <text>/practice hologram move {name} moves it.</text>"
hologram-unknown: "<bad>There is no hologram called {name}.</bad>"
hologram-board-unknown: "<bad>{board} is not a ranked kit.</bad> <text>Use a kit with a ranked queue, or global.</text>"
hologram-list-empty: "<text>No holograms yet. </text><value>/practice hologram create <name> <kit|global></value>"
hologram-list-line: "<value>{name}</value> <muted>·</muted> <text>{board}</text> <muted>· {world} {x}, {y}, {z}</muted>"
hologram-off: "<warn>Holograms are switched off (holograms.enabled in config.yml), so nothing is drawn.</warn>"
# ---- tournaments ----
mode-event: "Tournament"
event-hosted: "<accent><bold>Tournament!</bold></accent> <value>{host}</value><text> is hosting a </text><accent>{kit}</accent><text> tournament. Sign-up closes in {seconds}s ({max} places).</text>"
event-join-button: "<click:run_command:'/event join'><hover:show_text:'<text>Sign up for the {kit} tournament</text>'><good><bold>[JOIN THE TOURNAMENT]</bold></good></hover></click>"
event-reminder: "<text>The </text><accent>{kit}</accent><text> tournament starts in {seconds}s. {count} signed up.</text>"
event-already: "<bad>A tournament is already on.</bad>"
event-none: "<bad>There is no tournament right now.</bad>"
event-started: "<bad>The tournament has already started.</bad>"
event-already-in: "<text>You are already signed up.</text>"
event-not-in: "<bad>You are not in a tournament.</bad>"
event-in-party: "<bad>Leave your party to join the tournament.</bad>"
event-full: "<bad>The tournament is full ({max}).</bad>"
event-joined: "<value>{player}</value><text> joined the tournament. </text><muted>{count}/{max}</muted>"
event-left: "<text>You left the tournament.</text>"
event-player-left: "<value>{player}</value><text> left the tournament. </text><muted>{count} signed up</muted>"
event-too-few: "<warn>The tournament was called off: it needs at least {min} players.</warn>"
event-begins: "<accent><bold>The {kit} tournament begins</bold></accent> <text>with {count} players.</text>"
event-round: "<accent>{label}</accent> <muted>· {count} players left</muted>"
event-round-n: "Round {round}"
event-round-semi: "Semi-finals"
event-round-final: "The final"
event-bye: "<text>Nobody left to draw you against in round {round}: you go straight through.</text>"
event-fight: "<value>{a}</value> <muted>vs</muted> <value>{b}</value> <muted>· round {round}</muted>"
event-waiting-arena: "<warn>Your tournament fight starts as soon as an arena is free.</warn>"
event-out: "<value>{player}</value><text> is out. </text><muted>{left} left</muted>"
event-won: "<accent><bold>{player} won the {kit} tournament!</bold></accent>"
event-no-winner: "<warn>The tournament ended without a winner.</warn>"
event-cancelled: "<warn>The tournament was cancelled.</warn>"
event-cancelled-by-you: "<text>Tournament cancelled.</text>"
event-status: "{status}"
event-status-none: "<muted>No tournament right now.</muted>"
event-status-joining: "<accent>{kit}</accent><text> tournament by {host}: sign-up open, {count}/{max} players, {seconds}s left.</text>"
event-status-running: "<accent>{kit}</accent><text> tournament: round {round}, {count} players left.</text>"
event-state-none: "<muted>none</muted>"
event-state-joining: "<good>sign-up</good>"
event-state-running: "<warn>running</warn>"
# ---- inventories after a fight ----
summary-inventories: " <muted>Inventories:</muted> {links}"
summary-inventory-link: "<click:run_command:'/matchinv {id}'><hover:show_text:'<text>What {name} had left</text>'><accent>[{name}]</accent></hover></click>"
matchinv-gone: "<bad>That inventory is no longer kept.</bad>"
matchinv-title: "<accent>{player}</accent> <title>{kit}</title>"
matchinv-health: "<bad>{health} hearts</bad>"
matchinv-food: "<warn>{food} hunger</warn>"
matchinv-heals: "<accent>{heals} healing left</accent>"
matchinv-heals-lore: "<text>Health potions and soups still in the inventory.</text>"
matchinv-effects: "<accent2>{count} effects</accent2>"
matchinv-effect-line: "<text>{effect} {level}</text> <muted>{time}</muted>"
matchinv-stats: "<value>Fight numbers</value>"
matchinv-stats-lore: "<text>{damage} hearts dealt, {taken} taken</text><br><text>{hits} hits, longest combo {combo}</text><br><text>{pots} potions used</text>"
# ---- modes and states ----
mode-duel: "Duel"
mode-unranked: "Unranked"
mode-ranked: "Ranked"
mode-party-split: "Party split"
mode-party-ffa: "Party FFA"
mode-party-vs: "Party duel"
status-lobby: "<text>In the lobby</text>"
status-queued: "<warn>Queued</warn>"
status-fighting: "<bad>Fighting</bad>"
status-spectating: "<accent2>Spectating</accent2>"
state-lobby: "<good>ready</good>"
state-busy: "<warn>busy</warn>"
result-win: "<good>W</good>"
result-loss: "<bad>L</bad>"
team-1: "<bad>Red</bad>"
team-2: "<accent2>Blue</accent2>"
opponents-ffa: "{count} others"
placeholder-empty-name: "<muted>---</muted>"
placeholder-empty-value: "<muted>0</muted>"
# ---- queues ----
queue-joined: "<text>Queued for </text><value>{kit}</value><text> unranked. </text><muted>{waiting} waiting</muted>"
queue-joined-ranked: "<text>Queued for </text><value>{kit}</value><text> ranked at </text><accent>{elo}</accent><text>. </text><muted>{waiting} waiting</muted>"
queue-left: "<text>You left the {kit} queue.</text>"
queue-already: "<text>You are already in that queue.</text>"
queue-in-party: "<bad>Queues are for solo players. </bad><text>Leave your party or use party fights.</text>"
queue-not-ranked: "<bad>{kit} has no ranked queue.</bad>"
queue-not-unranked: "<bad>{kit} has no unranked queue.</bad>"
queue-ranked-locked: "<bad>Ranked opens after {wins} unranked wins. </bad><text>You have {have}.</text>"
queue-waiting-arena: "<warn>Opponent found, waiting for a free arena.</warn>"
queue-joined-party: "<text>Your party is queued for </text><value>{kit}</value><text> ({size}v{size}). The leader can /leave.</text>"
queue-party-size: "<bad>The party queue is for parties of exactly {size}.</bad>"
queue-party-dropped: "<warn>The party changed, so it left the queue.</warn>"
mode-team-queue: "Party queue"
queue-actionbar: "<text>Queued </text><value>{kit}</value> <muted>·</muted> <text>{time}</text> <muted>·</muted> <text>{waiting} in queue</text>"
queue-actionbar-ranked: "<text>Ranked </text><value>{kit}</value> <muted>·</muted> <accent>{elo}</accent> <muted>±{range}</muted> <muted>·</muted> <text>{time}</text>"
# ---- duels ----
duel-sent: "<text>Duel request sent to </text><value>{player}</value><text>: {kit}{rounds}{arena}.</text>"
duel-received: "<value>{player}</value><text> wants to duel you: </text><accent>{kit}</accent><text>{rounds}{arena}. It runs out in {seconds}s.</text>"
duel-buttons: "<click:run_command:'/duel accept {player}'><hover:show_text:'<text>Accept the duel</text>'><good><bold>[ACCEPT]</bold></good></hover></click> <click:run_command:'/duel decline {player}'><hover:show_text:'<text>Decline it</text>'><bad><bold>[DECLINE]</bold></bad></hover></click>"
duel-rounds: ", best of {rounds}"
duel-arena: ", in {arena}"
duel-self: "<bad>You cannot duel yourself.</bad>"
duel-none: "<bad>No duel request from {player}.</bad>"
duel-in-party: "<bad>You are in a party. </bad><text>Use /party duel for party fights.</text>"
duel-target-in-party: "<bad>{player} is in a party.</bad>"
duel-target-busy: "<bad>{player} is busy right now.</bad>"
duel-failed: "<bad>The duel with {player} could not start.</bad>"
duel-declined-target: "<text>You declined {player}'s duel.</text>"
duel-declined-sender: "<bad>{player} declined your duel.</bad>"
duel-expired-sender: "<text>Your duel request to {player} ran out.</text>"
duel-expired-target: "<text>The duel request from {player} ran out.</text>"
# ---- fights ----
match-start: "<text>{mode} against </text><value>{opponent}</value> <muted>·</muted> <accent>{kit}</accent> <muted>·</muted> <text>{arena}</text>"
match-start-ranked: "<text>Ranked against </text><value>{opponent}</value> <muted>({elo})</muted> <muted>·</muted> <accent>{kit}</accent> <muted>·</muted> <text>{arena}</text>"
round-start: "<text>Round </text><value>{round}</value> <muted>·</muted> <text>score </text><value>{score}</value>"
round-won: "<value>{team}</value><text> takes round {round}. </text><muted>{score}</muted>"
round-draw: "<text>Nobody took that round. </text><muted>{score}</muted>"
death-killed: "<value>{player}</value><text> died.</text>"
death-killed-by: "<value>{player}</value><text> was killed by </text><value>{killer}</value> <muted>({health} hearts left)</muted>"
death-void: "<value>{player}</value><text> fell out of the arena.</text>"
death-void-by: "<value>{player}</value><text> was knocked out by </text><value>{killer}</value><text>.</text>"
death-water: "<value>{player}</value><text> touched the water.</text>"
death-water-by: "<value>{player}</value><text> was knocked into the water by </text><value>{killer}</value><text>.</text>"
death-left: "<value>{player}</value><text> left the fight.</text>"
death-left-by: "<value>{player}</value><text> left the fight against </text><value>{killer}</value><text>.</text>"
death-quit: "<value>{player}</value><text> disconnected.</text>"
death-quit-by: "<value>{player}</value><text> disconnected while fighting </text><value>{killer}</value><text>.</text>"
left-match: "<text>You left the fight.</text>"
match-time-up: "<warn>Time is up. Nobody wins.</warn>"
match-ended-by-staff: "<warn>Staff ended this fight.</warn>"
match-ended-by-reload: "<warn>The fight was stopped because the server is reloading.</warn>"
match-ended: "<text>Ended the fight of {player}.</text>"
match-actionbar: "<text>{kit}</text> <muted>·</muted> <text>{time}</text> <muted>·</muted> <text>combo </text><value>{combo}</value> <muted>·</muted> <text>hits </text><value>{hits}</value>"
title-countdown: "<accent><bold>{seconds}</bold></accent>"
subtitle-countdown: "<text>{kit}</text>"
title-fight: "<good><bold>FIGHT</bold></good>"
subtitle-fight: ""
title-round-won: "<good><bold>ROUND WON</bold></good>"
title-round-lost: "<bad><bold>ROUND LOST</bold></bad>"
subtitle-round: "<text>{score}</text>"
title-victory: "<good><bold>VICTORY</bold></good>"
subtitle-victory: "<text>{score}</text> {elo}"
title-defeat: "<bad><bold>DEFEAT</bold></bad>"
subtitle-defeat: "<text>{score}</text> {elo}"
title-draw: "<warn><bold>DRAW</bold></warn>"
subtitle-draw: "<text>Nobody won.</text>"
subtitle-elo: "<muted>·</muted> <accent>{change}</accent> <muted>({elo})</muted>"
# ---- the summary after a fight ----
summary-top: "<muted><strikethrough> </strikethrough></muted>"
summary-header: "<accent><bold>{mode}</bold></accent> <muted>·</muted> <text>{kit}</text> <muted>·</muted> <text>{time}</text> <muted>·</muted> <muted>{arena}</muted>"
summary-winner: "<good>Winner: </good><value>{winner}</value> <muted>({score})</muted>"
summary-draw: "<warn>No winner</warn> <muted>({score})</muted>"
summary-line-winner: " <good>{name}</good> <muted>»</muted> <text>{damage} hearts dealt · {hits} hits · combo {combo} · {pots} pots · {health} hearts left</text>{elo}"
summary-line: " <bad>{name}</bad> <muted>»</muted> <text>{damage} hearts dealt · {hits} hits · combo {combo} · {pots} pots</text>{elo}"
summary-elo: " <muted>·</muted> <accent>{change}</accent> <muted>({elo})</muted>"
summary-actions: " <click:run_command:'/duel {opponent} {kit}'><hover:show_text:'<text>Send {opponent} the same duel again</text>'><accent><bold>[REMATCH]</bold></accent></hover></click> <click:run_command:'/history'><hover:show_text:'<text>Your last fights</text>'><text>[HISTORY]</text></hover></click>"
summary-actions-short: " <click:run_command:'/history'><hover:show_text:'<text>Your last fights</text>'><text>[HISTORY]</text></hover></click> <click:run_command:'/stats'><hover:show_text:'<text>Your ratings</text>'><text>[STATS]</text></hover></click>"
# ---- spectating ----
spectate-start: "<text>Watching </text><value>{player}</value><text> ({kit}). </text><muted>/leave to stop.</muted>"
spectate-stop: "<text>You stopped watching.</text>"
spectate-joined: "<muted>{player} is watching.</muted>"
spectate-not-fighting: "<bad>{player} is not in a fight.</bad>"
# ---- the kit editor (a chest) ----
editor-title: "<accent>Editing</accent> <title>{kit}</title>"
editor-save: "<good><bold>Save layout</bold></good>"
editor-save-lore: "<text>Every fight in {kit} uses this order.</text>"
editor-reset: "<warn><bold>Default layout</bold></warn>"
editor-reset-lore: "<text>Back to the kit's own order.</text>"
editor-cancel: "<bad><bold>Cancel</bold></bad>"
editor-cancel-lore: "<text>Close without saving.</text>"
editor-saved: "<good>Layout saved for {kit}.</good>"
editor-reset-done: "<text>{kit} is back to the default layout.</text>"
editor-closed: "<muted>Closed without saving.</muted>"
editor-cursor: "<bad>Put the item on your cursor down first.</bad>"
editor-mismatch: "<bad>Something is missing from the layout. </bad><text>Put every item back and save again.</text>"
# ---- parties ----
party-help: "<text>/party create | invite <player> | join <leader> | leave | kick <player> | disband | chat <message> | split [kit] | ffa [kit] | duel <leader> [kit] | queue [kit]</text>"
party-created: "<good>Party created. </good><text>/party invite <player></text>"
party-already: "<bad>You are already in a party.</bad>"
party-none: "<bad>You are not in a party.</bad>"
party-not-leader: "<bad>Only the party leader can do that.</bad>"
party-target-not-leader: "<bad>{player} does not lead a party.</bad>"
party-invite-self: "<bad>You cannot invite yourself.</bad>"
party-target-in-party: "<bad>{player} is already in a party.</bad>"
party-full: "<bad>The party is full ({max}).</bad>"
party-invited: "<value>{player}</value><text> was invited.</text>"
party-invite-received: "<value>{player}</value><text> invited you to their party. It runs out in {seconds}s.</text>"
party-invite-buttons: "<click:run_command:'/party join {player}'><hover:show_text:'<text>Join the party</text>'><good><bold>[JOIN]</bold></good></hover></click>"
party-no-invite: "<bad>You have no invite from {player}.</bad>"
party-joined: "<value>{player}</value><text> joined the party.</text>"
party-left-self: "<text>You left the party.</text>"
party-member-left: "<value>{player}</value><text> left the party.</text>"
party-member-quit: "<value>{player}</value><text> disconnected and left the party.</text>"
party-new-leader: "<value>{player}</value><text> leads the party now.</text>"
party-kicked: "<value>{player}</value><text> was removed from the party.</text>"
party-kicked-self: "<bad>You were removed from the party.</bad>"
party-not-member: "<bad>{player} is not in your party.</bad>"
party-disbanded: "<text>The party was disbanded.</text>"
party-chat: "<accent>Party</accent> <value>{player}</value><muted>:</muted> <text>{message}</text>"
party-member-offline: "<bad>Every member has to be online.</bad>"
party-member-busy: "<bad>{player} is busy right now.</bad>"
party-too-small: "<bad>A party fight needs at least two players.</bad>"
party-team-name: "{leader}'s party"
party-duel-sent: "<text>Party duel request sent to </text><value>{player}</value><text>: {kit}{rounds}.</text>"
party-duel-received: "<value>{player}</value><text>'s party ({size}) wants to fight yours: </text><accent>{kit}</accent><text>{rounds}. It runs out in {seconds}s.</text>"
# ---- staff ----
lobby-set: "<good>Lobby spawn set here.</good>"
lobby-unset: "<bad>There is no lobby yet. </bad><text>/practice setlobby</text>"
leaderboards-refreshed: "<good>Leaderboards refreshed.</good>"
bad-name: "<bad>Names are 1 to 24 characters: a-z, 0-9 and -. </bad><muted>({name})</muted>"
bad-icon: "<bad>{icon} is not an item.</bad>"
kit-created: "<good>Kit {kit} created from your inventory.</good>"
kit-exists: "<bad>The kit {kit} exists already.</bad>"
kit-items-saved: "<good>{kit} now has your inventory. </good><text>Saved layouts of it were reset.</text>"
kit-loaded: "<text>You are wearing {kit}. Change it, then </text><value>/practice kit items {kit}</value><text>.</text>"
kit-saved: "<good>{kit} saved.</good>"
kit-deleted: "<text>Kit {kit} deleted.</text>"
kit-no-arena: "<warn>No ready arena fits {kit} yet. Give an arena one of its tags, or clear the kit's tags.</warn>"
kit-rule-set: "<text>{kit}: </text><value>{rule}</value><text> is now </text><value>{value}</value><text>.</text>"
kit-tags-set: "<text>{kit} fights in arenas tagged: </text><value>{tags}</value>"
kit-icon-set: "<text>{kit} icon: </text><value>{icon}</value>"
kit-list-line: "<value>{kit}</value> <muted>({name})</muted> <text>{rules}</text> <muted>· arenas: {tags}</muted>"
admin-kits-empty-chat: "<text>No kits yet. </text><value>/practice kit create <name></value>"
admin-arenas-empty-chat: "<text>No arenas yet. </text><value>/practice arena setup <name></value>"
arena-list-line: "<value>{arena}</value> <text>{state}</text> <muted>· tags: {tags}</muted>"
arena-created: "<good>Arena {arena} created.</good>"
arena-exists: "<bad>The arena {arena} exists already.</bad>"
arena-deleted: "<text>Arena {arena} deleted.</text>"
arena-busy: "<bad>{arena} is being fought in. Try again when the fight is over.</bad>"
arena-point-set: "<text>{arena}: </text><value>{part}</value><text> set at {where}.</text>"
arena-ready: "<good>{arena} is ready to fight in.</good>"
arena-world-changed: "<warn>That point is in {world}, so the arena moved there and its other points were cleared.</warn>"
arena-autobox: "<good>Drew the box round both spawns of {arena}.</good>"
arena-autobox-failed: "<bad>{arena} needs both spawns first.</bad>"
arena-tags-set: "<text>{arena} takes kits tagged: </text><value>{tags}</value>"
arena-toggled: "<text>{arena}: {state}</text>"
arena-no-spawn: "<bad>{arena} has no spawn yet.</bad>"
elo-set: "<text>{player}'s {kit} rating is now </text><value>{elo}</value><text>.</text>"
elo-reset: "<text>Reset {player}'s ratings ({kit}).</text>"
arena-part-spawn1: "Spawn 1"
arena-part-spawn2: "Spawn 2"
arena-part-corner1: "Corner 1"
arena-part-corner2: "Corner 2"
arena-part-spawn1-outside: "spawn 1 is outside the box"
arena-part-spawn2-outside: "spawn 2 is outside the box"
arena-state-ready: "<good>ready</good>"
arena-state-busy: "<warn>in use</warn>"
arena-state-off: "<muted>switched off</muted>"
arena-state-missing: "<bad>missing: {parts}</bad>"
arena-state-no-world: "<bad>world {world} is not loaded</bad>"
rule-ranked: "ranked"
rule-unranked: "unranked"
rule-build: "build"
rule-hunger: "hunger"
rule-no-regen: "no regen"
rule-water-kills: "water kills"
rule-no-fall: "no fall damage"
arena-copy-of-copy: "<bad>{arena} is a copy of {source}. Copy {source} instead.</bad>"
arena-copy-not-ready: "<bad>{arena} has to be ready (both spawns and the box) before it can be copied.</bad>"
arena-copy-running: "<warn>Arena copies are still being built. Wait for them to finish.</warn>"
arena-copy-count: "<bad>Copy 1 to {max} at a time.</bad>"
arena-copy-no-space: "<bad>No empty space next to {arena} for a copy. </bad><text>Copies need clear air and must not touch another arena (arena.copies in config.yml).</text>"
arena-copy-started: "<text>Building {count} copies of {arena} ({blocks} blocks). They switch on when done.</text>"
arena-copy-done: "<good>{arena} is ready: a copy of {source}.</good>"
arena-copy-none: "<text>{arena} has no copies that are free to remove.</text>"
arena-uncopy-started: "<text>Removing {count} copies of {arena}, blocks included.</text>"
arena-uncopy-done: "<text>Copy {arena} removed.</text>"
# ============================================================================
# █ █ ████ █ █ █ █ ███
# ██ ██ █ ██ █ █ █ █
# █ █ █ ███ █ ██ █ █ ██
# █ █ █ █ █ █ █ █
# █ █ ████ █ █ ██ ███
# ============================================================================
# Every screen title, body line, button label and tooltip. {icon} is a kit's item picture.
menu-close: "<white><icon:close></white><text>Close</text>"
menu-back: "<white><icon:back></white><text>Back</text>"
menu-back-tip: "<text>The previous screen.</text>"
menu-no-kits: "<muted>No kits here yet.</muted>"
menu-field-player: "<text>Player name</text>"
menu-field-kit: "<text>Kit</text>"
menu-field-rounds: "<text>Rounds</text>"
menu-field-arena: "<text>Arena</text>"
menu-hub-title: "<title>Practice</title>"
menu-hub-body: "<value>{player}</value><text> · rating </text><accent>{elo}</accent> <muted>({division})</muted><text> · {wins} wins, {losses} losses</text><br><muted>{queued} queued · {fighting} fighting</muted>"
menu-hub-unranked: "<white><icon:unranked></white><value>Unranked</value>"
menu-hub-unranked-tip: "<text>Fight anybody, no rating at stake.</text>"
menu-hub-ranked: "<white><icon:ranked></white><value>Ranked</value>"
menu-hub-ranked-tip: "<text>Fight players near your rating.</text>"
menu-hub-duel: "<white><icon:duel></white><value>Duel a player</value>"
menu-hub-duel-tip: "<text>Pick somebody, a kit and the rounds.</text>"
menu-hub-party: "<white><icon:party></white><value>Party</value>"
menu-hub-party-tip: "<text>Play with friends: split, FFA, party duels.</text>"
menu-hub-editor: "<white><icon:editor></white><value>Kit editor</value>"
menu-hub-editor-tip: "<text>Arrange every kit the way you like it.</text>"
menu-hub-leaderboard: "<white><icon:leaderboard></white><value>Leaderboards</value>"
menu-hub-leaderboard-tip: "<text>The best players of every kit.</text>"
menu-hub-stats: "<white><icon:stats></white><value>My stats</value>"
menu-hub-stats-tip: "<text>Ratings and records per kit.</text>"
menu-hub-history: "<white><icon:history></white><value>My last fights</value>"
menu-hub-history-tip: "<text>Results, ratings and numbers.</text>"
menu-hub-spectate: "<white><icon:spectate></white><value>Spectate</value>"
menu-hub-spectate-tip: "<text>Watch a fight going on now.</text>"
menu-hub-event: "<white><icon:event></white><value>Tournaments</value>"
menu-hub-event-tip: "<text>{status}</text>"
menu-hub-settings: "<white><icon:options></white><value>Settings</value>"
menu-hub-settings-tip: "<text>Duel requests and the scoreboard.</text>"
menu-hub-admin: "<white><icon:settings></white><warn>Staff</warn>"
menu-hub-admin-tip: "<text>Kits, arenas and the lobby.</text>"
menu-queue-title: "<title>Unranked</title>"
menu-queue-title-ranked: "<title>Ranked</title>"
menu-queue-intro: "<text>Pick a kit. You fight the next player who picks the same one.</text>"
menu-queue-intro-ranked: "<text>Pick a kit. You fight somebody near your rating; the longer you wait, the wider the search.</text>"
menu-queue-current: "<warn>Queued for {kit} ({mode}), {time}.</warn>"
menu-queue-kit: "{icon}<value>{kit}</value> <muted>{queued} queued · {fighting} fighting</muted>"
menu-queue-kit-ranked: "{icon}<value>{kit}</value> <accent>{elo}</accent> <muted>{queued} queued</muted>"
menu-queue-kit-tip: "<text>Join the {kit} queue.</text>"
menu-queue-kit-tip-ranked: "<text>Your {kit} rating: {elo} ({division}).</text>"
menu-queue-leave: "<white><icon:leave></white><bad>Leave the queue</bad>"
menu-queue-leave-tip: "<text>Stop searching.</text>"
menu-duel-pick-title: "<title>Duel</title>"
menu-duel-pick-intro: "<text>Pick a player, or type a name.</text>"
menu-duel-pick-none: "<muted>Nobody else is free right now.</muted>"
menu-duel-pick-player: "<white><icon:player></white><value>{player}</value>"
menu-duel-pick-player-tip: "<text>Set up a duel with {player}.</text>"
menu-duel-pick-next: "<white><icon:next></white><value>Next</value>"
menu-duel-pick-next-tip: "<text>Duel the player named above.</text>"
menu-duel-title: "<title>Duel {player}</title>"
menu-duel-intro: "<text>Pick the kit and how many rounds, then send it. {player} gets a message to accept.</text>"
menu-duel-round-one: "One round"
menu-duel-round-many: "Best of {rounds}"
menu-duel-arena-random: "Any arena"
menu-duel-send: "<white><icon:duel></white><good>Send the request</good>"
menu-duel-send-tip: "<text>{player} has a minute to accept.</text>"
menu-party-duel-title: "<title>Party duel</title>"
menu-party-duel-intro: "<text>Your party against {player}'s party. Pick the kit and the rounds.</text>"
menu-editor-title: "<title>Kit editor</title>"
menu-editor-intro: "<text>Pick a kit, drag the items where you want them, and press Save. Every fight in that kit uses your order.</text>"
menu-editor-kit: "{icon}<value>{kit}</value> <muted>{state}</muted>"
menu-editor-kit-tip: "<text>Arrange {kit}.</text>"
menu-editor-own: "your layout"
menu-editor-default: "default"
menu-lb-title: "<title>Leaderboards</title>"
menu-lb-head: "<accent>{board}</accent>"
menu-lb-global: "Global"
menu-lb-line-top: "<accent>#{pos}</accent> <value>{name}</value> <muted>·</muted> <accent>{elo}</accent> <muted>{division} · {wins}W {losses}L</muted>"
menu-lb-line: "<muted>#{pos}</muted> <text>{name}</text> <muted>·</muted> <value>{elo}</value> <muted>{division} · {wins}W {losses}L</muted>"
menu-lb-empty: "<muted>Nobody has played ranked here yet.</muted>"
menu-lb-you: "<text>You are </text><accent>#{pos}</accent><text> on this board.</text>"
menu-lb-pick: "{icon}<text>{board}</text>"
menu-lb-pick-current: "{icon}<accent>{board}</accent>"
menu-lb-pick-tip: "<text>Show this board.</text>"
menu-stats-title: "<title>{player}</title>"
menu-stats-head: "<value>{player}</value><text> · rating </text><accent>{elo}</accent> <muted>({division})</muted><br><text>{wins} wins, {losses} losses, {rate}% won</text>"
menu-stats-kit: "<value>{kit}</value> <accent>{elo}</accent> <muted>{division}</muted> <text>· ranked {rwins}W {rlosses}L · unranked {wins}W {losses}L · streak {streak} (best {best})</text>"
menu-stats-empty: "<muted>No fights yet.</muted>"
menu-stats-history: "<white><icon:history></white><value>Last fights</value>"
menu-stats-history-tip: "<text>Results, ratings and numbers.</text>"
menu-history-title: "<title>{player}: last fights</title>"
menu-history-head: "<text>Newest first.</text>"
menu-history-line: "{result} <value>{opponent}</value> <muted>·</muted> <text>{kit}</text> <muted>{mode} {score}</muted>{elo} <muted>· {damage} hearts, {hits} hits, combo {combo}, {pots} pots · {time} · {ago} ago</muted>"
menu-history-elo: " <accent>{change}</accent>"
menu-history-empty: "<muted>No fights yet.</muted>"
menu-history-stats: "<white><icon:stats></white><value>Stats</value>"
menu-history-stats-tip: "<text>Ratings and records per kit.</text>"
menu-party-title: "<title>Party</title>"
menu-party-none: "<text>You are not in a party. Make one, or join one you were invited to.</text>"
menu-party-create: "<white><icon:party></white><good>Create a party</good>"
menu-party-create-tip: "<text>You lead it and start its fights.</text>"
menu-party-join: "<white><icon:invite></white><good>Join {player}</good>"
menu-party-join-tip: "<text>{player} invited you.</text>"
menu-party-head: "<text>Leader </text><value>{leader}</value> <muted>· {size}/{max} players</muted>"
menu-party-member-leader: "<accent>{player}</accent> <muted>leader · {state}</muted>"
menu-party-member: "<value>{player}</value> <muted>{state}</muted>"
menu-party-member-note: "<muted>The leader starts the fights.</muted>"
menu-party-invite: "<white><icon:invite></white><value>Invite</value>"
menu-party-invite-tip: "<text>Invite the player named above.</text>"
menu-party-split: "<white><icon:split></white><value>Split fight</value>"
menu-party-split-tip: "<text>Two random teams out of the party.</text>"
menu-party-split-title: "<title>Split fight: pick a kit</title>"
menu-party-ffa: "<white><icon:ffa></white><value>FFA</value>"
menu-party-ffa-tip: "<text>Everybody for themselves.</text>"
menu-party-ffa-title: "<title>Party FFA: pick a kit</title>"
menu-party-queue: "<white><icon:queue></white><value>{size}v{size} queue</value>"
menu-party-queue-tip: "<text>Fight the next party of {size} that queues.</text>"
menu-party-queue-title: "<title>{size}v{size} queue: pick a kit</title>"
menu-party-duel: "<white><icon:duel></white><value>Duel a party</value>"
menu-party-duel-tip: "<text>Challenge the party led by the player named above.</text>"
menu-party-kick: "<white><icon:delete></white><bad>Kick</bad>"
menu-party-kick-tip: "<text>Remove the player named above.</text>"
menu-party-disband: "<white><icon:close></white><bad>Disband</bad>"
menu-party-disband-tip: "<text>Ends the party for everybody.</text>"
menu-party-leave: "<white><icon:leave></white><bad>Leave</bad>"
menu-party-leave-tip: "<text>Leave the party.</text>"
menu-kit-pick: "{icon}<value>{kit}</value>"
menu-kit-pick-tip: "<text>Fight in {kit}.</text>"
menu-event-title: "<title>Tournaments</title>"
menu-event-intro: "<text>One kit, one bracket, one winner. Lose once and you are out.</text>"
menu-event-join: "<white><icon:join></white><good>Join</good>"
menu-event-join-tip: "<text>Sign up for this tournament.</text>"
menu-event-leave: "<white><icon:leave></white><bad>Leave</bad>"
menu-event-leave-tip: "<text>Give up your place.</text>"
menu-event-watch: "<white><icon:spectate></white><value>{players}</value>"
menu-event-watch-tip: "<text>Watch this tournament fight.</text>"
menu-event-host: "<white><icon:event></white><good>Host a tournament</good>"
menu-event-host-tip: "<text>Opens sign-up for everybody in the kit above.</text>"
menu-event-start: "<white><icon:next></white><good>Start now</good>"
menu-event-start-tip: "<text>Close sign-up and draw the bracket.</text>"
menu-event-cancel: "<white><icon:close></white><bad>Cancel</bad>"
menu-event-cancel-tip: "<text>Ends the tournament; fights going on end with no winner.</text>"
menu-settings-title: "<title>Settings</title>"
menu-settings-intro: "<text>Your own switches. They are kept between visits.</text>"
menu-settings-duels: "<text>Take duel requests</text>"
menu-settings-board: "<text>Show the scoreboard</text>"
menu-settings-save: "<white><icon:save></white><good>Save</good>"
menu-settings-save-tip: "<text>Keeps the switches above.</text>"
menu-spectate-title: "<title>Spectate</title>"
menu-spectate-intro: "<text>Fights going on now. </text><muted>/leave stops watching.</muted>"
menu-spectate-empty: "<muted>Nobody is fighting right now.</muted>"
menu-spectate-match: "{icon}<value>{players}</value> <muted>{kit}</muted>"
menu-spectate-match-tip: "<text>{kit} in {arena}, {time} in.</text>"
menu-spectate-vs: " vs "
admin-panel-title: "<title>PracticeCore staff</title>"
admin-panel-body: "<text>{kits} kits · {arenas} arenas ({ready} ready) · {fights} fights now</text><br><text>Lobby: </text>{lobby}"
admin-lobby-set: "<good>set in {world}</good>"
admin-lobby-unset: "<bad>not set</bad>"
admin-kits: "<white><icon:kits></white><value>Kits</value>"
admin-kits-tip: "<text>Make kits and set their rules.</text>"
admin-arenas: "<white><icon:arenas></white><value>Arenas</value>"
admin-arenas-tip: "<text>Spawns, boxes and tags.</text>"
admin-setlobby: "<white><icon:lobby></white><value>Set the lobby here</value>"
admin-setlobby-tip: "<text>Players come back here after a fight.</text>"
admin-reload: "<white><icon:reload></white><value>Reload</value>"
admin-reload-tip: "<text>Re-read config.yml, kits.yml and arenas.yml.</text>"
admin-player-menu: "<white><icon:player></white><value>Player menu</value>"
admin-player-menu-tip: "<text>What players see.</text>"
admin-any: "any"
admin-any-kit: "any kit"
admin-none: "none"
admin-kits-title: "<title>Kits</title>"
admin-kits-intro: "<text>A kit is whatever you carry when you create it: items, armour, offhand and your potion effects.</text>"
admin-kits-line: "<value>{kit}</value> <muted>({name})</muted> <text>{rules}</text> <muted>· arenas: {tags}</muted>"
admin-kits-empty: "<muted>No kits yet. Fill your inventory, type a name and press Create.</muted>"
admin-kits-open: "{icon}<value>{kit}</value>"
admin-kits-open-tip: "<text>Rules, items and arena tags.</text>"
admin-field-new-kit: "<text>New kit name (a-z, 0-9, -)</text>"
admin-kits-create: "<white><icon:save></white><good>Create from my inventory</good>"
admin-kits-create-tip: "<text>Saves what you carry as the new kit.</text>"
admin-kit-title: "<title>Kit: {kit}</title>"
admin-kit-head: "<value>{kit}</value> <muted>({name})</muted><text> · {items} items · {effects} effects · icon {icon} · {arenas} arenas fit</text>"
admin-field-display: "<text>Display name (MiniMessage)</text>"
admin-field-icon: "<text>Icon (an item name)</text>"
admin-field-tags: "<text>Arena tags, comma separated (empty: any arena)</text>"
admin-field-ranked: "<text>Ranked queue</text>"
admin-field-unranked: "<text>Unranked queue</text>"
admin-field-build: "<text>Building (placed blocks are removed after)</text>"
admin-field-hunger: "<text>Hunger</text>"
admin-field-regen: "<text>Natural regeneration</text>"
admin-field-water: "<text>Touching water loses the round (sumo)</text>"
admin-field-fall: "<text>Fall damage</text>"
admin-kit-save: "<white><icon:save></white><good>Save</good>"
admin-kit-save-tip: "<text>Saves the name, icon, tags and rules above.</text>"
admin-kit-items: "<white><icon:items></white><value>Use my inventory</value>"
admin-kit-items-tip: "<text>Replaces the kit's items with what you carry. Saved layouts reset.</text>"
admin-kit-load: "<white><icon:kit></white><value>Give me the kit</value>"
admin-kit-load-tip: "<text>Puts the kit on you to change it. Your inventory is replaced.</text>"
admin-kit-delete: "<white><icon:delete></white><bad>Delete</bad>"
admin-kit-delete-tip: "<text>Asks first.</text>"
admin-confirm-title: "<title>Are you sure?</title>"
admin-confirm-kit: "<text>Delete the kit </text><value>{kit}</value><text> and every layout of it? Ratings stay.</text>"
admin-confirm-arena: "<text>Delete the arena </text><value>{arena}</value><text>?</text>"
admin-confirm-yes: "<white><icon:delete></white><bad>Yes, delete</bad>"
admin-confirm-no: "<white><icon:back></white><text>No</text>"
admin-arenas-title: "<title>Arenas</title>"
admin-arenas-intro: "<text>An arena is two spawns and a box. One fight at a time; build several copies for busy kits.</text>"
admin-arenas-line: "<value>{arena}</value> <text>{state}</text> <muted>· tags: {tags}</muted>"
admin-arenas-empty: "<muted>No arenas yet. Type a name and press Create.</muted>"
admin-arenas-open: "<white><icon:arena></white><value>{arena}</value>"
admin-arenas-open-tip: "<text>Open the setup wizard.</text>"
admin-field-new-arena: "<text>New arena name (a-z, 0-9, -)</text>"
admin-arenas-create: "<white><icon:save></white><good>Create</good>"
admin-arenas-create-tip: "<text>Makes the arena and opens its wizard.</text>"
admin-field-arena-tags: "<text>Tags, comma separated (empty: every kit)</text>"
wizard-title: "<title>Arena: {arena}</title>"
wizard-head: "<value>{arena}</value> <text>{state}</text>"
wizard-step-done: "<good>{n}. {part}</good> <muted>{where}</muted>"
wizard-step-missing: "<bad>{n}. {part}</bad> <muted>not set</muted>"
wizard-box: "<text>Box: {x} x {y} x {z} blocks.</text>"
wizard-warn-spawn1-outside: "<warn>Spawn 1 is outside the box.</warn>"
wizard-warn-spawn2-outside: "<warn>Spawn 2 is outside the box.</warn>"
wizard-tags: "<text>Takes kits tagged: </text><value>{tags}</value>"
wizard-hint: "<muted>Stand on each spot and press its button. The box should hold the whole fight, with air above it. Auto box draws one round the spawns.</muted>"
wizard-done: "<good>Ready. Players can fight here now.</good>"
wizard-spawn1: "<white><icon:spawn></white><value>1. Spawn 1 here</value>"
wizard-spawn1-tip: "<text>Where the first player (or team) starts, facing the way you face.</text>"
wizard-spawn2: "<white><icon:spawn></white><value>2. Spawn 2 here</value>"
wizard-spawn2-tip: "<text>Where the second player (or team) starts.</text>"
wizard-corner1: "<white><icon:corner></white><value>3. Corner 1 here</value>"
wizard-corner1-tip: "<text>One corner of the box, low down.</text>"
wizard-corner2: "<white><icon:corner></white><value>4. Corner 2 here</value>"
wizard-corner2-tip: "<text>The opposite corner, high up.</text>"
wizard-autobox: "<white><icon:auto></white><value>Auto box</value>"
wizard-autobox-tip: "<text>Draws corners 1 and 2 round both spawns (arena.auto-box in config.yml).</text>"
wizard-save-tags: "<white><icon:tag></white><value>Save tags</value>"
wizard-save-tags-tip: "<text>Kits with one of these tags may use this arena.</text>"
wizard-enable: "<white><icon:on></white><good>Switch on</good>"
wizard-disable: "<white><icon:off></white><warn>Switch off</warn>"
wizard-toggle-tip: "<text>A switched-off arena gets no new fights.</text>"
wizard-teleport: "<white><icon:teleport></white><value>Go to spawn 1</value>"
wizard-teleport-tip: "<text>Teleports you there.</text>"
wizard-is-copy: "<muted>A copy of {source}, made by the plugin.</muted>"
wizard-copy: "<white><icon:copy></white><value>Make a copy</value>"
wizard-copy-tip: "<text>Pastes this arena next to itself as a new arena with the same tags. It has {count} copies now.</text>"
wizard-delete: "<white><icon:delete></white><bad>Delete</bad>"
wizard-delete-tip: "<text>Asks first.</text>"FAQ
Which servers and versions does it run on?
It needs Paper or a Paper fork such as Purpur, because it uses Paper-only APIs (the dialog API for its menus, Adventure text components). Spigot and CraftBukkit are not supported. plugin.yml declares api-version 1.21, the jar is built against Paper API 1.21.11, and it needs Java 21 or newer.
Does it need other plugins?
No other plugin is required (plugin.yml has no hard dependencies). Optional: PlaceholderAPI (plugin.yml softdepend), used when present. The server downloads org.xerial:sqlite-jdbc:3.53.2.1 at startup, so it needs internet access on first start.
How do I apply config changes?
Edit plugins/PracticeCore/config.yml and run /practice reload. A restart works too.
Does it run on Folia, or for Bedrock players?
Not tested on Folia, and plugin.yml does not declare folia-supported. Bedrock players (through Geyser) have not been tested either.
What licence do I get?
The licence terms are the BuiltByBit EULA shown on the listing. There is no licence key to enter, and the plugin never contacts a licence server.
Links
- BuiltByBit: listing coming soon
- Support Discord: discord.gg/KG4ubAZEuw
- All plugins on BuiltByBit: the collection
- More plugins: all plugins
- Custom work: commissions
Support
Questions, bugs or ideas: the active support Discord or the discussion tab on this page. When something breaks, include your server version and the error from the console.
Full setup guide, commands, permissions and config reference: documentation.