COWMODSКаталог модов

EmpireBan

A configurable ban/mute/kick system with escalating punishment IDs, alt-account detection, and VPN checking, for Spigot/Paper, BungeeCord, and Velocity in one JAR.

4381обновлён 24 окт. 2026 г.
УправлениеУтилиты

Описание

Discord Release Downloads Servers License

Built with Java 21 Available for Paper Available for Purpur Available for Spigot Available for Bukkit Available for BungeeCord Available for Velocity

Chat with us on Discord Available on Codeberg

bStats

EmpireBan

Your server. Your rules.

A configurable ban/mute/kick system with escalating punishment IDs, alt-account detection via IP, and VPN/proxy checking - for Spigot/Paper, BungeeCord, and Velocity, shipped as a single JAR.


Features

FeatureDescription
Ban/Mute/Kick/WarnFull punishment system with per-player history.
Configurable Escalation IDsDefine any number of named punishment reasons (ids.yml), each with its own escalation levels - 1st offense, 2nd offense, and so on, capped at the harshest configured level once exhausted.
Alt-Account DetectionFlags staff or auto-bans players who join from the IP of a currently banned player.
VPN/Proxy/Tor CheckOptional lookup via vpnapi.io on join.
Chat Filter & SlowmodeBlacklist words/links and enforce a configurable chat delay, both with bypass permissions.
Mutes That Actually HoldMuted players are also kept off /me and the private message commands, configurable per command name.
ID-Only ModeOptionally refuse free durations on /ban and /mute so every punishment goes through a configured ID - with an opt-out for admins.
MySQL or SQLiteHikariCP-pooled MySQL, or zero-config SQLite by default.
Action LogsEvery punishment and revocation is logged, viewable and clearable in-game.
Discord WebhookEvery ban, mute, kick, unban and unmute posted to a Discord channel, optionally filtered by action.
English and GermanBoth message files ship with the plugin; switch with language: german.
Single Cross-Platform JAROne EmpireBan.jar - each platform only reads its own entry point and ignores the rest.

Dependencies

  • Spigot / Paper, BungeeCord, or Velocity - required (exactly one, depending on where you run it)
  • vpnapi.io - optional - vpnapi.io (free tier: up to 100 lookups/day)

How It Works

EmpireBan ships as a single JAR containing all three platform integrations. On load, each platform only reads its own entry point - Spigot reads plugin.yml, BungeeCord reads bungee.yml, Velocity reads the @Plugin-annotated class - and the rest of the JAR is ignored.

Proxy setups: install the JAR only on the proxy (Velocity or BungeeCord), not on the Spigot backend servers as well. It only belongs on a Spigot server in a pure standalone setup with no proxy in front.

Punishments are organized around IDs - named, reusable reasons like griefing or cheating - each with an ordered list of escalation levels. A player's Nth punishment under a given ID applies that ID's Nth level (capped at the last level once every level has been used), so a first offense might warn, a second mute, and a third ban - fully configurable per ID. /ban and /mute both run the same escalation and report the punishment that was actually applied, so an ID whose next level is a ban bans (and kicks) even when it was handed out via /mute.

On join, EmpireBan checks the connecting player's IP against currently banned players and, depending on config, either just notifies staff or automatically bans the alt account too. If VPN checking is enabled, it also queries vpnapi.io for VPN/proxy/Tor usage on that IP.


Configuration

Click to expand the full config.yml
# EmpireBan - Configuration
# Time values in this plugin are always stored internally in seconds.
# Examples: 1 day = 86400, 1 year = 31536000, -1 = permanent

language: english

database:
  # sqlite or mysql
  type: sqlite
  mysql:
    host: localhost
    port: 3306
    database: empireban
    username: root
    password: ''

ip-handling:
  # If enabled, players sharing an IP with a banned player are automatically banned too.
  # If disabled, only the staff team is notified (see notify-staff & the bansys.notify permission).
  autoban: false
  notify-staff: true

vpn-check:
  enabled: false
  # Free key required above 100 joins/day: https://vpnapi.io/
  api-key: ''
  autoban: false

chat-filter:
  enabled: true
  blacklist:
    - 'discord.gg/'
    - 'http://'
    - 'https://'

chat-delay:
  seconds: 3

geyser:
  support: true

# Commands a muted player may not run - without this, mutes are trivially bypassed via
# /me or private messages. Entries are matched against the command name only, with any
# "/" and namespace ("minecraft:") stripped. An empty list falls back to the defaults
# below; set enabled to false to turn the check off entirely.
mute-command-blacklist:
  enabled: true
  list:
    - 'me'
    - 'msg'
    - 'tell'
    - 'w'
    - 'whisper'
    - 'r'
    - 'reply'

punishments:
  # If enabled, /ban and /mute only accept IDs from ids.yml - free durations are refused.
  require-id: false
  # Whether staff with bansys.ban.admin (or bansys.ban.all) may still use free durations
  # while require-id is on.
  admin-bypass: true

# From Minecraft 1.19.1 on, clients sign their chat messages. BungeeCord can't intercept or
# cancel signed messages on its own - each backend server additionally needs the included
# "BanSystem-SpigotChatAdapter" installed, which forwards chat events to the proxy.
signed-chat-bypass: true

ids.yml holds the configurable escalation-ID system, and messages_english.yml holds every player- and staff-facing message (color codes via &, placeholders). Both are copied into the data folder from the JAR on first start. The structure supports additional messages_<language>.yml files if you want to translate the player-facing messages.

Durations are always stored internally in seconds: 1 day = 86400, 1 year = 31536000, -1 = permanent. Commands additionally accept shorthand like 1d12h, 30m, perm.


Commands & Permissions

CommandPermission
/bansystem (alias /bansys)bansys.bansys
/bansystem reloadbansys.reload
/bansystem ids create <id> <type> <onlyAdmins> <duration> <reason>bansys.ids.create
/bansystem ids delete <id>bansys.ids.delete
/bansystem ids edit <id> add lvl <lvl> <duration> <type>bansys.ids.addlvl
/bansystem ids edit <id> remove lvl <lvl>bansys.ids.removelvl
/bansystem ids edit <id> set lvlduration <lvl> <duration>bansys.ids.setduration
/bansystem ids edit <id> set lvltype <lvl> <type>bansys.ids.settype
/bansystem ids edit <id> set onlyadmins <true/false>bansys.ids.setonlyadmins
/bansystem ids edit <id> set reason <reason>bansys.ids.setreason
/bansystem ids show [id]bansys.ids.show
/bansys logs show [page]bansys.logs.show
/bansys logs clearbansys.logs.clear
/ban <player> <id|duration> [reason]bansys.ban.<id> / bansys.ban.all / bansys.ban.admin
/unban <player> [reason]bansys.unban
/mute <player> <id|duration> [reason]bansys.ban.<id> / bansys.ban.all
/unmute <player> [reason]bansys.unmute
/kick <player> [reason]bansys.kick (bypass: bansys.kick.bypass)
/check <player>bansys.check
/history <player>bansys.history.show
/deletehistory <player>bansys.history.delete
-bansys.notify (receives alt-account/VPN staff alerts)
-bansys.bypasschatfilter
-bansys.bypasschatdelay
-bansys.ban.bypass (suppress kick-on-ban)
-bansys.ban.admin (also: use free durations while punishments.require-id is on)

Known Limitations

  • No GUI menu for the ban list - command-driven only.
  • Signed chat (Minecraft 1.19.1+) can't be intercepted by BungeeCord/Velocity on their own - that needs the companion Spigot chat adapter on each backend server (config.yml: signed-chat-bypass), which isn't bundled yet.
  • Geyser support is limited to the geyser.support config flag; no native Geyser-specific behavior beyond that.

Getting Started

  1. Drop EmpireBan.jar into your plugins/ folder - only on the proxy (Velocity/BungeeCord) if you run one, otherwise on the Spigot server.
  2. Start the server once to generate config.yml, ids.yml, and messages_english.yml.
  3. Set your database (SQLite by default, or MySQL) and enable VPN checking if you want it.
  4. Reload with /bansystem reload - no restart needed.

Credits

LucasTHCRCreator & maintainer
NTMFanSolidiusCommand blacklist for muted players (#1)

Discord: dc.gg/paperstream

Open source under the GNU General Public License v3.0.

Галерея

MutedMute-commandKick-ScreenBan-Command

Последние версии

Все версии →
beta

1.4-BETA

1.4-BETA
24 окт. 2026 г.20Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3bukkit, bungeecord, folia, paper, purpur, spigot, velocity
Скачать
Что нового
### Added - Tab completion on Spigot, BungeeCord and Velocity: online players, and the IDs from ids.yml for /ban and /mute. Only IDs the sender is allowed to use are suggested. - Tab completion for /bansystem subcommands, IDs and punishment types. ### Fixed - Players with bansys.ban.bypass (e.g. operators with all permissions) were saved as banned but never kicked. The ban is now refused with "This player cannot be banned!". - Player names are no longer case-sensitive on BungeeCord/Velocity and for offline players on Spigot. - IDs from ids.yml are no longer case-sensitive. - New message keys are added to existing messages files automatically. ### Untested This is a beta: the changes are built and unit-tested, but not yet tested in-game.
release

1.3-RELEASE

1.3-RELEASE
12 окт. 2026 г.94Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3bukkit, bungeecord, folia, paper, purpur, spigot, velocity
Скачать
Что нового
### Added - Discord webhook. Every ban, mute, kick, unban and unmute can be posted to a Discord channel as an embed with the target, the staff member, the reason and, for IDs, the level. Set `discord-webhook.enabled` and `url` in `config.yml`; `actions` limits it to e.g. `[BAN, MUTE]`. Sending happens off the server thread, a dead webhook only costs a console line. - German messages. `messages_german.yml` ships with the plugin, `language: german` uses it. ### Changed - First stable release since 1.1. Servers on the default `release` update channel now get the 1.2 fixes as well. Existing servers: the new `discord-webhook` section is not added to an existing `config.yml` automatically. Copy it from the default config if you want it.
beta

EmpireBan 1.2-BETA

1.2-BETA
24 сент. 2026 г.42Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2bukkit, bungeecord, folia, paper, purpur, spigot, velocity
Скачать
Что нового
- The backend plugin runs on Folia. Kicks, messages and bans go through the entity and global schedulers there, and bStats stays off on Folia. - The Velocity plugin is described by velocity-plugin.json now, so Velocity reports the real version instead of 1.0.0. - Tested on Folia, Paper, Spigot, Velocity and BungeeCord.
release

1.1-RELEASE

1.1-RELEASE
1 сент. 2026 г.121Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2bukkit, bungeecord, paper, purpur, spigot, velocity
Скачать
Что нового
Mutes now hold outside of chat, and `/ban` and `/mute` report the punishment they actually applied. - Muted players can no longer bypass their mute with `/me` or the private message commands. The blocked commands are configurable under `mute-command-blacklist` in `config.yml` and are matched on the command name alone, so `/minecraft:msg` is caught as well. Contributed for Velocity by [NTMFanSolidius](https://codeberg.org/NTMFanSolidius) in [pull request #1](https://codeberg.org/LucasTHCR/EmpireBan/pulls/1) and ported to Spigot and BungeeCord from there. - `/mute <player> <id>` applied the ID's escalation level but always announced a mute: an ID whose level is a ban stored a ban, left the player online and talking, and `/check` then reported a ban nobody had handed out. Both commands now resolve the level first, report the type that was applied and kick when it is a ban. - `/mute` now honours only-admins IDs, which so far only `/ban` checked. - New `punishments.require-id` option: with it on, `/ban` and `/mute` only accept IDs from `ids.yml`. Staff with `bansys.ban.admin` keep free durations unless `punishments.admin-bypass` is turned off.
release

EmpireBan 1.0-RELEASE

1.0-RELEASE
4 авг. 2026 г.161Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2bukkit, bungeecord, paper, purpur, spigot, velocity
Скачать
Что нового
Initial release.