Replaces vanilla /msg, /tell, /w, /r, /reply with drop-in versions that behave identically to a player, but log every message and let ops watch live.
- Registers
/msg,/tell,/w,/r,/replyas plugin commands. Bukkit resolves the unqualified command name to a plugin command over the vanilla one, so players see no difference in behavior or formatting. - Every message is appended to
plugins/PMLogger/pm-log.txtas[timestamp] Sender -> Receiver: message. /pmspytoggles live viewing for the player running it. Requires thepmlogger.spypermission (defaults to op). Spies see[PM] Sender -> Receiver: messagein real time for every PM sent on the server, except pairs they're already part of (to avoid duplicate lines).
- Purpur/Paper 26.1.2, since your server migrated to the new year.drop versioning (26.1.2 was released May 2026, built on JDK 25).
- JDK 25 to compile.
- Maven (or adapt to Gradle if you prefer — the source doesn't depend on Maven specifically).
cd pmlogger
mvn clean package
The built jar will be at target/PMLogger.jar. Drop it in your server's plugins/ folder and restart (or /reload, though a restart is safer).
Note: plugin.yml uses api-version: '26.1', matching the format Paper expects for 26.x. If Purpur hasn't caught up to 26.1.2 by the time you build this, you may need to drop back a build number in the pom's version range.
There's nothing actually fake about it — it's not spoofing anything, it just claims the /msg name before the server's built-in vanilla command handler gets a chance to, which is the standard, supported way plugins override default commands. Message formatting matches vanilla ("[me -> Player] text" / "[Player -> me] text") so nobody notices a difference.
One thing worth being upfront about: since players won't know PMs are logged/spied on, you'll probably want to just say so in your server rules — keeps things fair, and it's normal for a server admin to log chat for moderation purposes anyway.