{"id":104489,"date":"2026-06-06T03:28:40","date_gmt":"2026-06-06T00:28:40","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/modguard_mc\/"},"modified":"2026-06-06T03:28:40","modified_gmt":"2026-06-06T00:28:40","slug":"modguard_mc","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/modguard_mc\/","title":{"rendered":"ModGuard"},"content":{"rendered":"<p># ModGuard<\/p>\n<p>**Server-side mod and hack-client detection for Paper\/Spigot Minecraft servers. Detects disallowed client modifications and kicks, bans, logs, or restricts them based on your rules. No client-side companion mod required.**<\/p>\n<p>&#8212;<\/p>\n<p>## Requirements<\/p>\n<p>&#8211; Paper 1.21 or later<br \/>\n&#8211; Java 21 or later<br \/>\n&#8211; Optional: ViaVersion for cross-version client support<\/p>\n<p>&#8212;<\/p>\n<p>## Installation<\/p>\n<p>1. Drop `ModGuard.jar` into your server&#8217;s `plugins\/` folder<br \/>\n2. Restart the server<br \/>\n3. Edit `plugins\/ModGuard\/config.yml` and `plugins\/ModGuard\/messages.yml`<br \/>\n4. Run `\/mg reload` to apply changes<\/p>\n<p>&#8212;<\/p>\n<p> ## Configuration<\/p>\n<p> `config.yml`<\/p>\n<p>&#8220;`yaml<br \/>\nsettings:<br \/>\n  punishment: kick             # Default: kick, ban, log, disable<br \/>\n  log-detections: true         # Log to console<br \/>\n  notify-admins: true          # Alert players with modguard.notify<br \/>\n  scan-delay-ticks: 20<br \/>\n  rescan-interval-ticks: 1200<br \/>\n  bypass-uuids: []<\/p>\n<p>detection:<br \/>\n  brand: true<br \/>\n  channels: true<br \/>\n  sign-scan: true<\/p>\n<p>scan-protection:<br \/>\n  blackout: true               # Black screen during verification<br \/>\n  freeze-movement: true<br \/>\n  block-inputs: true<br \/>\n  prevent-damage: true<br \/>\n  prevent-falling: true<\/p>\n<p>minimap-control:<br \/>\n  enabled: false               # Restrict minimaps for ALL players<br \/>\n  xaero-minimap: true<br \/>\n  xaero-worldmap: true<br \/>\n  journeymap: true<br \/>\n  voxelmap: true<br \/>\n&#8220;`<\/p>\n<p> ## Adding a blocked mod<\/p>\n<p>### Minimum required:<\/p>\n<p>&#8220;`yaml<br \/>\nmods:<br \/>\n  cool-mod:<br \/>\n    name: &#8220;Cool Mod&#8221;<br \/>\n    punishment: kick<br \/>\n&#8220;`<\/p>\n<p>### Full options:<\/p>\n<p>&#8220;`yaml<br \/>\nmods:<br \/>\n  cool-mod:<br \/>\n    name: &#8220;Cool Mod&#8221;<br \/>\n    channels: [&#8220;cool-mod:&#8221;, &#8220;cool&#8221;]       # Channel patterns (wildcards supported)<br \/>\n    brands: [&#8220;coolclient&#8221;]                # Client brand strings<br \/>\n    keys:                                 # Translation keys from the mod&#8217;s lang file<br \/>\n      &#8211; &#8220;key.cool-mod.toggle&#8221;<br \/>\n      &#8211; &#8220;category.cool-mod&#8221;<br \/>\n    punishment: ban                       # kick \/ ban \/ log \/ disable<br \/>\n&#8220;`<\/p>\n<p>If you don&#8217;t specify `channels:` or `keys:`, sensible defaults are auto-generated from the mod&#8217;s ID.<\/p>\n<p> ## Punishment types<\/p>\n<p>| Type | Behavior |<br \/>\n|&#8212;&#8212;|&#8212;&#8212;&#8212;-|<br \/>\n| `kick` | Disconnect with a kick message |<br \/>\n| `ban` | Add to the server banlist |<br \/>\n| `log` | Record the detection, take no action |<br \/>\n| `disable` | Restrict the mod&#8217;s features (Xaero, JourneyMap, VoxelMap only) |<\/p>\n<p>When multiple mods are detected with different punishments, the harshest applies: `ban` > `kick` > `disable` > `log`.<\/p>\n<p> ### Finding translation keys for a mod<\/p>\n<p>Some mods need specific translation keys that can&#8217;t be auto-generated. To find them:<\/p>\n<p>1. Open the mod&#8217;s JAR file with any zip tool (7-Zip, WinRAR, or rename to `.zip`)<br \/>\n2. Navigate to `assets\/<modid>\/lang\/en_us.json`<br \/>\n3. Copy the keys from that file into your config under `keys:`<\/p>\n<p> `messages.yml`<\/p>\n<p>All player-facing text is customizable. Supports MiniMessage formatting and these placeholders:<\/p>\n<p>&#8211; `{player}` \u2014 player name<br \/>\n&#8211; `{mods}` \u2014 comma-separated detected mod names<br \/>\n&#8211; `{count}` \u2014 number of detected mods<br \/>\n&#8211; `{server}` \u2014 server name<\/p>\n<p>&#8220;`yaml<br \/>\nkick: &#8220;<red><b>ModGuard<\/b><\/red> <dark_gray>\u00bb<\/dark_gray> <white>Blocked: <yellow>{mods}<\/yellow><\/white>&#8221;<br \/>\nban: &#8220;<red>You have been banned for using: <yellow>{mods}<\/yellow><\/red>&#8221;<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p> ## Commands<\/p>\n<p>**All commands are aliased as `\/mg` or `\/modguard`.**<\/p>\n<p>| Command | Description |<br \/>\n|&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;-|<br \/>\n| `\/mg reload` | Reload config.yml and messages.yml |<br \/>\n| `\/mg list` | List all configured mods |<br \/>\n| `\/mg info <mod-id>` | Details about a specific mod entry |<br \/>\n| `\/mg add <id> <name> [punishment]` | Add a mod to the blocklist |<br \/>\n| `\/mg remove <id>` | Remove a mod from the blocklist |<br \/>\n| `\/mg check <player>` | Check a player |<br \/>\n| `\/mg scan <player>` | Force a full scan on a player |<\/p>\n<p>&#8212;<\/p>\n<p> ## Permissions<\/p>\n<p>| Permission | Default | Description |<br \/>\n|&#8212;&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;-|<br \/>\n| `modguard.admin` | op | Grants all permissions |<br \/>\n| `modguard.reload` | op | `\/mg reload` |<br \/>\n| `modguard.list` | op | `\/mg list` |<br \/>\n| `modguard.info` | op | `\/mg info` |<br \/>\n| `modguard.add` | op | `\/mg add` |<br \/>\n| `modguard.remove` | op | `\/mg remove` |<br \/>\n| `modguard.check` | op | `\/mg check` and `\/mg scan` |<br \/>\n| `modguard.notify` | false | Receive detection alerts |<br \/>\n| `modguard.bypass` | false | Skip ALL checks |<br \/>\n| `modguard.bypass.<modid>` | false | Skip checks for one specific mod |<\/p>\n<p>&#8212;<\/p>\n<p> ## Included default detections<\/p>\n<p>&#8211; Wurst Client (ban)<br \/>\n&#8211; Meteor Client (ban)<br \/>\n&#8211; Advanced XRay (ban)<br \/>\n&#8211; Baritone (kick)<br \/>\n&#8211; Freecam \u2014 hashalite and Zergatul (kick)<br \/>\n&#8211; Xaero&#8217;s Minimap &#038; World Map (disable \u2192 fair-play mode)<br \/>\n&#8211; JourneyMap (disable)<br \/>\n&#8211; VoxelMap (disable)<\/p>\n<p>Edit, remove, or add to any of these in `config.yml`.<\/p>\n<p>&#8212;<\/p>\n<p> ## What players experience<\/p>\n<p> ### Clean players<br \/>\nBrief &#8220;Verifying your client&#8230;&#8221; screen during the normal &#8220;Loading terrain&#8221; phase, then gameplay as usual. Most players won&#8217;t notice any extra wait.<\/p>\n<p> ### Players with blocked mods<br \/>\nDisconnected with the configured kick or ban message before they can load into the world.<\/p>\n<p> ### Players with &#8220;disable&#8221;-punished mods<br \/>\nJoin normally. Their minimap&#8217;s cave mode and entity radar are disabled; their JourneyMap\/VoxelMap are restricted. They see a chat message explaining what was restricted.<\/p>\n<p>&#8212;<\/p>\n<p> ## Troubleshooting<\/p>\n<p> ### A clean player got flagged<br \/>\nCheck the console logs for the `[DETECT]` line. If the detection looks wrong, report it with the full log output.<\/p>\n<p> ### A mod isn&#8217;t being detected<br \/>\nMost often the translation keys in your config don&#8217;t match what the mod actually uses. Pull the real keys from the mod&#8217;s JAR (`assets\/<modid>\/lang\/en_us.json`) and paste them into the config under that mod&#8217;s `keys:` list.<\/p>\n<p> ### &#8220;Scan timeout&#8221; appears in logs<br \/>\nThe player&#8217;s client didn&#8217;t respond to the verification check. This usually means they have a protection mod installed or there&#8217;s severe network latency. Decide whether to treat this as suspicious or allow it based on your server&#8217;s policy.<\/p>\n<p> ### Sign placement failed<br \/>\nA protection plugin (WorldGuard, etc.) is blocking block placement at the player&#8217;s location. Whitelist ModGuard in your region protection plugin, or add a bypass region near your spawn.<\/p>\n<p> ### Player has stuck blindness<br \/>\nShouldn&#8217;t happen but if it does: `\/effect clear <player>`.<\/p>\n<p> ### `\/mg reload` didn&#8217;t apply a change<br \/>\nThe `rescan-interval-ticks` setting requires a full server restart. Everything else reloads live.<\/p>\n<p>&#8212;<\/p>\n<p> ## Limitations to know about<\/p>\n<p>&#8211; Some mods can&#8217;t be detected. Pure texture-based X-ray mods and mods with no translation keys or plugin channels have no unique signature. No detection plugin can catch these without a client-side helper.<br \/>\n&#8211; Xaero&#8217;s World Map can still be opened with M even when &#8220;disable&#8221; is set \u2014 only cave mode and radar are restricted. This is a limitation of Xaero&#8217;s compliance protocol.<br \/>\n&#8211; Version mismatches through ViaVersion can occasionally affect detection accuracy. Most modern versions (1.20+) work fine.<br \/>\n&#8211; Detection \u2260 cheating. A player having Freecam installed doesn&#8217;t mean they used it. Consider using `log` punishment for ambiguous mods during initial rollout so you can see what your players run before deciding on stricter action.<\/p>\n<p>&#8212;<\/p>\n<p> ## Tips<\/p>\n<p>&#8211; Test with an alt account before deploying. Join with various mods and watch the logs.<br \/>\n&#8211; Start with `log` punishment for new mod entries to see detection patterns before enabling `kick`\/`ban`.<br \/>\n&#8211; Watch the console \u2014 `[DETECT]` lines show exactly what was caught and why.<br \/>\n&#8211; Keep keys updated \u2014 mod authors occasionally rename translation keys between versions. Re-pull keys from the JAR if detection stops working for a previously-caught mod.<\/p>\n<p>**Thanks for the support!**<br \/>\n_**Developed by waffleboiiiiii**_<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This plugin allows you to blacklist mods from clients before they join your server to keep a fair and equal play experience.<\/p>\n","protected":false},"featured_media":0,"template":"","meta":{"_minecraft_slug":"modguard_mc","_minecraft_project_id":"XCi4EPjq","_minecraft_author":"waffleboiiiiii","_minecraft_license":"LicenseRef-All-Rights-Reserved","_minecraft_downloads":5,"_minecraft_follows":1,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"modguard_mc.zip","_minecraft_size_bytes":44172,"_minecraft_version_count":1,"_minecraft_updated_at":"2026-05-16T12:26:01.550093Z","_minecraft_date_created":"2026-04-28T20:32:03.538435Z","_minecraft_date_modified":"2026-04-16T10:25:30.673821Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/modguard_mc","_minecraft_icon_attachment_id":0,"_minecraft_imported_at":"2026-06-06T00:28:41+00:00","_minecraft_import_hash":"e6d51d35b8db545eeec21da989c5b0d2","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[124,89,126,127,128,129,123,92],"mod_loader":[130,132,133,134],"minecraft_version":[62,37,40,41,73,74,38,78,79,80,81,82],"class_list":["post-104489","mod","type-mod","status-publish","hentry","mod_category-bukkit","mod_category-game-mechanics","mod_category-management","mod_category-paper","mod_category-purpur","mod_category-spigot","mod_category-technology","mod_category-utility","mod_loader-bukkit","mod_loader-paper","mod_loader-purpur","mod_loader-spigot","minecraft_version-1-21","minecraft_version-1-21-1","minecraft_version-1-21-10","minecraft_version-1-21-11","minecraft_version-1-21-2","minecraft_version-1-21-3","minecraft_version-1-21-4","minecraft_version-1-21-5","minecraft_version-1-21-6","minecraft_version-1-21-7","minecraft_version-1-21-8","minecraft_version-1-21-9"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ModGuard - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/modguard_mc\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ModGuard - Minecraft\" \/>\n<meta property=\"og:description\" content=\"This plugin allows you to blacklist mods from clients before they join your server to keep a fair and equal play experience.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/modguard_mc\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/modguard_mc\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/modguard_mc\\\/\",\"name\":\"ModGuard - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"datePublished\":\"2026-06-06T00:28:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/modguard_mc\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/modguard_mc\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/modguard_mc\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"ModGuard\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ModGuard - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/modguard_mc\/","og_locale":"en_US","og_type":"article","og_title":"ModGuard - Minecraft","og_description":"This plugin allows you to blacklist mods from clients before they join your server to keep a fair and equal play experience.","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/modguard_mc\/","og_site_name":"Minecraft","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/modguard_mc\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/modguard_mc\/","name":"ModGuard - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"datePublished":"2026-06-06T00:28:40+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/modguard_mc\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/modguard_mc\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/modguard_mc\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"ModGuard"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/104489","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=104489"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=104489"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=104489"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=104489"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}