Macw1usDuelsBot
A dark-luxury PvP duel arena with an infinite-totem training bot, plus player-vs-player duels. It builds itself and repairs itself.
Short version (for the summary field): Type /duel to teleport into an auto-generated blackstone arena and fight a weak bot that never runs out of totems. Or challenge another player. The arena resets to pristine after every fight.
Features
Auto-generated arena
Builds itself on first start. No schematics, no WorldEdit, no setup.
Octagonal 40×40 arena in a Netherite / dark-luxury style: polished blackstone, blackstone bricks, polished basalt, gilded blackstone, crying obsidian, tinted glass and black stained glass panes.
Glowing floor border (sea lanterns hidden under black glass), crying-obsidian grid lines every 5 blocks, soul lanterns on chains, buttons, trapdoors and raised stair details.
Netherite and gold centerpiece, gold-and-netherite spawn pads, no trees or nature.
Full barrier cage (anti-escape)
Invisible barrier roof, walls and floor around the whole arena.
Elytra is blocked, and so is flying or building out through the roof.
Digging down stops at a barrier floor 40 blocks below.
Ender pearls and chorus fruit can’t take you out of the arena.
The cage is permanent and never deleted or repaired.
Destructible but self-repairing
Break, build, place water or use TNT. Everything inside the cage can be changed.
The arena restores itself to its original state when you leave, die or quit, and when the server starts or stops.
Repairs run in small slices per tick, so there’s no lag spike.
DuelBot, the training opponent
Netherite armor (Protection IV, Unbreaking III) and a Sharpness V Netherite sword.
Totem of Undying in the offhand, always. It gets a new one half a second after every pop, so it never runs out.
Deliberately weak AI: walks randomly, approaches slowly, swings every 1.5–2 seconds, misses about 20% of the time, no crits. It’s meant for practicing totem fights, not for beating you.
Player duels
/duel player <name> sends a request with a clickable [ACCEPT] button.
/duel accept <name> or /duel deny <name> answers it.
Requests expire after 60 seconds.
Fair and safe
Your inventory is kept if you die in the arena.
Blocks and buckets you place are returned to you.
Broken blocks drop nothing, and dropping items is disabled, so there’s no farming and no item loss.
The build limit is 15 blocks above the floor.
Commands
Command Description
/duel or /duel bot Fight the DuelBot
/duel player <name> Challenge another player
/duel accept <name> Accept a request
/duel deny <name> Decline a request
/leave duel Leave, repair the arena, return to where you were
/duel reloadarena Admin: kick everyone and regenerate the arena and cage
Permissions
Permission Default Description
macw1u.duels.use everyone Use /duel and /leave
macw1u.duels.admin OP Use /duel reloadarena
Configuration
Everything is in config.yml.
Arena: world, center coordinates (default world 1000 100 1000), barrier roof height and floor depth.
Bot: name, weak or strong mode, hit delay, damage, miss chance, and whether the infinite totems are on.
Messages: every message, with & color codes.
Requirements
Paper 1.21.11 (or a Paper fork on the same version)
Java 21
No other plugins or dependencies
Good to know
There is one arena, so one duel runs at a time (bot or player).
After changing the arena location in config.yml, run /duel reloadarena. The old barrier shell stays where it was.
The bot is a custom-AI zombie rather than a fake player, so it has no hotbar. The totem logic is built around that: a real totem in the offhand, plus a reserve count that never drops below two.