BlazeBans/Punishing players

Punishment commands

Six commands create punishments, and they all take the same shape. Learn one and you know the rest.

The shape

minecraft
/<command> <player> [duration] [reason] [flags]

Only the player is required. Everything after it is optional and BlazeBans fills in defaults.

minecraft
/ban Steve
/ban Steve 7d
/ban Steve 7d Griefing spawn
/ban Steve 7d Griefing spawn --silent --proof https://imgur.com/a/example

The first line issues a permanent ban with the reason from punishments.default-reason. The last issues a seven-day ban that staff see but players do not, with evidence attached.

Tab completion offers online players, then known players from the database, then durations, then your templates, then flags. Most punishments can be typed without remembering anything.

The commands

CommandTypeAliasesPermission
/banBAN/tempbanblazebans.command.ban
/muteMUTE/tempmuteblazebans.command.mute
/warnWARNnoneblazebans.command.warn
/kickKICKnoneblazebans.command.kick
/ipbanIP_BAN/tempipbanblazebans.command.ipban
/ipmuteIP_MUTE/tempipmuteblazebans.command.ipmute

/tempban and /ban are the same command. The alias exists because staff coming from other plugins reach for it, not because it behaves differently. Both accept a duration and both default to permanent without one.

What each type does

Ban. Removes the player if they are online and denies future logins while the record is active. They see the ban screen from ban-screen-permanent or ban-screen-temporary.

Mute. Blocks chat, and blocks the commands listed under muted-commands.blocked so private messages are not a way around it. See Mute enforcement.

Warn. Stores a record and notifies the player. Nothing is blocked. Warnings are what ladders count when deciding whether the next offence should be a ban.

Kick. Removes the player once. There is nothing to expire, so /kick takes no duration:

minecraft
/kick Steve Refusing staff instruction

Kicks are historical events, not active punishments. They appear in history and in /kicklist, but never block anything.

IP ban and IP mute. Match on the stored IP as well as the account, so a new account on the same address is caught. These need privacy.store-ip-addresses: true, or there is no address to match against. See Alts and IP tools.

Reasons

A reason is free text, a template ID, or nothing.

minecraft
/ban Steve 30d Cheating
/ban Steve General-Cheating
/ban Steve

The second line uses the General-Cheating template, which supplies its own duration, its stored reason, and any broadcast configured on it. Template IDs are matched loosely, so general-cheating works too.

If blazebans.reason.custom is withheld, staff can only use template IDs. That is how you enforce a fixed reason list without trusting everyone to type consistently.

With no reason at all, BlazeBans stores punishments.default-reason, which ships as No reason provided.

What happens on execution

In order:

  1. Permission check on the command node.
  2. Self-punishment check, if punishments.prevent-self-punishment is on.
  3. Exemption check. See Hierarchy and exemptions.
  4. Staff weight comparison. The issuer's weight must be at or above the target's.
  5. Duration limit check against the issuer's tier.
  6. Scope permission check.
  7. Proof requirement, if the template demands it and the experimental setting is on.
  8. BlazeBansPunishmentCreateEvent, which other plugins can cancel.
  9. The record is written.
  10. BlazeBansPunishmentCreatedEvent, then enforcement, victim notification, broadcast, Discord, and any template console commands.

Console skips steps 2 through 6 entirely, except for exempt.players, which console does respect.

While the database work is in flight, the issuer sees an animated action-bar indicator. Turn it off with async-progress.enabled: false.

Announcements

Every punishment broadcasts to staff holding blazebans.staff.notify or blazebans.admin, and to console. The wording lives in the punishment-broadcast message key.

Templates can add a second, public broadcast that every player sees. That is separate and off by default on most shipped templates.

--silent suppresses the staff broadcast, the public template broadcast, and the Discord post. It needs blazebans.silent. The record is still written and still visible in history; silent means unannounced, not unlogged.

Punishing offline players

All six commands accept a name that has never been online, as long as BlazeBans can resolve it. The record is stored and applies on the player's next login.

Tab completion pulls from known players in the database, so anyone who has joined before will complete. A player who has never joined can still be named exactly.

Preview before you commit

--preview runs every check and shows what the punishment would be, without writing it:

minecraft
/ban Steve General-Cheating --preview

Useful when you are not sure what a template resolves to, or whether a duration will be trimmed by your tier limit.

Escalating instead of choosing

If you have configured ladders, /punish picks the step for you based on the player's history:

minecraft
/punish Steve Cheating

First offence warns, second mutes, third bans, or whatever the ladder says. See Templates and ladders.

Not typing anything

/punishgui <player> opens a menu of your templates. Staff who never learn the syntax can still punish consistently. See The punish GUI.