DonutPunishments
A comprehensive punishment system for Paper 1.21.x with progressive punishment tracking, alt account detection, and Simple Voice Chat integration.
Features
- Progressive Punishment System: Automatically escalates punishment duration based on offense count
- Alt Account Detection: Tracks player IPs and identifies alternate accounts
- Auto-ban Alts: Automatically bans alt accounts when a main account is banned
- Simple Voice Chat Integration: Mutes players from voice chat when they have an active mute
- Customizable Messages: Fully configurable messages and ban reasons
- Punishment Types: Ban, Mute, and Kick with duration support
- Permanent & Temporary: Support for both permanent and time-based punishments
Commands
| Command | Description | Permission |
|---|---|---|
| /ban <player> [duration] <reason> | Ban a player | donutpunishments.ban |
| /unban <player> | Unban a player | donutpunishments.unban |
| /kick <player> <reason> | Kick a player | donutpunishments.kick |
| /mute <player> [duration] <reason> | Mute a player | donutpunishments.mute |
| /unmute <player> | Unmute a player | donutpunishments.unmute |
| /offend <player> <reason> | Progressive punishment | donutpunishments.offend |
| /punish <player> <reason> | Alias for /offend | donutpunishments.offend |
| /donutpunishments reload | Reload config | donutpunishments.admin |
| /donutpunishments unbanwave | Unban all players | donutpunishments.admin |
| /donutpunishments unmutewave | Unmute all players | donutpunishments.admin |
| /dp | Alias for /donutpunishments | donutpunishments.admin |
Duration Format
Durations can be specified using the following format:
- s - seconds (e.g., 30s)
- m - minutes (e.g., 15m)
- h - hours (e.g., 24h)
- d - days (e.g., 7d)
- w - weeks (e.g., 2w)
- y - years (e.g., 1y)
- perm or permanent - Permanent ban/mute
Examples:
- /ban Steve 7d Griefing - Ban for 7 days
- /mute Alex 1h30m Spam - Mute for 1 hour 30 minutes
- /ban Herobrine perm Hacking - Permanent ban
Progressive Punishment System
The /offend and /punish commands use predefined reasons from messages.yml. Each reason has its own punishment type, duration, and message.
Example usage:
- /offend Steve cheating - Punishes for cheating (15 day ban by default)
- /punish Alex spam - Punishes for spam (1 day mute by default)
- /offend Herobrine exploiting - Punishes for exploiting (permanent ban by default)
The offense policy in config.yml applies multipliers to the base duration:
ban-offense-policy:
- 1.0 # 1st offense: base duration (15 days for cheating)
- 2.0 # 2nd offense: 2x duration (30 days)
- 4.0 # 3rd offense: 4x duration (60 days)
- "perm" # 4th+ offense: permanent ban
Customizing Punishment Reasons
In messages.yml, you can add/edit reasons:
reasons:
cheating:
type: "ban" # ban, mute, or kick
duration: "15d" # Time format: 1s, 5m, 2h, 7d, 2w, 1y, or "perm"
message: "You have been banned for cheating"
wipe: false # Future feature for data wipes
toxicity:
type: "mute"
duration: "3d"
message: "You have been muted for toxic behavior"
wipe: false
Then use: /offend PlayerName cheating or /offend PlayerName toxicity
Alt Account Detection
- Tracks players by IP address
- Automatically detects when players join from the same IP as banned accounts
- Can auto-ban alts when configured
- Alerts staff when alts join
Simple Voice Chat Integration
When a player is muted, they:
- Cannot send chat messages
- Cannot transmit voice in Simple Voice Chat
- Can still hear other players in voice chat
Configuration
config.yml
# Per-offense duration policyban-offense-policy:
- 1.0
- 2.0
- 4.0
- "perm"
# Alt tracking
track-alts: true
auto-ban-alts: true
alert-on-alt-join: true
# Simple Voice Chat
simple-voicechat-integration: true
messages.yml
Fully customizable messages for all plugin actions. See the default messages.yml for all available options.
Support
For issues or feature requests, please contact rytento via Discord
License
All rights reserved.
