PvPMode ⭕ Opt-In PvP + Optional Combat Toolkit ⚡
2.0.0Toggle own PvP - Optional: combat-tag, anti-spawnkill, loot & stealing.
PvPMode
Opt-in PvP - every player decides whether they can fight
What it does
PvPMode turns PvP into a personal choice. Each player switches their own PvP on or off with a single command. Two players can only hurt each other when both have PvP enabled, so newcomers, builders and explorers are never dragged into a fight they didn't ask for. A player's name is coloured by status ( red = PvP on, white = PvP off), both above the head and in the tab list, so you always see who's up for a fight. A rich set of optional, default-off extras make fighting actually rewarding: keep your gear on death, protect fresh players from spawnkills, loot or rob the players you defeat, and manage all the custom reward items from in-game.
Please read before you install
- This switches PvP OFF for everyone the moment you install it. That is the whole point of an opt-in system, but it catches people out: players who could fight yesterday cannot fight today until each of them turns their own PvP on. That applies to your existing players too, not only to newcomers. If you don't want that, this is not the plugin you're looking for.
- Nobody is left guessing. Since 2.0.0 the plugin tells players what is going on: a hit that gets blocked comes with a short line naming the reason, and every player is reminded on join that PvP is opt-in here and which command changes it. Both can be switched off if your server announces its rules some other way.
- Check your world names. The plugin is only active in the worlds listed in
config.yml, and it ships with the default namesworld/world_nether/world_the_end. If your worlds are called anything else, put the real names in. The plugin compares both lists on startup and writes both lists into your server log if they do not match, so you'll know immediately. - Minecraft 26.x and Java 25 are required. Servers on 1.17 to 1.21 keep using PvPMode 1.4.2 (see Compatibility below).
Features
- Per-player opt-in PvP: no damage unless both players have PvP on (in either direction)
- Clear feedback: a blocked hit usually tells the attacker why nothing happened (see the notes on WorldGuard and the gamerule below) (own PvP off, target's PvP off, world, region, spawn protection), rate-limited so it never spams; a player you cannot see is never named or hinted at (default on)
- Join hint: every player learns on join that PvP is opt-in here, what their status is and which command changes it (default on)
- Combat tagging: once two players start fighting, both are briefly locked into combat and cannot turn PvP off to escape; turning PvP on is always allowed (duration configurable, can be disabled)
- Combat-over message: when the combat tag runs out the player gets a short notice that they can safely disable PvP or log out now (pure info, default on)
- PvP cooldown (optional): an alternative to the combat lock: turning PvP off starts a delay during which you stay attackable, then it turns off automatically (default OFF)
- Combat-log punishment (optional): players who disconnect while combat-tagged (in an active fight) are killed at the logout spot and drop everything; on their next login they are told why they died (default OFF)
- Keep-Inventory, plugin-controlled (optional): keep a player's items (and optionally XP) on death without the server gamerule, with separate switches for PvP deaths and other deaths (default OFF)
- Anti-Spawnkill / spawn protection (optional): shield fresh and just-respawned players from incoming damage for a few seconds with an action-bar timer; the shield ends the moment they attack (default OFF)
- PvP loot reward (optional): the killer of a player gets freshly created items and/or money, conjured out of thin air so nothing is duplicated from the victim (default OFF)
- Stealing (optional): on a PvP kill, take items and/or money directly from the victim; stolen items always drop, stolen money is capped at the victim's balance (default OFF)
- PvE loot bonus (optional): extra mob drops, custom item drops and per-mob money for players who fight with PvP on; three mob groups plus per-mob overrides (default OFF)
- Special-item library + in-game loot management: save real items as named templates and assign them to PvP or mob loot pots with
/pvpmode loot, no file editing, full tab-completion - Permissions for everything: an admin permission for the loot commands plus a full exempt/bypass set (see Permissions below)
- Name colouring via scoreboard teams, over the head and in the tab list
- Covers melee, arrows, tridents, fireballs, splash & lingering potions, tipped-arrow effects, player-lit TNT, tamed pets, player-set end crystals and being set on fire by another player
- Optional WorldGuard support: respects the region
pvpflag, and if a mismatched WorldGuard version ever stops answering, the plugin says so and steps aside instead of blocking every hit (and runs perfectly fine without WorldGuard) - Optional PlaceholderAPI support: expose each player's PvP status and combat state in scoreboards, tab lists or chat (and runs perfectly fine without PlaceholderAPI)
- Optional Vault or VaultUnlocked support: money for the loot bonus, the PvP loot reward and the money side of stealing (and runs perfectly fine without Vault)
- Per-world activation: pick exactly which worlds use the system, with a startup check that catches a mismatched world list
- Configurable respawn behaviour: keep / always on / always off
- Status is saved and survives relog and server restart; new players start safe (PvP off)
- Command name + aliases fully configurable (in case
/pvpmodeis already taken) - English and German included: set
language: deand you're done, nothing to translate - Fully customizable messages: every in-game chat text lives in a language file you can reword, recolour with
&codes and format (bold, italic, …) - Translatable into any other language: copy the language file, translate it, and select it with the
languageoption (missing lines fall back to English) - Self-updating config: on update, new options are added to your existing config automatically; your values and comments are kept and a
config.yml.bakbackup is written first (no more deleting your config) - Built-in update notice: operators are told on join when a newer version is available (it only notifies, never downloads)
- Lightweight, standalone, zero required dependencies
Commands
/pvpmode: toggle your PvP on/off/pvpmode on//pvpmode off: set it directly/pvpmode help: list the commands/pvpmode reload: reload the configuration (and the messages/language)/pvpmode loot …: manage the special-item library and loot assignments (see below)
Loot management commands (permission pvpmode.loot.admin, default operators)
/pvpmode loot save <name>: save the item in your main hand as a reusable template (keeps display name, lore and enchantments)/pvpmode loot get <name>: put a fresh copy of a template into your hand/pvpmode loot delete <name>: delete a template ·/pvpmode loot list: list all templates/pvpmode loot assign pvp <name> <chance> [amount]: drop a template from the PvP loot reward/pvpmode loot assign mob <target> <name> <chance> [amount]: drop a template from a mob pot (<target>= a group hostile/neutral/passive or a single mob type likeZOMBIE)/pvpmode loot unassign pvp <name>|unassign mob <target> <name>: remove an assignment ·/pvpmode loot show pvp|show mob <target>: show the current ones- Assignments are additive on top of
config.yml(pvp-loot.items) andmobs.yml: both ways drop at the same time. (additem/removestill work as aliases forsave/delete.)
Permissions
pvpmode.use: set/toggle own status (default: everyone)pvpmode.help: use the help command (default: everyone)pvpmode.reload: reload the config (default: operators)pvpmode.update: receive the update notice on join (default: operators)pvpmode.loot.admin: manage the item library and loot assignments (default: operators)
Player exemptions (exempt model: the feature applies to everyone, whoever has the permission is left out; all default false, so without it nothing changes):
pvpmode.steal.exempt: this player is never robbed (items and money) when killedpvpmode.pvploot.exempt: killing this player grants the killer no PvP-loot rewardpvpmode.pveloot.exempt: this player gets no PvE mob-loot bonus from mobs they killpvpmode.spawnprotection.exempt: this player is granted no spawn protection on join/respawnpvpmode.keepinventory.exempt: this player is excluded from the plugin's Keep-Inventory (drops as usual)
Bypass (default false):
pvpmode.spawnprotection.bypass: staff who may still damage spawn-protected players (their hit is not cancelled)
How damage is decided
A hit between two players is only allowed when all three are true:
- the world is in the configured active list,
- WorldGuard (if enabled) does not deny PvP at that spot,
- both players have PvP turned on.
If even one is false, no damage happens, and since 2.0.0 the attacker is usually told which one it was (see the notes on WorldGuard and the gamerule below).
Telling players what is going on (new in 2.0.0)
A blocked hit is completely silent in Minecraft: no message, no hurt sound, no knockback. Players read that as "the server is broken", not as "PvP is off", which is why an opt-in plugin that works perfectly can still feel broken. So the plugin now speaks up. feedback.blocked-hit (default on) usually sends the attacker a short line naming the real reason (see the notes on WorldGuard and the gamerule below) (their own PvP is off, the target's PvP is off, the world or region forbids PvP, or the target is still spawn-protected), rate-limited by feedback.blocked-hit-seconds (default 5) so it never spams during a fight. The victim is deliberately not messaged; they didn't do anything. A player the attacker cannot see (vanished or under an invisibility potion) is never named and never hinted at: that hit stays silent, so the notice cannot be turned into a hide-and-seek detector. feedback.join-hint (default on) tells each player on join that PvP is opt-in here, what their own status is and which command changes it. Both switches can be turned off.
Combat tagging
When two players actually hit each other, both are put "in combat" for a few seconds. While in combat a player cannot turn their PvP off, so nobody can escape a fight by quickly disabling PvP. Turning PvP on is always allowed, the duration is configurable ( combat.tag-seconds, default 10), and the whole feature can be switched off. When the tag runs out the player gets a short "combat over" notice ( combat.end-message, default on): pure information, no mechanic change.
PvP cooldown (optional)
An alternative to the combat lock. When cooldown.enabled is true, turning your PvP off does not take effect right away: a delay starts ( cooldown.seconds, default 300 = 5 minutes) during which you stay attackable, then your PvP turns off automatically. The player gets an action-bar reminder at each full minute and a chat message when it ends. Turning PvP on is always instant and cancels a running cooldown, the cooldown survives relog, and while this feature is on it replaces the combat tag. Default off.
Combat-log punishment (optional)
Stops players from escaping a fight by simply disconnecting. When combat-log.enabled is true, a player who logs out while still combat-tagged (i.e. they dealt or took a real PvP hit within the last combat.tag-seconds, so they were genuinely in a fight) is killed at the logout spot and drops everything (a normal vanilla death). Merely having PvP on without a recent fight, even for minutes, is not punished, and neither is a cooldown winding down without a recent hit; only logging out mid-fight is. Because the player is offline when the kill happens, they are told why on their next login (a translatable chat message). The combat tag is recorded on every PvP hit, so this works even with the in-combat lock turned off; with combat.tag-seconds: 0 no tag is set and nothing is punished. Default off.
Keep-Inventory, plugin-controlled (optional)
Lets PvPMode keep a player's items on death itself, instead of relying on the server keep_inventory gamerule, and it can treat PvP and non-PvP deaths differently. keep-inventory.pvp covers deaths caused by PvP (killed by another player, or while combat-tagged); keep-inventory.other covers every other death (mobs, fall, lava, drowning, …). For each, enabled: true keeps the inventory and keep-xp: true also keeps levels and XP. When a switch is active it overrides the server gamerule for that death only. A player with pvpmode.keepinventory.exempt is left out and drops everything as usual. Stolen items (see below) always drop regardless. Default off: the plugin does not interfere.
Anti-Spawnkill / spawn protection (optional)
Shields freshly arrived players from being killed before they can react. Protection starts on a player's first ever join and every time a player respawns, and lasts spawn-protection.seconds (default 30), with a small action-bar timer showing the time left. The shield ends early the moment the protected player attacks something themselves (whether by melee, by firing an arrow, by throwing a harmful potion or by setting someone alight), so you cannot hide behind it and fight at the same time. spawn-protection.block-players (default true) and spawn-protection.block-environment (default false) choose what is blocked. pvpmode.spawnprotection.exempt grants a player no protection; pvpmode.spawnprotection.bypass lets staff still hit protected players. Default off.
PvP loot reward (optional)
Makes winning a fight pay off. When a player kills another player, the killer is rewarded with freshly created items and/or money, conjured out of thin air. Nothing is taken or copied from the victim, so there is no duplication (that is what stealing is for). pvp-loot.items is a list where each entry is either MATERIAL:amount:chance (chance in percent, e.g. DIAMOND:3:20 for a 20% chance of 3 diamonds) or the name of a saved library item; items that do not fit drop at the killer's feet. pvp-loot.money pays the killer money per kill (needs Vault). This has its own master switch, separate from the PvE loot bonus. A victim with pvpmode.pvploot.exempt grants the killer no reward. Default off.
Stealing (optional)
On a PvP kill, take items and/or money directly from the victim and hand them to the killer, fully independent of Keep-Inventory. steal.items.attempts rolls happen on a kill, each at steal.items.chance percent; every success removes one random item from the victim's inventory (storage, armour or off-hand) and drops it at the death spot (never duplicated). steal.money moves money from the victim to the killer: mode: percent takes a share of the victim's balance, mode: fixed a flat amount, and the stolen sum is always capped at the victim's current balance (needs Vault). A victim with pvpmode.steal.exempt is never robbed. Default off.
PvE loot bonus (optional)
Rewards players who play with PvP active by giving them extra drops from mobs they killed themselves: Risk = Reward. The bonus is granted only while the killer's PvP is effectively active (active world, WorldGuard does not deny PvP there, PvP status on; a running cooldown still counts) and only for mobs they killed personally. Every mob falls into one of three groups ( hostile, neutral, passive; hostile includes slimes, magma cubes, ghasts, phantoms, shulkers, hoglins and the ender dragon; endermen, piglins, zombified piglins, nautiluses, zombie nautiluses and pufferfish count as neutral), each with its own on/off switch and a bonus percent that may exceed 100 (e.g. 200 = triple loot). The mobs.yml fine-tunes single mobs on top of the groups: a per-mob percent overrides its group (and is granted even when the group is off), a per-mob items list adds custom extra drops rolled by their own chance, and a per-mob money amount is paid to the killer (needs Vault plus loot-bonus.money.enabled). mobs.yml ships fully commented out, so by default only the group settings apply. A player with pvpmode.pveloot.exempt receives no bonus. Default off.
Similar projects
Plugin →Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
Emotecraft
Create your own emotes in Minecraft.
7.5MSueta
Simple Tpa
A simple tpa plugin which sends requests
5.4MSueta
Common Network
Forge and Fabric Unified Networking Solution
3.9MSueta
Set Home
A lightweight plugin for players to set their homes.
3.8MSueta