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 (3→e, 4→a, 0→o, 1→i, 5→s), 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