Skip to content

Configuration

Everything lives in plugins/FinExBans/config.yml. Visible messages are not there — they are in language_en.yml, language_ru.yml, language_uz.yml. Edit, then /finexbans reload.

Language

yaml
language:
  default: en          # en | ru | uz, or your own language_xx.yml
  per-player: true     # each player sees their client language when available
appeal: 'discord.gg/yourserver'   # shown on the ban screen as {appeal}

To add a language, copy language_en.yml to language_de.yml, translate, set default: de. Missing keys fall back to English.

Storage

yaml
storage:
  type: sqlite         # sqlite | h2 | mysql | mariadb
  host: localhost
  port: 3306
  database: finexbans
  username: root
  password: ''
  table-prefix: 'finexbans_'

SQLite is fine for a single server. Use MySQL/MariaDB to share punishments between servers — see Networks.

Mutes

yaml
mute:
  ip-scope: true       # a mute also covers other accounts on the same IP
  blocked-commands: [msg, tell, w, r, me, say, ...]

ip-scope is what stops a muted player from talking through an alt. The side effect: two people sharing one household share the mute. Set it to false if that matters more.

An entry with a space, like clan chat, is matched against the whole command line — so only /clan chat … is blocked, not all of /clan.

Warning ladder

yaml
ladder:
  enabled: true
  window: 30d          # warnings older than this are not counted
  '3': 'MUTE 1h 3 warnings'
  '5': 'MUTE 1d 5 warnings'
  '7': 'BAN 7d 7 warnings'
  '10': 'BAN perm 10 warnings'

Only the exact count fires: the 3rd warning mutes for an hour, the 4th does nothing extra, the 5th mutes for a day.

Limits

yaml
limits:
  ban: ''              # e.g. 30d — staff without finexbans.limits.bypass cannot go above
  mute: ''
  ipban: ''

Permanent punishments always need a separate permission (finexbans.ban.permanent etc.), whatever the limits say.

Chat filter

yaml
chat-filter:
  enabled: true
  words: [examplecraft, othernetwork]
  commands: [msg, tell, w, r, me]
  notify-staff: true

Before matching, text is normalised: ꜱᴍᴀʟʟ ᴄᴀᴘꜱ and ˢᵘᵖᵉʳˢᶜʳⁱᵖᵗ become plain letters, Cyrillic look-alikes (а е о р с х) become Latin, dots and spaces between letters are removed, digits are turned into letters (3e, 4a, 0o, 1i, 5s), repeated letters collapse. m.i.n.e s t 4 x and ᴍɪɴᴇꜱᴛᴀx both become minestax.

WARNING

Do not add short or common words. They match inside other words and innocent messages get blocked.

Applies to chat, the listed commands, books, signs and anvil names. finexbans.filter.bypass skips the check.

Broadcasts and alerts

yaml
broadcast:
  enabled: true        # false = every punishment is silent (staff only)
alerts:
  join-attempt-while-banned: true
  alt-accounts: true

Players who never joined

yaml
unknown-players:
  lookup: true
  online-uuids: auto   # true if the server is offline-mode behind an online-mode proxy

/ban SomeName works even if that name never joined: online-mode servers ask Mojang for the UUID, offline-mode servers use the offline formula.

Durations

30s, 10m, 2h, 7d, 1w, 1mo, 1y, combined 2h30m, or perm.

FinExBans · Paper, Folia, Velocity, BungeeCord · 1.21 → 26.2