
A Simple ModDetector Paper Plugin (Folia Supported) wich detects mods and kicks player if they have those mods.
Packet-level cheat mod detection for Minecraft servers. Identifies disallowed client modifications using a translation key exploit — without any client-side agent.
The plugin exploits Minecraft's sign editing flow to probe the client's translation table. If a mod is installed, it replaces translation keys with its own strings — betraying its presence.
Detection flow (at connection time):
BlockUpdatePacket is sent to place a virtual sign near the playerOpenSignEditorPacket is sent, opening the sign editor on the clientSignUpdatePacket is sent containing the mod's translation key as the sign textThe entire handshake is invisible to the player and occurs silently at connection time. No GUI is shown, no chat messages are sent during detection.
The following mods are blocked out of the box. You can extend the list in config.yml.
| Mod | Translation Key |
|---|---|
| Meteor Client | key.meteor-client.open-gui |
| Item Scroller | itemscroller.gui.button.config_gui.generic |
| Freecam | key.freecam.toggle |
| Accurate Block Placement | text.autoconfig.accurateblockplacement.title |
All settings live in plugins/ModDetector/config.yml.
# Fallback value used to detect mod presence
default: "fallb"
# Message shown to the player on detection
# Supports MiniMessage, modern & legacy ampersand codes
kick-message:
- "&cYou are using a cheat mod that is not allowed on [Your Server] (%mod%!), if you join"
- "with this again you will be banned!"
# Mod translation keys to detect
disallowed-mods:
"Meteor": "key.meteor-client.open-gui"
"Item Scroller": "itemscroller.gui.button.config_gui.generic"
"Freecam": "key.freecam.toggle"
"Accurate Block Placement": "text.autoconfig.accurateblockplacement.title"
# Enable packet & result logging for debugging
debug: false
The kick-message field supports all three Minecraft color systems:
<red>, <#ff4455>&c, &#ff4455&c, &x&f&f&4&4&5&5Any mod that registers Minecraft translation keys can be detected. Find the key in the mod's language files (usually in assets/<modid>/lang/en_us.json) and add it to disallowed-mods:
disallowed-mods:
"Your Mod Name": "your.mod.translation.key"
Note: The
defaultfield must be set to a string that is never a valid translation output — the default"fallb"is safe for vanilla clients. Do not change it unless you understand the detection logic.
| Requirement | Version |
|---|---|
| Paper / Spigot | 1.19+ |
| PacketEvents | Latest |
| Java | 17+ |
ModDetector.jar into your plugins/ folderplugins/ as wellconfig.yml will be generated automaticallyconfig.yml to configure your kick message and disallowed mods/reload or restart the server*Inspired by PvPClub's detection approach. *