Compatibility
Minecraft: Java Edition
Platforms
Links
Tags
Creators
Details
PvP practice bots for Paper servers. The bots look like players and fight like them too. They sprint-hit and W-tap between swings, jump for crits, and keep spacing at max reach. They back off while their own swing recharges and yours is ready. Players pick a bot, a difficulty and a kit from a menu and start fighting. They don't need to know a single command.
Requirements: Paper 1.21.9 or newer (tested on 1.21.11 and 26.1.2), Java 21+. No other plugins needed.
SHOWCASE
Every bot is a vanilla Mannequin entity with a real player skin, so there are no fake players in the tab list and no packet tricks. The plugin moves and aims the Mannequin itself every tick.
- Aim turns at a capped speed with a bit of random jitter, the way a mouse does. Easy bots are slow to track you, Insane bots barely miss.
- Melee bots sprint-hit, W-tap, plan jump crits and hit on the way down. They strafe in long arcs at range and switch to ADAD up close or when you draw a bow.
- Hit selecting: when the bot's swing is recharging and yours is charged, it steps out of your reach instead of trading.
- Archers lead their shots based on how you are moving and aim higher for arrow drop.
- Shield users block when you're charged up and drop the shield to swing. An axe disables the shield for 5 seconds, the same as for a player.
- Bots eat golden apples when low, pearl after players who run, and won't walk into lava or off a high drop.
The plugin ships with eleven bots. Each one is a YAML file in bots/, so you can edit them, delete them or add your own.
| Bot | Style |
|---|---|
| Rookie | Stone sword, leather, slow, no crits. Good for learning to combo. |
| Swordsman | Diamond sword and iron armor. A plain baseline to measure yourself against. |
| Knight | Axe and shield. Blocks your charged hits, breaks your shield. |
| Archer | Kites from 10 to 18 blocks, leads its shots. |
| Berserker | Netherite axe, almost no armor, gets stronger as it loses health. |
| Skyfall | Wind charge at its own feet, then a mace smash on the way down. |
| Duelist | Netherite sword, protection armor, good spacing, pearls after you. |
| FlameFrags | Fire bow at mid range, fire sword when rushed. |
| Wemmbu | 40 HP tank with axe, shield, end crystals and mace smashes. |
| ??? | 60 HP boss. Half invisible, blinks behind you, enrages at low health. |
| Training Dummy | Never fights back, never dies. Used by the dummy mode. |
Abilities are switched on per bot: bow, shield, crystals, wind-mace, blink, pearls, gapples, enrage and hurt-resistance. Each has its own cooldown and ranges. Crystal explosions never break blocks.
Duel. One bot, a 3-2-1 countdown, then you fight. When the round ends you get a summary in chat: time, hits, crits, damage dealt and taken, best combo, average and max reach, and top CPS. The score carries over between rounds (3-1 and so on). Clickable [REMATCH] [MENU] [LEAVE] buttons follow, or the next round starts on its own if you turned on auto rematch.
Wave survival. Bots keep coming. Every wave adds more of them and gives them more health. You get some health back between waves. Pick one bot or a random mix, and try to beat your best wave, which is saved per player.
Training dummy. A target for practicing combos, reach and clicking. It can stand still, strafe, circle you, back away or jump. You choose its armor (none up to netherite) to see your real damage, and you can turn knockback off. The action bar shows CPS, reach, combo, last hit and DPS.
During any fight the action bar shows a live HUD, and damage numbers float over the bot. Only you see them.
Kits. Five come with the plugin: Sword, Axe and Shield, Mace, Archer and Netherite Pot. They are defined in kits.yml with slots, enchantments, potions and leather colors. Players can also fight with their own inventory.
When a kit is in use, the player's real inventory, armor, XP, health, effects, gamemode and position are written to disk before anything changes. They come back when the session ends. If the server crashes, the player is kicked or they die, everything is restored on respawn or on the next join. The kit is given again before every round, so food and potions refill. Kit items can't be dropped, put in chests, item frames or armor stands, or mixed with picked-up items.
Arenas. Stand where the player should spawn and run /pvpbots arena create <name>, then stand where the bot should spawn and run /pvpbots arena setbot <name>. One session uses an arena at a time. Players can pick a specific arena, take the first free one, or fight right where they stand (you can turn that off).
A killing blow ends the round instead of killing the player, so there's no death screen and nothing drops. A totem of undying in either hand still pops normally.
/pvpbots opens the menu. From there a player can:
- set up a duel, wave run or dummy session and press START;
- browse bots with their description, health, damage, speed, reach and abilities;
- pick a difficulty and see what it changes;
- pick a kit, right click to look inside it, or keep their own inventory;
- pick an arena and see which ones are in use;
- toggle the HUD, countdown, auto rematch, chat summary and damage numbers.
Picks and settings are stored in the player's own data, so they're still there after a restart and the plugin keeps no database.
| Command | Permission | Description |
|---|---|---|
/pvpbots |
pvpbots.use |
Opens the menu |
/pvpbots duel [bot] [difficulty] [kit] |
pvpbots.mode.duel |
Starts a duel, skipping the menu |
/pvpbots waves [difficulty] [kit] |
pvpbots.mode.waves |
Starts wave survival |
/pvpbots dummy [pattern] |
pvpbots.mode.dummy |
Spawns the training dummy |
/pvpbots rematch |
pvpbots.use |
Starts the next round |
/pvpbots leave |
pvpbots.use |
Ends the session and gives everything back |
/pvpbots settings |
pvpbots.use |
Opens player settings |
/pvpbots kits |
pvpbots.use |
Opens the kit list |
/pvpbots arena <create|setplayer|setbot|delete|tp|list> [name] |
pvpbots.admin |
Manages arenas |
/pvpbots stop <player> |
pvpbots.admin |
Ends someone else's session |
/pvpbots list |
pvpbots.admin |
Shows who is training |
/pvpbots reload |
pvpbots.admin |
Reloads config, messages, bots, kits and arenas |
Aliases: /ptb, /pvpbot, /trainbot. Everyone has the player permissions by default. pvpbots.anywhere lets a player fight outside an arena. A bot or kit can also require its own permission, set in its file.
config.ymlhas the session rules (countdown, rematch delay, max distance, session limit, forced survival), kit protection, wave scaling, HUD layouts, damage number format, sounds, default player settings, and the difficulties.- There are four difficulties: Easy, Normal, Hard and Insane. Each one sets aim speed, aim jitter, swing delay, crit rate, and speed, damage and health multipliers. It also sets bow accuracy and whether the bot W-taps, hit-selects and pearls. You can add more.
bots/<id>.ymlholds one bot per file: name, skin, menu icon, description, health, speed, reach, damage, swing speed, crit chance, equipment and abilities.kits.ymlholds the kits.messages.ymlholds every text, including menu items, in MiniMessage format, so you can translate the whole plugin.
A bot file:
name: '<white>Swordsman'
order: 2
icon: DIAMOND_SWORD
description:
- '<gray>Plain sword fighter in iron.'
skin: '' # any Minecraft username, empty = default skin
permission: ''
in-wave-pool: true
health: 20.0
speed: 0.28 # blocks per tick while sprinting
reach: 3.0
melee:
damage: 7.0
attack-ticks: 12
crit-chance: 0.4
equipment:
weapon: {material: DIAMOND_SWORD}
helmet: {material: IRON_HELMET}
chestplate: {material: IRON_CHESTPLATE}
leggings: {material: IRON_LEGGINGS}
boots: {material: IRON_BOOTS}
abilities:
gapples:
health-below: 0.35
cooldown-ticks: 400
- Put
PvPTrainingBots.jarinplugins/. - Start the server. The plugin creates
config.yml,messages.yml,kits.ymland thebots/folder. - Optional: build an arena and register it with
/pvpbots arena createand/pvpbots arena setbot. - Players run
/pvpbots.











