Welcome to the Hangar Open Beta. Please report any issue you encounter on GitHub!
Avatar for TIS199

Per-player AI chat translation and country flags. Paper, Folia, Velocity, BungeeCord.

Report BetterChat_by_TIS199?

BetterChat

One chat. Every language. A little more of home.

BetterChat translates player chat into each listener's chosen language and shows a country flag beside player names. Players who speak different languages can share one chat, and everyone reads it in their own.

See it in action

Chat in your language Switch language at any time and the same conversation follows you. Here: romanized Bengali, then Russian.

Two players, two languages Each player reads the chat in their own language, with the sender's flag beside the name.

Settings menu /bc menu opens one screen for your language, your flag and automatic country detection.

Language picker A paged, searchable list. Your current choice is highlighted with a check mark.

Search languages Type a name or code to filter the list, for example japanese.

Flag picker 249 country flags plus the global Earth flag, in paged lists.

Search flags Type part of a country name to narrow the list.

Console log The console logs the original message and the translated line for each language.

Features

  • Recipient-aware translation: only the languages your real listeners need are requested, not every language on the server.
  • Many AI providers: Gemini, OpenAI-compatible APIs, Anthropic, xAI, Groq, OpenRouter and local Ollama.
  • Resilient: multiple keys and models per provider, automatic fallback, request batching and caching. A key that returns HTTP 429 is skipped until restart.
  • Any language: Minecraft locales, Java's ISO-639 list, and custom names or codes. Languages outside Minecraft's locale list are returned in Latin-letter romanization (Bengali becomes Ekhane Asho).
  • Easy menus: /bc menu opens a settings screen with searchable, paged language and flag pickers and an automatic-country toggle.
  • /translate <language> <text>: one-off translations through the same queue and cache.
  • Country flags: 249 country flags plus a global Earth flag in chat, the tab list and optional overhead nametags.
  • Flag resource pack: a generated pack with crisp flag glyphs from Twemoji artwork. Unicode emoji are the fallback.
  • Player control: set language and flag, or opt out of translation with /translation off to always see the original.
  • Optional IP-based country detection: plus language and country blacklists.
  • Integrations: PlaceholderAPI, LuckPerms and Vault groups, VentureChat (local channels), and formatters that use Paper's ChatRenderer.
  • Networks: Velocity and BungeeCord jars with shared MariaDB storage and HMAC-signed chat relay. SQLite for a single server.
  • Modern: MiniMessage formats, Adventure components and Folia support.

Requirements

  • Java 25
  • Paper 26.2 / 26.3 or compatible Folia
  • MariaDB for proxy mode (SQLite for a standalone server)
  • A translation provider key or a reachable Ollama endpoint (optional until you enable translation)

Quick start

  1. Put BetterChat-Paper-*.jar in plugins/ and start the server once.
  2. Open plugins/BetterChat/ai.yml, add a provider key under translation.providers, and set chat.translation-enabled: true.
  3. Restart, then use /bc menu to choose a language and flag.
  4. Recommended: set up the flag resource pack (see below) so flags show as crisp glyphs.

Proxy networks: install the Velocity or BungeeCord jar on the proxy and the Paper jar on every backend. Use the same MariaDB database and the same 32+ character secret everywhere.

Flags look best with the included resource pack: 249 country flags and a rectangular Earth flag, drawn as crisp glyphs in the betterchat:flags font from Twemoji artwork. The pack is optional. Without it, BetterChat falls back to Unicode flag emoji, and the flag buttons in the menus show emoji instead of glyphs.

  • Download BetterChat-Flags-*.zip from the release assets. Its SHA-1 is in RESOURCE-PACK-SHA1.txt in the same bundle.
  • Upload the ZIP to a public HTTPS URL that returns the file directly. A file path on your server is not enough.
  • One pack covers Minecraft Java 26.2 and 26.3 (resource pack formats 88.0 to 97.1).

Option A: send it with Paper (simplest)

resource-pack=https://example.com/BetterChat-Flags.zip
resource-pack-sha1=YOUR_40_CHARACTER_SHA1
resource-pack-prompt=Install BetterChat Flags to see country flags.
require-resource-pack=false

Then set flags.resource-pack.use-glyphs: true in plugins/BetterChat/config.yml and leave flags.resource-pack.enabled: false so the pack isn't sent twice.

Option B: let BetterChat send it

flags:
  resource-pack:
    enabled: true
    url: 'https://example.com/BetterChat-Flags.zip'
    sha1: 'YOUR_40_CHARACTER_SHA1'
    prompt: 'Install BetterChat Flags to see country flags.'
    required: false
    use-glyphs: true

Good to know

  • If both options use the same URL, BetterChat detects it and avoids a duplicate prompt.
  • On a proxy network, repeat your chosen setup on every backend so players get the same font everywhere.
  • Keep required: false unless you want to block players who don't accept the pack.
  • Flags show as letters or empty boxes? The pack isn't installed yet, or use-glyphs is off. The emoji fallback works until the pack is hosted and accepted.
  • Other chat plugins: %betterchat_flag_glyph% only renders correctly if that plugin applies the betterchat:flags font. Otherwise use %betterchat_flag% (emoji).

Commands and permissions

Command Description
/bc or /bc menu Open the settings menu (language, flag, auto country)
/bc language <language> Set your language by code or name (en_us, bn, Toki Pona)
/bc flag <country|earth> Set your flag by code or name, or earth / global
/translation <on|off> Receive translated chat, or always the original
/translate <language> <text> Translate one message
/bc auto [on|off] Toggle IP-based country detection
/bc set <player> <language|flag> <value> Admin: change a player's preference
/bc reload Admin: reload configuration

betterchat.use and betterchat.translate are granted to everyone by default. betterchat.admin (op) covers /bc set and /bc reload.

Privacy

When translation is on, chat text is sent to the provider you configure, so review that provider's data terms. The optional IP lookup sends the player's IP to the configured endpoint (default ipapi.co) and does not store it. bStats is anonymous and can be disabled in the config.

Source and documentation | Report an issue

Flag artwork: Twemoji, CC BY 4.0. BetterChat is not affiliated with Twemoji or VentureChat.

Information

Category
Chat
Published
October 10, 2026
License
1Downloads
1Stars
Supports Folia

Pinned Versions

  • R
    Paper26.1–26.3Waterfall1.21Velocity4.2.1

Members

1