v1.0
Compatibility
Changes
PVPToggle
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
- Players:
/pvpor/pvp on/off/toggleto change your own PVP - Admins:
/pvp on|off|toggle <player>to manage someone else’s PVP - Status:
/pvp statusfor yourself,/pvp status <player>for others (with permission) - Reload:
/pvp reloadto reload config (with permission) - Per-world: Optional separate PVP state per world
- Debounced save: Fewer disk writes
- Cooldown: Configurable cooldown after toggling your own PVP
- Feedback: Configurable sound, ActionBar, and Title on toggle
- PlaceholderAPI: Placeholders like
%pvptoggle_status% - Folia: 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 |
Configuration (config.yml)
- default-pvp: Default PVP state for new or unknown players (true/false)
- persist-on-rejoin: Whether to keep each player’s choice when they rejoin
- per-world: Whether to store PVP state per world (separate per world)
- save-debounce-seconds: Debounce time in seconds before writing to disk; 0 = save every time
- command-cooldown-seconds: Cooldown in seconds after toggling your own PVP; 0 = no cooldown
- toggle-feedback: Feedback when toggling
- play-sound: Play a sound
- sound: Sound name (e.g. ENTITY_EXPERIENCE_ORB_PICKUP)
- sound-volume / sound-pitch: Volume and pitch
- use-actionbar: Show message in ActionBar
- actionbar-message: ActionBar text;
%status%= on/off - use-title: Show title
- title / subtitle: Title and subtitle;
%status%= on/off
- placeholder-on / placeholder-off: 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-on and placeholder-off in config.
Compatibility
- Server: Paper 1.21+ (or compatible forks)
- Folia: Supported (
folia-supported: true); uses AsyncScheduler for saves - LuckPerms: Soft dependency; permissions are managed by LuckPerms when present
- PlaceholderAPI: Soft dependency; placeholders are registered when present
Optional dependencies
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:CjxUOw85:1u87qU5X"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:CjxUOw85:1u87qU5X"
}

