ProxyPlayerNotify

## ProxyPlayerNotify

**More info & guide:** GitHub – ProxyPlayerNotify

**Latest builds (features + bug fixes)**: GitHub Actions – ProxyPlayerNotify

**What it does**
Network-wide **join/leave/switch** messages with per-player toggles, vanish support, LuckPerms/PAPI placeholders, and optional webhook ping.

> **Note:** This is a **proxy** plugin — install on **BungeeCord/Waterfall** or **Velocity** (not on Spigot/Paper).

**Works on**: BungeeCord/Waterfall, Velocity

**How to use**

1. Install on your **proxy** and restart to generate the config.
2. Customize messages/placeholders and (optionally) webhook settings.
3. Grant the view/toggle permissions as needed.

**Config (YAML)**

“`yaml
# ProxyPlayerNotify Config

# This config file contains settings for the ProxyPlayerNotify plugin.
# Use this file to customize the join/leave messages and permissions.
# Use n to create multiple lines/messages to players.
# Set message to “” to not send any message/empty.

# Network Join Message
# This message is displayed when a player joins the network.
# Placeholders available: %player%, %lp_prefix%, %lp_suffix%, %server%, %time%.
join_message: “%player% has joined the network (Logged in server: %server%) at %time%”

# Network Private Join Message
# This message is displayed only to the player who joins the network.
# It has a higher priority than the public join message.
# Placeholders available: %player%, %lp_prefix%, %lp_suffix%, %server%, %time%.
join_private_message:
– “&aWelcome, %player%!”
– “&bYou have joined the server %server% at %time%.”
– “Enjoy your stay!”

# First Join Message
# This message is displayed when a player joins the network for the first time.
# Placeholders available: %player%, %lp_prefix%, %lp_suffix%, %server%, %time%.
first_join_message: “%player% has joined the network for the first time on %server% at %time%”

# First Join Private Message
# This message is displayed only to the player joining for the first time.
# Placeholders available: %player%, %lp_prefix%, %lp_suffix%, %server%, %time%.
first_join_private_message: “&aWelcome for the first time, %player%!”

# Servers Switch Message
# This message is displayed when a player switches to a different server.
# Placeholders available: %player%, %last_server%, %server%, %time%, %lp_prefix%, %lp_suffix%.
switch_message: “%player% has switched from %last_server% and joined to the %server% server at %time%”

# Network Leave Message
# This message is displayed when a player leaves the network.
# Placeholders available: %player%, %lp_prefix%, %lp_suffix%, %last_server%, %time%.
leave_message: “%player% has left the network (Last server: %last_server%) at %time%”

# Delay for Join Messages
# This option sets the delay before sending the join message after a player connects.
# For example, join_message_delay: 49 will send the message after 49 ticks.
# Warning: Setting this value too low may cause messages not to be sent or be blank placeholder if the server name is not yet available.
join_message_delay: 45

# Delay for First Join Messages
# This option sets the delay before sending the first join message after a player connects.
first_join_message_delay: 10

# Delay for Private Join Messages
# This option sets the delay before sending the private join message to the joining player.
# For example, join_private_message_delay: 50 will send the message after 50 ticks.
# Warning: Setting this value too low may cause messages not to be sent or be blank placeholder if the server name is not yet available.
join_private_message_delay: 50

# Delay for First Join Private Messages
# This option sets the delay before sending the first join private message to the joining player.
first_join_private_message_delay: 10

# Delay for Switch Messages
# This option sets the delay before sending the switch message after a player switches servers.
# For example, switch_message_delay: 0 will send the message after 0 ticks.
switch_message_delay: 0

# Disable messages for vanished players (Currently supports PremiumVanish and SuperVanish)
disable_vanish_notifications: false

# Option to let players rejoin the server they were on before they left the network.
# If this is enabled, the player will be sent to the last server on join in which they were on before they left the network.
# If enabled, the message delay options would need to be increased so that the messages can get the server
join_last_server: false

# Enable MiniMessage format parsing for all messages
use_minimessage: false

# Permissions
# Use these settings to control who can see the join/leave messages.
# Enable permissions if you want to use permissions and want to use next two options.
# If permissions enabled Then if notify_message is true and the player doesn’t have ppn.notify permission, then their join/leave/message will not be sent.
# If permissions enabled Then if hide_message is true and the player doesn’t have ppn.view permission, then they won’t see the others’ join/switch/leave messages.
permission:
# Enable this if you want to use permissions and want to use next two options.
permissions: false

# Notify Messages
# If this is true and the player doesn’t have ppn.notify permission, then their join/leave/message will not be sent.
notify_message: false

# Hide Messages
# If this is true and the player doesn’t have ppn.view permission, then they won’t see the others’ join/switch/leave messages.
hide_message: false

# Server Names
# Define custom server names here. Players can join/leave/switch to the server using the custom names specified below.
ServerNames:
example: “example-1”
lobby: “Hub”

# Disabled Servers
# Define the backend servers (lowercase) where the join/switch/leave messages should not be sent.
# In simple words, no messages of this plugin will be sent to players on that server
# In short: No activity notifications are sent to players on these servers.
DisabledServers:
– “example-1”
– “other-backend-server”

# Private Servers
# Specify the private servers (lowercase) where if player joins, leaves, and switches from and to, notifications should not be sent.
# Think about them like admin servers
# When someone joins it, the whole proxy should not be notified about that because you kind of want to keep that server private/secret and not let the players know.
# In short: Activity notifications related to these servers are not broadcasted across the entire network.
PrivateServers:
– “example”
– “private-server”

# Limbo Servers
# Specify the limbo servers (lowercase) where player join, leave, and switch notifications should be managed differently.
# These servers act as pass-throughs most of the time and can be configured to adjust notification behavior accordingly.
# When a player joins a limbo server, no network-wide join notification is sent.
# When a player switches from a limbo server to a game server, it should send a join notification as if the player is joining the network for the first time.
# Conversely, when a player switches from a game server to a limbo server, it should send a leave notification as if the player is leaving the network.
# This configuration helps avoid unnecessary notifications and prevents stealthy movements between public and private parts of the network.
# In short: Join and leave notifications are sent based on transitions to and from these servers to manage network-wide notifications effectively.
LimboServers:
– “limbo-afk”

# Disabled Players
# Specify the players (lowercase) that should not send any notification messages.
# They will also will not recieve join_private_message.
# It is not recommended to use this feature and instead use permissions for each group/player
DisabledPlayers:
– “player1”
– “player2”

# Webhook
# Configure a webhook notification sent when a player joins the network.
# Placeholders available: %player%, %server%, %time%.
webhook:
enabled: false
url: “”
message: “%player% joined %server% at %time%”
# Send webhook as Discord embed (recommended). If true, the message above is used as the embed description.
use_embed: true
# Embed color as decimal RGB (e.g., 3447003 is Discord “blurple”).
embed_color: 3447003

“`

**Support**
GitHub Issues: https://github.com/NewAmazingPVP/ProxyPlayerNotify/issues
Discord: https://discord.gg/u3u45vaV6G

ProxyOnlineLinker

# 🔀 ProxyOnlineLinker

## 🌐 Overview

**ProxyOnlineLinker** is a plugin designed to link online player counts between proxies and servers in
Minecraft. It supports multiple server types
including Spigot, BungeeCord, Velocity,
TransferProxy, making it a versatile solution
for server administrators looking to manage player counts effectively across different platforms.

## ✨ Features

– **Multi-Platform Support**: Compatible with Spigot, BungeeCord, Velocity and TransferProxy servers.
– **Highly configurable**: Configure sources, cache, update intervals, and more.
– **Performant**: Lightweight and optimized for performance.

📚 Consult the wiki for more information.

## 📥️ Installation

1. Download the latest version of ProxyOnlineLinker from the Releases page.
2. Place the downloaded `.jar` file into the `plugins` folder of your server.
3. Start or restart your server to generate the configuration files.
4. Modify the `config.yml` file to suit your server’s needs.

## ❓ Use cases

Linking the number of connected users can be useful in cases where you have multiple servers that are not directly
hosted by the same proxy. In a multi-proxy environment, or simply for independent projects hosted by the same
organization.
Finally, the project was initially designed for TransferProxy, a project
that uses packet transfers to redirect players
without holding the connection. ProxyOnlineLinker can therefore also be used for projects that use packet transfers.

## 🔌 Contributing

Contributions are welcome! Please submit pull requests or open issues on GitHub.

⭐ If you’re interested in the project, please leave a star to show your support. It’s through contributions like these
that the project is able to exist and thrive.

## 📄 License – MIT

This project is licensed under the MIT License. See the LICENSE file for more details.

ProxyCore

![Version](https://github.com/YesithTK/ProxyCore)
![Platform](https://github.com/YesithTK/ProxyCore)
![Java](https://adoptium.net/)
![Build](https://maven.apache.org/)
![License](./LICENSE)
![Author](https://github.com/YesithTK)

> **ProxyCore** is a powerful, lightweight, all-in-one proxy utilities plugin built for **BungeeCord** and **Velocity** networks.
> 20 essential commands, automatic announcements, maintenance mode, private messaging, staff tools — all in a single plugin with **zero external dependencies**.

## 📋 Table of Contents

– [Features](#-features)
– [Requirements](#-requirements)
– [Installation](#-installation)
– [Commands](#-commands)
– [Permissions](#-permissions)
– [Configuration](#-configuration)
– [API](#-api)
– [Roadmap](#-roadmap)
– [Credits](#-credits)
– [License](#-license)

## ✨ Features

| 🔍 Network Info | 📢 Communication | 🚀 Player Management | ⚙️ Administration |
|:—:|:—:|:—:|:—:|
| Find players | Global announcements | Send players across servers | Maintenance mode |
| Server list | Staff chat | Move all players at once | Network-wide alerts |
| Network stats | Private messages | Kick from proxy | Config hot-reload |
| Ping checker | Reply system | Staff list | Uptime display |
| IP lookup | Broadcast with prefix | Force commands (sudo) | Per-server player list |

– ✅ **Dual platform** — One codebase, two JARs: BungeeCord & Velocity
– ✅ **Zero dependencies** — No external libraries required at runtime
– ✅ **Hot reload** — Apply config changes without restarting the proxy
– ✅ **Auto announcements** — Rotating messages with a configurable interval
– ✅ **Maintenance mode** — Kicks non-staff players and blocks new joins
– ✅ **Developer API** — Clean `proxycore-api` module for building addons
– ✅ **Multi-module Maven** — `proxycore-api`, `proxycore-bungeecord`, `proxycore-velocity`

## 📦 Requirements

| Requirement | Version |
|————-|———|
| Java | 17 or higher |
| BungeeCord | 1.20+ |
| Velocity | 3.x |
| Maven | 3.8+ *(for building from source)* |

## 🚀 Installation

### Pre-built JAR *(recommended)*

1. Download the correct JAR from Releases:
– `ProxyCore-BungeeCord-1.0.0.jar` → for BungeeCord
– `ProxyCore-Velocity-1.0.0.jar` → for Velocity
2. Drop it into your proxy’s `plugins/` folder.
3. Start or restart the proxy.
4. Edit the generated `plugins/ProxyCore/config.yml` and `messages.yml`.
5. Run `/proxyreload` to apply changes without restarting.

### Build from Source

“`bash
# Clone the repository
git clone https://github.com/YesithTK/ProxyCore.git
cd ProxyCore

# Build BungeeCord JAR
mvn clean package -pl proxycore-bungeecord -am

# Build Velocity JAR
mvn clean package -pl proxycore-velocity -am
“`

Output JARs:
– `proxycore-bungeecord/target/ProxyCore-BungeeCord-1.0.0.jar`
– `proxycore-velocity/target/ProxyCore-Velocity-1.0.0.jar`

## 💬 Commands

> **Note:** Velocity command names are prefixed with `v` — e.g. `/glist` → `/vglist`, `/send` → `/vsend`.

### 🔍 Network Information

| Command | Description | Permission |
|———|————-|————|
| `/find ` | Show which server a player is on | `proxycore.find` |
| `/glist` | List all servers with their player counts | `proxycore.glist` |
| `/network` | Display global network stats | `proxycore.network` |
| `/pping [player]` | Check your own or another player’s ping | `proxycore.ping` |
| `/pip ` | Retrieve a player’s IP address *(admin)* | `proxycore.ip` |

### 📢 Communication

| Command | Description | Permission |
|———|————-|————|
| `/announce ` | Broadcast a global announcement | `proxycore.announce` |
| `/staffchat ` | Send a message visible only to staff | `proxycore.staffchat` |
| `/pmsg ` | Send a private message across servers | `proxycore.msg` |
| `/reply ` | Reply to your last private message | `proxycore.msg` |
| `/pbroadcast ` | Network-wide broadcast with custom prefix | `proxycore.broadcast` |

### 🚀 Player Management

| Command | Description | Permission |
|———|————-|————|
| `/psend ` | Move a player to another server | `proxycore.send` |
| `/sendall ` | Move all online players to a server | `proxycore.sendall` |
| `/pkick [reason]` | Kick a player from the entire network | `proxycore.kick` |
| `/stafflist` | List all currently online staff members | `proxycore.stafflist` |
| `/psudo ` | Force a player to execute a command | `proxycore.sudo` |

### ⚙️ Administration

| Command | Description | Permission |
|———|————-|————|
| `/maintenance ` | Toggle maintenance mode on the network | `proxycore.maintenance` |
| `/alert ` | Send a highlighted alert box to all players | `proxycore.alert` |
| `/plist ` | List all players on a specific server | `proxycore.plist` |
| `/proxyreload` | Reload ProxyCore config without restarting | `proxycore.reload` |
| `/uptime` | Show how long the network has been running | `proxycore.uptime` |

## 🔐 Permissions

| Permission | Description | Default |
|————|————-|———|
| `proxycore.find` | Use `/find` | `true` |
| `proxycore.glist` | Use `/glist` | `true` |
| `proxycore.network` | Use `/network` | `true` |
| `proxycore.ping` | Check own ping | `true` |
| `proxycore.ping.others` | Check other players’ ping | `op` |
| `proxycore.ip` | View a player’s IP address | `op` |
| `proxycore.announce` | Send global announcements | `op` |
| `proxycore.broadcast` | Send network-wide broadcasts | `op` |
| `proxycore.staffchat` | Access and read staff chat | `op` |
| `proxycore.msg` | Send and receive private messages | `true` |
| `proxycore.send` | Move players between servers | `op` |
| `proxycore.sendall` | Move all players to a server | `op` |
| `proxycore.kick` | Kick players from the network | `op` |
| `proxycore.stafflist` | View the online staff list | `true` |
| `proxycore.staff` | Appear in `/stafflist` | `op` |
| `proxycore.sudo` | Force players to run commands | `op` |
| `proxycore.maintenance` | Toggle maintenance mode | `op` |
| `proxycore.maintenance.bypass` | Join the network during maintenance | `op` |
| `proxycore.alert` | Send network-wide alert messages | `op` |
| `proxycore.plist` | List players on a specific server | `true` |
| `proxycore.reload` | Reload the plugin configuration | `op` |
| `proxycore.uptime` | Check network uptime | `true` |

## ⚙️ Configuration

### `config.yml`

“`yaml
# ProxyCore Configuration — by YesithTK

maintenance:
enabled: false # Set true to enable maintenance on startup

announcements:
enabled: true
interval: 60 # Seconds between each auto-announcement
messages:
– “&6Welcome to the network! Enjoy your stay.”
– “&bJoin our Discord for news and updates!”
– “&aReport bugs with /report in-game.”
– “&dFollow us on social media for events and giveaways!”
“`

### `messages.yml`

“`yaml
# ProxyCore Messages — use & for color codes

prefix: “&8[&6ProxyCore&8] &r”

no-permission: “&cYou don’t have permission to do that.”
player-not-found: “&cPlayer &e%player% &cnot found or offline.”
default-kick-reason: “&cYou have been kicked from the network.”
maintenance-kick: |-
&c&lServer Maintenance

&7The network is currently under maintenance.
&7Please try again later.

find-result: “&a%player% &7is connected to &e%server%&7.”
announce-prefix: “&8[&6Announce&8] &r”
broadcast-prefix: “&8[&4Broadcast&8] &r”
“`

## 🧩 API

ProxyCore exposes a clean `proxycore-api` module so developers can build addons or integrate with the plugin without touching platform-specific code.

### Project Structure

“`
ProxyCore/
├── proxycore-api/ ← Shared interfaces & events
│ └── dev.yesithx.proxycore.api
│ ├── IProxyCorePlugin.java
│ ├── ProxyCoreAPI.java
│ ├── manager/
│ │ ├── IMessageManager.java
│ │ ├── IMaintenanceManager.java
│ │ └── IAnnounceManager.java
│ ├── command/
│ │ ├── ProxyCoreCommandSender.java
│ │ └── NetworkPlayer.java
│ └── event/
│ ├── ProxyCoreEvent.java
│ ├── MaintenanceToggleEvent.java
│ └── NetworkAnnounceEvent.java
├── proxycore-bungeecord/ ← BungeeCord implementation
└── proxycore-velocity/ ← Velocity implementation
“`

### Maven Dependency

“`xml

dev.yesithx
proxycore-api
1.0.0
provided

“`

### Usage Example

“`java
import dev.yesithx.proxycore.api.ProxyCoreAPI;
import dev.yesithx.proxycore.api.IProxyCorePlugin;

// Safe check before using
if (ProxyCoreAPI.isAvailable()) {
IProxyCorePlugin api = ProxyCoreAPI.get();

// Check maintenance mode
boolean maintenance = api.getMaintenanceManager().isEnabled();

// Toggle maintenance
api.getMaintenanceManager().setEnabled(true);

// Reload all managers
api.reload();

// Check announce scheduler
int interval = api.getAnnounceManager().getIntervalSeconds();
}
“`

### Available Interfaces

| Interface | Package | Description |
|———–|———|————-|
| `IProxyCorePlugin` | `api` | Base plugin interface — access all managers |
| `ProxyCoreAPI` | `api` | Static entry point for addons |
| `IMessageManager` | `api.manager` | Private messaging between players |
| `IMaintenanceManager` | `api.manager` | Maintenance mode control |
| `IAnnounceManager` | `api.manager` | Auto-announcement scheduler control |
| `ProxyCoreCommandSender` | `api.command` | Platform-agnostic command sender |
| `NetworkPlayer` | `api.command` | Platform-agnostic player abstraction |
| `ProxyCoreEvent` | `api.event` | Base class for all ProxyCore events |
| `MaintenanceToggleEvent` | `api.event` | Fired when maintenance is toggled |
| `NetworkAnnounceEvent` | `api.event` | Fired before each auto-announcement |

## 🗺️ Roadmap

| Version | Feature |
|———|———|
| `v1.1.0` | LuckPerms integration for permission-based staff detection |
| `v1.1.0` | `/report` command with staff notification system |
| `v1.2.0` | Configurable join/leave messages per server |
| `v1.2.0` | BossBar announcements as alternative to chat |
| `v1.3.0` | MySQL support for cross-restart data persistence |
| `v1.3.0` | REST API for external network monitoring |
| `v2.0.0` | Full PlaceholderAPI support |
| `v2.0.0` | Plugin Messaging Channel support for backend servers |

## 👤 Credits

| Role | Name |
|——|——|
| 🧑‍💻 Developer & Maintainer | **YesithTK** |
| 🏗️ Architecture & Design | **YesithTK** |
| 📖 Documentation | **YesithTK** |

*Built with ❤️ for the Minecraft network community.*

## 📄 License

“`
Copyright (c) 2026 YesithTK. All Rights Reserved.

This software and its source code are the exclusive property of YesithTK.
No part of this software may be reproduced, distributed, modified, or used
in any form without the prior written permission of the author.

Unauthorized copying, forking, or redistribution of this repository,
via any medium, is strictly prohibited.
“`

*© 2026 YesithTK — ProxyCore. All Rights Reserved.*

ProxyCommandBridge

# General

With this plugin, commands can be sent from the proxy server to a sub-server and executed there. The player name (for server selection) and the command to be executed on the sub-server are specified as parameters.

# Installation
1. Download the plugin
2. Put the .jar file into the plugin folder (proxy and all sub-servers)
3. Start your server
(Note: No configuration folder is created as no configurations are necessary)

# Commands

/pcb

### Example 1
“/pcb morelaid say Hello World!”
This executes the command “/say Hello World!” on the sub-server on which the player “Morelaid” is currently located.

### Example 2
“/pcb morelaid give morelaid diamaond 1”
This executes the command “/give morelaid diamond 1” on the sub-server on which the player “Morelaid” is currently located.

# Permissions
– pcb.admin.pcb

# Functionality
– The selected player must be active on the server
– The commands are executed as a console, so the player does not need any permission for this

# Supported Software
– Velocity
– BungeeCord
– Spigot (with all forks (incl. Paper, Purpur))

# Support
Questions or requests can be made via the Discord Support

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
– ProxyUtils

Installation instructions and other documentation can be found in the 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 for more information.

## Supported proxies
– Bungeecord / Waterfall
– Velocity

## Discord
Can’t find what you’re looking for in the wiki?
Join the Discord server where you can get support or just hangout with the community.

## Metrics
bStats 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
– Velocity

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

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

**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, 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
– 📖 **API Docs:** api.protectcord.com
– 🎫 **Dashboard:** protectcord.com/dashboard
– 💬 **Discord:** protectcord.com/discord

## 💖 Support the Project

– ⭐ Follow on Modrinth
– 💬 Join the Discord community
– 📝 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.*

PronounsAdvanced

# Pronouns

Pronouns is a plugin that lets players set their pronouns. This was created for the Pride event in ClassiCraft, but is now open to the public for use.

Originally forked from an unmaintained plugin, now fully rebuilt, reworked, recoded, and remaintained for modern Minecraft to fit your server’s needs as its own brand new project, worked from the ground up!

To set multiple pronouns, use one of two formats: “She/her;They/Them” or “She/They”

**Supports Minecraft 1.21.6+ (Paper).**

### Features

– **Individual Pronouns:** Players can set their pronouns to personalize their experience.
– **Multiple Pronoun Sets:** Players can define and use multiple sets of pronouns (e.g., she/her and they/them).
– **Custom Pronouns/Neopronouns:** Full support for player-defined custom pronouns with correct grammatical conjugation.
– **PlaceholderAPI Support:** Extensive PlaceholderAPI integration, allowing for grammatically correct sentence construction using player pronouns, including support for multiple and custom sets with indexed access.
– **Flexible Data Storage:** Options to store pronoun data, including MySQL for network-wide compatibility.
– **Developer API:** Extensible API for other plugins to interact with pronoun data.
– **Platform Support:** Currently supports Paper and Velocity. Sponge and BungeeCord support is planned.

### Paper

Download the Paper jar file and place it into your `plugins` folder. Restart your server.

### Placeholders

%pronouns_subjective_1%
%pronouns_all%
%pronouns_pronouns%

# Data collection

Pronouns anonymously collects some data with bStats. You are able to opt out of this in the configuration if you prefer.

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 and how-to guide, which can be both found on the Github 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.

######
# **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. Accessing those placeholders on the proxy isn’t a problem either. With the support of the addtional plugin PAPIProxyBridge, 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*)

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.

**Please feel free to join the 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.

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 page at the very buttom.

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

Bukkit/Spigot

config.yml

storage.yml

Proxy (Bungeecord/Velocity)

config.yml

storage.yml

######
## **bStats**
![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/plugin/bungeecord/proantitab%20-%20bungeecord/20090)

![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/discord)