Protectcord
Modby protectcord
Protectcord is an anti VPN/Proxy plugin it uses an advanced API to check if an IPv4/IPv6 is a vpn
Type
Mod
CurseForge Downloads
707
CurseForge ID
1375648
Modrinth Downloads
6,441
Modrinth ID
y05wfnBZ
Last Updated
Jul 25, 2026
Description
# ProtectCord — Advanced IP Protection & Moderation
**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 — all in one lightweight plugin.**
ProtectCord connects every joining player against a live threat intelligence database before they ever reach your server. Combined with a full moderation suite, it's the only tool you need to keep your server clean and your community safe.
## ✨ Milestones
- **2,300+** downloads on Modrinth
- **100,000+** ProtectCord API requests served
- **46** unique Minecraft servers running ProtectCord concurrently
- **203** concurrent protected players
- **1,000+** unique Discord users verified
- **3,000+** unique API requests per day
- **555** Discord Guilds using @ProtectCord#0253
- Watching over **100,000+** Discord users
**bStats:** https://bstats.org/plugin/bukkit/Protectcord/24623
---
## ✨ Key Features
### IP Protection
- 🛡️ **Real-Time IP Verification** — Every connection checked against live threat intelligence
- 🚫 **VPN, Proxy & Tor Blocking** — Stop ban evaders and alt accounts instantly
- 🏢 **Datacenter IP Detection** — Flag and block hosting provider IPs used for bots
- ⚠️ **Risk-Based Blocking** — Configurable threat levels: UNKNOWN → LOW → MEDIUM → HIGH → CRITICAL
- 🌍 **Geo-Blocking** — Block or whitelist entire countries using ISO codes
- 👥 **Accounts-Per-IP Limiting** — Cap simultaneous connections from a single IP
- ✅ **Smart Whitelist System** — Bypass protection by player name, UUID, or IP
### Moderation Suite
- ⚡ **Progressive Warning System** — Configurable auto-escalation from warn → kick → ban
- ⏱️ **Temp Bans & Temp Mutes** — Time-limited punishments with human-readable durations (`1h`, `7d`, `30d`)
- 🔇 **Mute System** — Persistent mutes with reasons, issuer tracking, and auto-expiry
- 🔍 **Alt Account Detection** — Find alts by shared IP (`/pc alts `) — names only, never raw IPs
- 📋 **Warning History** — Full timestamped warning logs for any player, online or offline
- 🧹 **Clear & Remove Warnings** — Remove individual warnings by index or clear all at once
- 🗄️ **Audit Log** — Automatic log of all moderation actions
- 💾 **Offline Player Support** — Warn, ban, mute, or check players who aren't online
### AutoMod (Chat Filtering)
- 🔗 **Anti-Link** — Block URLs with domain whitelist support
- 📢 **Anti-Advertising** — Block server IPs and Discord invites
- 💬 **Anti-Spam** — Rate limiting with configurable message window and duplicate detection
- 🤬 **Anti-Swear** — Custom word blacklist with regex support and per-word exceptions
- 🔠 **Anti-Caps** — Configurable caps threshold by percentage
- 🌊 **Anti-Flood** — Block repeated character flooding
- 🔣 **Anti-Unicode/Zalgo** — Block invisible text and character abuse
- ⚙️ **Per-Rule Actions** — Each rule independently set to: `BLOCK`, `WARN`, `KICK`, `MUTE`, or `TEMPMUTE`
### Storage & Multi-Server
- 🗃️ **YAML Flatfile Storage** — Zero setup, works out of the box
- 🐬 **MySQL Storage** — Full MySQL backend with HikariCP connection pooling
- 🌐 **Multi-Server Sync** — Share one MySQL database across your entire network; bans and mutes are enforced on every server
- 🔄 **Live Migration** — Migrate between YAML and MySQL at any time with `/pc migrate`
- 🧹 **Data Purge** — Clean up old warnings, bans, mutes, IP logs, audit entries, and inactive players with `/pc purge`
### Staff Tools
- 📣 **In-Game Staff Alerts** — Real-time notifications for kicks, bans, warns, mutes, automod actions, and more
- 🎭 **IP Masking** — Show staff masked IPs (`192.168.1.*`) until they earn the `protectcord.ip.full` permission
- 📝 **Player Reports** — Players submit reports with `/report`; staff are notified in-game and via Discord
- 📊 **API Stats** — Check usage, rate limits, and API health with `/pc stats`
- 🔎 **Manual IP Check** — `/pc check ` for on-demand threat analysis
### Platform & Integration
- 🌐 **6-Platform Support** — Paper, Spigot, Folia, BungeeCord, Velocity, and Forge
- 📢 **Discord Webhooks** — Rich embeds with country flag, city, VPN/proxy/tor/risk fields, per-event control, rate limiting, and retry logic
- 📣 **Moderation Alert Webhooks** — Separate webhook channel for ban/warn/mute/kick staff events
- ⚡ **100% Async** — All IP checks are non-blocking; no main-thread impact
---
## 🎮 Supported Platforms
| Platform | Versions | Notes |
|----------|----------|-------|
| **Paper** | 1.13 – 1.21+ | Recommended for standalone servers |
| **Spigot** | 1.8.8 – 1.21+ | Full legacy support |
| **Folia** | 1.19+ | Multithreaded scheduler support |
| **Velocity** | 3.0+ | Recommended for proxy networks |
| **BungeeCord** | 1.8.8 – 1.21+ | Waterfall compatible |
| **Forge** | 1.20.1+ | Server-side only; checks at post-login |
> **Network tip:** Install only on your proxy (Velocity/BungeeCord) to protect all backend servers with a single API key.
---
## 📥 Quick Setup
### 1️⃣ Get Your Free API Key
1. Visit **[protectcord.com](https://protectcord.com)**
2. Create a free account
3. Generate an API key from **Dashboard → API Keys**
4. **Free tier includes 32 requests/minute** — enough for most servers
### 2️⃣ Install the Plugin
1. Download the correct JAR for your platform from Modrinth
2. Drop it into your `plugins/` folder (or `mods/` for Forge)
3. Start your server — config generates automatically
4. Add your API key to `plugins/ProtectCord/config.yml`
5. Run `/protectcord reload` or restart
6. ✅ Your server is now protected
---
## ⚙️ Full Configuration Reference
The config file is auto-generated at `plugins/ProtectCord/config.yml` on first run. Every option is explained below.
> Velocity uses `config.toml` (same structure, TOML syntax). Forge uses `config/protectcord-forge.toml`.
---
### API Settings
```yaml
# Your ProtectCord API key — get one free at https://protectcord.com/dashboard/api-keys
api-key: "YOUR_API_KEY_HERE"
# How long to wait (ms) for the API to respond before giving up
api-timeout:
connect: 15000 # Time to establish the connection (default: 15s)
read: 15000 # Time to wait for a response after connecting (default: 15s)
# Automatic retry for failed/timed-out API requests
api-retry:
max-attempts: 3 # Max number of retries before allowing/denying the player (1–5)
initial-delay: 1000 # Wait this long before the first retry (ms)
max-delay: 5000 # Never wait longer than this between retries (ms)
multiplier: 2.0 # Multiply delay by this factor each retry (exponential backoff)
```
---
### Server Identity
```yaml
# Used for player tracking and multi-server MySQL identification
server:
name: "My Server" # Friendly name — stored in MySQL as server_id on every row
ip: "" # Your public IP — leave blank to auto-detect
port: 25565 # Your server port
type: "spigot" # Platform: paper / spigot / bungeecord / velocity / forge / folia
```
---
### Player Tracking
```yaml
# UUID-based tracking via the ProtectCord API
player-tracking:
enabled: true
block-flagged-players: true # Block players flagged as malicious by the API
block-inactive-players: false # Block players whose accounts are marked inactive
```
---
### IP Protection
```yaml
# Master switch — set to false to disable all IP checking (not recommended)
enable-ip-check: true
# Choose which connection types to block
block-vpn: true # Virtual private networks (ban evaders, alt accounts)
block-proxy: true # HTTP/SOCKS proxies and anonymizers
block-tor: true # Tor exit nodes
block-datacenter: true # Hosting provider IPs (common source of bots)
block-bogon: true # Invalid, reserved, or unroutable IP ranges
# Risk-based blocking (optional, runs in addition to the flags above)
# Enable this to block by overall threat score instead of (or as well as) individual flags
enable-risk-level-blocking: false
blocked-risk-level: "HIGH"
# Levels (each blocks itself and everything above it):
# LOW — blocks LOW, MEDIUM, HIGH, CRITICAL (very strict)
# MEDIUM — blocks MEDIUM, HIGH, CRITICAL
# HIGH — blocks HIGH, CRITICAL (recommended if enabling)
# CRITICAL — blocks CRITICAL only (very lenient)
```
---
### Geographic Blocking
```yaml
geo-blocking:
enabled: false
mode: "blacklist" # "blacklist" = block listed countries
# "whitelist" = ONLY allow listed countries (everyone else blocked)
countries: # ISO 3166-1 alpha-2 country codes
- "CN"
- "RU"
```
---
### Accounts Per IP
```yaml
# Limit how many Minecraft accounts can connect simultaneously from the same IP
account-per-ip-limit:
enabled: false
max-accounts: 3 # Maximum simultaneous connections from one IP
enforcement: "BLOCK" # "BLOCK" — deny the new connection
# "KICK_OLDEST" — kick the oldest session to make room
```
---
### Discord Webhook (Connection Events)
```yaml
discord-webhook:
enabled: false
url: "" # Paste your Discord webhook URL here
timeout: 10000 # HTTP timeout for sending the webhook (ms)
# Retry failed webhook deliveries
retry:
enabled: true
max-attempts: 3 # How many times to retry a failed delivery (1–10)
initial-delay: 1000 # Wait before first retry (ms)
max-delay: 10000 # Maximum wait between retries (ms)
multiplier: 2.0 # Exponential backoff multiplier
# Rate limiting — Discord allows ~5 requests per 2 seconds per webhook
rate-limit:
max-per-second: 2 # Requests sent per second (1–5)
burst-limit: 5 # Maximum burst before throttling kicks in
# Which events send a webhook message
events:
denied: true # Player was blocked by ProtectCord
accepted: false # Player passed all checks and joined (high volume — off by default)
whitelisted: true # A whitelisted player joined
error: true # An API error occurred during a check
# Which data fields appear in the embed
data-fields:
show-country: true
show-country-flag: true # 🇺🇸 flag emoji next to country name
show-city: true
show-vpn: true
show-proxy: true
show-datacenter: true
show-tor: true
show-mobile: true
show-satellite: true
show-crawler: true
show-bogon: true
show-risk-level: true
show-abuser: true
show-blacklisted: true
show-company: true # ISP / hosting provider name
show-company-risk: true
# Customise the appearance of each embed type
embeds:
denied:
title: "Connection Denied"
emoji: "x"
color: 15158332 # Decimal RGB — red
footer: "" # Optional footer text
thumbnail-url: "" # Optional image in top-right corner
accepted:
title: "Connection Accepted"
emoji: "white_check_mark"
color: 3066993 # Green
footer: ""
thumbnail-url: ""
whitelisted:
title: "Whitelisted Player Joined"
emoji: "white_circle"
color: 16776960 # Yellow
footer: ""
thumbnail-url: ""
error:
title: "API Error"
emoji: "warning"
color: 15105570 # Orange
footer: ""
thumbnail-url: ""
# Advanced webhook behaviour
advanced:
validate-url-on-startup: true # Send a test ping when the plugin loads
log-failures: true # Print failed deliveries to console
log-retries: true # Print retry attempts to console
queue-size: 100 # Max webhooks queued before dropping oldest
```
---
### Staff Alerts
```yaml
# In-game and Discord notifications for moderation actions
alerts:
enabled: true
# Broadcast to online staff with the protectcord.alerts permission
in-game:
enabled: true
# Separate webhook channel just for mod-team events
discord-webhook:
enabled: false
url: ""
# Fine-tune exactly which actions trigger an alert
events:
kick: true
ban: true
unban: true
warn: true
clear-warnings: true
remove-warning: true
automod: true
mute: true
unmute: true
tempmute: true
tempban: true
```
---
### Warning System
```yaml
warnings:
# Automatically take action when a player accumulates enough warnings
auto-action:
enabled: true
action: "BAN" # "BAN" — permanent ban | "KICK" — kick only
threshold: 3 # Number of warnings before auto-action fires
# Kick the player with a "final warning" message at a lower threshold
kick-on-warn:
enabled: true
threshold: 2 # Kick at this warning count (before the ban threshold)
# Warnings older than this are not counted toward thresholds
expiry:
duration: "0" # "0" = warnings never expire
# Examples: "7d", "30d", "90d"
# Escalation tiers — overrides auto-action when enabled
# Each tier fires when warning count reaches `count`
escalation:
enabled: false
tiers:
- count: 1
action: "WARN"
- count: 2
action: "TEMPMUTE"
duration: "1h"
- count: 3
action: "TEMPBAN"
duration: "1d"
- count: 4
action: "TEMPBAN"
duration: "7d"
- count: 5
action: "BAN"
# Available actions: WARN, KICK, MUTE, TEMPMUTE, TEMPBAN, BAN
# Duration format: 30s, 10m, 1h, 7d, 30d
```
---
### AutoMod (Chat Filtering)
```yaml
automod:
enabled: false # Master switch — must be true for any rules to run
# Blocked actions apply to the message that triggered the rule.
# Available actions for all rules: BLOCK, WARN, KICK, MUTE, TEMPMUTE
# TEMPMUTE duration is set by tempmute-duration below.
tempmute-duration: "10m"
# Block links in chat
anti-link:
enabled: true
action: "BLOCK"
whitelisted-domains: # These domains are allowed through
- "yourdomain.com"
- "discord.gg/yourserver"
# Block spam (too many messages too fast, or too many duplicates)
anti-spam:
enabled: true
action: "BLOCK"
max-messages: 5 # Max messages allowed within the time window
time-window-seconds: 10 # Rolling window size in seconds
max-duplicates: 3 # Max identical messages allowed in the window
# Block server IPs and Discord invite links
anti-advertising:
enabled: true
action: "BLOCK"
block-server-ips: true # Blocks patterns like "play.someserver.net"
block-discord-invites: true # Blocks discord.gg/... links
whitelisted-domains:
- "yourdomain.com"
- "discord.gg/yourserver"
# Block profanity and custom banned words
anti-swear:
enabled: false
action: "BLOCK"
use-regex: false # Set true to treat blocked-words entries as regex patterns
blocked-words:
- "badword1"
- "badword2"
whitelisted-words: # These words are never blocked even if they match a pattern
- "scrapbook"
# Block excessive CAPS LOCK
anti-caps:
enabled: false
action: "BLOCK"
min-message-length: 5 # Ignore short messages (e.g. "OK", "YES")
threshold-percent: 70.0 # Block if more than this % of letters are uppercase
# Block character flooding (aaaaaaaaaa, !!!!!!!!!)
anti-flood:
enabled: false
action: "BLOCK"
max-repeated-chars: 5 # Consecutive identical characters before blocking
min-message-length: 3 # Ignore very short messages
# Block Unicode abuse and Zalgo text
anti-unicode:
enabled: false
action: "BLOCK"
block-zalgo: true # Block combining diacritical mark stacking (z͎̤̙̘̭͇͠a̵͔͓l̡͔͍̦͚͙g̢͕̲͔͔͕ö̥́)
max-unicode-percent: 50.0 # Block if more than this % of chars are non-ASCII
```
---
### Player Reports
```yaml
reports:
enabled: true
cooldown-seconds: 60 # How long a player must wait between reports
# Post reports to a Discord channel
discord-webhook:
enabled: false
url: ""
mention-role-id: "" # Optional — ping a role when a report comes in (e.g. "123456789")
notify-staff: true # Broadcast reports to online staff with protectcord.alerts
predefined-reasons: [] # Optional list of reasons shown in tab-complete
# Example: ["Hacking", "Spam", "Harassment", "Inappropriate name"]
```
---
### Database Storage
```yaml
database:
type: "YAML" # "YAML" — flatfile storage (default, no setup needed)
# "MYSQL" — MySQL/MariaDB (required for multi-server sync)
mysql:
host: "localhost"
port: 3306
database: "protectcord" # Database name (must exist before starting)
username: "root"
password: ""
table-prefix: "pc_" # All tables prefixed with this (e.g. pc_warnings, pc_bans)
# HikariCP connection pool settings
pool:
max-pool-size: 10 # Maximum simultaneous database connections
min-idle: 2 # Minimum idle connections kept open
connection-timeout: 30000 # Max wait for a connection from the pool (ms)
idle-timeout: 600000 # Close idle connections after this long (ms)
max-lifetime: 1800000 # Recycle connections after this long (ms)
```
---
### IP Masking
```yaml
# Control how IP addresses appear to staff in command output
# Staff with the protectcord.ip.full permission always see the full IP
ip-masking:
enabled: false
mask-format: "last-octet"
# "last-octet" → 192.168.1.* (hides last segment)
# "last-two-octets" → 192.168.*.* (hides last two segments)
# "full-mask" → *.*.*.* (hides everything)
```
---
### Custom Messages
```yaml
# All messages support & colour codes. Placeholders listed per message.
messages:
# Shown to players blocked by IP check — {reason}, {risk}
connection-denied: |
&c&lConnection Denied
&7Your connection has been blocked by ProtectCord.
&7Reason: &c{reason}
&7Risk Level: &c{risk}
&7If you believe this is an error, please contact server staff.
# Shown when the API is unreachable during a check
api-error: |
&c&lTemporary Connection Issue
&7We're unable to verify your connection at the moment.
&7Please try again later.
# Shown to a player blocked by the accounts-per-IP limit — {max}, {current}
account-limit-reached: |
&c&lConnection Limit Reached
&7Maximum accounts per IP: &c{max}
&7Current connections from your IP: &c{current}
&7Please disconnect another account before connecting.
# Shown to the oldest session kicked by KICK_OLDEST enforcement — {max}
account-limit-kicked: |
&c&lYou have been disconnected
&7A new account connected from your IP address.
&7Maximum accounts per IP: &c{max}
# Shown when player-tracking blocks a flagged player — {flags}
player-flagged: |
&c&lConnection Denied
&7Your account has been flagged.
&7Flags: &c{flags}
&7If you believe this is an error, please contact server staff.
# Shown when player-tracking blocks an inactive player
player-inactive: |
&c&lConnection Denied
&7Your account has been deactivated.
&7Please contact server staff.
# Shown in chat to whitelisted players who bypass the IP check
whitelist-bypass: "&aYou have bypassed IP verification."
```
---
## 🎯 Commands & Permissions
**Aliases:** `/pc`, `/protect`
### Core Commands
| Command | Description |
|---------|-------------|
| `/pc reload` | Reload config, whitelist, and storage |
| `/pc stats` | View API usage and rate limits |
| `/pc check ` | On-demand IP threat analysis |
| `/pc version` | Plugin version and platform info |
| `/pc health` | API connectivity health check |
| `/pc alerts` | Toggle in-game staff alerts on/off |
### Whitelist Commands
| Command | Description |
|---------|-------------|
| `/pc whitelist add player ` | Whitelist a player by name |
| `/pc whitelist add uuid ` | Whitelist by UUID |
| `/pc whitelist add ip ` | Whitelist an IP address |
| `/pc whitelist remove ` | Remove whitelist entry |
| `/pc list` | List all whitelisted entries |
### Moderation Commands
| Command | Description |
|---------|-------------|
| `/pc kick [reason]` | Kick an online player with IP info |
| `/pc warn ` | Issue a warning (auto-escalates) |
| `/pc warnings ` | View full warning history |
| `/pc clear warning ` | Clear all warnings |
| `/pc clear ban ` | Clear a ban record |
| `/pc remove warning [#]` | Remove a specific warning by index |
| `/pc ban ` | Permanently ban a player |
| `/pc tempban ` | Temp-ban (`1h`, `7d`, `30d`) |
| `/pc unban ` | Unban a player |
| `/pc mute ` | Permanently mute a player |
| `/pc tempmute ` | Temp-mute |
| `/pc unmute ` | Unmute a player |
| `/pc alts ` | Find alt accounts by shared IP |
### Storage Commands
| Command | Description |
|---------|-------------|
| `/pc migrate ` | Migrate all data between storage backends |
| `/pc purge ` | Delete data older than X days |
**Purge types:** `warnings`, `bans`, `mutes`, `iplogs`, `auditlog`, `inactive`, `all`
### Player Commands
| Command | Description |
|---------|-------------|
| `/report [player] ` | Report a player (or submit an anonymous report) |
### Permissions
| Permission | Description | Default |
|------------|-------------|---------|
| `protectcord.admin` | All `/pc` commands | OP |
| `protectcord.bypass` | Bypass IP checks on join | false |
| `protectcord.alerts` | Receive in-game staff alerts | OP |
| `protectcord.ip.full` | See unmasked IPs in command output | OP |
| `protectcord.automod.bypass.*` | Bypass all AutoMod checks | false |
---
## ⚡ Progressive Warning System
Automatically escalate discipline based on warning count. Two modes available:
### Simple Mode (default)
| Warning | Action |
|---------|--------|
| 1st | In-game warning message |
| 2nd | Kicked with "final warning" message |
| 3rd | Permanent ban |
### Escalation Tiers Mode (configurable)
Fully custom escalation — any combination of WARN → TEMPMUTE → TEMPBAN → BAN:
```
1 warning → Warning message
2 warnings → Temp mute (1 hour)
3 warnings → Temp ban (1 day)
4 warnings → Temp ban (7 days)
5 warnings → Permanent ban
```
Warnings can optionally **expire** after a configured duration (`7d`, `30d`, etc.) so past behavior doesn't follow players forever.
---
## 🤖 AutoMod — Automated Chat Filtering
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.
| Rule | What It Catches |
|------|----------------|
| **Anti-Link** | URLs, with per-domain whitelist |
| **Anti-Advertising** | Other server IPs, Discord invites |
| **Anti-Spam** | Message rate and duplicate flooding |
| **Anti-Swear** | Custom word list, with regex and exceptions |
| **Anti-Caps** | Excessive uppercase by percentage |
| **Anti-Flood** | Repeated character abuse |
| **Anti-Unicode** | Zalgo text and invisible character abuse |
---
## 🔍 Alt Account Detection
Find players evading bans or using multiple accounts with a single command:
```
/pc alts Notch
→ [ProtectCord] Alt accounts for Notch:
- Notch2 (shared IPs: 2)
- AltAccount99 (shared IPs: 1)
```
IPs are **never displayed** in alt output — staff see player names only, protecting privacy while identifying evaders.
---
## 🗄️ MySQL & Multi-Server Sync
Store all data (warnings, bans, mutes, IP history, audit logs) in MySQL instead of local YAML files.
- **All servers share one database** — ban on Factions, blocked on Survival
- **HikariCP connection pooling** — high-performance and thread-safe
- **Auto table creation** — tables are created on first startup
- **server_id tracking** — every row records which server the action came from
- **Live migration** — move from YAML to MySQL (or back) with `/pc migrate mysql`
```
/pc migrate mysql
→ Migrated 47 players, 12 IP bans, 203 audit entries.
→ Update database.type in config.yml and run /pc reload.
```
---
## 🧹 Data Purge
Keep your database clean with fine-grained purge commands:
```
/pc purge warnings 90 — remove warnings older than 90 days
/pc purge bans 30 — remove expired bans older than 30 days
/pc purge mutes 30 — remove expired mutes older than 30 days
/pc purge iplogs 365 — remove IP history older than 1 year
/pc purge auditlog 90 — trim the audit log
/pc purge inactive 180 — remove player records unseen for 6 months
/pc purge all 90 — run all of the above
```
---
## 📢 Discord Integration
### Connection Webhook
Get a rich Discord embed every time a player is blocked, accepted, or whitelisted:
- Country with flag emoji, city, VPN/proxy/tor/datacenter/bogon flags, risk level, company
- Per-event toggle — only receive the events you care about
- Rate limiting to stay within Discord's limits
- Automatic retry with exponential backoff
### Staff Alert Webhook
Separate webhook for moderation events: bans, unbans, warns, kicks, mutes, AutoMod actions — so your mod team always knows what's happening.
### Setup in 30 seconds
1. Discord → Server Settings → Integrations → Webhooks → New Webhook → Copy URL
2. Add to `config.yml`:
```yaml
discord-webhook:
enabled: true
url: "https://discord.com/api/webhooks/YOUR_WEBHOOK"
```
3. `/pc reload`
---
## 🛡️ How IP Detection Works
Every connecting player's IP is sent to the ProtectCord API for evaluation:
| Check | What It Detects |
|-------|----------------|
| **VPN** | Virtual private networks used to hide location |
| **Proxy** | HTTP/SOCKS proxies and anonymizers |
| **Tor** | Tor exit nodes |
| **Datacenter** | Hosting providers (common bot source) |
| **Bogon** | Invalid or reserved IP ranges |
| **Risk Score** | AI-powered score from UNKNOWN to CRITICAL |
| **Geo** | Country of origin (for geo-blocking) |
### Automatic Bypasses
No API call is made for:
- Localhost (`127.0.0.1`, `::1`)
- Private networks (`192.168.x.x`, `10.x.x.x`, `172.16–31.x.x`)
- Whitelisted players, UUIDs, or IPs
---
## ❓ FAQ
**Is this free?**
Yes. The free API key includes **32 requests per minute**, enough for most servers.
**Will it lag my server?**
No. All IP checks are **fully asynchronous** and never block the main thread.
**Can legitimate players get blocked?**
Rarely. Use `/pc check ` to see why, then `/pc whitelist add player `. You can also raise `blocked-risk-level` to `CRITICAL` for less aggressive blocking.
**Does it work with offline mode?**
Yes. The plugin functions in both online and offline mode.
**What about proxy networks?**
Install **only on the proxy** (BungeeCord or Velocity). All backend servers are automatically protected with one plugin and one API key.
**What if the API is down?**
Players are allowed to connect by default during API outages. This prevents lockouts and can be changed in config.
**Do you store player data?**
Only IP addresses are sent to the ProtectCord API. No usernames or UUIDs are transmitted externally. See our [privacy policy](https://protectcord.com/privacy).
**Can I sync bans across servers?**
Yes — enable MySQL storage and point all servers at the same database. Bans and mutes are enforced network-wide automatically.
---
## 🔧 Troubleshooting
**"API KEY NOT CONFIGURED!"**
Get your key at [protectcord.com/dashboard](https://protectcord.com/dashboard), add it to `config.yml`, run `/pc reload`.
**Player blocked incorrectly**
Run `/pc check ` to see the reason. Whitelist with `/pc whitelist add player ` or lower `blocked-risk-level`.
**Rate limit hit**
Free 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.
**Discord webhook silent**
Verify URL is correct, `enabled: true`, events are enabled, and check console for errors.
**MySQL connection failed**
Check host/port/credentials in config. Ensure the MySQL user has `CREATE TABLE` privileges. Check console for the HikariCP error message.
---
## 🌐 Links & Support
- 🌍 **Website:** [protectcord.com](https://protectcord.com)
- 📖 **API Docs:** [api.protectcord.com](https://api.protectcord.com)
- 🎫 **Dashboard:** [protectcord.com/dashboard](https://protectcord.com/dashboard)
- 💬 **Discord:** [protectcord.com/discord](https://protectcord.com/discord)
---
## 💖 Support the Project
- ⭐ Follow on Modrinth
- 💬 Join the [Discord community](https://protectcord.com/discord)
- 📝 Leave a review and share your experience
- 🐛 Report bugs or suggest features on Discord
---
*Made with ❤️ for the Minecraft community — **ProtectCord**, because prevention is better than moderation.*
Compatibility
Mod Loaders
Bungeecord
Folia
Forge
Neoforge
Paper
Purpur
Spigot
Sponge
Velocity
Waterfall
Game Versions
1.8.8
1.8.9
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.10
1.10.1
1.10.2
+55 more
Screenshots
Similar Mods
SussyPatches
Patches/enhancements for GTCEu 1.12.2
Mod
71,479
Unlimited Enchantments
Enchantments now have no limit on levels!
Mod
71,463
Block Helper
A WAILA port for a1.2.6 - 1.5.2
Mod
71,443
Veinminer Enchantment
New enchantment for pickaxes to mine multiple matching connected ores!
Mod
71,442
Teletransportation Accept (TPA)
Your classic /tpa command now aviable in form of a mod/datapack.
Mod
71,422
Pepsi's Early Elytra
Got places to go? No time to go through the end? Now you can craft it.
Mod
71,387