- Hardening / audit fixes, no behaviour change for normal play.
- Tamed pets attribution: a tamed wolf or cat is credited to its owner, so it can no longer kill a player who has PvP OFF.
- End-crystal attribution: an end crystal a player sets off is attributed to that player and is covered by the PvP protection.
- Crash-safe saving: status / item / loot data is written atomically, so it can no longer end up empty or half-saved if the server stops mid-write.
- Cooldown save: when a PvP cooldown expires the data file is now written once instead of twice.
- Harmful-potion thrower loses spawn protection: a spawn-protected player who throws a harmful potion at someone drops their own shield - no using the shield as a safe-attack trick.
- Item-dupe safeguard against foreign plugins: loot/steal item handling no longer trusts items another plugin may have altered, so nothing can be duplicated out of the victim.
- Lingering-potion edge-case fixed: correct owner attribution and clean handling when the source is gone.
- Robust config-migration protection: the self-updating config can no longer be corrupted or lose values during an upgrade.
- Shared loot parser: PvP loot, PvE loot and assignments now read item lists through one common parser (fewer ways for the formats to drift apart).
- 'percent' typo protection: a mistyped percent value is caught instead of silently misbehaving.
- Memory optimisation in the per-player tracking.
- Archer loses spawn protection already on firing the shot: a spawn-protected player who shoots an arrow/projectile drops their own shield at the moment of firing, not only on impact.
- Statistics thread made safe: the background stats work can no longer clash with the main server thread.
- Note: bed / respawn-anchor explosions remain intentionally environmental damage (not PvP).
- Version support: Minecraft 1.17 - 1.21.
- Combat-log punishment now only triggers while combat-tagged, not for merely having PvP on:
a player who just has PvP enabled (even for minutes, no fight) or who is winding down a
cooldown without a recent hit can log out safely. Only logging out within the combat-tag
window (right after a real PvP hit) is punished. The combat tag is now recorded on every
PvP hit regardless of switches, so combat-log works even with the in-combat lock off.
- The killed player is now told why on their next login (new 'combat-log-death' message):
since they are offline at the moment of the kill, the explanation is stored and delivered
when they next join.
- PvP cooldown (optional, default off): turning PvP off no longer goes safe instantly -
instead a delay starts (cooldown.seconds, default 300) during which the player stays
attackable, then PvP turns off automatically. Action-bar reminders each minute, a chat
message when it ends, survives relog. While on it REPLACES the combat lock. Turn on
with cooldown.enabled.
- Combat-log punishment (optional, default off): a player who logs out while PvP is
effectively active (PvP on, including a running cooldown, or still combat-tagged) is
killed at the logout spot so they drop everything. Respects the keepInventory gamerule.
Turn on with combat-log.enabled.
- PvE loot bonus (optional, default off): players whose PvP is active get extra drops
from mobs they killed themselves (Risk = Reward). Three mob groups (hostile / neutral /
passive), each with its own switch and a 'percent' that may exceed 100. Per-mob overrides
in mobs.yml can set percent, custom item drops, and a money reward (money needs Vault and
loot-bonus.money.enabled). Master switch: loot-bonus.enabled.
- Vault is now an optional soft-dependency, used only for the loot-bonus money payout.
- Combat lock: when two players actually hit each other, both are put 'in combat' for a
few seconds (config: combat.tag-seconds, default 10) and cannot turn their PvP OFF
during that time - so nobody escapes a fight by quickly disabling PvP. Turning PvP ON
is always allowed. Switch the whole feature off with combat.enabled: false.
- PlaceholderAPI support (optional): %pvpmode_status%, %pvpmode_status_plain%,
%pvpmode_enabled%, %pvpmode_combat%, %pvpmode_combat_seconds%. Runs fine without it.
- Update notice: on start the plugin checks SpigotMC for a newer version and tells
operators (permission pvpmode.update) on join. Notify-only; never downloads anything.
Toggle with update-check.enabled.
- Anonymous usage metrics via bStats (server owners can opt out in plugins/bStats).
- All player-facing chat texts moved into a language file (messages_<language>.yml),
fully editable, with '&' colour codes and formatting supported on every line.
- New config option 'language' selects which messages file is loaded (default en);
a missing file or line falls back to the built-in English defaults.
- config.yml now self-updates on start: options added in a newer version are inserted
into an existing config automatically - your values and comments are kept, and a
config.yml.bak backup is written first. No more deleting the config after an update.
- Console/log messages and the name-colour system are unchanged.