
E33Chat
Rebuilds the vanilla chat HUD in chat-app style
Vanilla Improvements
- 💬 Chat bubbles — Messages with player heads and names
- 💾 Chat history — Saved per world / server, restored on rejoin
- 📝 Input preserved — Typed text kept when closing chat
- 🚫 Anti-spam — Consecutive duplicate messages merged with a counter (on by default)
Highlights
- 👥 Whisper sidebar — Online player list, click to whisper
- 🔍 Chat search — Keyword search with real-time matching
- @ Mention autocomplete — Type
@for a popup player list, or left-click a player head - 📌 Quick chat — Save and quick-fill common phrases
- 😊 Emoji & kaomoji — Emoji panel + kaomoji picker
- 📋 Copy & quote reply — Right-click a message to copy or quote reply
- 👤 Player head actions — Right-click a player head to teleport or whisper
- 🔔 Notification banners — Popup hints for @mentions, quotes, whispers and system messages (system banner on by default), with a jump-to-mention button
- 🔊 Notification sounds — Per-type toggles for system, @ / quote, whisper, and public messages
- 🎨 Themes — Dark/light theme with customizable bubble color, text color, and corner radius
- 🕐 Time separators — Timestamp dividers at configurable intervals
- 🌈 Colored messages — Supports
&color/format codes (for servers with a color plugin installed) - 🧩 Message templates — Servers that rewrite the chat format (plugins / No Chat Reports) can declare a template via
/e33chat gui, so names and bodies are parsed correctly on every client
Compatibility
| Mod / plugin | Status |
|---|---|
| No Chat Reports and similar no-report plugins | Auto-compatible since 2.1.0, no config needed |
| ChatHeads / ChatAnimation | Work by default (the vanilla chat box keeps rendering, just shifted clear of the HUD icon) |
| Quark and similar item sharing | Item icons in system messages render correctly |
| CustomSkinLoader | Shows offline players' heads once installed |
| ModernUI | Bounds-safe underlines / click regions on clickable text |
| Nickname plugins | Partially supported |
| Chat-format plugins (EssentialsChat / DeluxeChat / CMI, ...) | Adaptable via server-declared message templates (/e33chat gui) |
FAQ
Server required? No, but installing the server-side mod enables quote reply, @mention sync, chat history sync (new players receive recent messages), and the use_tpa option (player-head teleport uses /tpa).
How to configure? Gear icon (bottom-left) → Menu → Settings
- Client config:
config/e33chat-client.toml(Fabric:config/e33chat-client.json) - Server config:
saves/<world>/serverconfig/e33chat-server.toml(Fabric:.json)
Where is chat history? .minecraft/e33chat/history
How to disable chat history sync? Set history_enabled = false in the world's server config and restart.
Modpack? Go ahead.
Found a bug? Report it here
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 |
- Fixed**
- The "kicked right after joining" disconnect is fixed (all platforms): a system chat message sent by a server or proxy plugin at join time could arrive before the client's local player exists, and previous versions dereferenced it without a null check — NeoForge treats that as a fatal packet error and disconnects. Such messages now show up as ordinary gray system lines and the connection survives. The bug is racy and only fired when a message happened to land in that window (the field report was a proxy plugin's
Sent server list), which is why it did not reproduce every time. 2.4.14 and 2.4.16 are both affected.
- Fixed**
- The "kicked right after joining" disconnect is fixed (all platforms): a system chat message sent by a server or proxy plugin at join time could arrive before the client's local player exists, and previous versions dereferenced it without a null check — NeoForge treats that as a fatal packet error and disconnects. Such messages now show up as ordinary gray system lines and the connection survives. The bug is racy and only fired when a message happened to land in that window (the field report was a proxy plugin's
Sent server list), which is why it did not reproduce every time. 2.4.14 and 2.4.16 are both affected.
- Fixed**
- The "kicked right after joining" disconnect is fixed (all platforms): a system chat message sent by a server or proxy plugin at join time could arrive before the client's local player exists, and previous versions dereferenced it without a null check — NeoForge treats that as a fatal packet error and disconnects. Such messages now show up as ordinary gray system lines and the connection survives. The bug is racy and only fired when a message happened to land in that window (the field report was a proxy plugin's
Sent server list), which is why it did not reproduce every time. 2.4.14 and 2.4.16 are both affected.
- Fixed**
- A client-only install on a server without e33chat no longer freezes WASD after joining: the join handshake is now only sent when the server actually has the e33chat channel. NeoForge hard-throws on a payload the peer never negotiated, and this send happened inside the vanilla login flow, skipping every initialization step after it — the world kept rendering but the movement-input object was never created, so the session could not move and logged nothing; servers with the mod negotiated the channel and never reproduced. (NeoForge 1.21.1)
- Notes**
- On servers without e33chat the panel and local features keep working; the group tab no longer appears (it always required the server side anyway). The log records
Server has no e33chat channel; skipping client hello.
- Fixed**
- A client-only install on a server without e33chat no longer freezes WASD after joining: the join handshake is now only sent when the server actually has the e33chat channel. NeoForge hard-throws on a payload the peer never negotiated, and this send happened inside the vanilla login flow, skipping every initialization step after it — the world kept rendering but the movement-input object was never created, so the session could not move and logged nothing; servers with the mod negotiated the channel and never reproduced. (NeoForge 1.21.1)
- Notes**
- On servers without e33chat the panel and local features keep working; the group tab no longer appears (it always required the server side anyway). The log records
Server has no e33chat channel; skipping client hello.
- Fixed**
- A client-only install on a server without e33chat no longer freezes WASD after joining: the join handshake is now only sent when the server actually has the e33chat channel. NeoForge hard-throws on a payload the peer never negotiated, and this send happened inside the vanilla login flow, skipping every initialization step after it — the world kept rendering but the movement-input object was never created, so the session could not move and logged nothing; servers with the mod negotiated the channel and never reproduced. (NeoForge 1.21.1)
- Notes**
- On servers without e33chat the panel and local features keep working; the group tab no longer appears (it always required the server side anyway). The log records
Server has no e33chat channel; skipping client hello.
[label] nick: content) only exact-matched its label, so [玩家系统] 请使用以下命令登录: /log <密码> became a bubble sent by 「请使用以下命令登录」; system-domain labels (containing 系统/公告/服务器/广播/提示/通知 or ending in 插件/助手) and /-prefixed command content are now rejected, while the angle-bracket shape is unchanged. Blank-sender chat and disguised packets are no longer claimed as nameless bubbles either, and the pre-name separator guard no longer misfires on separators inside balanced decorations: [Lv.10|VIP] Steve: hello, 【Lv.10|VIP】Steve » hello and [世界] [Lv.10|VIP] Steve: hello parse again, while 系统>>Steve, VIP|Steve and [系统|公告]Steve stay rejected. Server-declared exact templates now also apply to senderless disguised lines, and template logs carry a System/Disguised source tag.[label] nick: content) only exact-matched its label, so [玩家系统] 请使用以下命令登录: /log <密码> became a bubble sent by 「请使用以下命令登录」; system-domain labels (containing 系统/公告/服务器/广播/提示/通知 or ending in 插件/助手) and /-prefixed command content are now rejected, while the angle-bracket shape is unchanged. Blank-sender chat and disguised packets are no longer claimed as nameless bubbles either, and the pre-name separator guard no longer misfires on separators inside balanced decorations: [Lv.10|VIP] Steve: hello, 【Lv.10|VIP】Steve » hello and [世界] [Lv.10|VIP] Steve: hello parse again, while 系统>>Steve, VIP|Steve and [系统|公告]Steve stay rejected. Server-declared exact templates now also apply to senderless disguised lines, and template logs carry a System/Disguised source tag.[label] nick: content) only exact-matched its label, so [玩家系统] 请使用以下命令登录: /log <密码> became a bubble sent by 「请使用以下命令登录」; system-domain labels (containing 系统/公告/服务器/广播/提示/通知 or ending in 插件/助手) and /-prefixed command content are now rejected, while the angle-bracket shape is unchanged. Blank-sender chat and disguised packets are no longer claimed as nameless bubbles either, and the pre-name separator guard no longer misfires on separators inside balanced decorations: [Lv.10|VIP] Steve: hello, 【Lv.10|VIP】Steve » hello and [世界] [Lv.10|VIP] Steve: hello parse again, while 系统>>Steve, VIP|Steve and [系统|公告]Steve stay rejected. Server-declared exact templates now also apply to senderless disguised lines, and template logs carry a System/Disguised source tag.Reworked config screen: category sidebar (Appearance / Notifications / Behavior / Compat), hover an option name for a detailed description, debug log toggle now in the GUI
Config options now localize in third-party config UIs (e.g. Configured)
Fixes
Text in all three input boxes (main input, quick chat, sidebar search) is now vertically centered; placeholder and typed text share the exact same position, no more jump on focus
Underlines on clickable text no longer bleed through overlay panels (previously visible as a "scratch" across the emoji panel and other overlays)
Sending a command no longer creates a local bubble — matching vanilla, command text stays out of the chat log (whisper commands excepted)
Misc
Config file comments are now in English (ecosystem convention); file structure and keys unchanged, existing configs carry over seamlessly
(yellow, configurable), click avatar to @ (including self), network layer for quote/@ metadata sync (requires both
sides), fixed mod system messages being wiped on first world join, fixed false notification bar trigger when sending
at bottom
per-tick instead of on chat-screen init, so messages that arrive after joining a world persist correctly.