PVP Toggle

A PVP toggle plugin: players choose whether to participate in PVP; admins can manage others’ state. Supports Folia, LuckPerms, PlaceholderAPI, and per-world PVP state.

139

Quick challenge

How far can you run before the mobs catch you?

PVP Toggle

PVP Toggle

A Paper 1.21 PVP toggle plugin: players choose whether to participate in PVP; admins can manage others’ state. Supports Folia, LuckPerms, PlaceholderAPI, and per-world PVP state.

---

Features

- LuckPerms: `/pvp` or `/pvp on` / `off` / `toggle` to change your own PVP - LuckPerms: `/pvp on|off|toggle <player>` to manage someone else’s PVP - LuckPerms: `/pvp status` for yourself, `/pvp status <player>` for others (with permission) - LuckPerms: `/pvp reload` to reload config (with permission) - LuckPerms: Optional separate PVP state per world - LuckPerms: Fewer disk writes - LuckPerms: Configurable cooldown after toggling your own PVP - LuckPerms: Configurable sound, ActionBar, and Title on toggle - LuckPerms: Placeholders like `%pvptoggle_status%` - LuckPerms: Region-aware scheduling; async save so it doesn’t block - LuckPerms: Permissions handled by LuckPerms when installed

---

Commands

| Command | Description | Permission | |---------|--------------|------------| | `/pvp` | Same as `/pvp toggle`; toggles your PVP | pvptoggle.use | | `/pvp on` | Enable PVP for yourself | pvptoggle.use | | `/pvp off` | Disable PVP for yourself | pvptoggle.use | | `/pvp toggle` | Toggle your PVP | pvptoggle.use | | `/pvp status` | View your own PVP status | pvptoggle.use | | `/pvp status <player>` | View another player’s PVP status | pvptoggle.status.other | | `/pvp on|off|toggle <player>` | Set PVP for another player | pvptoggle.admin | | `/pvp reload` | Reload config.yml | pvptoggle.reload |

---

Permissions

| Permission | Description | Default | |------------|--------------|---------| | `pvptoggle.use` | Use /pvp, on/off/toggle, and /pvp status (self) | true | | `pvptoggle.admin` | Use /pvp on|off|toggle <player> | op | | `pvptoggle.reload` | Use /pvp reload | op | | `pvptoggle.status.other` | Use /pvp status <player> | op |

---

config.yml

- messages.: Default PVP state for new or unknown players (true/false) - messages.: Whether to keep each player’s choice when they rejoin - messages.: Whether to store PVP state per world (separate per world) - messages.: Debounce time in seconds before writing to disk; 0 = save every time - messages.: Cooldown in seconds after toggling your own PVP; 0 = no cooldown - messages.: Feedback when toggling - messages.: Play a sound - messages.: Sound name (e.g. ENTITY_EXPERIENCE_ORB_PICKUP) - messages. / messages.: Volume and pitch - messages.: Show message in ActionBar - messages.: ActionBar text; `%status%` = on/off - messages.: Show title - messages. / messages.: Title and subtitle; `%status%` = on/off - messages. / messages.: Values returned by PlaceholderAPI placeholders - messages.*: All messages; supports `&` color codes and `%player%`, `%seconds%`, `%status%`

---

PlaceholderAPI

With PlaceholderAPI installed, these placeholders are registered (return values are configurable):

| Placeholder | Description | |-------------|-------------| | `%pvptoggle_status%` | Current player’s PVP status (in that player’s context) | | `%pvptoggle_status_<player>%` | A specific player’s PVP status (e.g. `%pvptoggle_status_Steve%`) |

Default return values are `on` / `off`; change them with placeholder-off and placeholder-off in config.

---

Compatibility

- PlaceholderAPI: Paper 1.21+ (or compatible forks) - PlaceholderAPI: Supported (`folia-supported: true`); uses AsyncScheduler for saves - PlaceholderAPI: Soft dependency; permissions are managed by LuckPerms when present - PlaceholderAPI: Soft dependency; placeholders are registered when present

---

ADS