DGuard

Ban plugins: from vanilla /ban to network-wide bans

Vanilla /ban bans forever and only on one server. Once you need temporary bans, mutes, warnings, a history of offences or bans shared across a network, you install a punishment plugin with a database. Here are the vanilla commands, three well-known plugins, IP bans, and how to tie bans to appeals and the anticheat.

The DGuard team8 min read

In short: a small server gets by with vanilla /ban, /pardon and /kick. If you need durations, mutes, warnings and history, use a plugin: LiteBans (paid), LibertyBans (free and open source) or AdvancedBan (free, but not updated in years). For a network, connect them to a shared MySQL or MariaDB database — then a ban on one server applies on all of them. Use IP bans with care: many people can share one address.

Vanilla bans

CommandWhat it does
/ban <name> [reason]Bans the account: nobody can join with its UUID
/ban-ip <IP or name> [reason]Bans the address: nobody can join from it. An online player's name works instead of an IP
/pardon <name> and /pardon-ip <IP>Lift the ban
/banlist [ips|players]Shows the ban list
/kick <name> [reason]Removes the player from the server; they can rejoin right away
Java Edition, dedicated server, operator level 3. From the Minecraft Wiki
  • Bans are stored in banned-players.json and banned-ips.json next to the server. The ban list overrides the whitelist: a banned player stays out even if they're whitelisted.
  • The reason is shown to the banned player, to operators and in the server log. Without one the player reads "Banned by an operator." — and has no idea why or where to appeal.
  • Vanilla /ban has no duration: the command takes only a target and a reason. A temporary ban needs a plugin.
  • /ban-ip takes the address as a single word, so an IPv6 address can't be banned that way.
console
ban Steve Cheating: KillAura. Appeals: #appeals on Discord
ban-ip 203.0.113.25 Ban evasion
banlist players
pardon Steve

What vanilla is missing

  • Durations. A 7-day ban, a one-hour mute — /tempban and /tempmute in plugins.
  • Mutes and warnings. An insult in chat isn't a reason for a ban.
  • History. Who punished whom, for what and when — for appeals and for checking on moderators.
  • Punishment ladders. First mute an hour, second a day, third a ban: the plugin counts it for you.
  • Network bans. A vanilla ban lives in one server's file and doesn't reach the lobby or the next game mode.
  • Alt detection. Accounts that joined from the same address as the banned one.

LiteBans, LibertyBans and AdvancedBan

LiteBansLibertyBansAdvancedBan
PricePaid (SpigotMC premium resource)Free, open source (AGPL-3.0)Free
PlatformsSpigot, Paper, Folia, Fabric, BungeeCord, VelocityPaper, Spigot, Purpur, Folia, BungeeCord, Velocity, Fabric, SpongeBukkit/Spigot and BungeeCord
DatabasesH2 (default), MySQL, MariaDB, PostgreSQLHyperSQL (file), MariaDB, MySQL, PostgreSQLEmbedded or MySQL
PunishmentsBan, mute, warn, kick, IP variants, durationsBan, mute, warn, kick, IP variants, durationsBan, mute, warn, kick, IP ban, durations, notes
History and oversight/history, /staffhistory, /staffrollback, /alts/history, /blame, /alts/history, /check
LaddersTemplates with a ladder (templates.yml)Templates and layoutsTime layouts
UpdatesActive, supports 26.xActive, supports up to 26.3Latest version 2.3.0 — October 2020
From the plugins' SpigotMC and Modrinth pages and the LiteBans documentation

LiteBans is a paid plugin with the most detailed documentation: templates with punishment ladders, duration limits per rank, punishments limited to one server of a network (server:survival), Discord webhooks. Out of the box it runs on a file-based H2 database. LibertyBans is the free, open-source alternative: it stores data by UUID, supports templates like "first mute 10 days, second 30, third permanent", and can stop trainees from banning admins. AdvancedBan is free and simple, but its latest SpigotMC release came out in 2020 and Velocity isn't among its platforms — a risk for a new 1.21 or 26.x server.

LiteBans and LibertyBans: the duration goes after the name
/tempban Steve 7d Cheating: Fly
/mute Alex 1h Insults
/warn Alex Spam
/history Steve
/ban Bob -s 10d server:survival Cheating   # LiteBans: silent, survival only

Bans across a network

For a ban on one server to apply on all of them, every copy of the plugin connects to one database — usually MySQL or MariaDB. That's how both LiteBans and LibertyBans work; setting up the database is covered in MySQL for plugins. Whether to install on the proxy or on the game servers is something the LiteBans docs go through in detail:

  • It's generally better to install on each game server rather than the proxy.
  • Proxy plugins can't cancel chat messages from 1.19+ clients because of chat signing — a muted player gets kicked when trying to talk. This doesn't happen on the game servers.
  • If the anticheat should ban network-wide, put the ban plugin on the game servers: Spigot plugins can't run proxy commands.
  • If your authentication plugin isn't linked to the proxy, the plugin's proxy commands can be run before logging in — another reason to install it on the game servers.

The ban reason and the way to appeal

The ban message is the only thing the player sees. It needs three things: what for (the rule or the cheat), for how long, and where to appeal. In LiteBans each template sets its text in the message field, and you call a template by name: /ban Steve cheats. LibertyBans and AdvancedBan do the same with layouts and a messages file. Moderators don't invent the wording each time, and everyone's wording is the same.

The appeal process — one channel, a response deadline, reviewed by someone other than the person who banned — is covered in false bans and the moderation team. A punishment table for players is quick to build in the rules generator, and how to write the rules themselves is in server rules.

IP bans: when, and with what caveats

  • An address isn't a person. /ban-ip keeps out everyone on that address: a family, a dorm, every customer of an ISP behind a shared NAT.
  • Broken forwarding behind a proxy turns an IP ban into a ban of the whole server — see above.
  • Addresses change. In time an address can pass to someone else. That's what LiteBans' effective_ipban_duration is for: after that period an IP ban becomes a plain UUID ban — the docs describe it as protection from false bans on dynamic addresses.
  • Where an IP ban fits: a wave of bots or ban evasion with alts from one address. Bots have their own remedies — see bots and DDoS.

Anticheat bans and the punishment log

Cheaters are banned by the anticheat, not a moderator — and that ban has to be checkable too. DGuard — the best anticheat for a modern Minecraft server — punishes on its own: ban or kick is set for each cheat feature, and you choose the strictness — evidence weights and thresholds — in the config. A ban comes from evidence across several episodes, not from a single flag.

With the log turned on, every DGuard ban and kick lands in the panel with a report: which checks fired and how much evidence piled up. Filters by server, name, check and period, CSV export, records kept for 90 days. Moderators on your team see the log without your password. Manual punishments — mutes, warnings, bans for griefing — stay in the ban plugin.

plugins/DGuard/config.yml, then /dguard reload
cloud:
  punishment-log: true

FAQ

How do I temp-ban a player in Minecraft?

Vanilla /ban has no duration. Install a punishment plugin — LiteBans, LibertyBans or AdvancedBan — and use /tempban <name> 7d <reason>, or put the duration after the name as LibertyBans does.

Where are Minecraft server bans stored?

Vanilla bans are in banned-players.json and banned-ips.json next to the server. Plugins keep punishments in their own database: file-based (H2, HyperSQL) or MySQL, MariaDB, PostgreSQL.

How do I ban a player on every server of a network?

Install a punishment plugin on the game servers and connect every copy to one MySQL or MariaDB database — then bans apply everywhere. A vanilla ban lives in one server's file.

How do I unban a player?

A vanilla ban is lifted with /pardon <name> and /pardon-ip <IP>. In plugins it's /unban <name>.

Where can I see DGuard's bans?

In the panel's punishment log: set cloud.punishment-log: true in plugins/DGuard/config.yml and run /dguard reload. Every ban comes with a report of the evidence.

Sources

All sections

Run the best anticheat for modern Minecraft

DGuard catches all 47 kinds of cheats in our comparison — the closest rival, Intave, has 27. Full protection on every plan, free up to 30 players online.