PvP Servers: KitPvP, Duels and UHC

Minecraft Game Modes

17 min readIntermediateLast updated Oct 31, 2026

PvP servers live or die on fair, responsive fights. Players forgive a plain lobby; they don't forgive hits that don't register, knockback that feels wrong, or a cheater who never gets caught. This guide builds a PvP server one layer at a time: the combat style, kits, duels, arenas, anti-cheat, combat logging, leaderboards and network settings, then UHC events.

Common PvP formats:

Format What players do
KitPvP / FFA Pick a kit, jump into a shared arena, fight everyone. Kills earn coins or streak rewards.
Duels / Practice Queue for 1v1 (or 2v2) matches with a fixed kit, often ranked with an ELO rating.
UHC A survival race where health doesn't regenerate. Last player or team alive wins.
Bedwars, Skywars and friends Round-based minigames. See Minigames.

Time: 2–3 hours for a KitPvP + duels server, plus time to build arenas.

You need:

  • A Paper server (or Purpur). Paper servers
  • 3–4 GB of memory for an arena server; 4–6 GB for UHC (bigger world).
  • Op access in game, and LuckPerms installed. Install plugins
1

Choose the combat style first

Everything else depends on this decision, so make it before you build or configure anything.

Modern combat (1.9+) 1.8-style combat
Attack cooldown Yes: hits charge up No: spam-clicking works
Sword blocking No (shields instead) Yes (right-click to block)
Sweep attacks Yes No
Who likes it Newer players, mace and crystal PvP, survival servers Long-time PvP and practice players
Needs Nothing extra OldCombatMechanics plugin

Many servers offer both: a modern FFA arena and a 1.8-style duels ladder. That's easy to do, because OldCombatMechanics works per world and per player.

Option A: 1.8-style combat with OldCombatMechanics

OldCombatMechanics (OCM, free, by kernitus) brings back pre-1.9 combat on modern servers. It's actively maintained and supports Paper and Spigot.

  1. Download it from the Plugins page (search OldCombatMechanics) or from its GitHub releases page, and put the jar in plugins/. Upload a jar
  2. Restart. Its config is plugins/OldCombatMechanics/config.yml.

OCM is built from modules. Each module turns one old mechanic on. Every module must appear in exactly one of three places:

  • always_enabled_modules: on for everyone.
  • disabled_modules: off for everyone.
  • a modeset: a named bundle of modules that players or worlds can switch between.

The default config ships two modesets:

modesets:
  old:
    - "disable-attack-cooldown"
    - "disable-sword-sweep"
    - "old-tool-damage"
    - "sword-blocking"
    - "shield-damage-reduction"
    - "old-golden-apples"
    - "old-player-knockback"
    - "old-player-regen"
    - "old-armour-strength"
    - "old-potion-effects"
    - "old-potion-throwing"
    - "old-critical-hits"
  new:
    - "old-golden-apples"

Then choose which modesets each world allows. The first one listed is the default:

worlds:
  __default__: [ "old", "new" ]
  arena_old: [ "old" ]
  arena_modern: [ "new" ]

__default__ covers every world not named. With the example above, arena_old is always 1.8 combat, arena_modern is always modern, and everywhere else defaults to old but players can switch.

Commands and permissions:

Command Permission Does
/ocm mode oldcombatmechanics.mode Shows your current modeset
/ocm mode <modeset> oldcombatmechanics.mode.own Switches your own modeset
/ocm mode <modeset> <player> oldcombatmechanics.mode.others Switches someone else's
/ocm reload oldcombatmechanics.commands Reloads the config

Let players switch in shared worlds:

lp group default permission set oldcombatmechanics.mode.own true

If you set mode-permissions.enabled: true, players can only pick modesets they hold oldcombatmechanics.modeset.<name> for.

How mixed fights work: attack mechanics follow the attacker's modeset, while armour and shields follow the defender's. Keep each arena on a single modeset so fights are always fair.

Tuning knockback. The old-player-knockback section has knockback-horizontal, knockback-vertical, knockback-vertical-limit, knockback-extra-horizontal and knockback-extra-vertical. Change one value at a time by small amounts, /ocm reload, and test with two accounts. Players notice tiny differences, so announce changes.

Check it worked: join an old world, hold a sword and right-click: you should block. Spam-click a zombie: every click should hit with no cooldown bar.

Option B: modern combat

Nothing to install. Do decide on newer weapons: the mace and other recent additions change fights a lot. If you don't want them in an arena, remove them from kits and block them with WorldGuard flags or a plugin (for example WorldGuard ExtraFlags Plus has a flag to disable the mace).

Letting 1.8 clients join

Some practice players still use the 1.8.9 client. ViaVersion, ViaBackwards and ViaRewind together let older clients join a modern server. Install all three from Minecraft Plugins. It mostly works, but some items and blocks look different to old clients, and anti-cheats need to handle them (Grim supports this). Test with a 1.8.9 client before advertising it.

2

Install the core plugins

From Minecraft Plugins, install:

Plugin Why
LuckPerms Ranks and permissions.
EssentialsX (+ EssentialsX Spawn) Spawn, basic kits, economy, /msg, moderation basics.
WorldEdit or FastAsyncWorldEdit Building and copying arenas.
WorldGuard Protecting the lobby and arenas, PvP on/off per region.
PlaceholderAPI Lets scoreboards, holograms and leaderboards show stats.
spark Finding lag.

Restart and check they're all green with plugins in the console.

3

Build the lobby and arenas

Worlds

Use separate worlds: one lobby and one or more arena worlds. A world-management plugin such as Multiverse-Core creates and loads them. For flat or void worlds, set the world type when you create it.

In each arena world, turn off things you don't want:

gamerule doMobSpawning false
gamerule doDaylightCycle false
gamerule doWeatherCycle false
gamerule doFireTick false
gamerule announceAdvancements false

Some newer Minecraft versions rename game rules. If a name isn't accepted, type gamerule and let tab-complete show the current name.

Protect them with WorldGuard

Lobby (no PvP, no building):

//wand

Select the two corners, then:

/rg define lobby
/rg flag lobby pvp deny
/rg flag lobby build deny
/rg flag lobby fall-damage deny

FFA arena (PvP on, no building, no item drops on death if your kits are free):

/rg define ffa
/rg flag ffa pvp allow
/rg flag ffa build deny
/rg flag ffa item-drop deny

Higher-priority regions win, so give arenas inside the lobby world a priority: /rg setpriority ffa 10.

Arena design tips

  • Size: a 1v1 duel arena is about 40 x 40 blocks; FFA arenas 80–150 blocks across, depending on player count.
  • Even sides: spawn points mirrored, with the same cover on both sides.
  • No escape: walls or barriers, and a death floor or void underneath.
  • Copies: duel plugins need several copies of each arena so matches can run at the same time. Build one, then copy it with WorldEdit (//copy, move, //paste) and register each copy.
4

Kits

Simple kits with EssentialsX

Hold the items and armour you want, then:

/createkit warrior 0

The number is the cooldown in seconds (0 means no cooldown). Give the kit to everyone:

lp group default permission set essentials.kit true
lp group default permission set essentials.kits.warrior true

Players use /kit warrior. Kits are saved in plugins/Essentials/kits.yml.

GUI kits with PlayerKits 2

PlayerKits 2 (free, maintained) adds a kit menu, previews, cooldowns, one-time kits and permission-locked kits. Install it from Minecraft Plugins, then create kits from your inventory in game and arrange them in its GUI. It's a good choice for KitPvP lobbies where players browse kits.

Kit design

  • Same total power for every kit in a fair arena. Differences should be play style (speed vs armour vs range), not strength.
  • Kit items shouldn't escape. If kits are free, deny item drops and clear inventories on leaving the arena, otherwise players hoard enchanted gear.
  • Version: if you run 1.8-style combat, build kits on 1.8 rules: strength potions, golden apples and enchantment levels behave differently with OCM's old modules.
5

Duels and practice

A duels or practice plugin handles queues, matches, arenas, kits per ladder, ELO, and arena reset. This is the part of a PvP server where plugin choice matters most.

What to look for

Feature Why it matters
Recent updates for your Minecraft version PvP plugins break often between versions. Check the last update date.
Arena reset / rollback Blocks placed in a match must be removed afterwards.
Multiple arena copies Several matches at once.
Ranked and unranked queues, ELO Starting rating, K-factor (how much one match moves it), placement matches.
Kit per ladder NoDebuff, Sumo, BuildUHC, Crystal, Mace, and so on.
Party and 2v2 support Groups of friends stay.
MySQL storage Ratings survive restarts and can be shared across servers.
OldCombatMechanics support Some plugins (or small add-ons) switch a player's OCM modeset per ladder.

Options (check each before installing)

  • StrikePractice (paid) is the long-standing, feature-complete choice for practice servers, and is still being updated.
  • Several newer practice cores are sold on BuiltByBit and SpigotMC (for example ZonePractice Pro). Read recent reviews and the version list.
  • Free plugins exist, but many are no longer updated. For example, the once-popular free Duels plugin by Realized hasn't been updated since 2023 and users report it doesn't work on current versions. Search Minecraft Plugins for duels and check the update dates.

Store stats in MySQL

Create a database on the panel's Databases page and put its details in the plugin's config. Databases It keeps ratings safe when files are reset, and lets a lobby server show the same leaderboards.

6

Anti-cheat

A PvP server without an anti-cheat attracts cheaters within days. Run one anti-cheat, not several: they fight each other and double the false flags.

Anti-cheat Cost Notes
Grim Free, open source Prediction-based: it simulates what the client should be able to do. Strong on movement, reach and velocity. Supports 1.8 through the newest clients. Actively updated.
Vulcan Paid (SpigotMC) Popular, large set of checks, lots of configuration.
Polar Paid subscription Commercial, used by bigger networks.

Grim is the sensible starting point. Install it from Minecraft Plugins (Grim Anticheat). Normal Grim builds include the packetevents library it needs; "lite" builds don't, so install packetevents too if you pick one. The console tells you if anything is missing.

Grim commands and permissions

Command Permission Does
/grim alerts grim.alerts Toggles receiving alerts
/grim profile <player> grim.profile Client version, sensitivity and more
/grim spectate <player> grim.spectate Spectate a suspect (/grim stopspectating to return)
/grim history <player> grim.history Their stored violations
/grim reload grim.reload Reloads config (resets online violations)

Give your moderators what they need:

lp creategroup mod
lp group mod permission set grim.alerts true
lp group mod permission set grim.profile true
lp group mod permission set grim.spectate true
lp group mod permission set grim.history true

grim.exempt and grim.disabled turn Grim off for a player: never give them to normal ranks.

Rolling it out

  1. Start with alerts only: let Grim flag for a week without automatic bans. Its punishments are configured in punishments.yml in Grim's plugin folder.
  2. Watch alerts during real fights. If one check flags lots of good players, look at what they have in common (old-combat knockback, a specific kit item, high ping) before tuning.
  3. Only then turn on automatic kicks, and bans for the clearest checks.
  4. Pair the anti-cheat with replays or spectating: a moderator watching for 30 seconds settles most reports.
7

Combat logging and PvP rules

Players will log out mid-fight to avoid dying. A combat-tag plugin stops that.

PvPManager (free, actively maintained, on Minecraft Plugins) covers the usual set:

  • Combat tag: after hitting or being hit, players are tagged for a few seconds. Logging out while tagged kills them (or drops their items).
  • Command blocking in combat: no /spawn, /home or /tpa while tagged.
  • Newbie protection: new players can't be attacked for a while.
  • PvP toggle (for survival-style servers): players opt in to PvP.
  • Kill-abuse protection: stops players farming kills on the same victim.

Configure it in plugins/PvPManager/config.yml; set the combat time to 10–20 seconds and add your teleport commands to the blocked list. CombatLogX is a well-known alternative.

8

Leaderboards, stats and rewards

Players play longer when they can see themselves climb.

  • ajLeaderboards (free, maintained) turns any PlaceholderAPI placeholder into a leaderboard: kills, ELO, KDR, playtime. Pair it with a hologram plugin (DecentHolograms or FancyHolograms) to show the top 10 in the lobby. The placeholder formats are on ajLeaderboards' wiki.
  • Most duel plugins have their own placeholders for rating and wins. Check its docs, and install the matching PlaceholderAPI expansion if it needs one (/papi ecloud download <name> then /papi reload).
  • A scoreboard plugin can show the player's kills, streak and rating on the side of the screen.
  • Rewards: coins per kill (EssentialsX economy), killstreak broadcasts, cosmetic kill effects. Avoid rewards that make players stronger; they make fights unfair.
9

Responsive fights: latency and server settings

Hit registration is mostly about round-trip time (ping) and a steady 20 TPS. You can't fix a player's Wi-Fi, but you can make sure the server never adds delay.

Server location

Ping is mostly distance. A player 100 km away might see 10–20 ms; across an ocean, 80–150 ms. Pick the location closest to most of your players, and say on your website which region you're in.

Settings

Setting File Value Why
view-distance server.properties 6 Arenas are small. Less to send means fewer delays when players spawn in.
simulation-distance server.properties 4 Nothing outside the arena needs to tick.
network-compression-threshold server.properties 256 (default). -1 on back-ends behind Velocity Compressing tiny packets costs time. Behind a proxy, only the proxy should compress.
entity-tracking-range.players spigot.yml (world-settings.default) 128 (default) How far away players are sent to each other. Don't lower it in open arenas, or players appear late.
settings.netty-threads spigot.yml 4 (default) Network threads. The default is right for most servers; only very busy servers benefit from more.
collisions.enable-player-collisions config/paper-global.yml true (default), or false in lobbies Turn off if crowded lobbies cause pushing.
chunk-loading-basic.player-max-chunk-send-rate config/paper-global.yml 75 (default) Raise only if players complain arenas load slowly after teleporting.

Keep TPS at 20

A server below 20 TPS makes hits feel delayed no matter how good the ping is.

  • Check with /spark tps during busy times. Anything under 19.5 needs attention.
  • Profile with /spark profiler start, play for a few minutes, then /spark profiler stop and open the link. Fix lag
  • Common PvP causes: thousands of dropped items in FFA (set item-despawn-rate in spigot.yml lower, for example 1200 ticks = 1 minute, or deny drops), arrows stuck everywhere (arrow-despawn-rate, default 1200), too many holograms or scoreboard updates.
  • Pre-generate any world players explore (UHC) so terrain generation never steals the tick. Pre-generate

Velocity networks

Bigger PvP servers split into a lobby, a duels/practice server, and an FFA server behind Velocity. A crash in one doesn't take down the others, and you can restart them separately. Velocity networks and Server networks.

10

UHC events

UHC (Ultra Hardcore) is survival where health only comes back from golden apples and potions.

Set up

  1. Create a fresh world for every UHC: a reused map is a known map.

  2. Turn natural regeneration off: gamerule naturalRegeneration false (tab-complete shows the current name if it's been renamed).

  3. Pre-generate the whole play area with Chunky, so nobody lags when 30 players scatter. A 2,000-block radius is typical for 20–40 players.

    chunky world uhc
    chunky center 0 0
    chunky radius 2000
    chunky start
    
  4. Set a world border that shrinks to force the final fight:

    worldborder center 0 0
    worldborder set 4000
    

    Then, at the agreed time, worldborder set 200 1800 shrinks it to 200 wide over 1,800 seconds (30 minutes).

  5. Use a UHC plugin for scattering players, teams, scenarios (CutClean, Timber, and so on), PvP grace periods and the border countdown. Check it's been updated for your Minecraft version, and run a practice game with staff first.

Running it

  • Announce the time in your Discord days ahead; UHC needs everyone at once.
  • Whitelist during setup, then open it.
  • Have one staff member spectating with Grim alerts on.
  • After the event, delete the world (keep a backup if you want a highlights reel) and generate a new one next time.
11

Moderation, backups and updates

Moderation

  • A ban/mute plugin with history and appeals, such as LiteBans (paid) or AdvancedBan, rather than plain /ban.
  • CoreProtect in the lobby and any building areas, to undo griefing.
  • Clear rules: what counts as teaming in FFA, whether cross-teaming is allowed, macro and auto-clicker rules (common on 1.8 servers: many servers set a clicks-per-second limit).

Backups

PvP worlds change little, but configs, kits, arenas and stats are a lot of work to lose.

Schedule Cron (UTC) Tasks
Daily backup 0 8 * * * Send Command → save-all; Create Backup (offset 10, ignore logs)
Daily restart 10 8 * * * warning say commands, then Restart

Stats in MySQL aren't in panel backups; export them now and then from the database. Backup schedules

Updates

PvP servers are the most sensitive to Minecraft updates: combat changes, anti-cheat updates and duel plugins all have to line up. Wait until all of Paper, OldCombatMechanics, your anti-cheat and your duels plugin support the new version. Then lock a backup, update on a test copy, play a few matches, and only then update the live server. Change version

Common problems

Problem Cause and fix
"Knockback feels wrong" Wrong OCM modeset in that world, or knockback values changed. Check /ocm mode in the arena; compare with your saved config.
Players can block with swords in one arena but not another That world's modeset list in worlds: doesn't include old, or sword-blocking isn't in the modeset.
Hits don't register / delayed hits Check /spark tps first. If TPS is 20, it's ping: compare players' ping with /grim profile. Server location matters most.
Anti-cheat kicks good players False flags from custom knockback, high ping or an item a check doesn't expect. Alerts-only mode, find the check, tune or report it to the anti-cheat's developers.
Two anti-cheats installed Remove one. They conflict and double false flags.
Arenas not resetting The duel plugin's reset isn't set up for that arena, or the arena was registered before it was built. Re-register it.
Players keep their kits after leaving Deny item drops and clear inventory on arena exit; check the duel plugin's settings.
Ratings reset after restart The plugin uses local files that were reset, or the MySQL details are wrong. Check the console for SQL errors.
Players log out to escape fights Install PvPManager or CombatLogX and set punishment on logout.
/spawn used to escape combat Add teleport commands to the combat-tag plugin's blocked list.
FFA lags after a long session Dropped items and arrows. Lower despawn times or deny drops.
1.8 clients can't join Missing ViaBackwards or ViaRewind, or one of them is out of date. Update all three Via plugins together.
Game rule command rejected The rule was renamed in your Minecraft version. Use tab-complete.

Launch checklist

  • [ ] Combat style decided; OCM modesets set per world and tested with two accounts.
  • [ ] Lobby and arena worlds protected with WorldGuard.
  • [ ] Kits balanced; kit items can't leave arenas.
  • [ ] Duels plugin tested end to end (queue, match, reset, rating, restart).
  • [ ] Stats in MySQL.
  • [ ] One anti-cheat, alerts going to moderators, punishments tested.
  • [ ] Combat-tag plugin with teleport commands blocked.
  • [ ] Leaderboards and holograms showing real data.
  • [ ] TPS steady at 20 under load; view-distance 6, simulation-distance 4.
  • [ ] Moderation plugin, rules page, staff ranks.
  • [ ] Daily backup and restart scheduled; a locked pre-launch backup.

Going further

  • Minigames: Bedwars, Skywars and round-based modes.
  • Server networks: lobby, FFA and duels as separate servers.
  • Databases: shared stats and LuckPerms across a network.