{"id":125756,"date":"2026-06-07T12:18:34","date_gmt":"2026-06-07T09:18:34","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/protectcord\/"},"modified":"2026-06-07T12:18:34","modified_gmt":"2026-06-07T09:18:34","slug":"protectcord","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/protectcord\/","title":{"rendered":"Protectcord"},"content":{"rendered":"<p># ProtectCord \u2014 Advanced IP Protection &#038; Moderation<\/p>\n<p>**Block VPNs, proxies, bots, and malicious connections with real-time IP intelligence. Built-in moderation, AutoMod chat filtering, alt detection, and MySQL multi-server sync \u2014 all in one lightweight plugin.**<\/p>\n<p>ProtectCord connects every joining player against a live threat intelligence database before they ever reach your server. Combined with a full moderation suite, it&#8217;s the only tool you need to keep your server clean and your community safe.<\/p>\n<p>## \u2728 Milestones<\/p>\n<p>&#8211; **2,300+** downloads on Modrinth<br \/>\n&#8211; **100,000+** ProtectCord API requests served<br \/>\n&#8211; **46** unique Minecraft servers running ProtectCord concurrently<br \/>\n&#8211; **203** concurrent protected players<br \/>\n&#8211; **1,000+** unique Discord users verified<br \/>\n&#8211; **3,000+** unique API requests per day<br \/>\n&#8211; **555** Discord Guilds using @ProtectCord#0253<br \/>\n&#8211; Watching over **100,000+** Discord users<\/p>\n<p>**bStats:** https:\/\/bstats.org\/plugin\/bukkit\/Protectcord\/24623<\/p>\n<p>&#8212;<\/p>\n<p>## \u2728 Key Features<\/p>\n<p>### IP Protection<br \/>\n&#8211; \ud83d\udee1\ufe0f **Real-Time IP Verification** \u2014 Every connection checked against live threat intelligence<br \/>\n&#8211; \ud83d\udeab **VPN, Proxy &#038; Tor Blocking** \u2014 Stop ban evaders and alt accounts instantly<br \/>\n&#8211; \ud83c\udfe2 **Datacenter IP Detection** \u2014 Flag and block hosting provider IPs used for bots<br \/>\n&#8211; \u26a0\ufe0f **Risk-Based Blocking** \u2014 Configurable threat levels: UNKNOWN \u2192 LOW \u2192 MEDIUM \u2192 HIGH \u2192 CRITICAL<br \/>\n&#8211; \ud83c\udf0d **Geo-Blocking** \u2014 Block or whitelist entire countries using ISO codes<br \/>\n&#8211; \ud83d\udc65 **Accounts-Per-IP Limiting** \u2014 Cap simultaneous connections from a single IP<br \/>\n&#8211; \u2705 **Smart Whitelist System** \u2014 Bypass protection by player name, UUID, or IP<\/p>\n<p>### Moderation Suite<br \/>\n&#8211; \u26a1 **Progressive Warning System** \u2014 Configurable auto-escalation from warn \u2192 kick \u2192 ban<br \/>\n&#8211; \u23f1\ufe0f **Temp Bans &#038; Temp Mutes** \u2014 Time-limited punishments with human-readable durations (`1h`, `7d`, `30d`)<br \/>\n&#8211; \ud83d\udd07 **Mute System** \u2014 Persistent mutes with reasons, issuer tracking, and auto-expiry<br \/>\n&#8211; \ud83d\udd0d **Alt Account Detection** \u2014 Find alts by shared IP (`\/pc alts <player>`) \u2014 names only, never raw IPs<br \/>\n&#8211; \ud83d\udccb **Warning History** \u2014 Full timestamped warning logs for any player, online or offline<br \/>\n&#8211; \ud83e\uddf9 **Clear &#038; Remove Warnings** \u2014 Remove individual warnings by index or clear all at once<br \/>\n&#8211; \ud83d\uddc4\ufe0f **Audit Log** \u2014 Automatic log of all moderation actions<br \/>\n&#8211; \ud83d\udcbe **Offline Player Support** \u2014 Warn, ban, mute, or check players who aren&#8217;t online<\/p>\n<p>### AutoMod (Chat Filtering)<br \/>\n&#8211; \ud83d\udd17 **Anti-Link** \u2014 Block URLs with domain whitelist support<br \/>\n&#8211; \ud83d\udce2 **Anti-Advertising** \u2014 Block server IPs and Discord invites<br \/>\n&#8211; \ud83d\udcac **Anti-Spam** \u2014 Rate limiting with configurable message window and duplicate detection<br \/>\n&#8211; \ud83e\udd2c **Anti-Swear** \u2014 Custom word blacklist with regex support and per-word exceptions<br \/>\n&#8211; \ud83d\udd20 **Anti-Caps** \u2014 Configurable caps threshold by percentage<br \/>\n&#8211; \ud83c\udf0a **Anti-Flood** \u2014 Block repeated character flooding<br \/>\n&#8211; \ud83d\udd23 **Anti-Unicode\/Zalgo** \u2014 Block invisible text and character abuse<br \/>\n&#8211; \u2699\ufe0f **Per-Rule Actions** \u2014 Each rule independently set to: `BLOCK`, `WARN`, `KICK`, `MUTE`, or `TEMPMUTE`<\/p>\n<p>### Storage &#038; Multi-Server<br \/>\n&#8211; \ud83d\uddc3\ufe0f **YAML Flatfile Storage** \u2014 Zero setup, works out of the box<br \/>\n&#8211; \ud83d\udc2c **MySQL Storage** \u2014 Full MySQL backend with HikariCP connection pooling<br \/>\n&#8211; \ud83c\udf10 **Multi-Server Sync** \u2014 Share one MySQL database across your entire network; bans and mutes are enforced on every server<br \/>\n&#8211; \ud83d\udd04 **Live Migration** \u2014 Migrate between YAML and MySQL at any time with `\/pc migrate`<br \/>\n&#8211; \ud83e\uddf9 **Data Purge** \u2014 Clean up old warnings, bans, mutes, IP logs, audit entries, and inactive players with `\/pc purge`<\/p>\n<p>### Staff Tools<br \/>\n&#8211; \ud83d\udce3 **In-Game Staff Alerts** \u2014 Real-time notifications for kicks, bans, warns, mutes, automod actions, and more<br \/>\n&#8211; \ud83c\udfad **IP Masking** \u2014 Show staff masked IPs (`192.168.1.*`) until they earn the `protectcord.ip.full` permission<br \/>\n&#8211; \ud83d\udcdd **Player Reports** \u2014 Players submit reports with `\/report`; staff are notified in-game and via Discord<br \/>\n&#8211; \ud83d\udcca **API Stats** \u2014 Check usage, rate limits, and API health with `\/pc stats`<br \/>\n&#8211; \ud83d\udd0e **Manual IP Check** \u2014 `\/pc check <player|ip>` for on-demand threat analysis<\/p>\n<p>### Platform &#038; Integration<br \/>\n&#8211; \ud83c\udf10 **6-Platform Support** \u2014 Paper, Spigot, Folia, BungeeCord, Velocity, and Forge<br \/>\n&#8211; \ud83d\udce2 **Discord Webhooks** \u2014 Rich embeds with country flag, city, VPN\/proxy\/tor\/risk fields, per-event control, rate limiting, and retry logic<br \/>\n&#8211; \ud83d\udce3 **Moderation Alert Webhooks** \u2014 Separate webhook channel for ban\/warn\/mute\/kick staff events<br \/>\n&#8211; \u26a1 **100% Async** \u2014 All IP checks are non-blocking; no main-thread impact<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83c\udfae Supported Platforms<\/p>\n<p>| Platform | Versions | Notes |<br \/>\n|&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;-|&#8212;&#8212;-|<br \/>\n| **Paper** | 1.13 \u2013 1.21+ | Recommended for standalone servers |<br \/>\n| **Spigot** | 1.8.8 \u2013 1.21+ | Full legacy support |<br \/>\n| **Folia** | 1.19+ | Multithreaded scheduler support |<br \/>\n| **Velocity** | 3.0+ | Recommended for proxy networks |<br \/>\n| **BungeeCord** | 1.8.8 \u2013 1.21+ | Waterfall compatible |<br \/>\n| **Forge** | 1.20.1+ | Server-side only; checks at post-login |<\/p>\n<p>> **Network tip:** Install only on your proxy (Velocity\/BungeeCord) to protect all backend servers with a single API key.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udce5 Quick Setup<\/p>\n<p>### 1\ufe0f\u20e3 Get Your Free API Key<\/p>\n<p>1. Visit **protectcord.com**<br \/>\n2. Create a free account<br \/>\n3. Generate an API key from **Dashboard \u2192 API Keys**<br \/>\n4. **Free tier includes 32 requests\/minute** \u2014 enough for most servers<\/p>\n<p>### 2\ufe0f\u20e3 Install the Plugin<\/p>\n<p>1. Download the correct JAR for your platform from Modrinth<br \/>\n2. Drop it into your `plugins\/` folder (or `mods\/` for Forge)<br \/>\n3. Start your server \u2014 config generates automatically<br \/>\n4. Add your API key to `plugins\/ProtectCord\/config.yml`<br \/>\n5. Run `\/protectcord reload` or restart<br \/>\n6. \u2705 Your server is now protected<\/p>\n<p>&#8212;<\/p>\n<p>## \u2699\ufe0f Full Configuration Reference<\/p>\n<p>The config file is auto-generated at `plugins\/ProtectCord\/config.yml` on first run. Every option is explained below.<\/p>\n<p>> Velocity uses `config.toml` (same structure, TOML syntax). Forge uses `config\/protectcord-forge.toml`.<\/p>\n<p>&#8212;<\/p>\n<p>### API Settings<\/p>\n<p>&#8220;`yaml<br \/>\n# Your ProtectCord API key \u2014 get one free at https:\/\/protectcord.com\/dashboard\/api-keys<br \/>\napi-key: &#8220;YOUR_API_KEY_HERE&#8221;<\/p>\n<p># How long to wait (ms) for the API to respond before giving up<br \/>\napi-timeout:<br \/>\n  connect: 15000   # Time to establish the connection (default: 15s)<br \/>\n  read: 15000      # Time to wait for a response after connecting (default: 15s)<\/p>\n<p># Automatic retry for failed\/timed-out API requests<br \/>\napi-retry:<br \/>\n  max-attempts: 3      # Max number of retries before allowing\/denying the player (1\u20135)<br \/>\n  initial-delay: 1000  # Wait this long before the first retry (ms)<br \/>\n  max-delay: 5000      # Never wait longer than this between retries (ms)<br \/>\n  multiplier: 2.0      # Multiply delay by this factor each retry (exponential backoff)<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>### Server Identity<\/p>\n<p>&#8220;`yaml<br \/>\n# Used for player tracking and multi-server MySQL identification<br \/>\nserver:<br \/>\n  name: &#8220;My Server&#8221;   # Friendly name \u2014 stored in MySQL as server_id on every row<br \/>\n  ip: &#8220;&#8221;              # Your public IP \u2014 leave blank to auto-detect<br \/>\n  port: 25565         # Your server port<br \/>\n  type: &#8220;spigot&#8221;      # Platform: paper \/ spigot \/ bungeecord \/ velocity \/ forge \/ folia<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>### Player Tracking<\/p>\n<p>&#8220;`yaml<br \/>\n# UUID-based tracking via the ProtectCord API<br \/>\nplayer-tracking:<br \/>\n  enabled: true<br \/>\n  block-flagged-players: true    # Block players flagged as malicious by the API<br \/>\n  block-inactive-players: false  # Block players whose accounts are marked inactive<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>### IP Protection<\/p>\n<p>&#8220;`yaml<br \/>\n# Master switch \u2014 set to false to disable all IP checking (not recommended)<br \/>\nenable-ip-check: true<\/p>\n<p># Choose which connection types to block<br \/>\nblock-vpn: true         # Virtual private networks (ban evaders, alt accounts)<br \/>\nblock-proxy: true       # HTTP\/SOCKS proxies and anonymizers<br \/>\nblock-tor: true         # Tor exit nodes<br \/>\nblock-datacenter: true  # Hosting provider IPs (common source of bots)<br \/>\nblock-bogon: true       # Invalid, reserved, or unroutable IP ranges<\/p>\n<p># Risk-based blocking (optional, runs in addition to the flags above)<br \/>\n# Enable this to block by overall threat score instead of (or as well as) individual flags<br \/>\nenable-risk-level-blocking: false<br \/>\nblocked-risk-level: &#8220;HIGH&#8221;<br \/>\n# Levels (each blocks itself and everything above it):<br \/>\n#   LOW      \u2014 blocks LOW, MEDIUM, HIGH, CRITICAL  (very strict)<br \/>\n#   MEDIUM   \u2014 blocks MEDIUM, HIGH, CRITICAL<br \/>\n#   HIGH     \u2014 blocks HIGH, CRITICAL               (recommended if enabling)<br \/>\n#   CRITICAL \u2014 blocks CRITICAL only               (very lenient)<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>### Geographic Blocking<\/p>\n<p>&#8220;`yaml<br \/>\ngeo-blocking:<br \/>\n  enabled: false<br \/>\n  mode: &#8220;blacklist&#8221;   # &#8220;blacklist&#8221; = block listed countries<br \/>\n                      # &#8220;whitelist&#8221; = ONLY allow listed countries (everyone else blocked)<br \/>\n  countries:          # ISO 3166-1 alpha-2 country codes<br \/>\n    &#8211; &#8220;CN&#8221;<br \/>\n    &#8211; &#8220;RU&#8221;<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>### Accounts Per IP<\/p>\n<p>&#8220;`yaml<br \/>\n# Limit how many Minecraft accounts can connect simultaneously from the same IP<br \/>\naccount-per-ip-limit:<br \/>\n  enabled: false<br \/>\n  max-accounts: 3          # Maximum simultaneous connections from one IP<br \/>\n  enforcement: &#8220;BLOCK&#8221;     # &#8220;BLOCK&#8221;       \u2014 deny the new connection<br \/>\n                           # &#8220;KICK_OLDEST&#8221; \u2014 kick the oldest session to make room<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>### Discord Webhook (Connection Events)<\/p>\n<p>&#8220;`yaml<br \/>\ndiscord-webhook:<br \/>\n  enabled: false<br \/>\n  url: &#8220;&#8221;             # Paste your Discord webhook URL here<br \/>\n  timeout: 10000      # HTTP timeout for sending the webhook (ms)<\/p>\n<p>  # Retry failed webhook deliveries<br \/>\n  retry:<br \/>\n    enabled: true<br \/>\n    max-attempts: 3       # How many times to retry a failed delivery (1\u201310)<br \/>\n    initial-delay: 1000   # Wait before first retry (ms)<br \/>\n    max-delay: 10000      # Maximum wait between retries (ms)<br \/>\n    multiplier: 2.0       # Exponential backoff multiplier<\/p>\n<p>  # Rate limiting \u2014 Discord allows ~5 requests per 2 seconds per webhook<br \/>\n  rate-limit:<br \/>\n    max-per-second: 2   # Requests sent per second (1\u20135)<br \/>\n    burst-limit: 5      # Maximum burst before throttling kicks in<\/p>\n<p>  # Which events send a webhook message<br \/>\n  events:<br \/>\n    denied: true          # Player was blocked by ProtectCord<br \/>\n    accepted: false       # Player passed all checks and joined (high volume \u2014 off by default)<br \/>\n    whitelisted: true     # A whitelisted player joined<br \/>\n    error: true           # An API error occurred during a check<\/p>\n<p>  # Which data fields appear in the embed<br \/>\n  data-fields:<br \/>\n    show-country: true<br \/>\n    show-country-flag: true   # \ud83c\uddfa\ud83c\uddf8 flag emoji next to country name<br \/>\n    show-city: true<br \/>\n    show-vpn: true<br \/>\n    show-proxy: true<br \/>\n    show-datacenter: true<br \/>\n    show-tor: true<br \/>\n    show-mobile: true<br \/>\n    show-satellite: true<br \/>\n    show-crawler: true<br \/>\n    show-bogon: true<br \/>\n    show-risk-level: true<br \/>\n    show-abuser: true<br \/>\n    show-blacklisted: true<br \/>\n    show-company: true        # ISP \/ hosting provider name<br \/>\n    show-company-risk: true<\/p>\n<p>  # Customise the appearance of each embed type<br \/>\n  embeds:<br \/>\n    denied:<br \/>\n      title: &#8220;Connection Denied&#8221;<br \/>\n      emoji: &#8220;x&#8221;<br \/>\n      color: 15158332      # Decimal RGB \u2014 red<br \/>\n      footer: &#8220;&#8221;           # Optional footer text<br \/>\n      thumbnail-url: &#8220;&#8221;    # Optional image in top-right corner<br \/>\n    accepted:<br \/>\n      title: &#8220;Connection Accepted&#8221;<br \/>\n      emoji: &#8220;white_check_mark&#8221;<br \/>\n      color: 3066993       # Green<br \/>\n      footer: &#8220;&#8221;<br \/>\n      thumbnail-url: &#8220;&#8221;<br \/>\n    whitelisted:<br \/>\n      title: &#8220;Whitelisted Player Joined&#8221;<br \/>\n      emoji: &#8220;white_circle&#8221;<br \/>\n      color: 16776960      # Yellow<br \/>\n      footer: &#8220;&#8221;<br \/>\n      thumbnail-url: &#8220;&#8221;<br \/>\n    error:<br \/>\n      title: &#8220;API Error&#8221;<br \/>\n      emoji: &#8220;warning&#8221;<br \/>\n      color: 15105570      # Orange<br \/>\n      footer: &#8220;&#8221;<br \/>\n      thumbnail-url: &#8220;&#8221;<\/p>\n<p>  # Advanced webhook behaviour<br \/>\n  advanced:<br \/>\n    validate-url-on-startup: true   # Send a test ping when the plugin loads<br \/>\n    log-failures: true              # Print failed deliveries to console<br \/>\n    log-retries: true               # Print retry attempts to console<br \/>\n    queue-size: 100                 # Max webhooks queued before dropping oldest<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>### Staff Alerts<\/p>\n<p>&#8220;`yaml<br \/>\n# In-game and Discord notifications for moderation actions<br \/>\nalerts:<br \/>\n  enabled: true<\/p>\n<p>  # Broadcast to online staff with the protectcord.alerts permission<br \/>\n  in-game:<br \/>\n    enabled: true<\/p>\n<p>  # Separate webhook channel just for mod-team events<br \/>\n  discord-webhook:<br \/>\n    enabled: false<br \/>\n    url: &#8220;&#8221;<\/p>\n<p>  # Fine-tune exactly which actions trigger an alert<br \/>\n  events:<br \/>\n    kick: true<br \/>\n    ban: true<br \/>\n    unban: true<br \/>\n    warn: true<br \/>\n    clear-warnings: true<br \/>\n    remove-warning: true<br \/>\n    automod: true<br \/>\n    mute: true<br \/>\n    unmute: true<br \/>\n    tempmute: true<br \/>\n    tempban: true<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>### Warning System<\/p>\n<p>&#8220;`yaml<br \/>\nwarnings:<\/p>\n<p>  # Automatically take action when a player accumulates enough warnings<br \/>\n  auto-action:<br \/>\n    enabled: true<br \/>\n    action: &#8220;BAN&#8221;      # &#8220;BAN&#8221; \u2014 permanent ban | &#8220;KICK&#8221; \u2014 kick only<br \/>\n    threshold: 3       # Number of warnings before auto-action fires<\/p>\n<p>  # Kick the player with a &#8220;final warning&#8221; message at a lower threshold<br \/>\n  kick-on-warn:<br \/>\n    enabled: true<br \/>\n    threshold: 2       # Kick at this warning count (before the ban threshold)<\/p>\n<p>  # Warnings older than this are not counted toward thresholds<br \/>\n  expiry:<br \/>\n    duration: &#8220;0&#8221;      # &#8220;0&#8221; = warnings never expire<br \/>\n                       # Examples: &#8220;7d&#8221;, &#8220;30d&#8221;, &#8220;90d&#8221;<\/p>\n<p>  # Escalation tiers \u2014 overrides auto-action when enabled<br \/>\n  # Each tier fires when warning count reaches `count`<br \/>\n  escalation:<br \/>\n    enabled: false<br \/>\n    tiers:<br \/>\n      &#8211; count: 1<br \/>\n        action: &#8220;WARN&#8221;<br \/>\n      &#8211; count: 2<br \/>\n        action: &#8220;TEMPMUTE&#8221;<br \/>\n        duration: &#8220;1h&#8221;<br \/>\n      &#8211; count: 3<br \/>\n        action: &#8220;TEMPBAN&#8221;<br \/>\n        duration: &#8220;1d&#8221;<br \/>\n      &#8211; count: 4<br \/>\n        action: &#8220;TEMPBAN&#8221;<br \/>\n        duration: &#8220;7d&#8221;<br \/>\n      &#8211; count: 5<br \/>\n        action: &#8220;BAN&#8221;<br \/>\n# Available actions: WARN, KICK, MUTE, TEMPMUTE, TEMPBAN, BAN<br \/>\n# Duration format: 30s, 10m, 1h, 7d, 30d<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>### AutoMod (Chat Filtering)<\/p>\n<p>&#8220;`yaml<br \/>\nautomod:<br \/>\n  enabled: false           # Master switch \u2014 must be true for any rules to run<\/p>\n<p>  # Blocked actions apply to the message that triggered the rule.<br \/>\n  # Available actions for all rules: BLOCK, WARN, KICK, MUTE, TEMPMUTE<br \/>\n  # TEMPMUTE duration is set by tempmute-duration below.<br \/>\n  tempmute-duration: &#8220;10m&#8221;<\/p>\n<p>  # Block links in chat<br \/>\n  anti-link:<br \/>\n    enabled: true<br \/>\n    action: &#8220;BLOCK&#8221;<br \/>\n    whitelisted-domains:   # These domains are allowed through<br \/>\n      &#8211; &#8220;yourdomain.com&#8221;<br \/>\n      &#8211; &#8220;discord.gg\/yourserver&#8221;<\/p>\n<p>  # Block spam (too many messages too fast, or too many duplicates)<br \/>\n  anti-spam:<br \/>\n    enabled: true<br \/>\n    action: &#8220;BLOCK&#8221;<br \/>\n    max-messages: 5          # Max messages allowed within the time window<br \/>\n    time-window-seconds: 10  # Rolling window size in seconds<br \/>\n    max-duplicates: 3        # Max identical messages allowed in the window<\/p>\n<p>  # Block server IPs and Discord invite links<br \/>\n  anti-advertising:<br \/>\n    enabled: true<br \/>\n    action: &#8220;BLOCK&#8221;<br \/>\n    block-server-ips: true       # Blocks patterns like &#8220;play.someserver.net&#8221;<br \/>\n    block-discord-invites: true  # Blocks discord.gg\/&#8230; links<br \/>\n    whitelisted-domains:<br \/>\n      &#8211; &#8220;yourdomain.com&#8221;<br \/>\n      &#8211; &#8220;discord.gg\/yourserver&#8221;<\/p>\n<p>  # Block profanity and custom banned words<br \/>\n  anti-swear:<br \/>\n    enabled: false<br \/>\n    action: &#8220;BLOCK&#8221;<br \/>\n    use-regex: false          # Set true to treat blocked-words entries as regex patterns<br \/>\n    blocked-words:<br \/>\n      &#8211; &#8220;badword1&#8221;<br \/>\n      &#8211; &#8220;badword2&#8221;<br \/>\n    whitelisted-words:        # These words are never blocked even if they match a pattern<br \/>\n      &#8211; &#8220;scrapbook&#8221;<\/p>\n<p>  # Block excessive CAPS LOCK<br \/>\n  anti-caps:<br \/>\n    enabled: false<br \/>\n    action: &#8220;BLOCK&#8221;<br \/>\n    min-message-length: 5      # Ignore short messages (e.g. &#8220;OK&#8221;, &#8220;YES&#8221;)<br \/>\n    threshold-percent: 70.0    # Block if more than this % of letters are uppercase<\/p>\n<p>  # Block character flooding (aaaaaaaaaa, !!!!!!!!!)<br \/>\n  anti-flood:<br \/>\n    enabled: false<br \/>\n    action: &#8220;BLOCK&#8221;<br \/>\n    max-repeated-chars: 5   # Consecutive identical characters before blocking<br \/>\n    min-message-length: 3   # Ignore very short messages<\/p>\n<p>  # Block Unicode abuse and Zalgo text<br \/>\n  anti-unicode:<br \/>\n    enabled: false<br \/>\n    action: &#8220;BLOCK&#8221;<br \/>\n    block-zalgo: true           # Block combining diacritical mark stacking (z\u034e\u0324\u0319\u0318\u032d\u0347\u0360a\u0335\u0354\u0353l\u0321\u0354\u034d\u0326\u035a\u0359g\u0322\u0355\u0332\u0354\u0354\u0355\u00f6\u0325\u0301)<br \/>\n    max-unicode-percent: 50.0   # Block if more than this % of chars are non-ASCII<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>### Player Reports<\/p>\n<p>&#8220;`yaml<br \/>\nreports:<br \/>\n  enabled: true<br \/>\n  cooldown-seconds: 60       # How long a player must wait between reports<\/p>\n<p>  # Post reports to a Discord channel<br \/>\n  discord-webhook:<br \/>\n    enabled: false<br \/>\n    url: &#8220;&#8221;<br \/>\n    mention-role-id: &#8220;&#8221;      # Optional \u2014 ping a role when a report comes in (e.g. &#8220;123456789&#8221;)<\/p>\n<p>  notify-staff: true         # Broadcast reports to online staff with protectcord.alerts<\/p>\n<p>  predefined-reasons: []     # Optional list of reasons shown in tab-complete<br \/>\n                             # Example: [&#8220;Hacking&#8221;, &#8220;Spam&#8221;, &#8220;Harassment&#8221;, &#8220;Inappropriate name&#8221;]<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>### Database Storage<\/p>\n<p>&#8220;`yaml<br \/>\ndatabase:<br \/>\n  type: &#8220;YAML&#8221;   # &#8220;YAML&#8221; \u2014 flatfile storage (default, no setup needed)<br \/>\n                 # &#8220;MYSQL&#8221; \u2014 MySQL\/MariaDB (required for multi-server sync)<br \/>\n  mysql:<br \/>\n    host: &#8220;localhost&#8221;<br \/>\n    port: 3306<br \/>\n    database: &#8220;protectcord&#8221;   # Database name (must exist before starting)<br \/>\n    username: &#8220;root&#8221;<br \/>\n    password: &#8220;&#8221;<br \/>\n    table-prefix: &#8220;pc_&#8221;       # All tables prefixed with this (e.g. pc_warnings, pc_bans)<\/p>\n<p>    # HikariCP connection pool settings<br \/>\n    pool:<br \/>\n      max-pool-size: 10         # Maximum simultaneous database connections<br \/>\n      min-idle: 2               # Minimum idle connections kept open<br \/>\n      connection-timeout: 30000 # Max wait for a connection from the pool (ms)<br \/>\n      idle-timeout: 600000      # Close idle connections after this long (ms)<br \/>\n      max-lifetime: 1800000     # Recycle connections after this long (ms)<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>### IP Masking<\/p>\n<p>&#8220;`yaml<br \/>\n# Control how IP addresses appear to staff in command output<br \/>\n# Staff with the protectcord.ip.full permission always see the full IP<br \/>\nip-masking:<br \/>\n  enabled: false<br \/>\n  mask-format: &#8220;last-octet&#8221;<br \/>\n  # &#8220;last-octet&#8221;      \u2192 192.168.1.*       (hides last segment)<br \/>\n  # &#8220;last-two-octets&#8221; \u2192 192.168.*.*       (hides last two segments)<br \/>\n  # &#8220;full-mask&#8221;       \u2192 *.*.*.*           (hides everything)<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>### Custom Messages<\/p>\n<p>&#8220;`yaml<br \/>\n# All messages support &#038; colour codes. Placeholders listed per message.<br \/>\nmessages:<\/p>\n<p>  # Shown to players blocked by IP check \u2014 {reason}, {risk}<br \/>\n  connection-denied: |<br \/>\n    &#038;c&#038;lConnection Denied<br \/>\n    &#038;7Your connection has been blocked by ProtectCord.<br \/>\n    &#038;7Reason: &#038;c{reason}<br \/>\n    &#038;7Risk Level: &#038;c{risk}<\/p>\n<p>    &#038;7If you believe this is an error, please contact server staff.<\/p>\n<p>  # Shown when the API is unreachable during a check<br \/>\n  api-error: |<br \/>\n    &#038;c&#038;lTemporary Connection Issue<br \/>\n    &#038;7We&#8217;re unable to verify your connection at the moment.<br \/>\n    &#038;7Please try again later.<\/p>\n<p>  # Shown to a player blocked by the accounts-per-IP limit \u2014 {max}, {current}<br \/>\n  account-limit-reached: |<br \/>\n    &#038;c&#038;lConnection Limit Reached<br \/>\n    &#038;7Maximum accounts per IP: &#038;c{max}<br \/>\n    &#038;7Current connections from your IP: &#038;c{current}<\/p>\n<p>    &#038;7Please disconnect another account before connecting.<\/p>\n<p>  # Shown to the oldest session kicked by KICK_OLDEST enforcement \u2014 {max}<br \/>\n  account-limit-kicked: |<br \/>\n    &#038;c&#038;lYou have been disconnected<br \/>\n    &#038;7A new account connected from your IP address.<br \/>\n    &#038;7Maximum accounts per IP: &#038;c{max}<\/p>\n<p>  # Shown when player-tracking blocks a flagged player \u2014 {flags}<br \/>\n  player-flagged: |<br \/>\n    &#038;c&#038;lConnection Denied<br \/>\n    &#038;7Your account has been flagged.<br \/>\n    &#038;7Flags: &#038;c{flags}<br \/>\n    &#038;7If you believe this is an error, please contact server staff.<\/p>\n<p>  # Shown when player-tracking blocks an inactive player<br \/>\n  player-inactive: |<br \/>\n    &#038;c&#038;lConnection Denied<br \/>\n    &#038;7Your account has been deactivated.<br \/>\n    &#038;7Please contact server staff.<\/p>\n<p>  # Shown in chat to whitelisted players who bypass the IP check<br \/>\n  whitelist-bypass: &#8220;&#038;aYou have bypassed IP verification.&#8221;<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83c\udfaf Commands &#038; Permissions<\/p>\n<p>**Aliases:** `\/pc`, `\/protect`<\/p>\n<p>### Core Commands<\/p>\n<p>| Command | Description |<br \/>\n|&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;-|<br \/>\n| `\/pc reload` | Reload config, whitelist, and storage |<br \/>\n| `\/pc stats` | View API usage and rate limits |<br \/>\n| `\/pc check <player|ip>` | On-demand IP threat analysis |<br \/>\n| `\/pc version` | Plugin version and platform info |<br \/>\n| `\/pc health` | API connectivity health check |<br \/>\n| `\/pc alerts` | Toggle in-game staff alerts on\/off |<\/p>\n<p>### Whitelist Commands<\/p>\n<p>| Command | Description |<br \/>\n|&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;-|<br \/>\n| `\/pc whitelist add player <name>` | Whitelist a player by name |<br \/>\n| `\/pc whitelist add uuid <uuid>` | Whitelist by UUID |<br \/>\n| `\/pc whitelist add ip <\/p>\n<address>` | Whitelist an IP address |<br \/>\n| `\/pc whitelist remove <type> <value>` | Remove whitelist entry |<br \/>\n| `\/pc list` | List all whitelisted entries |<\/p>\n<p>### Moderation Commands<\/p>\n<p>| Command | Description |<br \/>\n|&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;-|<br \/>\n| `\/pc kick <player> [reason]` | Kick an online player with IP info |<br \/>\n| `\/pc warn <player> <reason>` | Issue a warning (auto-escalates) |<br \/>\n| `\/pc warnings <player>` | View full warning history |<br \/>\n| `\/pc clear warning <player>` | Clear all warnings |<br \/>\n| `\/pc clear ban <player>` | Clear a ban record |<br \/>\n| `\/pc remove warning <player> [#]` | Remove a specific warning by index |<br \/>\n| `\/pc ban <player> <reason>` | Permanently ban a player |<br \/>\n| `\/pc tempban <player> <duration> <reason>` | Temp-ban (`1h`, `7d`, `30d`) |<br \/>\n| `\/pc unban <player>` | Unban a player |<br \/>\n| `\/pc mute <player> <reason>` | Permanently mute a player |<br \/>\n| `\/pc tempmute <player> <duration> <reason>` | Temp-mute |<br \/>\n| `\/pc unmute <player>` | Unmute a player |<br \/>\n| `\/pc alts <player>` | Find alt accounts by shared IP |<\/p>\n<p>### Storage Commands<\/p>\n<p>| Command | Description |<br \/>\n|&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;-|<br \/>\n| `\/pc migrate <yaml|mysql>` | Migrate all data between storage backends |<br \/>\n| `\/pc purge <type> <days>` | Delete data older than X days |<\/p>\n<p>**Purge types:** `warnings`, `bans`, `mutes`, `iplogs`, `auditlog`, `inactive`, `all`<\/p>\n<p>### Player Commands<\/p>\n<p>| Command | Description |<br \/>\n|&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;-|<br \/>\n| `\/report [player] <reason>` | Report a player (or submit an anonymous report) |<\/p>\n<p>### Permissions<\/p>\n<p>| Permission | Description | Default |<br \/>\n|&#8212;&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;|<br \/>\n| `protectcord.admin` | All `\/pc` commands | OP |<br \/>\n| `protectcord.bypass` | Bypass IP checks on join | false |<br \/>\n| `protectcord.alerts` | Receive in-game staff alerts | OP |<br \/>\n| `protectcord.ip.full` | See unmasked IPs in command output | OP |<br \/>\n| `protectcord.automod.bypass.*` | Bypass all AutoMod checks | false |<\/p>\n<p>&#8212;<\/p>\n<p>## \u26a1 Progressive Warning System<\/p>\n<p>Automatically escalate discipline based on warning count. Two modes available:<\/p>\n<p>### Simple Mode (default)<\/p>\n<p>| Warning | Action |<br \/>\n|&#8212;&#8212;&#8212;|&#8212;&#8212;&#8211;|<br \/>\n| 1st | In-game warning message |<br \/>\n| 2nd | Kicked with &#8220;final warning&#8221; message |<br \/>\n| 3rd | Permanent ban |<\/p>\n<p>### Escalation Tiers Mode (configurable)<\/p>\n<p>Fully custom escalation \u2014 any combination of WARN \u2192 TEMPMUTE \u2192 TEMPBAN \u2192 BAN:<\/p>\n<p>&#8220;`<br \/>\n1 warning  \u2192 Warning message<br \/>\n2 warnings \u2192 Temp mute (1 hour)<br \/>\n3 warnings \u2192 Temp ban (1 day)<br \/>\n4 warnings \u2192 Temp ban (7 days)<br \/>\n5 warnings \u2192 Permanent ban<br \/>\n&#8220;`<\/p>\n<p>Warnings can optionally **expire** after a configured duration (`7d`, `30d`, etc.) so past behavior doesn&#8217;t follow players forever.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83e\udd16 AutoMod \u2014 Automated Chat Filtering<\/p>\n<p>Protect your chat without lifting a finger. Each AutoMod rule runs independently and can be configured to `BLOCK`, `WARN`, `KICK`, `MUTE`, or `TEMPMUTE` the offending player.<\/p>\n<p>| Rule | What It Catches |<br \/>\n|&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;&#8212;-|<br \/>\n| **Anti-Link** | URLs, with per-domain whitelist |<br \/>\n| **Anti-Advertising** | Other server IPs, Discord invites |<br \/>\n| **Anti-Spam** | Message rate and duplicate flooding |<br \/>\n| **Anti-Swear** | Custom word list, with regex and exceptions |<br \/>\n| **Anti-Caps** | Excessive uppercase by percentage |<br \/>\n| **Anti-Flood** | Repeated character abuse |<br \/>\n| **Anti-Unicode** | Zalgo text and invisible character abuse |<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udd0d Alt Account Detection<\/p>\n<p>Find players evading bans or using multiple accounts with a single command:<\/p>\n<p>&#8220;`<br \/>\n\/pc alts Notch<br \/>\n\u2192 [ProtectCord] Alt accounts for Notch:<br \/>\n  &#8211; Notch2 (shared IPs: 2)<br \/>\n  &#8211; AltAccount99 (shared IPs: 1)<br \/>\n&#8220;`<\/p>\n<p>IPs are **never displayed** in alt output \u2014 staff see player names only, protecting privacy while identifying evaders.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\uddc4\ufe0f MySQL &#038; Multi-Server Sync<\/p>\n<p>Store all data (warnings, bans, mutes, IP history, audit logs) in MySQL instead of local YAML files.<\/p>\n<p>&#8211; **All servers share one database** \u2014 ban on Factions, blocked on Survival<br \/>\n&#8211; **HikariCP connection pooling** \u2014 high-performance and thread-safe<br \/>\n&#8211; **Auto table creation** \u2014 tables are created on first startup<br \/>\n&#8211; **server_id tracking** \u2014 every row records which server the action came from<br \/>\n&#8211; **Live migration** \u2014 move from YAML to MySQL (or back) with `\/pc migrate mysql`<\/p>\n<p>&#8220;`<br \/>\n\/pc migrate mysql<br \/>\n\u2192 Migrated 47 players, 12 IP bans, 203 audit entries.<br \/>\n\u2192 Update database.type in config.yml and run \/pc reload.<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83e\uddf9 Data Purge<\/p>\n<p>Keep your database clean with fine-grained purge commands:<\/p>\n<p>&#8220;`<br \/>\n\/pc purge warnings  90   \u2014 remove warnings older than 90 days<br \/>\n\/pc purge bans      30   \u2014 remove expired bans older than 30 days<br \/>\n\/pc purge mutes     30   \u2014 remove expired mutes older than 30 days<br \/>\n\/pc purge iplogs   365   \u2014 remove IP history older than 1 year<br \/>\n\/pc purge auditlog  90   \u2014 trim the audit log<br \/>\n\/pc purge inactive 180   \u2014 remove player records unseen for 6 months<br \/>\n\/pc purge all       90   \u2014 run all of the above<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udce2 Discord Integration<\/p>\n<p>### Connection Webhook<\/p>\n<p>Get a rich Discord embed every time a player is blocked, accepted, or whitelisted:<\/p>\n<p>&#8211; Country with flag emoji, city, VPN\/proxy\/tor\/datacenter\/bogon flags, risk level, company<br \/>\n&#8211; Per-event toggle \u2014 only receive the events you care about<br \/>\n&#8211; Rate limiting to stay within Discord&#8217;s limits<br \/>\n&#8211; Automatic retry with exponential backoff<\/p>\n<p>### Staff Alert Webhook<\/p>\n<p>Separate webhook for moderation events: bans, unbans, warns, kicks, mutes, AutoMod actions \u2014 so your mod team always knows what&#8217;s happening.<\/p>\n<p>### Setup in 30 seconds<\/p>\n<p>1. Discord \u2192 Server Settings \u2192 Integrations \u2192 Webhooks \u2192 New Webhook \u2192 Copy URL<br \/>\n2. Add to `config.yml`:<br \/>\n&#8220;`yaml<br \/>\ndiscord-webhook:<br \/>\n  enabled: true<br \/>\n  url: &#8220;https:\/\/discord.com\/api\/webhooks\/YOUR_WEBHOOK&#8221;<br \/>\n&#8220;`<br \/>\n3. `\/pc reload`<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udee1\ufe0f How IP Detection Works<\/p>\n<p>Every connecting player&#8217;s IP is sent to the ProtectCord API for evaluation:<\/p>\n<p>| Check | What It Detects |<br \/>\n|&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8212;-|<br \/>\n| **VPN** | Virtual private networks used to hide location |<br \/>\n| **Proxy** | HTTP\/SOCKS proxies and anonymizers |<br \/>\n| **Tor** | Tor exit nodes |<br \/>\n| **Datacenter** | Hosting providers (common bot source) |<br \/>\n| **Bogon** | Invalid or reserved IP ranges |<br \/>\n| **Risk Score** | AI-powered score from UNKNOWN to CRITICAL |<br \/>\n| **Geo** | Country of origin (for geo-blocking) |<\/p>\n<p>### Automatic Bypasses<\/p>\n<p>No API call is made for:<br \/>\n&#8211; Localhost (`127.0.0.1`, `::1`)<br \/>\n&#8211; Private networks (`192.168.x.x`, `10.x.x.x`, `172.16\u201331.x.x`)<br \/>\n&#8211; Whitelisted players, UUIDs, or IPs<\/p>\n<p>&#8212;<\/p>\n<p>## \u2753 FAQ<\/p>\n<p>**Is this free?**<br \/>\nYes. The free API key includes **32 requests per minute**, enough for most servers.<\/p>\n<p>**Will it lag my server?**<br \/>\nNo. All IP checks are **fully asynchronous** and never block the main thread.<\/p>\n<p>**Can legitimate players get blocked?**<br \/>\nRarely. Use `\/pc check <player>` to see why, then `\/pc whitelist add player <name>`. You can also raise `blocked-risk-level` to `CRITICAL` for less aggressive blocking.<\/p>\n<p>**Does it work with offline mode?**<br \/>\nYes. The plugin functions in both online and offline mode.<\/p>\n<p>**What about proxy networks?**<br \/>\nInstall **only on the proxy** (BungeeCord or Velocity). All backend servers are automatically protected with one plugin and one API key.<\/p>\n<p>**What if the API is down?**<br \/>\nPlayers are allowed to connect by default during API outages. This prevents lockouts and can be changed in config.<\/p>\n<p>**Do you store player data?**<br \/>\nOnly IP addresses are sent to the ProtectCord API. No usernames or UUIDs are transmitted externally. See our privacy policy.<\/p>\n<p>**Can I sync bans across servers?**<br \/>\nYes \u2014 enable MySQL storage and point all servers at the same database. Bans and mutes are enforced network-wide automatically.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udd27 Troubleshooting<\/p>\n<p>**&#8221;API KEY NOT CONFIGURED!&#8221;**<br \/>\nGet your key at protectcord.com\/dashboard, add it to `config.yml`, run `\/pc reload`.<\/p>\n<p>**Player blocked incorrectly**<br \/>\nRun `\/pc check <player>` to see the reason. Whitelist with `\/pc whitelist add player <name>` or lower `blocked-risk-level`.<\/p>\n<p>**Rate limit hit**<br \/>\nFree tier: 32 req\/min (~1 player every 2 seconds). Solutions: whitelist regulars to skip API calls, or install only on your proxy instead of all backends.<\/p>\n<p>**Discord webhook silent**<br \/>\nVerify URL is correct, `enabled: true`, events are enabled, and check console for errors.<\/p>\n<p>**MySQL connection failed**<br \/>\nCheck host\/port\/credentials in config. Ensure the MySQL user has `CREATE TABLE` privileges. Check console for the HikariCP error message.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83c\udf10 Links &#038; Support<\/p>\n<p>&#8211; \ud83c\udf0d **Website:** protectcord.com<br \/>\n&#8211; \ud83d\udcd6 **API Docs:** api.protectcord.com<br \/>\n&#8211; \ud83c\udfab **Dashboard:** protectcord.com\/dashboard<br \/>\n&#8211; \ud83d\udcac **Discord:** protectcord.com\/discord<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udc96 Support the Project<\/p>\n<p>&#8211; \u2b50 Follow on Modrinth<br \/>\n&#8211; \ud83d\udcac Join the Discord community<br \/>\n&#8211; \ud83d\udcdd Leave a review and share your experience<br \/>\n&#8211; \ud83d\udc1b Report bugs or suggest features on Discord<\/p>\n<p>&#8212;<\/p>\n<p>*Made with \u2764\ufe0f for the Minecraft community \u2014 **ProtectCord**, because prevention is better than moderation.*<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Protectcord is an anti VPN\/Proxy plugin it uses an advanced API to check if an IPv4\/IPv6 is a VPN or Proxy!<\/p>\n","protected":false},"featured_media":125757,"template":"","meta":{"_minecraft_slug":"protectcord","_minecraft_project_id":"y05wfnBZ","_minecraft_author":"protectcord","_minecraft_license":"MIT","_minecraft_downloads":3577,"_minecraft_follows":17,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"protectcord.zip","_minecraft_size_bytes":415543597,"_minecraft_version_count":93,"_minecraft_updated_at":"2026-05-16T04:45:36.601154Z","_minecraft_date_created":"2025-02-06T00:47:15.245799Z","_minecraft_date_modified":"2026-05-11T13:28:34.747149Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/protectcord","_minecraft_icon_attachment_id":125757,"_minecraft_imported_at":"2026-06-07T09:18:35+00:00","_minecraft_import_hash":"1a092c600da257e6db50549baab9e3a0","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[894,125,104,126,90,127,867,129,985,992],"mod_loader":[106,132],"minecraft_version":[339,340,341,357,359,360,379,382,385,438,446,449,110,111,112,113,114,115,116,117,118,119,120,46,47,48,49,50,51,52,53,54,55,56,57,58,59,36,60,93,94,101,102,62,37,40,41,73,74,38,78,79,80,81,82,30,31,860,861,862,863,864],"class_list":["post-125756","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-bungeecord","mod_category-folia","mod_category-forge","mod_category-management","mod_category-optimization","mod_category-paper","mod_category-social","mod_category-spigot","mod_category-velocity","mod_category-waterfall","mod_loader-forge","mod_loader-paper","minecraft_version-1-10","minecraft_version-1-10-1","minecraft_version-1-10-2","minecraft_version-1-11","minecraft_version-1-11-1","minecraft_version-1-11-2","minecraft_version-1-12","minecraft_version-1-12-1","minecraft_version-1-12-2","minecraft_version-1-13","minecraft_version-1-13-1","minecraft_version-1-13-2","minecraft_version-1-14","minecraft_version-1-14-1","minecraft_version-1-14-2","minecraft_version-1-14-3","minecraft_version-1-14-4","minecraft_version-1-15","minecraft_version-1-15-1","minecraft_version-1-15-2","minecraft_version-1-16","minecraft_version-1-16-1","minecraft_version-1-16-2","minecraft_version-1-16-3","minecraft_version-1-16-4","minecraft_version-1-16-5","minecraft_version-1-17","minecraft_version-1-17-1","minecraft_version-1-18","minecraft_version-1-18-1","minecraft_version-1-18-2","minecraft_version-1-19","minecraft_version-1-19-1","minecraft_version-1-19-2","minecraft_version-1-19-3","minecraft_version-1-19-4","minecraft_version-1-20","minecraft_version-1-20-1","minecraft_version-1-20-2","minecraft_version-1-20-3","minecraft_version-1-20-4","minecraft_version-1-20-5","minecraft_version-1-20-6","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","minecraft_version-1-8-8","minecraft_version-1-8-9","minecraft_version-1-9","minecraft_version-1-9-1","minecraft_version-1-9-2","minecraft_version-1-9-3","minecraft_version-1-9-4"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Protectcord - 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\/protectcord\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Protectcord - Minecraft\" \/>\n<meta property=\"og:description\" content=\"Protectcord is an anti VPN\/Proxy plugin it uses an advanced API to check if an IPv4\/IPv6 is a VPN or Proxy!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/protectcord\/\" \/>\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=\"17 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protectcord\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protectcord\\\/\",\"name\":\"Protectcord - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protectcord\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protectcord\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/protectcord-icon-3433db19c2fd13c0eeacbf8d50cc2aa84d1d88e2_96.webp\",\"datePublished\":\"2026-06-07T09:18:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protectcord\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protectcord\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protectcord\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/protectcord-icon-3433db19c2fd13c0eeacbf8d50cc2aa84d1d88e2_96.webp\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/protectcord-icon-3433db19c2fd13c0eeacbf8d50cc2aa84d1d88e2_96.webp\",\"width\":96,\"height\":96},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/protectcord\\\/#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\":\"Protectcord\"}]},{\"@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":"Protectcord - 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\/protectcord\/","og_locale":"en_US","og_type":"article","og_title":"Protectcord - Minecraft","og_description":"Protectcord is an anti VPN\/Proxy plugin it uses an advanced API to check if an IPv4\/IPv6 is a VPN or Proxy!","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/protectcord\/","og_site_name":"Minecraft","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"17 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/protectcord\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/protectcord\/","name":"Protectcord - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/protectcord\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/protectcord\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/protectcord-icon-3433db19c2fd13c0eeacbf8d50cc2aa84d1d88e2_96.webp","datePublished":"2026-06-07T09:18:34+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/protectcord\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/protectcord\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/protectcord\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/protectcord-icon-3433db19c2fd13c0eeacbf8d50cc2aa84d1d88e2_96.webp","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/protectcord-icon-3433db19c2fd13c0eeacbf8d50cc2aa84d1d88e2_96.webp","width":96,"height":96},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/protectcord\/#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":"Protectcord"}]},{"@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\/125756","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:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media\/125757"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=125756"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=125756"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=125756"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=125756"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}