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.
Features
- Per-player opt-in PvP — no damage unless both players have PvP on (in either direction)
- 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 and player-set end crystals
- Optional WorldGuard support — respects the region pvp flag (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 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
- 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 /pvpmode is already taken)
- 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 language — copy the language file, translate it, and select it with a simple language option (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.bak backup 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 like ZOMBIE)
- /pvpmode loot unassign pvp|mob <target> <name> — remove an assignment · /pvpmode loot show pvp|mob <target> — show the current ones
- Assignments are additive on top of config.yml (pvp-loot.items) and mobs.yml — both ways drop at the same time. (additem/remove still work as aliases for save/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)
- pvpmode.steal.exempt — this player is never robbed (items and money) when killed
- pvpmode.pvploot.exempt — killing this player grants the killer no PvP-loot reward
- pvpmode.pveloot.exempt — this player gets no PvE mob-loot bonus from mobs they kill
- pvpmode.spawnprotection.exempt — this player is granted no spawn protection on join/respawn
- pvpmode.keepinventory.exempt — this player is excluded from the plugin's Keep-Inventory (drops as usual)
- 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.
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 keepInventory 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, or by throwing a harmful potion — 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 — 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.
Special-item library & in-game loot management
Instead of editing files by hand, save real items as reusable templates and assign them to loot pots straight from in-game (permission pvpmode.loot.admin, default ops). Templates keep the item's display name, lore and enchantments and are stored in items.yml; /pvpmode loot save <name>, get, delete and list manage them. /pvpmode loot assign pvp|mob … then binds a template to the PvP loot reward or to a mob target (a group or a single mob type) at a chance and amount, stored in loot-assignments.yml. These assignments work additively on top of config.yml and mobs.yml — both ways drop at the same time — and respect the same exempt permissions as the pot they feed. Tab-completion helps with sub-commands, target names and saved template names throughout.
Configuration
Active worlds, respawn behaviour, the two name colours, WorldGuard on/off, the combat lock (on/off, duration and the combat-over message), the PvP cooldown, the combat-log punishment, the PvE loot bonus (groups + money), Keep-Inventory, spawn protection, the PvP loot reward, stealing, the update check, and the command name + aliases are all set in config.yml. Per-mob loot overrides live in mobs.yml, saved item templates in items.yml and in-game loot assignments in loot-assignments.yml. In-game texts live in messages_<language>.yml — pick the language with the language option, edit any text, colour and formatting, and translate it (missing lines fall back to English). When you update the plugin, config.yml is brought up to date automatically: new options are added while your values and comments are kept (a config.yml.bak backup is written first). A full Tutorial.txt and a CHANGELOG.txt are written into the plugin folder on every start.
Placeholders (PlaceholderAPI)
If PlaceholderAPI is installed, these placeholders are available: %pvpmode_status% (coloured ON/OFF), %pvpmode_status_plain% (ON/OFF, no colour), %pvpmode_enabled% (true/false), %pvpmode_combat% (in combat true/false) and %pvpmode_combat_seconds% (seconds left on the combat lock). Without PlaceholderAPI the plugin simply runs without them.
Compatibility
Spigot and Paper, Minecraft 1.17 – 1.21, Java 17+. WorldGuard, PlaceholderAPI and Vault are optional — Vault is only needed for the money payouts (loot-bonus money, PvP loot reward money, and the money side of stealing), and the plugin loads and runs fine without any of them.
Good to know
TNT lit by a player, and an end crystal a player sets off, are attributed to that player and follow the PvP rules. Tamed pets are attributed to their owner. Bed and respawn-anchor explosions are deliberately treated as environmental damage and are NOT gated by this plugin — the server provides no reliable way to trace those block explosions back to a player, so handling them like a PvP hit would be guesswork; they are left as a normal environmental hazard, exactly like fall or lava (this is documented in the config). Everything else between players is gated. All optional mechanics default OFF (the combat-over message aside), so updating an existing server changes nothing until you switch a feature on. PvPMode uses bStats to collect anonymous usage statistics; server owners can opt out at any time in /plugins/bStats/config.yml.
Spoiler: Config
# =====================================================================
# PvPMode configuration
# Version: 1.4.2
# Author: WuZaa
# =====================================================================
#
# Note on explosions: TNT lit by a player, and an end crystal a player sets off, are attributed to
# that player and follow the PvP rules. Bed and respawn-anchor explosions cannot be traced back to a
# player through the server API, so they are NOT gated by this plugin - treat them like any other
# environmental hazard.
# Internal config version - lets the plugin notice when this file is older than the installed
# version after an update. Leave it as-is; you never need to change it by hand.
config-version: 5
# Language for the in-game chat texts. The plugin loads the file messages_<language>.yml from this
# folder (e.g. "en" -> messages_en.yml). The default messages_en.yml is created automatically on start.
# To translate: copy messages_en.yml to e.g. messages_de.yml, translate the lines, then set
# language: de here. If the file or a single line is missing, the English default is used.
# (This only affects texts players see in chat - console/log messages always stay English.)
language: en
worldguard:
# If true, the WorldGuard "pvp" flag is respected: where a region sets pvp to "deny",
# players cannot hurt each other even if both have PvP on.
# If WorldGuard is NOT installed, this option is ignored automatically.
enabled: true
# Worlds in which the opt-in PvP system is active.
# In worlds that are NOT listed here, this plugin never allows player-vs-player damage.
# World names are case-sensitive and must match the world folder names.
worlds:
- world
- world_nether
- world_the_end
# What happens to a player's PvP status after they respawn:
# on = always enabled after respawn
# off = always disabled after respawn
# keep = keep whatever status the player had before dying (default)
respawn-mode: keep
# Combat tagging: when two players actually hit each other (real PvP damage), 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.
combat:
# Master switch for the in-combat lock. false = players may toggle PvP off at any time.
enabled: true
# How long the in-combat lock lasts after the last hit, in seconds (default 10). 0 disables it.
tag-seconds: 10
# Send a short chat notice to a player when their combat tag runs out (e.g. "Combat over - you can
# disable PvP or log out safely now"). This is pure information and changes no mechanic. Default true.
end-message: true
# PvP cooldown: an alternative to the in-combat lock above. When ON, turning your PvP OFF does not
# take effect immediately - instead a delay starts during which you STAY attackable, then your PvP
# turns off automatically once the delay runs out. This stops players from instantly going safe.
# While this cooldown feature is enabled it REPLACES the combat-tag (the in-combat lock above is
# skipped). Turning PvP ON always works instantly and cancels a running cooldown.
cooldown:
# Master switch. false = off (default), turning PvP off works the old way (subject to combat-tag).
enabled: false
# Length of the cooldown after pressing off, in seconds (default 300 = 5 minutes).
seconds: 300
# Combat-log punishment: stops players from escaping a fight by simply disconnecting. It applies ONLY
# while a player is combat-tagged (in an active fight). When ON, 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 - they were
# in a fight) is killed at the logout spot, so they drop everything (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 (the 'combat-log-death' chat message).
# NOTE: this only depends on the combat tag, which is recorded on every PvP hit - so combat-log works
# even if the in-combat lock (combat.enabled) is turned off. With combat.tag-seconds: 0 no tag is set
# and nothing is punished.
combat-log:
# Master switch. false = off (default), logging out is never punished.
# NOTE: if the server's gamerule keepInventory is true the player keeps their items on this death -
# that is the server owner's setting and is accepted as-is.
enabled: false
# PvE loot bonus: rewards players who play with PvP active by giving them extra mob drops.
# The bonus applies ONLY to players whose PvP is effectively active (their world is active,
# WorldGuard does not deny PvP at the spot, and their PvP status is on - a running cooldown still
# counts as on, so cooldown players keep earning it: Risk = Reward) and ONLY for mobs they killed
# themselves. Mobs are sorted into three groups; each group has its own switch and bonus percentage.
loot-bonus:
# Master switch for the whole PvE loot bonus. Default off.
enabled: false
money:
# Give money per killed mob (requires Vault). Per-mob amounts live in mobs.yml. Default off.
enabled: false
# Per-group settings. "percent" is a free integer and MAY exceed 100 (e.g. 200 = triple loot:
# the normal drop plus two extra copies). A group only grants its bonus when both this master
# switch above and the group's own "enabled" are true.
groups:
# Mobs that attack on their own (zombies, skeletons, creepers, ...).
hostile:
enabled: true
percent: 50
# Mobs that only attack when provoked (endermen, wolves, bees, iron golems, ...).
neutral:
enabled: false
percent: 50
# Mobs that are never aggressive (cows, pigs, sheep, villagers, ...).
passive:
enabled: false
percent: 50
# Keep-inventory on death, controlled by this plugin instead of the server gamerule. Two independent
# switches: one for deaths caused by PvP, one for every other death (mobs, fall, lava, ...). When a
# switch is active the matching death keeps the player's items (and, with keep-xp, their levels/XP).
# This OVERRIDES the server's keepInventory gamerule for that death. Default off = the plugin does not
# interfere and the normal gamerule / vanilla behaviour applies.
# A PvP death is detected robustly: the victim has a player killer, OR the victim was combat-tagged.
keep-inventory:
# Deaths caused by PvP (killed by another player, or while combat-tagged).
pvp:
# Keep the victim's inventory on a PvP death. Default off.
enabled: false
# Also keep levels and XP (no XP is dropped). Only matters when "enabled" is true. Default off.
keep-xp: false
# Every other death (mobs, fall damage, lava, drowning, ...).
other:
# Keep the victim's inventory on a non-PvP death. Default off.
enabled: false
# Also keep levels and XP (no XP is dropped). Only matters when "enabled" is true. Default off.
keep-xp: false
# Spawn protection (anti-spawnkill): newly joined players (first ever join) and players who just
# respawned are shielded from incoming damage for a short time, so they cannot be killed before they
# can react. The shield ends early the moment the protected player attacks something themselves.
# A small action-bar timer shows the remaining seconds. Default off = no protection is ever applied.
spawn-protection:
# Master switch for spawn protection. Default off.
enabled: false
# How long the protection lasts, in seconds. Default 30.
seconds: 30
# Block incoming damage from other players while protected. Default true (only relevant when enabled).
block-players: true
# Block incoming damage from mobs and the environment (fall, lava, ...) while protected. Default off.
block-environment: false
# PvP loot reward: when a player kills another player, the KILLER is rewarded with freshly created
# items and/or money - conjured "out of thin air", so nothing is duplicated from the victim's drops.
# This is separate from the PvE loot-bonus above and has its own master switch. Default off.
pvp-loot:
# Master switch for the PvP loot reward. Default off.
enabled: false
money:
# Pay the killer money per PvP kill (requires Vault). Default off.
enabled: false
# Amount of money paid to the killer per kill. Default 0.
amount: 0.0
# Reward items, each rolled independently and given to the killer on a kill. 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 an item saved in the special-item library (items.yml). Empty by default.
items: []
# - 'DIAMOND:3:20' # MATERIAL:amount:chance% - or a library item name
# Stealing on a PvP kill: take items and/or money directly FROM the victim and hand them to the killer.
# This is fully independent of keep-inventory above. Stolen items always drop at the death spot (never
# duplicated). Stolen money is moved from the victim's balance to the killer's. Default off.
steal:
# Master switch for stealing. Default off.
enabled: false
items:
# How many steal attempts are rolled on a kill. Each successful attempt removes one random item
# from the victim's inventory and drops it. Default 0.
attempts: 0
# Chance per attempt, in percent (0-100). Default 0.
chance: 0.0
money:
# Steal money from the victim on a kill. Default off.
enabled: false
# How the stolen amount is calculated: "percent" = a share of the victim's balance, "fixed" = a
# flat amount. The actual amount is capped at the victim's current balance. Default percent.
mode: percent
# Percent of the victim's balance to steal when mode is "percent" (0-100). Default 0.
percent: 0.0
# Flat amount to steal when mode is "fixed". Default 0.
amount: 0.0
# Update check: on startup the plugin asks SpigotMC whether a newer version exists and, if so,
# notifies operators (permission pvpmode.update) when they join. It only NOTIFIES - nothing is ever
# downloaded or installed automatically. Set to false to switch the check off entirely.
update-check:
enabled: true
color:
# Name colour when PvP is ON. Default &c (red).
# Only the 16 standard Minecraft colour codes are allowed (no hex):
# &0 black &1 dark_blue &2 dark_green &3 dark_aqua &4 dark_red &5 dark_purple
# &6 gold &7 gray &8 dark_gray &9 blue &a green &b aqua
# &c red &d light_purple &e yellow &f white
pvp-on: '&c'
# Name colour when PvP is OFF. Default &f (white).
pvp-off: '&f'
command:
# The main command name. Change this if /pvpmode is already used by another plugin.
# NOTE: changing the name or aliases takes effect after a SERVER RESTART
# (a "/pvpmode reload" reloads settings but does not re-register the command).
name: pvpmode
# Extra names for the same command.
aliases:
- pvp
- togglepvp
Code (Text):
# =====================================================================
# PvPMode configuration
# Version: 1.4.2
# Author: WuZaa
# =====================================================================
#
# Note on explosions: TNT lit by a player, and an end crystal a player sets off, are attributed to
# that player and follow the PvP rules. Bed and respawn-anchor explosions cannot be traced back to a
# player through the server API, so they are NOT gated by this plugin - treat them like any other
# environmental hazard.
# Internal config version - lets the plugin notice when this file is older than the installed
# version after an update. Leave it as-is; you never need to change it by hand.
config-version: 5
# Language for the in-game chat texts. The plugin loads the file messages_<language>.yml from this
# folder (e.g. "en" -> messages_en.yml). The default messages_en.yml is created automatically on start.
# To translate: copy messages_en.yml to e.g. messages_de.yml, translate the lines, then set
# language: de here. If the file or a single line is missing, the English default is used.
# (This only affects texts players see in chat - console/log messages always stay English.)
language: en
worldguard:
# If true, the WorldGuard "pvp" flag is respected: where a region sets pvp to "deny",
# players cannot hurt each other even if both have PvP on.
# If WorldGuard is NOT installed, this option is ignored automatically.
enabled: true
# Worlds in which the opt-in PvP system is active.
# In worlds that are NOT listed here, this plugin never allows player-vs-player damage.
# World names are case-sensitive and must match the world folder names.
worlds:
- world
- world_nether
- world_the_end
# What happens to a player's PvP status after they respawn:
# on = always enabled after respawn
# off = always disabled after respawn
# keep = keep whatever status the player had before dying (default)
respawn-mode: keep
# Combat tagging: when two players actually hit each other (real PvP damage), 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.
combat:
# Master switch for the in-combat lock. false = players may toggle PvP off at any time.
enabled: true
# How long the in-combat lock lasts after the last hit, in seconds (default 10). 0 disables it.
tag-seconds: 10
# Send a short chat notice to a player when their combat tag runs out (e.g. "Combat over - you can
# disable PvP or log out safely now"). This is pure information and changes no mechanic. Default true.
end-message: true
# PvP cooldown: an alternative to the in-combat lock above. When ON, turning your PvP OFF does not
# take effect immediately - instead a delay starts during which you STAY attackable, then your PvP
# turns off automatically once the delay runs out. This stops players from instantly going safe.
# While this cooldown feature is enabled it REPLACES the combat-tag (the in-combat lock above is
# skipped). Turning PvP ON always works instantly and cancels a running cooldown.
cooldown:
# Master switch. false = off (default), turning PvP off works the old way (subject to combat-tag).
enabled: false
# Length of the cooldown after pressing off, in seconds (default 300 = 5 minutes).
seconds: 300
# Combat-log punishment: stops players from escaping a fight by simply disconnecting. It applies ONLY
# while a player is combat-tagged (in an active fight). When ON, 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 - they were
# in a fight) is killed at the logout spot, so they drop everything (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 (the 'combat-log-death' chat message).
# NOTE: this only depends on the combat tag, which is recorded on every PvP hit - so combat-log works
# even if the in-combat lock (combat.enabled) is turned off. With combat.tag-seconds: 0 no tag is set
# and nothing is punished.
combat-log:
# Master switch. false = off (default), logging out is never punished.
# NOTE: if the server's gamerule keepInventory is true the player keeps their items on this death -
# that is the server owner's setting and is accepted as-is.
enabled: false
# PvE loot bonus: rewards players who play with PvP active by giving them extra mob drops.
# The bonus applies ONLY to players whose PvP is effectively active (their world is active,
# WorldGuard does not deny PvP at the spot, and their PvP status is on - a running cooldown still
# counts as on, so cooldown players keep earning it: Risk = Reward) and ONLY for mobs they killed
# themselves. Mobs are sorted into three groups; each group has its own switch and bonus percentage.
loot-bonus:
# Master switch for the whole PvE loot bonus. Default off.
enabled: false
money:
# Give money per killed mob (requires Vault). Per-mob amounts live in mobs.yml. Default off.
enabled: false
# Per-group settings. "percent" is a free integer and MAY exceed 100 (e.g. 200 = triple loot:
# the normal drop plus two extra copies). A group only grants its bonus when both this master
# switch above and the group's own "enabled" are true.
groups:
# Mobs that attack on their own (zombies, skeletons, creepers, ...).
hostile:
enabled: true
percent: 50
# Mobs that only attack when provoked (endermen, wolves, bees, iron golems, ...).
neutral:
enabled: false
percent: 50
# Mobs that are never aggressive (cows, pigs, sheep, villagers, ...).
passive:
enabled: false
percent: 50
# Keep-inventory on death, controlled by this plugin instead of the server gamerule. Two independent
# switches: one for deaths caused by PvP, one for every other death (mobs, fall, lava, ...). When a
# switch is active the matching death keeps the player's items (and, with keep-xp, their levels/XP).
# This OVERRIDES the server's keepInventory gamerule for that death. Default off = the plugin does not
# interfere and the normal gamerule / vanilla behaviour applies.
# A PvP death is detected robustly: the victim has a player killer, OR the victim was combat-tagged.
keep-inventory:
# Deaths caused by PvP (killed by another player, or while combat-tagged).
pvp:
# Keep the victim's inventory on a PvP death. Default off.
enabled: false
# Also keep levels and XP (no XP is dropped). Only matters when "enabled" is true. Default off.
keep-xp: false
# Every other death (mobs, fall damage, lava, drowning, ...).
other:
# Keep the victim's inventory on a non-PvP death. Default off.
enabled: false
# Also keep levels and XP (no XP is dropped). Only matters when "enabled" is true. Default off.
keep-xp: false
# Spawn protection (anti-spawnkill): newly joined players (first ever join) and players who just
# respawned are shielded from incoming damage for a short time, so they cannot be killed before they
# can react. The shield ends early the moment the protected player attacks something themselves.
# A small action-bar timer shows the remaining seconds. Default off = no protection is ever applied.
spawn-protection:
# Master switch for spawn protection. Default off.
enabled: false
# How long the protection lasts, in seconds. Default 30.
seconds: 30
# Block incoming damage from other players while protected. Default true (only relevant when enabled).
block-players: true
# Block incoming damage from mobs and the environment (fall, lava, ...) while protected. Default off.
block-environment: false
# PvP loot reward: when a player kills another player, the KILLER is rewarded with freshly created
# items and/or money - conjured "out of thin air", so nothing is duplicated from the victim's drops.
# This is separate from the PvE loot-bonus above and has its own master switch. Default off.
pvp-loot:
# Master switch for the PvP loot reward. Default off.
enabled: false
money:
# Pay the killer money per PvP kill (requires Vault). Default off.
enabled: false
# Amount of money paid to the killer per kill. Default 0.
amount: 0.0
# Reward items, each rolled independently and given to the killer on a kill. 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 an item saved in the special-item library (items.yml). Empty by default.
items: []
# - 'DIAMOND:3:20' # MATERIAL:amount:chance% - or a library item name
# Stealing on a PvP kill: take items and/or money directly FROM the victim and hand them to the killer.
# This is fully independent of keep-inventory above. Stolen items always drop at the death spot (never
# duplicated). Stolen money is moved from the victim's balance to the killer's. Default off.
steal:
# Master switch for stealing. Default off.
enabled: false
items:
# How many steal attempts are rolled on a kill. Each successful attempt removes one random item
# from the victim's inventory and drops it. Default 0.
attempts: 0
# Chance per attempt, in percent (0-100). Default 0.
chance: 0.0
money:
# Steal money from the victim on a kill. Default off.
enabled: false
# How the stolen amount is calculated: "percent" = a share of the victim's balance, "fixed" = a
# flat amount. The actual amount is capped at the victim's current balance. Default percent.
mode: percent
# Percent of the victim's balance to steal when mode is "percent" (0-100). Default 0.
percent: 0.0
# Flat amount to steal when mode is "fixed". Default 0.
amount: 0.0
# Update check: on startup the plugin asks SpigotMC whether a newer version exists and, if so,
# notifies operators (permission pvpmode.update) when they join. It only NOTIFIES - nothing is ever
# downloaded or installed automatically. Set to false to switch the check off entirely.
update-check:
enabled: true
color:
# Name colour when PvP is ON. Default &c (red).
# Only the 16 standard Minecraft colour codes are allowed (no hex):
# &0 black &1 dark_blue &2 dark_green &3 dark_aqua &4 dark_red &5 dark_purple
# &6 gold &7 gray &8 dark_gray &9 blue &a green &b aqua
# &c red &d light_purple &e yellow &f white
pvp-on: '&c'
# Name colour when PvP is OFF. Default &f (white).
pvp-off: '&f'
command:
# The main command name. Change this if /pvpmode is already used by another plugin.
# NOTE: changing the name or aliases takes effect after a SERVER RESTART
# (a "/pvpmode reload" reloads settings but does not re-register the command).
name: pvpmode
# Extra names for the same command.
aliases:
- pvp
- togglepvp
Spoiler: Tutorial
=====================================================
PvPMode - Tutorial (v1.4.2)
Author: WuZaa
=====================================================
WHAT THIS PLUGIN DOES
Opt-in PvP. Every player controls their own PvP status.
Two players can only damage each other when ALL of these are true:
1. They are in a world where PvPMode is active (see 'worlds' in config.yml).
2. If WorldGuard support is on: the WorldGuard 'pvp' flag is not set to deny there.
3. BOTH players have their PvP turned ON.
If even one of these is false, no damage happens - in either direction.
This also covers projectiles (arrows, tridents) and harmful splash potions:
the real thrower/shooter is used as the attacker.
NAME COLOUR
A player's name (above the head and in the tab list) is coloured by status:
PvP ON -> the 'pvp-on' colour (default red)
PvP OFF -> the 'pvp-off' colour (default white)
COMBAT LOCK
When two players actually damage each other, BOTH are put 'in combat' for a few
seconds (combat.tag-seconds, default 10). While in combat a player cannot turn PvP
OFF - so nobody can escape a fight by disabling PvP. Turning PvP ON is always allowed.
Disable the whole feature with combat.enabled: false.
PVP COOLDOWN (optional, default OFF)
An alternative to the combat lock above. When cooldown.enabled is true, turning your
PvP OFF does NOT take effect right away: instead a delay starts (cooldown.seconds,
default 300 = 5 minutes) during which you STAY attackable, and your PvP only turns off
automatically once that delay runs out. This stops players from going safe instantly.
While the cooldown counts down the player gets a reminder on the action bar at each
full minute, and a chat message when it finally turns off. Turning PvP ON always works
instantly and cancels a running cooldown. A cooldown survives relog (it is stored and
resumes counting on the next login). While this feature is ON it REPLACES the combat
lock above (combat tagging is skipped). Switch it on with cooldown.enabled: true.
COMBAT-LOG PUNISHMENT (optional, default OFF)
Stops players from escaping a fight by simply disconnecting. The punishment applies ONLY
while a player is combat-tagged (in an active fight). 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) is killed at the logout spot, so they drop 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 (the 'combat-log-death' chat message). The combat tag is recorded on
every PvP hit, so this works even if the in-combat lock (combat.enabled) is turned off;
with combat.tag-seconds: 0 no tag is set and nothing is punished. NOTE: if the server
gamerule keepInventory is true the player keeps their items on this death - that is the
server owner's setting and is accepted as-is. Switch it on with combat-log.enabled: true.
PVE LOOT BONUS (optional, default OFF)
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 (their world is active, WorldGuard does not deny PvP at the spot, and
their PvP status is on - a running cooldown still counts as on) and ONLY for mobs that
player killed personally.
Master switch: loot-bonus.enabled (default false) turns the WHOLE feature on or off.
Groups: every mob falls into one of three groups, each with its own on/off switch and
bonus 'percent':
hostile mobs that attack on their own (zombies, skeletons, creepers, ...).
neutral mobs that only attack when provoked (endermen, wolves, bees, golems, ...).
passive mobs that are never aggressive (cows, pigs, sheep, villagers, ...).
The 'percent' is a free integer and MAY exceed 100: it is applied to each drop stack,
so +50% gives a guaranteed extra half (rounded by chance) and +200% means triple loot.
Per-mob overrides: mobs.yml can fine-tune single mobs on top of the groups. A per-mob
'percent' replaces that mob's group percent and is granted even when its group is off
(the override always wins). A per-mob 'items' list adds custom extra drops, each rolled
by its own chance. A per-mob 'money' amount is paid to the killer and needs Vault plus
loot-bonus.money.enabled: true. mobs.yml ships fully commented out, so by default only
the group settings apply. Switch the feature on with loot-bonus.enabled: true.
KEEP-INVENTORY (optional, default OFF)
Lets THIS plugin keep a player's items on death, instead of the server keepInventory gamerule.
There are two independent switches, so you can treat PvP deaths and other deaths differently:
keep-inventory.pvp deaths caused by PvP (killed by another player, OR while combat-tagged).
keep-inventory.other every other death (mobs, fall, lava, drowning, ...).
For each, set 'enabled: true' to keep the inventory on that kind of death, and 'keep-xp: true'
to also keep the player's levels and XP (no XP is dropped). When a switch is active it
OVERRIDES the server's keepInventory gamerule for that death. Default off = the plugin does not
interfere and the normal gamerule / vanilla behaviour applies. A player with permission
pvpmode.keepinventory.exempt is left out and drops everything as usual even when the switch is on.
Stolen items (see STEALING) always drop regardless of this setting.
SPAWN PROTECTION (anti-spawnkill) (optional, default OFF)
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). A small action-bar timer shows the remaining seconds. The shield ends EARLY the
moment the protected player attacks something themselves - so you cannot hide behind it and
fight at the same time.
What is blocked is configurable:
spawn-protection.block-players block incoming damage from other players (default true).
spawn-protection.block-environment block incoming mob / environmental damage, e.g. fall and
lava (default false).
Permissions: pvpmode.spawnprotection.exempt = this player never GETS protection.
pvpmode.spawnprotection.bypass = staff who may still hit protected players (their hit is not
cancelled). Switch the whole feature on with spawn-protection.enabled: true.
PVP LOOT REWARD (optional, default OFF)
Makes winning a PvP 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 below is for).
pvp-loot.items a list of reward items, each rolled on its own. Every entry is either
'MATERIAL:amount:chance' (chance in percent), e.g. 'DIAMOND:3:20' = a 20%
chance of 3 diamonds, OR the name of an item saved in the special-item
library (see below). Items that do not fit drop at the killer's feet.
pvp-loot.money pay the killer money per kill (money.enabled + money.amount); needs Vault.
This has its OWN master switch, separate from the PvE loot bonus. A victim with permission
pvpmode.pvploot.exempt grants the killer no reward. Switch it on with pvp-loot.enabled: true.
STEALING (optional, default OFF)
On a PvP kill, take items and/or money directly FROM the victim and hand them to the killer.
This is fully independent of KEEP-INVENTORY - stolen items always drop at the death spot and
are never duplicated.
steal.items.attempts how many steal rolls happen on a kill.
steal.items.chance chance per attempt, in percent. Each success removes ONE random item
from the victim's inventory (storage, armour or off-hand) and drops it.
steal.money.enabled steal money from the victim (requires Vault).
steal.money.mode 'percent' = a share of the victim's balance (steal.money.percent),
'fixed' = a flat amount (steal.money.amount). The stolen sum is
always capped at the victim's current balance and moved to the killer.
A victim with permission pvpmode.steal.exempt is never robbed (items and money). Switch it on
with steal.enabled: true.
SPECIAL-ITEM LIBRARY & IN-GAME LOOT MANAGEMENT
Instead of editing files by hand, you can save real items as reusable templates and assign
them to loot pots from in-game. All of this needs permission pvpmode.loot.admin (default: ops).
Templates keep the item's display name, lore and enchantments and are stored in items.yml.
TEMPLATES:
/pvpmode loot save <name> Save the item in your MAIN HAND as a template called <name>.
/pvpmode loot get <name> Put a fresh copy of a saved template into your hand.
/pvpmode loot delete <name> Delete a saved template.
/pvpmode loot list List all saved template names.
(The old 'additem' / 'remove' still work as aliases for 'save' / 'delete'.)
ASSIGNMENTS (where a template should drop) - stored in loot-assignments.yml, ADDITIVE on top
of the config lists (pvp-loot.items and mobs.yml), so both ways keep working:
/pvpmode loot assign pvp <name> <chance> [amount]
Add a template to the PvP loot reward at <chance>% (optional
amount, default 1).
/pvpmode loot assign mob <target> <name> <chance> [amount]
Add a template to a mob loot pot. <target> is a group name
(hostile / neutral / passive) OR a single mob type (e.g. ZOMBIE).
/pvpmode loot unassign pvp <name> Remove a template from the PvP loot pot.
/pvpmode loot unassign mob <target> <name> Remove a template from a mob loot pot.
/pvpmode loot show pvp Show the templates assigned to the PvP pot.
/pvpmode loot show mob <target> Show the templates assigned to a mob target.
Assigned drops respect the SAME exempt permissions as the pot they feed (pvploot/pveloot).
Tab-completion helps with sub-commands, target names and saved template names throughout.
COMMANDS
/pvpmode Toggle your PvP status on/off.
/pvpmode on Enable your PvP.
/pvpmode off Disable your PvP.
/pvpmode help Show the in-game help.
/pvpmode reload Reload config.yml (needs permission pvpmode.reload).
/pvpmode loot ... Manage the special-item library and loot assignments
(needs permission pvpmode.loot.admin - see SPECIAL-ITEM LIBRARY above).
The command name and aliases can be changed in config.yml (command.name /
command.aliases) in case another plugin already uses /pvpmode. Changing them
takes effect after a SERVER RESTART.
PERMISSIONS
pvpmode.use Set/toggle your own PvP status. (default: everyone)
pvpmode.help Use the help subcommand. (default: everyone)
pvpmode.reload Reload the configuration. (default: operators only)
pvpmode.update Notice on join about a newer version. (default: operators only)
pvpmode.loot.admin Manage the item library and loot assignments. (default: operators only)
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 Never robbed (items + money) when killed.
pvpmode.pvploot.exempt Killing this player grants no PvP-loot reward.
pvpmode.pveloot.exempt Receives no PvE mob-loot bonus from mobs they kill.
pvpmode.spawnprotection.exempt Granted no spawn protection on join/respawn.
pvpmode.keepinventory.exempt Excluded from the plugin's Keep-Inventory (drops as usual).
Bypass (default false):
pvpmode.spawnprotection.bypass May damage spawn-protected players (for staff).
CONFIG (config.yml)
Updates add new options automatically (your values + comments kept; a config.yml.bak
is written first). You never need to delete your config after an update.
worldguard.enabled true/false - respect the WorldGuard 'pvp' flag
(ignored if WorldGuard is not installed).
worlds List of worlds where the PvP system is active.
respawn-mode on | off | keep - PvP status after respawn (default: keep).
color.pvp-on Name colour when PvP is on (default &c, red).
color.pvp-off Name colour when PvP is off (default &f, white).
Only the 16 standard Minecraft colours are allowed.
command.name Main command name (default pvpmode).
command.aliases Extra command names (default pvp, togglepvp).
language Language for in-game texts -> messages_<language>.yml
(default en). Console messages always stay English.
combat.enabled true/false - lock PvP-off while a player is in combat (default true).
combat.tag-seconds How long the combat lock lasts after the last hit (default 10; 0 = off).
cooldown.enabled true/false - delayed PvP-off instead of the combat lock (default false).
cooldown.seconds Length of that delay in seconds (default 300 = 5 minutes).
combat-log.enabled true/false - kill players who log out while combat-tagged, i.e. in a
fight - not for merely having PvP on (default false).
loot-bonus.enabled true/false - master switch for the PvE loot bonus (default false).
loot-bonus.money.enabled true/false - pay per-mob money rewards; needs Vault (default false).
loot-bonus.groups.* Per-group on/off and 'percent' for hostile / neutral / passive mobs
(percent may exceed 100). Per-mob overrides live in mobs.yml.
combat.end-message true/false - chat notice when a player's combat tag runs out (default true).
keep-inventory.pvp.* enabled / keep-xp - keep items (and XP) on PvP deaths (default off).
keep-inventory.other.* enabled / keep-xp - keep items (and XP) on all other deaths (default off).
spawn-protection.enabled true/false - shield fresh/respawned players from damage (default false).
spawn-protection.seconds How long the shield lasts (default 30).
spawn-protection.block-players / .block-environment What the shield blocks (players: default
true; environment/mobs: default false).
pvp-loot.enabled true/false - reward the killer of a player with fresh items/money (default off).
pvp-loot.items Reward item list, each 'MATERIAL:amount:chance' or a library item name.
pvp-loot.money.* enabled / amount - pay the killer money per kill; needs Vault (default off).
steal.enabled true/false - take items/money from the victim on a kill (default off).
steal.items.* attempts / chance - steal rolls and per-roll chance for one random item.
steal.money.* enabled / mode (percent|fixed) / percent / amount - money stolen, capped at
the victim's balance; needs Vault (default off).
update-check.enabled true/false - check SpigotMC for a newer version on start (default true).
IN-GAME TEXTS / TRANSLATION
Every text a player sees in chat lives in messages_<language>.yml in this folder
(messages_en.yml is written on start). Edit it to change the wording, the colours
(&-codes like &c, &a) and formatting (&l bold, &o italic) on each line.
To add a language: copy messages_en.yml to messages_<code>.yml, translate it, then
set 'language' in config.yml. Any missing line falls back to the English default.
WORLDGUARD
WorldGuard is optional (soft-dependency). Without it the plugin still runs and the
WorldGuard stage is simply skipped. Built against the WorldGuard 7 API.
VAULT (optional)
Vault is only needed for the MONEY parts: the PvE loot bonus payout (per-mob 'money' in
mobs.yml with loot-bonus.money.enabled), the PvP loot reward money (pvp-loot.money) and the
money side of STEALING (steal.money). Without Vault, or without an economy plugin behind it,
every money payout simply does nothing - all other features work unchanged.
PLACEHOLDERAPI (optional)
If PlaceholderAPI is installed, these placeholders are available:
%pvpmode_status% coloured ON / OFF
%pvpmode_status_plain% ON / OFF (no colour)
%pvpmode_enabled% true / false
%pvpmode_combat% true / false (player currently in combat)
%pvpmode_combat_seconds% seconds left on the combat lock
UPDATE NOTICE
On start the plugin asks SpigotMC whether a newer version exists. If so, operators
(permission pvpmode.update) get a one-line notice when they join. It only notifies -
nothing is ever downloaded. Turn it off with update-check.enabled: false.
METRICS (bStats)
PvPMode reports anonymous usage statistics to bStats (https://bstats.org) - plugin
count, server version, and a few feature toggles. No personal or player data. Server
owners can opt out for ALL plugins at once in plugins/bStats/config.yml.
NEW PLAYERS
Anyone joining for the first time starts with PvP OFF. The status survives relog
and server restart.
WHAT IS COVERED / LIMITATIONS
Covered: melee, arrows, tridents, fireballs, thrown splash potions, lingering
potion clouds, tipped-arrow effects, player-lit TNT, tamed pets, and player-set
end crystals.
Not covered: bed and respawn-anchor explosions - the server provides no way to
attribute these to a player, so they are treated as environmental damage.
=====================================================
Code (Text):
=====================================================
PvPMode - Tutorial (v1.4.2)
Author: WuZaa
=====================================================
WHAT THIS PLUGIN DOES
Opt-in PvP. Every player controls their own PvP status.
Two players can only damage each other when ALL of these are true:
1. They are in a world where PvPMode is active (see 'worlds' in config.yml).
2. If WorldGuard support is on: the WorldGuard 'pvp' flag is not set to deny there.
3. BOTH players have their PvP turned ON.
If even one of these is false, no damage happens - in either direction.
This also covers projectiles (arrows, tridents) and harmful splash potions:
the real thrower/shooter is used as the attacker.
NAME COLOUR
A player's name (above the head and in the tab list) is coloured by status:
PvP ON -> the 'pvp-on' colour (default red)
PvP OFF -> the 'pvp-off' colour (default white)
COMBAT LOCK
When two players actually damage each other, BOTH are put 'in combat' for a few
seconds (combat.tag-seconds, default 10). While in combat a player cannot turn PvP
OFF - so nobody can escape a fight by disabling PvP. Turning PvP ON is always allowed.
Disable the whole feature with combat.enabled: false.
PVP COOLDOWN (optional, default OFF)
An alternative to the combat lock above. When cooldown.enabled is true, turning your
PvP OFF does NOT take effect right away: instead a delay starts (cooldown.seconds,
default 300 = 5 minutes) during which you STAY attackable, and your PvP only turns off
automatically once that delay runs out. This stops players from going safe instantly.
While the cooldown counts down the player gets a reminder on the action bar at each
full minute, and a chat message when it finally turns off. Turning PvP ON always works
instantly and cancels a running cooldown. A cooldown survives relog (it is stored and
resumes counting on the next login). While this feature is ON it REPLACES the combat
lock above (combat tagging is skipped). Switch it on with cooldown.enabled: true.
COMBAT-LOG PUNISHMENT (optional, default OFF)
Stops players from escaping a fight by simply disconnecting. The punishment applies ONLY
while a player is combat-tagged (in an active fight). 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) is killed at the logout spot, so they drop 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 (the 'combat-log-death' chat message). The combat tag is recorded on
every PvP hit, so this works even if the in-combat lock (combat.enabled) is turned off;
with combat.tag-seconds: 0 no tag is set and nothing is punished. NOTE: if the server
gamerule keepInventory is true the player keeps their items on this death - that is the
server owner's setting and is accepted as-is. Switch it on with combat-log.enabled: true.
PVE LOOT BONUS (optional, default OFF)
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 (their world is active, WorldGuard does not deny PvP at the spot, and
their PvP status is on - a running cooldown still counts as on) and ONLY for mobs that
player killed personally.
Master switch: loot-bonus.enabled (default false) turns the WHOLE feature on or off.
Groups: every mob falls into one of three groups, each with its own on/off switch and
bonus 'percent':
hostile mobs that attack on their own (zombies, skeletons, creepers, ...).
neutral mobs that only attack when provoked (endermen, wolves, bees, golems, ...).
passive mobs that are never aggressive (cows, pigs, sheep, villagers, ...).
The 'percent' is a free integer and MAY exceed 100: it is applied to each drop stack,
so +50% gives a guaranteed extra half (rounded by chance) and +200% means triple loot.
Per-mob overrides: mobs.yml can fine-tune single mobs on top of the groups. A per-mob
'percent' replaces that mob's group percent and is granted even when its group is off
(the override always wins). A per-mob 'items' list adds custom extra drops, each rolled
by its own chance. A per-mob 'money' amount is paid to the killer and needs Vault plus
loot-bonus.money.enabled: true. mobs.yml ships fully commented out, so by default only
the group settings apply. Switch the feature on with loot-bonus.enabled: true.
KEEP-INVENTORY (optional, default OFF)
Lets THIS plugin keep a player's items on death, instead of the server keepInventory gamerule.
There are two independent switches, so you can treat PvP deaths and other deaths differently:
keep-inventory.pvp deaths caused by PvP (killed by another player, OR while combat-tagged).
keep-inventory.other every other death (mobs, fall, lava, drowning, ...).
For each, set 'enabled: true' to keep the inventory on that kind of death, and 'keep-xp: true'
to also keep the player's levels and XP (no XP is dropped). When a switch is active it
OVERRIDES the server's keepInventory gamerule for that death. Default off = the plugin does not
interfere and the normal gamerule / vanilla behaviour applies. A player with permission
pvpmode.keepinventory.exempt is left out and drops everything as usual even when the switch is on.
Stolen items (see STEALING) always drop regardless of this setting.
SPAWN PROTECTION (anti-spawnkill) (optional, default OFF)
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). A small action-bar timer shows the remaining seconds. The shield ends EARLY the
moment the protected player attacks something themselves - so you cannot hide behind it and
fight at the same time.
What is blocked is configurable:
spawn-protection.block-players block incoming damage from other players (default true).
spawn-protection.block-environment block incoming mob / environmental damage, e.g. fall and
lava (default false).
Permissions: pvpmode.spawnprotection.exempt = this player never GETS protection.
pvpmode.spawnprotection.bypass = staff who may still hit protected players (their hit is not
cancelled). Switch the whole feature on with spawn-protection.enabled: true.
PVP LOOT REWARD (optional, default OFF)
Makes winning a PvP 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 below is for).
pvp-loot.items a list of reward items, each rolled on its own. Every entry is either
'MATERIAL:amount:chance' (chance in percent), e.g. 'DIAMOND:3:20' = a 20%
chance of 3 diamonds, OR the name of an item saved in the special-item
library (see below). Items that do not fit drop at the killer's feet.
pvp-loot.money pay the killer money per kill (money.enabled + money.amount); needs Vault.
This has its OWN master switch, separate from the PvE loot bonus. A victim with permission
pvpmode.pvploot.exempt grants the killer no reward. Switch it on with pvp-loot.enabled: true.
STEALING (optional, default OFF)
On a PvP kill, take items and/or money directly FROM the victim and hand them to the killer.
This is fully independent of KEEP-INVENTORY - stolen items always drop at the death spot and
are never duplicated.
steal.items.attempts how many steal rolls happen on a kill.
steal.items.chance chance per attempt, in percent. Each success removes ONE random item
from the victim's inventory (storage, armour or off-hand) and drops it.
steal.money.enabled steal money from the victim (requires Vault).
steal.money.mode 'percent' = a share of the victim's balance (steal.money.percent),
'fixed' = a flat amount (steal.money.amount). The stolen sum is
always capped at the victim's current balance and moved to the killer.
A victim with permission pvpmode.steal.exempt is never robbed (items and money). Switch it on
with steal.enabled: true.
SPECIAL-ITEM LIBRARY & IN-GAME LOOT MANAGEMENT
Instead of editing files by hand, you can save real items as reusable templates and assign
them to loot pots from in-game. All of this needs permission pvpmode.loot.admin (default: ops).
Templates keep the item's display name, lore and enchantments and are stored in items.yml.
TEMPLATES:
/pvpmode loot save <name> Save the item in your MAIN HAND as a template called <name>.
/pvpmode loot get <name> Put a fresh copy of a saved template into your hand.
/pvpmode loot delete <name> Delete a saved template.
/pvpmode loot list List all saved template names.
(The old 'additem' / 'remove' still work as aliases for 'save' / 'delete'.)
ASSIGNMENTS (where a template should drop) - stored in loot-assignments.yml, ADDITIVE on top
of the config lists (pvp-loot.items and mobs.yml), so both ways keep working:
/pvpmode loot assign pvp <name> <chance> [amount]
Add a template to the PvP loot reward at <chance>% (optional
amount, default 1).
/pvpmode loot assign mob <target> <name> <chance> [amount]
Add a template to a mob loot pot. <target> is a group name
(hostile / neutral / passive) OR a single mob type (e.g. ZOMBIE).
/pvpmode loot unassign pvp <name> Remove a template from the PvP loot pot.
/pvpmode loot unassign mob <target> <name> Remove a template from a mob loot pot.
/pvpmode loot show pvp Show the templates assigned to the PvP pot.
/pvpmode loot show mob <target> Show the templates assigned to a mob target.
Assigned drops respect the SAME exempt permissions as the pot they feed (pvploot/pveloot).
Tab-completion helps with sub-commands, target names and saved template names throughout.
COMMANDS
/pvpmode Toggle your PvP status on/off.
/pvpmode on Enable your PvP.
/pvpmode off Disable your PvP.
/pvpmode help Show the in-game help.
/pvpmode reload Reload config.yml (needs permission pvpmode.reload).
/pvpmode loot ... Manage the special-item library and loot assignments
(needs permission pvpmode.loot.admin - see SPECIAL-ITEM LIBRARY above).
The command name and aliases can be changed in config.yml (command.name /
command.aliases) in case another plugin already uses /pvpmode. Changing them
takes effect after a SERVER RESTART.
PERMISSIONS
pvpmode.use Set/toggle your own PvP status. (default: everyone)
pvpmode.help Use the help subcommand. (default: everyone)
pvpmode.reload Reload the configuration. (default: operators only)
pvpmode.update Notice on join about a newer version. (default: operators only)
pvpmode.loot.admin Manage the item library and loot assignments. (default: operators only)
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 Never robbed (items + money) when killed.
pvpmode.pvploot.exempt Killing this player grants no PvP-loot reward.
pvpmode.pveloot.exempt Receives no PvE mob-loot bonus from mobs they kill.
pvpmode.spawnprotection.exempt Granted no spawn protection on join/respawn.
pvpmode.keepinventory.exempt Excluded from the plugin's Keep-Inventory (drops as usual).
Bypass (default false):
pvpmode.spawnprotection.bypass May damage spawn-protected players (for staff).
CONFIG (config.yml)
Updates add new options automatically (your values + comments kept; a config.yml.bak
is written first). You never need to delete your config after an update.
worldguard.enabled true/false - respect the WorldGuard 'pvp' flag
(ignored if WorldGuard is not installed).
worlds List of worlds where the PvP system is active.
respawn-mode on | off | keep - PvP status after respawn (default: keep).
color.pvp-on Name colour when PvP is on (default &c, red).
color.pvp-off Name colour when PvP is off (default &f, white).
Only the 16 standard Minecraft colours are allowed.
command.name Main command name (default pvpmode).
command.aliases Extra command names (default pvp, togglepvp).
language Language for in-game texts -> messages_<language>.yml
(default en). Console messages always stay English.
combat.enabled true/false - lock PvP-off while a player is in combat (default true).
combat.tag-seconds How long the combat lock lasts after the last hit (default 10; 0 = off).
cooldown.enabled true/false - delayed PvP-off instead of the combat lock (default false).
cooldown.seconds Length of that delay in seconds (default 300 = 5 minutes).
combat-log.enabled true/false - kill players who log out while combat-tagged, i.e. in a
fight - not for merely having PvP on (default false).
loot-bonus.enabled true/false - master switch for the PvE loot bonus (default false).
loot-bonus.money.enabled true/false - pay per-mob money rewards; needs Vault (default false).
loot-bonus.groups.* Per-group on/off and 'percent' for hostile / neutral / passive mobs
(percent may exceed 100). Per-mob overrides live in mobs.yml.
combat.end-message true/false - chat notice when a player's combat tag runs out (default true).
keep-inventory.pvp.* enabled / keep-xp - keep items (and XP) on PvP deaths (default off).
keep-inventory.other.* enabled / keep-xp - keep items (and XP) on all other deaths (default off).
spawn-protection.enabled true/false - shield fresh/respawned players from damage (default false).
spawn-protection.seconds How long the shield lasts (default 30).
spawn-protection.block-players / .block-environment What the shield blocks (players: default
true; environment/mobs: default false).
pvp-loot.enabled true/false - reward the killer of a player with fresh items/money (default off).
pvp-loot.items Reward item list, each 'MATERIAL:amount:chance' or a library item name.
pvp-loot.money.* enabled / amount - pay the killer money per kill; needs Vault (default off).
steal.enabled true/false - take items/money from the victim on a kill (default off).
steal.items.* attempts / chance - steal rolls and per-roll chance for one random item.
steal.money.* enabled / mode (percent|fixed) / percent / amount - money stolen, capped at
the victim's balance; needs Vault (default off).
update-check.enabled true/false - check SpigotMC for a newer version on start (default true).
IN-GAME TEXTS / TRANSLATION
Every text a player sees in chat lives in messages_<language>.yml in this folder
(messages_en.yml is written on start). Edit it to change the wording, the colours
(&-codes like &c, &a) and formatting (&l bold, &o italic) on each line.
To add a language: copy messages_en.yml to messages_<code>.yml, translate it, then
set 'language' in config.yml. Any missing line falls back to the English default.
WORLDGUARD
WorldGuard is optional (soft-dependency). Without it the plugin still runs and the
WorldGuard stage is simply skipped. Built against the WorldGuard 7 API.
VAULT (optional)
Vault is only needed for the MONEY parts: the PvE loot bonus payout (per-mob 'money' in
mobs.yml with loot-bonus.money.enabled), the PvP loot reward money (pvp-loot.money) and the
money side of STEALING (steal.money). Without Vault, or without an economy plugin behind it,
every money payout simply does nothing - all other features work unchanged.
PLACEHOLDERAPI (optional)
If PlaceholderAPI is installed, these placeholders are available:
%pvpmode_status% coloured ON / OFF
%pvpmode_status_plain% ON / OFF (no colour)
%pvpmode_enabled% true / false
%pvpmode_combat% true / false (player currently in combat)
%pvpmode_combat_seconds% seconds left on the combat lock
UPDATE NOTICE
On start the plugin asks SpigotMC whether a newer version exists. If so, operators
(permission pvpmode.update) get a one-line notice when they join. It only notifies -
nothing is ever downloaded. Turn it off with update-check.enabled: false.
METRICS (bStats)
PvPMode reports anonymous usage statistics to bStats (https://bstats.org) - plugin
count, server version, and a few feature toggles. No personal or player data. Server
owners can opt out for ALL plugins at once in plugins/bStats/config.yml.
NEW PLAYERS
Anyone joining for the first time starts with PvP OFF. The status survives relog
and server restart.
WHAT IS COVERED / LIMITATIONS
Covered: melee, arrows, tridents, fireballs, thrown splash potions, lingering
potion clouds, tipped-arrow effects, player-lit TNT, tamed pets, and player-set
end crystals.
Not covered: bed and respawn-anchor explosions - the server provides no way to
attribute these to a player, so they are treated as environmental damage.
=====================================================
Spoiler: Messages
# =====================================================================
# PvPMode messages (English / default)
# Version: 1.4.2
# Author: WuZaa
# =====================================================================
#
# These are all the texts a PLAYER sees in chat. Edit them freely.
# (Console / server-log messages are NOT here - they stay English by design.)
#
# COLOURS & FORMATTING
# Write colour and formatting codes directly into the text with '&':
# &0 black &1 dark_blue &2 dark_green &3 dark_aqua &4 dark_red &5 dark_purple
# &6 gold &7 gray &8 dark_gray &9 blue &a green &b aqua
# &c red &d light_purple &e yellow &f white
# &l bold &o italic &n underline &m strike &k magic &r reset
#
# PLACEHOLDERS (get automatically replaced)
# {prefix} -> the 'prefix' text below (the [PvPMode] tag in front of a message)
# {command} -> the configured command name (e.g. pvpmode)
# {label} -> the command name the player actually typed
#
# TRANSLATING
# Copy this file to messages_<code>.yml (e.g. messages_de.yml), translate the lines,
# then set 'language' in config.yml (e.g. language: de). Any missing line falls back
# to the built-in English text, so nothing is ever blank.
# The tag shown in front of most messages.
prefix: "&6[PvPMode] &r"
# Shown when a player turns their PvP on / off.
pvp-on: "{prefix}&aPvP is now &cON&a. Your name shows the PvP colour and you can fight other PvP-enabled players."
pvp-off: "{prefix}&aPvP is now &7OFF&a. You can no longer hurt or be hurt by other players."
# The /<command> help listing.
help-header: "{prefix}&eCommands:"
help-toggle: "&6/{command}&7 - toggle your PvP status on/off."
help-on: "&6/{command} on&7 - enable your PvP."
help-off: "&6/{command} off&7 - disable your PvP."
help-help: "&6/{command} help&7 - show this help."
help-reload: "&6/{command} reload&7 - reload the configuration."
help-loot: "&6/{command} loot&7 - manage the special-item library and loot assignments."
help-footer: "&8A red name means PvP is on, white means off. Damage only happens when both players have PvP on."
# Error / status messages.
unknown-subcommand: "{prefix}&cUnknown subcommand. Try /{label} help"
only-players: "{prefix}&cOnly players can change their PvP status."
no-permission: "{prefix}&cYou don't have permission to do that."
reloaded: "{prefix}&aConfiguration reloaded."
# Shown when a player tries to turn PvP OFF while still in combat (see 'combat' in config.yml).
# {seconds} is replaced with the whole seconds remaining on the lock.
combat-disable-blocked: "{prefix}&cYou're in combat - you can't turn PvP off for another &e{seconds}s&c."
# Shown once to a player when their combat tag expires (the ~10s in-combat window ended). Pure info -
# it tells them they may now safely turn PvP off or log out. Toggle with 'end-message' in config.yml.
combat-ended: "{prefix}&aCombat over - you can disable PvP or log out safely now."
# Anti-spawnkill (see 'spawn-protection' in config.yml): shown on the action bar each second while a
# freshly joined / respawned player is still protected. {seconds} = whole seconds of protection left.
spawn-protection-active: "&bSpawn protection: &e{seconds}s&b - safe until you attack."
# PvP cooldown messages (only used when 'cooldown' is enabled in config.yml).
# Shown when a player presses off and the cooldown starts. {minutes} = whole minutes of the cooldown.
cooldown-started: "{prefix}&ePvP will turn off in &6{minutes} minute(s)&e. You stay attackable until then."
# Reminder shown on the action bar at each full minute while the cooldown counts down. {minutes} = minutes left.
cooldown-reminder: "{prefix}&ePvP turns off in &6{minutes} minute(s)&e."
# Shown once the cooldown has finished and PvP has actually turned off.
cooldown-ended: "{prefix}&aYou are now really safe — PvP is off."
# Shown when a player presses off again while a cooldown is already running. {seconds} = seconds left.
cooldown-already: "{prefix}&eYour PvP is already winding down — &6{seconds}s&e left."
# Combat-log punishment (see 'combat-log' in config.yml): when a player logs out while combat-tagged
# (in an active fight) they are killed at the logout spot. Since they are offline at that moment, this
# message is shown on their NEXT login to explain why they died and lost their items.
combat-log-death: "{prefix}&cYou died because you logged out during a PvP fight."
# Shown to operators (permission pvpmode.update) on join when a newer version exists on SpigotMC.
# {latest} = the available version, {current} = the installed version.
update-available: "{prefix}&eA new version of PvPMode is available: &a{latest}&e (you have &7{current}&e). Download it on SpigotMC."
# Special-item library admin command (/<command> loot ..., permission pvpmode.loot.admin).
# {command} = the command name, {name} = the item name, {count}/{names} = list output,
# {target} = a mob target (group hostile/neutral/passive or a mob type like ZOMBIE),
# {chance} = the drop chance in percent, {amount} = how many items drop.
#
# TEMPLATES: save/get/delete manage the named item templates in items.yml.
# ('additem' still works as an alias for 'save', and 'remove' as an alias for 'delete'.)
# ASSIGNMENTS: assign/unassign/show manage where those templates drop (loot-assignments.yml),
# ADDITIVE on top of config.yml (pvp-loot.items) and mobs.yml - both ways drop at the same time.
loot-usage: "{prefix}&eUsage: &6/{command} loot &7<save|get|delete|list|assign|unassign|show> ..."
loot-usage-templates: "&6/{command} loot save <name> &7| &6get <name> &7| &6delete <name> &7| &6list"
loot-usage-assign: "&6/{command} loot assign pvp <name> <chance> [amount] &7| &6assign mob <target> <name> <chance> [amount]"
loot-usage-unassign: "&6/{command} loot unassign pvp <name> &7| &6unassign mob <target> <name>"
loot-usage-show: "&6/{command} loot show pvp &7| &6show mob <target>"
loot-no-item: "{prefix}&cHold the item you want to save in your main hand first."
loot-saved: "{prefix}&aSaved the item in your hand as &e{name}&a."
loot-removed: "{prefix}&aRemoved the saved item &e{name}&a."
loot-unknown: "{prefix}&cNo saved item named &e{name}&c."
loot-list-empty: "{prefix}&7No items are saved in the library yet."
loot-list-header: "{prefix}&eSaved items (&6{count}&e):"
loot-list-line: "&7{names}"
loot-got: "{prefix}&aGave you a copy of the saved item &e{name}&a."
loot-bad-number: "{prefix}&cChance and amount must be numbers (chance 0-100, amount >= 1)."
loot-bad-target: "{prefix}&cUnknown target &e{target}&c. Use hostile, neutral, passive or a mob type (e.g. ZOMBIE)."
loot-assigned-pvp: "{prefix}&aAssigned &e{name}&a to the PvP-loot pot (&6{chance}%&a, x&6{amount}&a)."
loot-assigned-mob: "{prefix}&aAssigned &e{name}&a to mob target &e{target}&a (&6{chance}%&a, x&6{amount}&a)."
loot-unassigned-pvp: "{prefix}&aRemoved &6{count}&a PvP-loot assignment(s) for &e{name}&a."
loot-unassigned-mob: "{prefix}&aRemoved &6{count}&a assignment(s) for &e{name}&a from mob target &e{target}&a."
loot-unassign-none: "{prefix}&cNo matching assignment found for &e{name}&c."
loot-show-pvp-empty: "{prefix}&7No items are assigned to the PvP-loot pot."
loot-show-pvp-header: "{prefix}&ePvP-loot assignments (&6{count}&e):"
loot-show-mob-empty: "{prefix}&7No items are assigned to mob target &e{target}&7."
loot-show-mob-header: "{prefix}&eMob-loot assignments for &6{target}&e (&6{count}&e):"
loot-show-line: "&7- &e{name} &7(&6{chance}%&7, x&6{amount}&7)"
Code (Text):
# =====================================================================
# PvPMode messages (English / default)
# Version: 1.4.2
# Author: WuZaa
# =====================================================================
#
# These are all the texts a PLAYER sees in chat. Edit them freely.
# (Console / server-log messages are NOT here - they stay English by design.)
#
# COLOURS & FORMATTING
# Write colour and formatting codes directly into the text with '&':
# &0 black &1 dark_blue &2 dark_green &3 dark_aqua &4 dark_red &5 dark_purple
# &6 gold &7 gray &8 dark_gray &9 blue &a green &b aqua
# &c red &d light_purple &e yellow &f white
# &l bold &o italic &n underline &m strike &k magic &r reset
#
# PLACEHOLDERS (get automatically replaced)
# {prefix} -> the 'prefix' text below (the [PvPMode] tag in front of a message)
# {command} -> the configured command name (e.g. pvpmode)
# {label} -> the command name the player actually typed
#
# TRANSLATING
# Copy this file to messages_<code>.yml (e.g. messages_de.yml), translate the lines,
# then set 'language' in config.yml (e.g. language: de). Any missing line falls back
# to the built-in English text, so nothing is ever blank.
# The tag shown in front of most messages.
prefix: "&6[PvPMode] &r"
# Shown when a player turns their PvP on / off.
pvp-on: "{prefix}&aPvP is now &cON&a. Your name shows the PvP colour and you can fight other PvP-enabled players."
pvp-off: "{prefix}&aPvP is now &7OFF&a. You can no longer hurt or be hurt by other players."
# The /<command> help listing.
help-header: "{prefix}&eCommands:"
help-toggle: "&6/{command}&7 - toggle your PvP status on/off."
help-on: "&6/{command} on&7 - enable your PvP."
help-off: "&6/{command} off&7 - disable your PvP."
help-help: "&6/{command} help&7 - show this help."
help-reload: "&6/{command} reload&7 - reload the configuration."
help-loot: "&6/{command} loot&7 - manage the special-item library and loot assignments."
help-footer: "&8A red name means PvP is on, white means off. Damage only happens when both players have PvP on."
# Error / status messages.
unknown-subcommand: "{prefix}&cUnknown subcommand. Try /{label} help"
only-players: "{prefix}&cOnly players can change their PvP status."
no-permission: "{prefix}&cYou don't have permission to do that."
reloaded: "{prefix}&aConfiguration reloaded."
# Shown when a player tries to turn PvP OFF while still in combat (see 'combat' in config.yml).
# {seconds} is replaced with the whole seconds remaining on the lock.
combat-disable-blocked: "{prefix}&cYou're in combat - you can't turn PvP off for another &e{seconds}s&c."
# Shown once to a player when their combat tag expires (the ~10s in-combat window ended). Pure info -
# it tells them they may now safely turn PvP off or log out. Toggle with 'end-message' in config.yml.
combat-ended: "{prefix}&aCombat over - you can disable PvP or log out safely now."
# Anti-spawnkill (see 'spawn-protection' in config.yml): shown on the action bar each second while a
# freshly joined / respawned player is still protected. {seconds} = whole seconds of protection left.
spawn-protection-active: "&bSpawn protection: &e{seconds}s&b - safe until you attack."
# PvP cooldown messages (only used when 'cooldown' is enabled in config.yml).
# Shown when a player presses off and the cooldown starts. {minutes} = whole minutes of the cooldown.
cooldown-started: "{prefix}&ePvP will turn off in &6{minutes} minute(s)&e. You stay attackable until then."
# Reminder shown on the action bar at each full minute while the cooldown counts down. {minutes} = minutes left.
cooldown-reminder: "{prefix}&ePvP turns off in &6{minutes} minute(s)&e."
# Shown once the cooldown has finished and PvP has actually turned off.
cooldown-ended: "{prefix}&aYou are now really safe — PvP is off."
# Shown when a player presses off again while a cooldown is already running. {seconds} = seconds left.
cooldown-already: "{prefix}&eYour PvP is already winding down — &6{seconds}s&e left."
# Combat-log punishment (see 'combat-log' in config.yml): when a player logs out while combat-tagged
# (in an active fight) they are killed at the logout spot. Since they are offline at that moment, this
# message is shown on their NEXT login to explain why they died and lost their items.
combat-log-death: "{prefix}&cYou died because you logged out during a PvP fight."
# Shown to operators (permission pvpmode.update) on join when a newer version exists on SpigotMC.
# {latest} = the available version, {current} = the installed version.
update-available: "{prefix}&eA new version of PvPMode is available: &a{latest}&e (you have &7{current}&e). Download it on SpigotMC."
# Special-item library admin command (/<command> loot ..., permission pvpmode.loot.admin).
# {command} = the command name, {name} = the item name, {count}/{names} = list output,
# {target} = a mob target (group hostile/neutral/passive or a mob type like ZOMBIE),
# {chance} = the drop chance in percent, {amount} = how many items drop.
#
# TEMPLATES: save/get/delete manage the named item templates in items.yml.
# ('additem' still works as an alias for 'save', and 'remove' as an alias for 'delete'.)
# ASSIGNMENTS: assign/unassign/show manage where those templates drop (loot-assignments.yml),
# ADDITIVE on top of config.yml (pvp-loot.items) and mobs.yml - both ways drop at the same time.
loot-usage: "{prefix}&eUsage: &6/{command} loot &7<save|get|delete|list|assign|unassign|show> ..."
loot-usage-templates: "&6/{command} loot save <name> &7| &6get <name> &7| &6delete <name> &7| &6list"
loot-usage-assign: "&6/{command} loot assign pvp <name> <chance> [amount] &7| &6assign mob <target> <name> <chance> [amount]"
loot-usage-unassign: "&6/{command} loot unassign pvp <name> &7| &6unassign mob <target> <name>"
loot-usage-show: "&6/{command} loot show pvp &7| &6show mob <target>"
loot-no-item: "{prefix}&cHold the item you want to save in your main hand first."
loot-saved: "{prefix}&aSaved the item in your hand as &e{name}&a."
loot-removed: "{prefix}&aRemoved the saved item &e{name}&a."
loot-unknown: "{prefix}&cNo saved item named &e{name}&c."
loot-list-empty: "{prefix}&7No items are saved in the library yet."
loot-list-header: "{prefix}&eSaved items (&6{count}&e):"
loot-list-line: "&7{names}"
loot-got: "{prefix}&aGave you a copy of the saved item &e{name}&a."
loot-bad-number: "{prefix}&cChance and amount must be numbers (chance 0-100, amount >= 1)."
loot-bad-target: "{prefix}&cUnknown target &e{target}&c. Use hostile, neutral, passive or a mob type (e.g. ZOMBIE)."
loot-assigned-pvp: "{prefix}&aAssigned &e{name}&a to the PvP-loot pot (&6{chance}%&a, x&6{amount}&a)."
loot-assigned-mob: "{prefix}&aAssigned &e{name}&a to mob target &e{target}&a (&6{chance}%&a, x&6{amount}&a)."
loot-unassigned-pvp: "{prefix}&aRemoved &6{count}&a PvP-loot assignment(s) for &e{name}&a."
loot-unassigned-mob: "{prefix}&aRemoved &6{count}&a assignment(s) for &e{name}&a from mob target &e{target}&a."
loot-unassign-none: "{prefix}&cNo matching assignment found for &e{name}&c."
loot-show-pvp-empty: "{prefix}&7No items are assigned to the PvP-loot pot."
loot-show-pvp-header: "{prefix}&ePvP-loot assignments (&6{count}&e):"
loot-show-mob-empty: "{prefix}&7No items are assigned to mob target &e{target}&7."
loot-show-mob-header: "{prefix}&eMob-loot assignments for &6{target}&e (&6{count}&e):"
loot-show-line: "&7- &e{name} &7(&6{chance}%&7, x&6{amount}&7)"
Spoiler: Items
# =====================================================================
# PvPMode special-item library
# Author: WuZaa
# =====================================================================
#
# This file holds NAMED item templates (custom display name, lore, enchants, ...) that the loot
# systems can hand out instead of a plain MATERIAL. You do NOT edit it by hand - it is managed
# in-game with the loot commands:
#
# /pvpmode loot save <name> save the item in your main hand under <name> (alias: additem)
# /pvpmode loot get <name> put a copy of a saved template into your hand
# /pvpmode loot delete <name> delete a saved item (alias: remove)
# /pvpmode loot list list all saved item names
#
# And assign where a saved template should drop (stored in loot-assignments.yml, ADDITIVE on top
# of config.yml / mobs.yml - both ways drop at the same time):
#
# /pvpmode loot assign pvp <name> <chance> [amount]
# /pvpmode loot assign mob <target> <name> <chance> [amount] target = hostile|neutral|passive or a mob type
# /pvpmode loot unassign pvp|mob <target> <name> · /pvpmode loot show pvp|mob <target>
#
# (Permission for these commands: pvpmode.loot.admin, default op.)
#
# HOW TO USE A SAVED ITEM
# Anywhere a loot list takes a "MATERIAL:amount:chance" entry you may instead write a saved
# item's name, in the SAME "name:amount:chance" form. For example, after saving an item as
# "kingsword":
# pvp-loot.items: (config.yml)
# - 'kingsword:1:25' # 25% chance to drop one "kingsword" on a PvP kill
# items: (mobs.yml, under a mob)
# - 'kingsword:1:5' # 5% chance for that mob to drop it
# The plain MATERIAL form keeps working exactly as before - this is purely additive.
#
# Saved items are stored under the "items" path below. Empty by default.
items: {}
Code (Text):
# =====================================================================
# PvPMode special-item library
# Author: WuZaa
# =====================================================================
#
# This file holds NAMED item templates (custom display name, lore, enchants, ...) that the loot
# systems can hand out instead of a plain MATERIAL. You do NOT edit it by hand - it is managed
# in-game with the loot commands:
#
# /pvpmode loot save <name> save the item in your main hand under <name> (alias: additem)
# /pvpmode loot get <name> put a copy of a saved template into your hand
# /pvpmode loot delete <name> delete a saved item (alias: remove)
# /pvpmode loot list list all saved item names
#
# And assign where a saved template should drop (stored in loot-assignments.yml, ADDITIVE on top
# of config.yml / mobs.yml - both ways drop at the same time):
#
# /pvpmode loot assign pvp <name> <chance> [amount]
# /pvpmode loot assign mob <target> <name> <chance> [amount] target = hostile|neutral|passive or a mob type
# /pvpmode loot unassign pvp|mob <target> <name> · /pvpmode loot show pvp|mob <target>
#
# (Permission for these commands: pvpmode.loot.admin, default op.)
#
# HOW TO USE A SAVED ITEM
# Anywhere a loot list takes a "MATERIAL:amount:chance" entry you may instead write a saved
# item's name, in the SAME "name:amount:chance" form. For example, after saving an item as
# "kingsword":
# pvp-loot.items: (config.yml)
# - 'kingsword:1:25' # 25% chance to drop one "kingsword" on a PvP kill
# items: (mobs.yml, under a mob)
# - 'kingsword:1:5' # 5% chance for that mob to drop it
# The plain MATERIAL form keeps working exactly as before - this is purely additive.
#
# Saved items are stored under the "items" path below. Empty by default.
items: {}
Feedback & Support
Found a bug?
Have an idea for a new feature?
Need help with the plugin?
Feel free to join my Discord server:
Discord: https://discord.gg/rSQ8ksysQT
I'm always open to feedback, suggestions, and feature requests.
I'll try to respond as quickly as possible and help you with any problems you may encounter.
Reviews
Reviews are always appreciated as a small thank-you, whether they're positive or negative. However, if you're thinking about leaving a negative review, I'd really appreciate it if you contacted me on Discord first.
There's a good chance we can solve the issue together, and if we can't, you're of course still free to leave your review afterward.
Thanks for giving it a try, and have fun!
Found a bug?
Have an idea for a new feature?
Need help with the plugin?
Feel free to join my Discord server:
Discord: https://discord.gg/rSQ8ksysQT
I'm always open to feedback, suggestions, and feature requests.
I'll try to respond as quickly as possible and help you with any problems you may encounter.
Reviews
Reviews are always appreciated as a small thank-you, whether they're positive or negative. However, if you're thinking about leaving a negative review, I'd really appreciate it if you contacted me on Discord first.
There's a good chance we can solve the issue together, and if we can't, you're of course still free to leave your review afterward.
Thanks for giving it a try, and have fun!
Quick facts
- Edition: Minecraft Java
- File type: .jar
- Minecraft versions listed: 1.17, 1.18, 1.19
- How to install: Install the matching mod loader (Forge, Fabric or NeoForge) for your Minecraft version. → Download the .jar. → Put it in the .minecraft/mods folder and launch that loader profile.
- Where to get it: Opens on Spigot — not every file is mirrored on our own servers.
Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.
PvPMode ⭕ Opt-In PvP + Optional Combat Toolkit ⚡ is a free Minecraft Java mod. Compatible with Minecraft 1.17, 1.18, 1.19, 1.20 and newer. Downloaded 50 times (via Spigot). Download it and open it directly in the game.