ProxyChat

![Banner](https://github.com/fabianmakila/ProxyChat/blob/main/assets/proxychat-banner.svg?raw=true)

# ProxyChat

A chat plugin for Minecraft proxies providing proxy-wide private messaging, chat channels and more!

ProxyChat is part of my proxy plugin suite. You can find all my proxy plugins below:
– [ProxyChat](https://modrinth.com/plugin/proxychat)
– [ProxyUtils](https://modrinth.com/plugin/proxyutils)

Installation instructions and other documentation can be found in the [Wiki](https://github.com/fabianmakila/ProxyChat/wiki).

## Features
– MiniPlaceholders support
– Private messaging
– Chat channels
– Automated messages
– Welcome message
– Broadcast command

ProxyChat also supports hooking into most popular Friends and Vanish plugins to further extend the functionality.
See the [wiki page](https://github.com/fabianmakila/ProxyChat/wiki/plugin-hooks) for more information.

## Supported proxies
– Bungeecord / Waterfall
– Velocity

## Discord
Can’t find what you’re looking for in the wiki?
Join the [Discord server](https://discord.gg/hNMvqruCuK) where you can get support or just hangout with the community.

## Metrics
[bStats](https://bstats.org) is used to collect anonymous usage data which is used to make decisions concerning the future of the plugin.
The collected data is publicly available and can be viewed here:
– [Bungeecord](https://bstats.org/plugin/bungeecord/ProxyChatBungee/18435)
– [Velocity](https://bstats.org/plugin/velocity/ProxyChat/15557)

Proxy Essentials

# Proxy Essentials Plugin

![Banner][banner]

[![Modrinth][badge-modrinth]][modrinth]
[![License][badge-license]][license]

[![Discord][badge-discord]][social-discord]
[![Follow @simplecloudapp][badge-x]][social-x]
[![Follow @simplecloudapp][badge-bluesky]][social-bluesky]
[![Follow @simplecloudapp][badge-youtube]][social-youtube]

[Report a Bug][issue-bug-report]
·
[Request a Feature][issue-feature-request]

🌟 Give us a star — your support means the world to us!

> All information about this project can be found in our detailed [documentation][docs-thisproject].

The Proxy Plugin enhances your server network with customizable MOTD (Server Info) and Tablist features, offering extensive customization options through simple configuration files. All settings are synchronized across all proxies.

## Features

– [x] **Mutliple MOTD Layouts**: Create multiple MOTD Layouts for different states!
– [x] **Custom Tablist**: Send your Players custom Tablist Header and Footer!
– [x] **Joinstates**: Create different joinstates so your players can only join with certain permissions (you can call it advanced maintenance feature)

## Contributing
Contributions to SimpleCloud are welcome and highly appreciated. However, before you jump right into it, we would like you to read our [Contribution Guide][docs-contribute].

## License
This repository is licensed under [Apache 2.0][license].


[banner]: https://raw.githubusercontent.com/simplecloudapp/branding/refs/heads/main/readme/banner/plugin/proxy-essentials.png
[issue-bug-report]: https://github.com/theSimpleCloud/proxy-essentials-plugin/issues/new?labels=bug&projects=template=01_BUG-REPORT.yml&title=%5BBUG%5D+%3Ctitle%3E
[issue-feature-request]: https://github.com/theSimpleCloud/proxy-essentials-plugin/discussions/new?category=ideas
[docs-thisproject]: https://docs.simplecloud.app/plugin/proxy-essentials
[docs-contribute]: https://docs.simplecloud.app/contribute

[modrinth]: https://modrinth.com/plugin/proxy-essentials-plugin
[maven-central]: https://central.sonatype.com/artifact/app.simplecloud.controller/controller-api
[dev]: https://repo.simplecloud.app/#/snapshots/app/simplecloud/controller/controller-api

[artifacts]: https://repo.simplecloud.app/#/snapshots/app/simplecloud/controller/controller-api
[dev-artifacts]: https://repo.simplecloud.app/#/snapshots/app/simplecloud/controller/controller-api

[badge-maven-central]: https://img.shields.io/maven-central/v/app.simplecloud.controller/controller-api?labelColor=18181b&style=flat-square&color=65a30d&label=Release
[badge-dev]: https://repo.simplecloud.app/api/badge/latest/snapshots/app/simplecloud/controller/controller-api?name=Dev&style=flat-square&color=0ea5e9


[license]: https://opensource.org/licenses/Apache-2.0
[snapshots]: https://repo.simplecloud.app/#/snapshots

[social-x]: https://x.com/simplecloudapp
[social-bluesky]: https://bsky.app/profile/simplecloud.app
[social-youtube]: https://www.youtube.com/@thesimplecloud9075
[social-discord]: https://discord.simplecloud.app

[badge-modrinth]: https://img.shields.io/badge/modrinth-18181b.svg?style=flat-square&logo=modrinth
[badge-license]: https://img.shields.io/badge/apache%202.0-blue.svg?style=flat-square&label=license&labelColor=18181b&style=flat-square&color=e11d48
[badge-discord]: https://img.shields.io/badge/Community_Discord-d95652.svg?style=flat-square&logo=discord&color=27272a
[badge-x]: https://img.shields.io/badge/[email protected]?style=flat-square&logo=x&color=27272a
[badge-bluesky]: https://img.shields.io/badge/[email protected]?style=flat-square&logo=bluesky&color=27272a
[badge-youtube]: https://img.shields.io/badge/youtube-d95652.svg?style=flat-square&logo=youtube&color=27272a

Proxy Announcer

A simple and configurable proxy announcement plugin for Bungeecord and Velocity win customizable messages and much more coming soon…

### Commands:​
– /announce – Announce a message globally to all servers.
– /announceserver – Announce a message to a specific server.

### Coming Soon
– Auto Broadcaster

ProtoWeaver

[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)

[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/G2G4DZF4D)

# ProtoWeaver
A minecraft networking library for creating custom protocols that run on the internal netty server.

#### What dis mean?
Sick and tired of hyjacking client connections to send data to and from a proxy? Well I sure was. ProtoWeaver allows you to create a custom protocol that runs on the same port that the minecraft server uses.
This means a proxy such as velocity is able to communicate with the server regardless if players are on online or not, without running an extra socket server on a different port. Protoweaver is also not just
limited to proxies. Using the `client` module, any 3rd party java application can talk directly with ProtoWeaver!

Protoweaver is fast, secure, and easy to use. All protocols run under the same netty instance used by minecraft, are encypted with ssl, and are wrapped in a very straight forward api. Lets take a look:

### Features
– [x] Zero user config required
– [x] SSL encrytion
– [x] Protocol authentication
– [x] Packets as POJO’s
– [x] Compression (Gzip, Snappy, LZ)
– [x] All major mod loaders (neoforge soon tm)
– [ ] API for registering raw protocols (http, ssh, etc)
– [x] Custom serialization
– [ ] Custom SSL providers/certs
– [ ] Muti-protocol connections
– [ ] Tell me what you want to see!

### Project Setup
In your build.gradle include

*** Note: **Do not shade protoweaver! It will not work properly. ProtoWeaver is a mod/plugin that is installed along side yours!**
“` gradle
repositories {
maven { url “https://maven.mrnavastar.me/releases” }
}

dependencies {
// ‘common’ can be replaced with any of: `client`, `fabric`, `forge`, `paper` or `proxy`.
implementation “me.mrnavastar.protoweaver:common:1.3.11”
}
“`

### Creating a Protocol
Protocols are very customizable with a lot of built in functionality. Here is an example protocol:
“`java
Protocol protocol = Protocol.create(“my_mod_id”, “cool_protocol”)
.setCompression(CompressionType.GZIP)
.setServerHandler(MyCustomServerHandler.class)
.setClientHandler(MyCustomClientHandler.class)
.setMaxConnections(15)
.addPacket(String.class)
.build();

// Load the protocol before it can be used
ProtoWeaver.load(protocol);
“`

### Sending packets
Sending packets is extremely simple. Any POJO that has been added to the protocol (See [Creating a Protcol](#creating-a-protocol)) is a valid packet that can be sent. Note that all POJO serialization is handled through [kyro](https://github.com/EsotericSoftware/kryo), a fast and fast serialization library.
“`java
// If you have a reference to a ‘ProtoConnection’, you can simply:
connection.send(myObject);
// If you have a reference to a ‘ProtoClient’, you can also:
client.send(myObject);
“`

### Handling packets
All protocols need handlers in order to implement functionality. The client and server can either use the same handler, or both use different ones.
“`java
public class MyCustomServerHandler implements ProtoConnectionHandler {
// Note that all functions are optional to implement

@Override
public void void onReady(ProtoConnection connection) {
System.out.println(“awesome! looks like a new client has connected from: ” + connection.getRemoteAddress());
}

@Override
public void onDisconnect(ProtoConnection connection) {
System.out.println(“goodbye: ” + connection.getRemoteAddress());
}

@Override
public void handlePacket(ProtoConnection connection, Object packet) {
System.out.println(“wow! got: ” + packet.toString() + ” from: ” + connection.getRemoteAddress());
}
}
“`

“`java
public class MyCustomClientHandler implements ProtoConnectionHandler {
// Note that all functions are optional to implement

@Override
public void void onReady(ProtoConnection connection) {
System.out.println(“awesome! connected to: ” + connection.getRemoteAddress());
}

@Override
public void onDisconnect(ProtoConnection connection) {
System.out.println(“goodbye: ” + connection.getRemoteAddress());
}

@Override
public void handlePacket(ProtoConnection connection, Object packet) {
System.out.println(“saying hi!”);
connection.send(“Hey server!”);
}
}
“`

### Custom Serialization
Sometimes it can be useful to send minecraft objects or other premade POJO’s in your protocol. To allow this, you can register a custom serializer.

For example, here is a serializer for NBT tags:
“`java
public class NbtSerializer extends ProtoSerializer {

public NbtSerializer(Class type) {
super(type);
}

@Override
public void write(ByteArrayOutputStream buffer, CompoundTag value) {
try {
NbtIo.writeCompressed(value, buffer);
} catch (IOException e) {
Platform.throwException(e);
}
}

@Override
public CompoundTag read(ByteArrayInputStream buffer) {
try {
return NbtIo.readCompressed(buffer, NbtAccounter.unlimitedHeap());
} catch (IOException e) {
Platform.throwException(e);
throw new RuntimeException(e);
}
}
}
“`
Then to register the serializer, simply do:
“`java
Protocol protocol = Protocol.create(“my_mod_id”, “cool_protocol”)
.setCompression(CompressionType.GZIP)
.setServerHandler(MyCustomServerHandler.class)
.setClientHandler(MyCustomClientHandler.class)
.setMaxConnections(15)
.addPacket(CompoundTag.class, NbtSerializer.class)
.build();
“`

### More Docs Coming soon! Maybe a real website??

Protectcord

# 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.*

ProAntiTab

##### **![https://www.rayzs.de/proantitab/assets/Banner8.png](https://www.rayzs.de/proantitab/assets/Banner8.png)**

One of the simplest plugin & command hider!
Decide what plugins and commands your players should see! ^^

**placeholderapi support – free – no dependencies required**
___________________________________

**

****
****
**
# **A**BOUT
ProAntiTab is an advanced **plugin hider** with **many features** and a very simple to understand system. It prevents your server from **plugin spoofers** used by hack clients, manipulates the **tab-completion**, blocks unwanted **suggestions** and much more!
#####

#####

# **I**N ACTION
![https://www.rayzs.de/proantitab/assets/beforeafter5.png](https://www.rayzs.de/proantitab/assets/beforeafter5.png)

######
# **C**USTOM SERVER BRAND (F3)
Create your own animated custom server brand on your Spigot, Bungeecord and Velocity server!
*![https://www.rayzs.de/proantitab/assets/csbr.gif](https://www.rayzs.de/proantitab/assets/csbr.gif)![https://www.rayzs.de/proantitab/assets/edc.gif](https://www.rayzs.de/proantitab/assets/edc.gif)*

open config.yml section

“`yaml
# This feature allows you to customize your server-brand you see when you press F3.
# Normally there stands something like ‘Purpur’, or ‘Spigot’.
# With this feature you are able to change and even animate it! ^^
custom-server-brand:
enabled: false

# Determines the speed in that the animation goes
repeat-delay: 3

# This here is the list of the animation
# Possible placeholders:
# %player% – name of the player
# %displayname% – displayname of the player
# %world% – name of world where the player is
# and the other placeholders from PlaceholderAPI
brands:
– ‘&f&lP&froAntiTab |’
– ‘&fP&lr&foAntiTab /’
– ‘&fPr&lo&fAntiTab -‘
– ‘&fPro&lA&fntiTab |’
– ‘&fProA&ln&ftiTab ‘
– ‘&fProAn&lt&fiTab |’
– ‘&fProAnt&li&fTab /’
– ‘&fProAnti&lT&fab -‘
– ‘&fProAnti&lT&fab ‘
– ‘&fProAntiT&la&fb |’
– ‘&fProAntiTa&lb&f /’
– ‘&fProAntiTab -‘
– ‘&fProAntiTab ‘
“`

######
# **U**SE BLACKLIST AS WHITELIST
You have way too many commands to block? Don’t worry.
There’s a section in the config.yml located pretty much high that allows you to turn the blacklist into a whitelist instead. This will block every command on your server except for those that are listed.

section in config.yml

“`yaml
# This is a very necessary feature if you have way too many commands to block and instead decide
# to whitelist specific commands.
# Enabling this will disable ALL commands except for those that are in the (group-)list.
turn-blacklist-to-whitelist: false
“`

######
# **A**NTI PLUGIN SPOOFING
##### ProAntiTab is able to detect and block plugin spoofing attempts used by hack clients.
*![https://www.rayzs.de/proantitab/assets/noplspoof.png](https://www.rayzs.de/proantitab/assets/noplspoof.png)*

######
# **B**LOCK SUB ARGUMENTS
We all know the problem when players should be able to use some of the commands but should not see literally EVERY sub-argument in a command. Well, then just blend them out? ProAntiTab can do this for you and it’s very easy to setup as well! (See some examples below)

![https://www.rayzs.de/proantitab/assets/subargs.png](https://www.rayzs.de/proantitab/assets/subargs.png)

example

“`yaml
# Let’s say you just want to allow “/help Minecraft” only and not “/help apple”.
# It will also automatically allow everything after “/help Minecraft …”
– help Minecraft

# [CMD] = Allow the execution of the command
# [TAB] = Allow the tab-completion of the command
– “[CMD]cmi tpa” # Only executable. Not tab-completable
– tpa # Executable & Tab-Completable

# %hidden_online_players% = Online players (Removed from tab-completion)
# %online_players% = Online players
# %hidden_players% = Registered players (Removed from tab-completion)
# %players% = Registered players
# %numbers% = Numbers, such as 1000 or 1.000
# _- = Block everything after
– “tpa %online_players%”
– “sell %numbers%”

# Using the operator _- at the end cancels every argument afterwards and blocks it.
# This will allow the player to use “/help Minecraft” but not “/help Minecraft xyz”
– help Minecraft _-
“`

######
# **B**LOCK COLON COMMANDS
Blocking each and every colon command like essentials:spawn by hand is not an easy task. But with this simple feature, you can easily block all colon commands automatically! Only people with the proantitab.namespace permission can see and use these commands again.

![https://www.rayzs.de/proantitab/assets/namespace.png](https://www.rayzs.de/proantitab/assets/namespace.png)

open config.yml section

“`yaml
#>> HTP (Overwritten)
# Here you can disable all namespace commands.
# Namespace commands are commands like plugin:command (e.g: essentials:warp)
# You can bypass this restriction with the proantitab.namespace permission.
block-namespace-commands:
enabled: false
“`

######
# **C**USTOM PLUGINS LIST
Just blocking the /plugins command is pretty boring. This feature here allows you to make it more interesting by displaying for example fake plugins.

![https://www.rayzs.de/proantitab/assets/fakeplugins2.PNG](https://www.rayzs.de/proantitab/assets/fakeplugins2.PNG)

open config.yml section

“`yaml
#>> HTP (Overwritten)
# Here you can customize your own fake ‘/plugins’ command.
custom-plugins:
enabled: true
commands:
– pl
– plugins
– bukkit:pl
– bukkit:plugins
message:
– ‘&fPlugins (0):’
“`

######
# **C**USTOM VERSION COMMAND
Who wouldn’t like to pretend to own a custom server-jar? Have fun customizing your very own /version command to your personal liking.

![https://www.rayzs.de/proantitab/assets/custom-version.png](https://www.rayzs.de/proantitab/assets/custom-version.png)

open config.yml section

“`yaml
#>> HTP (Overwritten)
# Here you can customize your own fake ‘/version’ command.
custom-version:
enabled: true
commands:
– version
– ver
– icanhasbukkit
– bukkit:ver
– bukkit:version
message:
– ‘&fThis server is running CraftBukkit version git-NasaSpigot-294 (MC: X)’
“`

######
# **C**USTOM UNKNOWN COMMAND MESSAGE
The Bukkit/Spigot version of ProAntiTab gives your the possibility to create your own unknown-command message to align it with the blocked-command message for example.

![https://www.rayzs.de/proantitab/assets/customunknowncommand.PNG](https://www.rayzs.de/proantitab/assets/customunknowncommand.PNG)

open config.yml section

“`yaml
# Now there we come to the good stuff! ^^
# If ProAntiTab is loaded on a Spigot server, you will see this option right here.
# With that you can also customize your own “Unknown Command”-message.
custom-unknown-command:
enabled: true
message:
– ‘&cThis command does not exist!’
“`

######
# **C**USTOM PROTOCOL PING
Do you know the red text message at the players count when you ping a server with the wrong version? Exactly this holds the information of what kind of server your proxy server is running at. This feature hides the version of the proxy with a custom made one. It’s enabled by default but doesn’t show the text. The text can be seen when someone pings the server with the wrong version or uses a resolver. This picture shows you what someone with the wrong version would see, unless the “always-show” is enabled. If this option is enabled, this text will always appear.

![https://www.rayzs.de/proantitab/assets/custom-protol-ping.png](https://www.rayzs.de/proantitab/assets/custom-protol-ping.png)

open config.yml section

“`yaml
# Change the protocol for the version name when the server is being pinged
# (!) Warning: It’s required to use Paper or Purpur to use this feature!
# (!) Supported server versions: 1.12.2 – latest
custom-protocol-ping:
enabled: false

# Normally it would only display when someone pings the server with the wrong version.
# Enabling this will always display the protocol and replace it with the normal player count.
always-show: false

# This number here determines the outcome for the %online_extended% placeholder.
# It’s the current amount of players increased by this number.
# For example: 5/20 becomes 6/20
extend-online-count: 1
# true: Use new calculated online-count (%online_extended%) as max-players count.
# false: Use the default max-players count.
use-as-maxplayers: false

# Enabling this option hides the list of players on your server,
# when you hover over the player count.
hide-players: true

# The displayed protocol message
# Available placeholders:
# %online% – current online player count
# %online_extended% – manipulated online player count
# %max% – max player count
protocol: ‘&f&lProAntiTab &7(&a%online%&7/&c%max%&7)’
“`

######
# **C**USTOM RESPONSE ACTIONS
For some, it’s important to determine how the response message should be or what should happen. You can customize that factor to your personal liking and use different actions to have full control over your blocked commands.

![https://www.rayzs.de/proantitab/assets/custom-response-title-smaller-2.png](https://www.rayzs.de/proantitab/assets/custom-response-title-smaller-2.png)

![https://www.rayzs.de/proantitab/assets/custom-response-down-smaller-3.png](https://www.rayzs.de/proantitab/assets/custom-response-down-smaller-3.png)

Bukkit/Spigot examples

“`yaml
# ____ ___ __ _ ______ __
# / __ _________ / | ____ / /_(_)_ __/___ _/ /_
# / /_/ / ___/ __ / /| | / __ / __/ / / / / __ `/ __
# / ____/ / / /_/ / ___ |/ / / / /_/ / / / / /_/ / /_/ /
# /_/ /_/ ____/_/ |_/_/ /_/__/_/ /_/ __,_/_.___/
# custom-responses.yml
#
# Here you can configure a few of the blocked commands a bit further.
# But what exactly is this here? Every command that would normally respond with the typical “command is blocked” message, can be configured in here!
# And how does it work? It’s simple. You just provide the a trigger of the command that would be normally blocked.
# Commands that would normally work won’t send the messages you have set here.
# This way PAT can offer you full control over certain commands and their normal responses.
# What are these action section at each block?
# This is an additional feature to make your responses much more alive.
# Example actions that can be used are the following:
# Execute console command:
# Syntax: console::command
# Example: console::say %player% is an evil player
# Execute player command:
# Syntax: execute::command
# Example: execute::help
# Send actionbar:
# Syntax: actionbar::text
# Example: actionbar::&cThis is not cool %player%!
# Send title:
# Syntax: title::title::subtitle::5::20::5
# Example: title::&aTest title::&cHello %player%!
# Play sound:
# Syntax: sound::soundName::volume::pitch
# Example: sound::ENTITY_ENDER_DRAGON_GROWL::1.0::1.0
# Give potion effect:
# Syntax: effect::potionEffect::duration::amplifier
# Example: effect::BLINDNESS::45::1

# Here are a few examples:

# Example with kits.
# In here we only trigger the given message, if the player would type “/kit …”.
# If this command would work through sub-arguments, then the player would only able to execute the command with the
# listed sub-arguments assigned to it. Everything else will result with the set message in there.
# —
#example-with-kits:
# triggers:
# – “kit *”
# message:
# – “&cThis kit does not exist!”
# actions:
# – “actionbar::&cSorry %player%, but this kit does not exist!”

# Here another example with an auctionhouse plugin.
# In here we only trigger the given message, if the player would type “/ah plugin”.
# Normally it would print out the “command is blocked” message, because PAT would have blocked it in our case.
# Therefore, we can also assign a custom response message to it.
# —
#example-with-auctionhouse:
# triggers:
# – “ah plugin”
# message:
# – “&cThis sub-command does not exist. Please type: &e/ah help”
# actions:
# – “console::say That’s not nice %player%!”
# – “effect::BLINDNESS::45::1”
# – “sound::ENTITY_ENDER_DRAGON_GROWL::1.0::1.0”
# – “title::&cHey!::&cYou can’t do that %player%!::5::20::5”
# – “actionbar::&cNop, sorry %player%”
“`

Proxy examples

“`yaml
# ____ ___ __ _ ______ __
# / __ _________ / | ____ / /_(_)_ __/___ _/ /_
# / /_/ / ___/ __ / /| | / __ / __/ / / / / __ `/ __
# / ____/ / / /_/ / ___ |/ / / / /_/ / / / / /_/ / /_/ /
# /_/ /_/ ____/_/ |_/_/ /_/__/_/ /_/ __,_/_.___/
# custom-responses.yml
#
# Here you can configure a few of the blocked commands a bit further.
# But what exactly is this here? Every command that would normally respond with the typical “command is blocked” message, can be configured in here!
# And how does it work? It’s simple. You just provide the a trigger of the command that would be normally blocked.
# Commands that would normally work won’t send the messages you have set here.
# This way PAT can offer you full control over certain commands and their normal responses.
# What are these action section at each block?
# This is an additional feature to make your responses much more alive.
# Example actions that can be used are the following:
# Execute console command:
# Syntax: console::command
# Example: console::send %player% fallback
# Execute player command:
# Syntax: execute::command
# Example: execute::help
# Send actionbar:
# Syntax: actionbar::text
# Example: actionbar::&cThis is not cool %player%!
# Send title:
# Syntax: title::title::subtitle::5::20::5
# Example: title::&aTest title::&cHello %player%!

# Here are a few examples:

# Example with kits.
# In here we only trigger the given message, if the player would type “/kit …”.
# If this command would work through sub-arguments, then the player would only able to execute the command with the
# listed sub-arguments assigned to it. Everything else will result with the set message in there.
# —
#example-with-kits:
# triggers:
# – “kit *”
# message:
# – “&cThis kit does not exist!”
# actions:
# – “actionbar::&cSorry %player%, but this kit does not exist!”

# Here another example with an auctionhouse plugin.
# In here we only trigger the given message, if the player would type “/ah plugin”.
# Normally it would print out the “command is blocked” message, because PAT would have blocked it in our case.
# Therefore, we can also assign a custom response message to it.
# —
#example-with-auctionhouse:
# triggers:
# – “ah plugin”
# message:
# – “&cThis sub-command does not exist. Please type: &e/ah help”
# actions:
# – “console::say That’s not nice %player%!”
# – “title::Hey!::You can’t do that %player%!::30::3000::30”
# – “actionbar::Nop, sorry %player%”
“`

#####
# **N**EGATE COMMANDS
It’s not a must to write each and every possible sub-argument by hand. The same goes for commands in general.
You can negate them with the help of the negation operator (“!“).

*![https://www.rayzs.de/proantitab/assets/neg.png](https://www.rayzs.de/proantitab/assets/neg.png)*

example

“`yaml
# Allows /gamemode and all of its sub-arguments
# except “/gamemode creative”
– “gamemode”
– “!gamemode creative”
– ‘!gamemode toggle’
“`

“`yaml
# Allows all commands, except /anvil
– “*”
– “!anvil”
“`

#####
# **A**UTO-ADD ALL PLUGIN COMMANDS
Sometimes it’s so annoying to add all commands from a certain plugin by hand. That’s why ProAntiTab offers the possebility to simply add all commands from a certain plugin with a simple shortcut.

You can simply add “plugin=“ to add all commands from a plugin automatically.
**Only works for standalone Spigot (+Forks) servers**

example

“`yaml
# Allows all Essentials commands except /anvil.
# /gamemode is limited to only two sub-arguments
– “plugin=essentials”
– “!anvil”
– “gamemode creative”
– “gamemode survival”
“`

######
# **B**LOCK ON SPECIFIC SERVERS
If you use ProAntiTab on a network, you can pretty easily manage on what servers what commands should exist. Everything can be handled via the proxy and does not require additional maintenance on the backend servers.

For this, just follow the official [setup](https://github.com/RayzsYT/ProAntiTab/wiki/How-to-setup#proxy–spigot-eg-bungeecord–spigot) and [how-to](https://github.com/RayzsYT/ProAntiTab/wiki/How-to#introduction) guide, which can be both found on the [Github wiki](https://github.com/RayzsYT/ProAntiTab/wiki).

######
# **G**ROUP SYSYTEM
The PAT group system allows you to allow certain commands only for a certain group of people. PAT group commands are mainly for **whitelisting** commands, can merge with other groups, and so on.

They can also be used to blacklist commands by negating the commands inside there. But for this to work, the option `allow-group-overruling` inside the `config.yml` needs to be enabled.

How to use the PAT group system in general can be seen on the [Github wiki](https://github.com/RayzsYT/ProAntiTab/wiki/How-to#use-the-group-system).

######
# **P**LACEHOLDERAPI & PAPIPROXYBRIDGE SUPPORT
Customization and uniqueness is an important factor for many server owners. That’s why PAT offers you the possebility to edit and use many of its placeholders with the widely spreaded plugin [PlaceholderAPI](https://www.spigotmc.org/resources/6245/). Accessing those placeholders on the proxy isn’t a problem either. With the support of the addtional plugin [PAPIProxyBridge](https://www.spigotmc.org/resources/108415/), PAT’s placeholders are even accessable on your proxy server.

Available placeholders

“`yaml
# Some general Placeholders to work with:
# %pat_general_user% = Get the name of the user who receives this message.
# %pat_general_version_current% = Get current version name of PAT.
# %pat_general_version_newest% = Get newest version name of PAT.

# Placeholders of some of the messages in the config.yml:
# %pat_message_unknowncommand% = Get the “unknown command”-message from the config.yml of PAT. [cancel-blocked-command]
# %pat_message_blocked% = Get the “command blocked”-message from the config.yml of PAT. [custom-unknown-command]

# Placeholders to list all commands:
# %pat_list_size_commands% = Get the amount of all listed commands.
# %pat_list_commands% = Get all listed commands.
# %pat_list_sorted_commands% = Get all listed commands in alphabetic order. (A-Z)
# %pat_list_reversed_groups% = Get all listed commands in reversed alphabetic order. (Z-A)

# Placeholders to list all commands of a group: (replace ‘xxx’ with the group-name)
# %pat_list_size_commands_group_xxx% = Get the amount of all commands of a group.
# %pat_list_commands_group_xxx% = Get all commands of a group.
# %pat_list_sorted_commands_group_xxx% = Get all commands of a group in alphabetic order. (A-Z)
# %pat_list_reversed_commands_group_xxx% = Get all commands of a group in reversed alphabetic order. (Z-A)

# Placeholders to list all groups:
# %pat_list_size_groups% = Get the amount of all available groups.
# %pat_list_groups% = Get all groups.
# %pat_list_sorted_groups% = Get all groups in alphabetic order. (A-Z)
# %pat_list_reversed_groups% = Get all groups in reversed alphabetic order. (Z-A)
“`

###

# **M**INIMESSAGE SUPPORT
## ![https://www.rayzs.de/proantitab/assets/possibilites.png](https://www.rayzs.de/proantitab/assets/possibilites.png)
##### You want to design your messages more unique? We got you covered! *(works on 1.17 server and above)*
*([Click here to see the documentation for the format](https://docs.advntr.dev/minimessage/format.html#)*)

Look at those few examples to see what kind of possibilities awaits you:

example 1

“`yaml
cancel-blocked-commands:
enabled: true
message: ‘&cThis command is &4&lBLOCKED&c!’
“`

![https://www.rayzs.de/proantitab/assets/example1.png](https://www.rayzs.de/proantitab/assets/example1.png)

example 2

“`yaml
cancel-blocked-commands:
enabled: true
message: ‘&cThis command is blocked! &7Click here to get a view of all available commands instead.’
“`

![https://www.rayzs.de/proantitab/assets/example2.png](https://www.rayzs.de/proantitab/assets/example2.png)

######
# **H**OW TO SETUP?
Despite of the fact that ProAntiTab is pretty easy to use, the setup is slidely different for each server engine.
It normally is already enough to simply load ProAntiTab on the certain server you wanna use it, but in order to use ProAntiTab with all its features, its recommended to follow the [official setup guide on the Github wiki](https://github.com/RayzsYT/ProAntiTab/wiki/How-to-setup).

**Please feel free to join the [Discord](https://www.rayzs.de/discord) server to request for help if the instruction is unclear or too complicated. ^^**

#
# **H**OW TO ALLOW COMMANDS?
[Please check out the wiki to get an idea on how PAT works and can be used.](https://github.com/RayzsYT/ProAntiTab/wiki/How-to)

If you want to bypass all blocked commands, simply give yourself the following permission: **proantitab.bypass**

Following permission is required to execute all listed commands within a certain group: **proantitab.group.**

######
# **C**OMMANDS & PERMISSIONS
All commands and their permissions are listed on the [documentation](https://www.spigotmc.org/resources/113172/field?field=documentation) page at the very buttom.

######
# **C**ONFIGURATION FILE

Bukkit/Spigot

[config.yml](https://github.com/RayzsYT/ProAntiTab/blob/v2.0.1/src/main/resources/files/bukkit-config.yml)

[storage.yml](https://github.com/RayzsYT/ProAntiTab/blob/v2.0.1/src/main/resources/files/bukkit-storage.yml)

Proxy (Bungeecord/Velocity)

[config.yml](https://github.com/RayzsYT/ProAntiTab/blob/v2.0.1/src/main/resources/files/proxy-config.yml)

[storage.yml](https://github.com/RayzsYT/ProAntiTab/blob/v2.0.1/src/main/resources/files/proxy-storage.yml)

######
## **bStats**
[![https://bstats.org/signatures/bukkit/ProAntiTab%20-%20Spigot.svg](https://bstats.org/signatures/bukkit/ProAntiTab%20-%20Spigot.svg)](https://bstats.org/plugin/bukkit/proantitab%20-%20spigot/20089)

[![https://bstats.org/signatures/bungeecord/ProAntiTab%20-%20Bungeecord.svg](https://bstats.org/signatures/bungeecord/ProAntiTab%20-%20Bungeecord.svg)](https://bstats.org/plugin/bungeecord/proantitab%20-%20bungeecord/20090)

[![https://bstats.org/signatures/velocity/ProAntiTab%20-%20Velocity.svg](https://bstats.org/signatures/velocity/ProAntiTab%20-%20Velocity.svg)](https://bstats.org/plugin/velocity/proantitab%20-%20velocity/21638)

[![https://www.rayzs.de/rayzsshield/assets/support.png](https://www.rayzs.de/rayzsshield/assets/support.png)](https://www.rayzs.de/discord)

polocloud-proxy

# PoloCloud Proxy Addon

The **PoloCloud Proxy Addon** is a user-friendly extension for [PoloCloud](https://polocloud.de/) that helps you manage your network! It includes the `/cloud` command, which allows you to start and stop services or activate maintenance work via command.
It is designed for all supported proxies, including Velocity and BungeeCord, and helps employees and players enjoy the best possible gaming experience.

## 💫 Features

– **Works on all supported proxies** – No need to install it on every backend server.
– **Service management via command** – Start or stop services via `/cloud` command
– **Permission-based commands** – Only players with the configured permission are able zu perform the commands.
– **Fully configurable** – Customize messages through `proxy-config.json`.
– **Lightweight & dependency-free** – Minimal performance impact.

## 🎟️ Permission
This permission is needed to perform commands or bypass the maintenance mode:
“`polocloud.addons.proxy.command.cloud“`
“`polocloud.addons.proxy.command.cloud.info“`
“`polocloud.addons.proxy.command.cloud.list“`
“`polocloud.addons.proxy.command.cloud.maintenance“`
“`polocloud.addons.proxy.command.cloud.players“`
“`polocloud.addons.proxy.command.cloud.start“`
“`polocloud.addons.proxy.command.cloud.stop“`
“`polocloud.addons.proxy.maintenance.bypass“`

📂 Installation
Download the latest release of the PoloCloud Proxy Addon.
Place the .jar file into your plugins folder.
Restart the proxy instance.
Edit the generated proxy-config.json to customize messages.
Reload or restart the proxy to apply the changes.

💡 Use Cases
Offer players the best possible gaming experience with a configurable MOTD and tab list.
Inform your players about maintenance work via a configurable MOTD and only allow authorized team members to access the network during maintenance work.

With the PoloCloud Proxy Addon, you can ensure that players get the best possible gaming experience – simple, configurable, and reliable.

polocloud-notify

# PoloCloud Notify Addon

The **PoloCloud Notify Addon** is a lightweight and easy-to-use extension for [PoloCloud](https://polocloud.de/) that sends notifications to players with specific permissions when services start, stop, or are starting.
It is designed to work on all supported proxies, including **Velocity** and **BungeeCord**, helping staff and players stay informed about the status of network services in real time.

## ✨ Features

– **Works on all supported proxies** – No need to install it on every backend server.
– **Real-time service notifications** – Alerts players when services are starting, started, or stopped.
– **Permission-based notifications** – Only players with the configured permission will receive messages.
– **Fully configurable** – Customize messages and permissions through `notify-config.json`.
– **Lightweight & dependency-free** – Minimal performance impact.

## 🎟️ Permission
This permission is needed to receive notifications:
“`
polocloud.addons.notify.receive.starting
“`
“`
polocloud.addons.notify.receive.online
“`
“`
polocloud.addons.notify.receive.shutdown
“`

## 📂 Installation

1. Download the latest release of the **PoloCloud Notify Addon**.
2. Place the `.jar` file into your plugins folder.
3. Restart the proxy instance.
4. Edit the generated `notify-config.json` to customize messages and permissions.
5. Reload or restart the proxy to apply the changes.

## 💡 Use Cases

– Keep staff informed about service status changes across the network.
– Notify players with specific roles or permissions about server availability.
– Customize notifications to fit your community’s style and needs.

With the PoloCloud Notify Addon, you ensure that the right players stay up to date with real-time information about your network’s services — simple, configurable, and reliable.

polocloud-hub

# PoloCloud Hub Addon

The **PoloCloud Hub Addon** is a lightweight and easy-to-use extension for [PoloCloud](https://polocloud.de/) that adds a `/hub` command to your network.
It is designed to work on all supported proxies, including **Velocity** and **BungeeCord**, allowing players to quickly return to the hub or lobby server from anywhere.

## ✨ Features

– **Works on all supported proxies** – No need to install it on every backend server.
– **`/hub` command** – Instantly send players back to the fallback server.
– **Fully configurable** – Customize everything through `config.json`:
– **Messages** – The text players see when they run the command.
– **Command aliases** – Add shortcuts like `/l` or `/lobby`.
– **Custom prefix** – Match the look and feel of your server.
– **Lightweight & dependency-free** – Minimal performance impact.

## 🎟️ Permission
This permission is needed to execute the command:
“`
polocloud.addons.hub.command
“`

## 📂 Installation

1. Download the latest release of the **PoloCloud Hub Addon**.
2. Place the `.jar` file into your plugins folder.
3. Restart the proxy instance.
4. Edit the generated `hub-config.json` to customize the message, aliases, and prefix.
5. Reload or restart the proxy to apply the changes.

## 💡 Use Cases

– Provide players with a simple and intuitive way to return to the fallback server.
– Add multiple aliases for better accessibility (e.g., `/hub`, `/l`, `/lobby`).
– Brand your hub command with your own prefix and style.

With the PoloCloud Hub Addon, your players will always have a quick, easy, and customizable way back to your hub.

Project: Maintenance Universal


image

## 🎉 Project: Maintenance Universal

### ✅ Core Features
– Basic maintenance mode (enable/disable/toggle)
– Whitelist system with add/remove/list/clear
– Permission system with bypass support
– Database support (SQLite, MySQL, PostgreSQL)
– Statistics tracking (sessions, kicks, blocked connections)
– Configuration system with reload command

### 📦 Platform Support
**Paper/Spigot/Purpur:** 1.14 – 1.21.1
**Velocity:** 3.0.0 – 3.4.0
**BungeeCord/Waterfall:** All versions
**Folia:** 1.19.4+ (thread-safe operations)

### 🎮 Commands Available
– `/maintenance enable [reason]` – Enable maintenance mode
– `/maintenance disable` – Disable maintenance mode
– `/maintenance toggle` – Quick toggle
– `/maintenance status` – View current status
– `/maintenance whitelist ` – Manage whitelist
– `/maintenance stats` – View statistics
– `/maintenance reload` – Reload configuration

### 🔐 Permissions
– `maintenance.admin` – Full access
– `maintenance.bypass` – Bypass maintenance mode
– `maintenance.command` – Use basic commands
– `maintenance.toggle` – Enable/disable maintenance
– `maintenance.whitelist` – Manage whitelist
– `maintenance.stats` – View statistics
– `maintenance.reload` – Reload config

### 🗄️ Database Options
– SQLite (default, zero config)
– MySQL with HikariCP connection pooling
– PostgreSQL support

### 🎨 Customization
– Custom kick messages
– Configurable MOTD during maintenance
– Message customization in config.yml

### 📝 Notes
– Redis sync: Planned for future release
– Timer scheduling: Planned for future release
– PlaceholderAPI: Planned for future release
– Fabric/Forge versions: Planned for future release


image

**Download the correct JAR for your platform:**
– **Paper/Spigot/Purpur/Folia** → Use Paper JAR
– **Velocity** → Use Velocity JAR
– **BungeeCord/Waterfall** → Use BungeeCord JAR