KKS Chat
Custom chat with player avatars, whispers, and anti-spam. Fully customizable positioning.
KKS Chat
KKS Chat
Custom chat for Minecraft with player avatars, settings, spam protection, and multi-language UI.
---
Main Features
Beautiful Interface
Chat shows player avatars next to messages. Each line is drawn in its own block with adjustable background transparency. You can move the whole chat to different corners or keep it centered (see Positioning).

Positioning
In Position, cycle Position to place the chat on screen. Modes:
- Right bottom — default, above the hotbar area - Right bottom - Right bottom / Right bottom - Right bottom / Right bottom
Message blocks align to the chosen side or stay centered.
Anti-Spam System
When enabled, only fully identical consecutive messages are merged and shown with a repeat counter (e.g. `x3`). You can turn anti-spam off in settings; history regroups or splits accordingly.

Whisper
Private messages are shown with dedicated formatting (sender / receiver).

Animations
Messages animate in and out of the screen. Choose a separate style for appearance and disappearance in the config:
- None — smooth opacity transition (default) - None — slides in/out from left, right, top, or bottom - None — elastic spring effect on entry - None — instant appear and disappear
---
Settings
Settings are in saved (KKS Chat section). Values are saved to `config/kks-chat.json` and restored after restart.
KKS Chat On / Off
Toggle between KKS Chat and the vanilla chat interface without restarting the game.
Background Transparency
0%–100% opacity for message backgrounds.
Display Time
How long overlay messages stay visible: 1–60 seconds.
Maximum Messages (history)
Stored history size: 50–500 messages (older lines are dropped).
Other Options
- Position — turn custom message formatting on or off - Position — enable or disable identical-message merging - Position — see Positioning above

---
Supported Languages
The mod ships with English language files (`assets/kks-chat/lang/`). UI strings follow the game language when a matching file exists; otherwise English is used as fallback.
- 🇬🇧 العربية (en_us) - 🇷🇺 العربية (ru_ru) - 🇩🇪 العربية (de_de) - 🇪🇸 العربية (es_es) - 🇵🇹 العربية (pt_br) - 🇵🇹 العربية (pt_pt) - 🇮🇹 العربية (it_it) - 🇵🇱 العربية (pl_pl) - 🇹🇷 العربية (tr_tr) - 🇰🇷 العربية (ko_kr) - 🇯🇵 العربية (ja_jp) - 🇸🇦 العربية (ar_sa)
---
Message History
Press `T` to open chat: full history with scrolling. Grouped repeats can be expanded to show each line.

---
Configuration
The config file is created automatically at `config/kks-chat.json` on first launch. All settings are documented with comments inside the file — open it in any text editor.
Icons
Each message type (system, error, whisper, join/leave, etc.) has its own icon. You can change any icon to any valid Minecraft item ID:
```json "iconSystem": "minecraft:stick", "iconWhisper": "minecraft:paper", "iconJoinLeave": "minecraft:oak_door" ```
Background Colors
Set a custom background color per message type:
```json "bgColors": { "SYSTEM": "#000000", "ERROR": "#1A0000", "ACHIEVEMENT": "#001A04", "CHALLENGE": "#1A0028" } ```
Animations
Configure appearance and disappearance animations independently:
```json "animationIn": "BOUNCE", "animationOut": "SLIDE_LEFT" ```
Available values: `FADE`, `SLIDE_LEFT`, `SLIDE_RIGHT`, `SLIDE_UP`, `SLIDE_DOWN`, `BOUNCE`, `NONE`
---
Rules
Rules let you automatically transform messages based on conditions — change icons, colors, text, display time, or hide messages entirely. Rules are defined in `kks-chat.json` under `"rules"`.
Each rule has an `"if"` block (conditions) and a `"then"` block (actions):
```json { "if": { "type": "COMMAND_BLOCK" }, "then": { "hide": true } } ```
Conditions
| Field | Description | |---|---| | `type` | Message type: `PLAYER_CHAT` `WHISPER` `SYSTEM` `ERROR` `SLEEP` `ACHIEVEMENT` `CHALLENGE` `COMMAND_BLOCK` `JOIN_LEAVE` `SCREENSHOT` | | `contains` | Text contains this string | | `startsWith` | Text starts with this string | | `endsWith` | Text ends with this string | | `regex` | Java regex — first capture group becomes `{matched}` | | `matchType` | `"ALL"` (AND, default) or `"ANY"` (OR) |
Actions
| Field | Description | |---|---| | `hide` | Remove the message entirely | | `color` | Tint the full message text — `"#RRGGBB"` | | `colorMatch` | Tint only the matched fragment | | `icon` | Override the icon (Minecraft item ID) | | `displayTime` | Override display time in seconds | | `replaceText` | Replace the entire message text | | `replaceMatch` | Replace only the matched fragment | | `stopAfter` | Stop — do not evaluate further rules |
Variables
Use `{variable}` placeholders inside `replaceText` and `replaceMatch`:
| Variable | Value | |---|---| | `{my_name}` | Your in-game name | | `{sender}` | Sender's name | | `{text}` | Full original message | | `{matched}` | Fragment matched by `contains` or `regex` | | `{type}` | Message type name | | `{time}` | Current time — `HH:mm` | | `{time_s}` | Current time — `HH:mm:ss` | | `{repeat}` | Repeat counter |
Example
```json "rules": [ { "if": { "type": "COMMAND_BLOCK" }, "then": { "hide": true } }, { "if": { "contains": "[VIP]" }, "then": { "icon": "minecraft:gold_ingot", "colorMatch": "#FFD700", "displayTime": 8 } }, { "if": { "type": "JOIN_LEAVE", "contains": "joined" }, "then": { "replaceText": "→ {sender} joined [{time_s}]", "color": "#55FF55" } } ] ```
---
Support
Questions or suggestions: ddev14 on Discord.