
a Minecraft paper server plugin for mod detection
⚠️Note: This plugin requires the Hidder Fabric mod installed on all clients.
ModSeeker is a Paper plugin that detects player mods and enforces launcher restrictions on your server. Paired with the Hidder Fabric mod, it sees what mods players have installed, what launcher they're using, and blocks anything you don't allow — all verified through encrypted, cryptographically signed communication that can't be spoofed.
🔍 Mod DetectionSee every mod, resource pack, and shader a player has installed — in real time |
🛡️ Launcher EnforcementKnow exactly which launcher each player is using and block the ones you don't trust |
/modseeker status for live monitoring of verification statistics| Minecraft Version | Paper | Java | Status |
|---|---|---|---|
| 26.1 / 26.1.1 | Paper 26.1+ | Java 25+ | ✅ Latest |
| 1.21.4 – 1.21.11 | Paper 1.21+ | Java 21+ | ✅ Supported |
ModSeeker's Paper plugin is forward-compatible — a single JAR works across all supported versions within the same API generation.
modseeker.jar from Modrinth or Releasesplugins/ folderconfig.yml, modblacklist.json, or whitelist.json as needed/modseeker reload to apply changesModSeeker uses three independent verification layers. Each layer operates autonomously — disabling one does not weaken the others.
Player Joins
|
v
[ Layer 1: Cryptographic Handshake ] -- Is this the authentic Hidder mod?
|
v
[ Layer 2: Launcher Detection ] -- Is the player using an approved launcher?
|
v
[ Layer 3: Mod Verification ] -- Does the mod list contain banned mods?
|
v
Player Approved ✅
The server issues a unique cryptographic challenge for every connection. The client must produce a valid signed response using a native security module. Challenges are one-time-use with strict time limits, preventing replay attacks and spoofing.
The companion mod detects which launcher started the game using native OS-level inspection. The server validates the result against a configurable whitelist. Supports 15 launchers including Prism Launcher, MultiMC, CurseForge, Modrinth App, ATLauncher, GDLauncher, Technic, FTB App, Lunar Client, Badlion Client, Feather Client, LabyMod, TLauncher, SKLauncher, and Pojav Launcher.
The client collects its installed mods, resource packs, and shader packs directly from the Fabric runtime registry. The data is encrypted end-to-end using hybrid RSA/AES and includes a session-bound integrity signature. The server decrypts and verifies the signature before inspecting the mod list.
ModSeeker generates the following files on first run:
| File | Purpose |
|---|---|
config.yml |
Main configuration — timeouts, kick messages, display settings, Discord webhook |
modblacklist.json |
List of banned mod IDs |
whitelist.json |
Players who skip verification entirely |
client-list.yml |
Per-launcher whitelist for Layer 2 — enable/disable individual launchers |
# ---------------------------------------------------------------
# Timeout Configuration
# ---------------------------------------------------------------
handshakeTimeoutSeconds: 10
modlistTimeoutSeconds: 15
# ---------------------------------------------------------------
# Mod List Filter
# Base mods hidden from console output (still checked)
# ---------------------------------------------------------------
modlistFilter:
- "java"
- "minecraft"
- "fabricloader"
# ---------------------------------------------------------------
# Kick Messages
# Supports {mods}, {plural}, {maxMods} placeholders
# ---------------------------------------------------------------
kickMessages:
missingHidder: "Please Install Hidder Mod To Enter The Server"
blacklistedMods: "Please Remove {mods} Illegal Mod{plural} To Join The Server"
modlistTimeout: "Player Verification Failed"
modlistRequestFailed: "Player verification failed - unable to send mod list request."
modCountExceeded: "You have too many mods installed. Maximum allowed: {maxMods}"
# ---------------------------------------------------------------
# Player Notification
# ---------------------------------------------------------------
enablePlayerNotifications: true
welcomeMessage: "Welcome To The Server"
# ---------------------------------------------------------------
# Mod Count Threshold
# ---------------------------------------------------------------
enableModCountThreshold: false
maxModCount: 50
# ---------------------------------------------------------------
# Mod List Display Settings
# ---------------------------------------------------------------
showModList: true
oneModPerLine: false
highlightMods: true
highlightBlacklistedMods: true
# ---------------------------------------------------------------
# Floodgate / Bedrock Player Handling
# ---------------------------------------------------------------
allowFloodgate: true
# ==================================================================
# Discord Webhook Integration
# ==================================================================
discord:
enabled: false
webhookUrl: "https://discord.com/api/webhooks/YOUR_WEBHOOK_URL_HERE"
events:
playerJoin: true # Notify when a player joins
modListReceived: true # Notify with the player's mod list
blacklistViolation: true # Notify when a banned mod is detected
verificationFailed: true # Notify when verification fails
# ---------------------------------------------------------------
# Mod Verification (Layer 3)
# Set to false to disable mod checking while keeping Layer 1-2 active
# ---------------------------------------------------------------
ModVerification: true
# ==================================================================
# Launcher/Client Verification (Layer 2)
# ==================================================================
launcherVerification:
enabled: false
kickMessage: "Please use an approved launcher to join this server"
allowUnknownClients: false
{
"blacklist": ["exampleCheatMod", "anotherBannedMod"]
}
["trustedPlayerName"]
Controls which launchers are allowed to connect when Layer 2 (launcher verification) is enabled. Each launcher can be individually toggled.
# Launcher/Client Whitelist
# enabled: true = allowed, enabled: false = blocked
prism:
enabled: false
name: "Prism Launcher"
multimc:
enabled: false
name: "MultiMC"
atlauncher:
enabled: false
name: "ATLauncher"
curseforge:
enabled: false
name: "CurseForge"
modrinth:
enabled: false
name: "Modrinth App"
gdlauncher:
enabled: false
name: "GDLauncher"
technic:
enabled: false
name: "Technic Launcher"
ftb:
enabled: false
name: "FTB App"
lunar:
enabled: false
name: "Lunar Client"
badlion:
enabled: false
name: "Badlion Client"
feather:
enabled: false
name: "Feather Client"
labymod:
enabled: false
name: "LabyMod"
tlauncher:
enabled: false
name: "TLauncher"
sklauncher:
enabled: false
name: "SKLauncher"
pojav:
enabled: false
name: "Pojav Launcher"
To allow a launcher, set its enabled to true. Players using a blocked or unrecognized launcher are kicked with the message configured in config.yml under launcherVerification.kickMessage.
ModSeeker can send real-time notifications to a Discord channel via webhooks.
Setup:
config.yml under discord.webhookUrldiscord.enabled to truediscord.eventsSupported Events:
| Event | Trigger |
|---|---|
playerJoin |
Player joins and begins verification |
modListReceived |
Player's mod list is successfully received and logged |
blacklistViolation |
A banned mod is detected — includes the mod name(s) |
verificationFailed |
Verification times out or fails for any reason |
All webhook requests run asynchronously on a dedicated thread to avoid impacting server performance.
All commands require the modseeker.use permission.
| Command | Description |
|---|---|
/modseeker seek mod <player> |
Request and display a player's mod list |
/modseeker status |
Show plugin status, config summary, and verification statistics |
/modseeker modblacklist add <modID> |
Add a mod to the blacklist |
/modseeker modblacklist remove <modID> |
Remove a mod from the blacklist |
/modseeker modblacklist show |
Display all blacklisted mods |
/modseeker whitelist add <player> |
Add a player to the whitelist |
/modseeker whitelist remove <player> |
Remove a player from the whitelist |
/modseeker whitelist show |
Display all whitelisted players |
/modseeker reload |
Reload all configuration files |
When a player joins the server:
modblacklist.jsonThis project is licensed under AGPL-3.0. See the LICENSE file for details.