All Mods Resource Packs Data Packs Shaders Modpacks Plugins
E33Chat

E33Chat

by E33EPUS • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

ChatScreen

E33Chat

Rebuilds the vanilla chat HUD in chat-app style

MC Loader Side Java Version License

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
1.21.1
Neoforge
1d ago 1
1.21.1
Fabric
1d ago 1
1.20.1
Forge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Fabric
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Neoforge
1d ago 1
1.21.1
Fabric
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Neoforge
1d ago 1
1.21.1
Fabric
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Neoforge
1d ago 1
1.21.1
Fabric
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Fabric
1d ago 1
1.21.11
Fabric
1d ago 1
1.21.1
Fabric
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.11
Fabric
1d ago 1
1.21.1
Neoforge
1d ago 1
1.21.1
Fabric
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Fabric
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Fabric
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Fabric
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Fabric
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.21.1
Neoforge
1d ago 1
1.20.1
Forge
1d ago 1
1.20.1
Forge
1d ago 1
1.20.1
Fabric
1d ago 1
1.20.1
Fabric
1d ago 1
1.20.1
Forge
1d ago 1
1.20.1
Forge
1d ago 1
1.20.1
Forge
1d ago 1
1.20.1
Fabric
1d ago 1
1.20.1
Forge
1d ago 1
1.20.1
Forge
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.
Fixed: server system prompts are no longer claimed as player messages. The EasyBot colon shape ([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.
Fixed: server system prompts are no longer claimed as player messages. The EasyBot colon shape ([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.
Fixed: server system prompts are no longer claimed as player messages. The EasyBot colon shape ([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.
Fixed: a full-code audit pass that closed every P1 and P2 finding with zero P0s. Hostile packets can no longer force unbounded memory allocations (every network decoder now caps counts and lengths and rejects the packet instead of silently clamping), NeoForge no longer burns double the download quota on server-hosted JPEGs (the one end the 2.4.12 fix missed), switching themes on Fabric keeps the custom panel background image, opacity and crop, the /e33chat template command no longer silently disables server media hosting after saving, the group directory no longer desyncs above 200 groups, the sidebar background no longer vanishes below y=999 on large GUIs, viewed animations are cached with an LRU and released on disconnect instead of living forever in VRAM, the clear-history double-click confirm now actually expires (a clock-domain mixup), popups reopened within 150ms of closing are no longer killed by the stale close timer, banner avatars fade in step with their text instead of darker, emoji-grid clicks in the right-hand padding band no longer send the wrong emote, and labelled player chat keeps its styled channel/title prefixes when the EasyBot colon shape claims it. Hardened: group data saves atomically and tells the player when it fails, corrupt config files are kept as backups instead of being overwritten, singleplayer world switches no longer inherit the previous world's server config or chat backlog, the sidebar wildcard hide patterns (e.g. Islot_*) that never worked on Forge/NeoForge and crashed Fabric on brackets now share one correct implementation across all three platforms. Development: TemplateMatcher moved into the shared layer, the pinned-equality guard grew from 10 to 18 entries, and six new test classes cover hostile decoder input, group validation and the emoji grid (446/416/447 tests green across Forge/Fabric/NeoForge).
Fixed: a full-code audit pass that closed every P1 and P2 finding with zero P0s. Hostile packets can no longer force unbounded memory allocations (every network decoder now caps counts and lengths and rejects the packet instead of silently clamping), NeoForge no longer burns double the download quota on server-hosted JPEGs (the one end the 2.4.12 fix missed), switching themes on Fabric keeps the custom panel background image, opacity and crop, the /e33chat template command no longer silently disables server media hosting after saving, the group directory no longer desyncs above 200 groups, the sidebar background no longer vanishes below y=999 on large GUIs, viewed animations are cached with an LRU and released on disconnect instead of living forever in VRAM, the clear-history double-click confirm now actually expires (a clock-domain mixup), popups reopened within 150ms of closing are no longer killed by the stale close timer, banner avatars fade in step with their text instead of darker, emoji-grid clicks in the right-hand padding band no longer send the wrong emote, and labelled player chat keeps its styled channel/title prefixes when the EasyBot colon shape claims it. Hardened: group data saves atomically and tells the player when it fails, corrupt config files are kept as backups instead of being overwritten, singleplayer world switches no longer inherit the previous world's server config or chat backlog, the sidebar wildcard hide patterns (e.g. Islot_*) that never worked on Forge/NeoForge and crashed Fabric on brackets now share one correct implementation across all three platforms. Development: TemplateMatcher moved into the shared layer, the pinned-equality guard grew from 10 to 18 entries, and six new test classes cover hostile decoder input, group validation and the emoji grid (446/416/447 tests green across Forge/Fabric/NeoForge).
Fixed: a full-code audit pass that closed every P1 and P2 finding with zero P0s. Hostile packets can no longer force unbounded memory allocations (every network decoder now caps counts and lengths and rejects the packet instead of silently clamping), NeoForge no longer burns double the download quota on server-hosted JPEGs (the one end the 2.4.12 fix missed), switching themes on Fabric keeps the custom panel background image, opacity and crop, the /e33chat template command no longer silently disables server media hosting after saving, the group directory no longer desyncs above 200 groups, the sidebar background no longer vanishes below y=999 on large GUIs, viewed animations are cached with an LRU and released on disconnect instead of living forever in VRAM, the clear-history double-click confirm now actually expires (a clock-domain mixup), popups reopened within 150ms of closing are no longer killed by the stale close timer, banner avatars fade in step with their text instead of darker, emoji-grid clicks in the right-hand padding band no longer send the wrong emote, and labelled player chat keeps its styled channel/title prefixes when the EasyBot colon shape claims it. Hardened: group data saves atomically and tells the player when it fails, corrupt config files are kept as backups instead of being overwritten, singleplayer world switches no longer inherit the previous world's server config or chat backlog, the sidebar wildcard hide patterns (e.g. Islot_*) that never worked on Forge/NeoForge and crashed Fabric on brackets now share one correct implementation across all three platforms. Development: TemplateMatcher moved into the shared layer, the pinned-equality guard grew from 10 to 18 entries, and six new test classes cover hostile decoder input, group validation and the emoji grid (446/416/447 tests green across Forge/Fabric/NeoForge).
Fixed: sent GIFs losing their animation (animated sources now pass through as raw bytes, with a clear toast instead of a silent still image when over the limits), QQ group relays rendering as grey system text (the parser accepts the "[tag] name: content" shape and keeps online players' avatars), Tab on an empty chat input locking all typing on both 1.21.1 loaders, the hotbar HUD vanishing while the chat panel was open (the panel no longer hides the HUD), our own uploaded images randomly "failing to load" (no wasted probes on JPEGs, a local cache of own uploads, the de-duplication fix finally landed on NeoForge and Fabric, server rate limit 4 -> 16), and the blank background-framing screen. Added: a framing editor for the custom panel background (a selection box locked to the panel's aspect ratio; drag to pan, scroll to zoom, re-fits automatically when the panel width changes). Changed: animation limits aligned with AtomChat (120 frames with an 8M-pixel decoded budget that trims instead of rejecting), custom emote cap raised from 10 to 32, still GIF thumbnails with a badge in the emote panel (sent messages keep animating). Debug: temporary diagnostics for the suggestion list not responding to mouse clicks (enable debug_log and reproduce once; the fix lands next version).
Fixed: sent GIFs losing their animation (animated sources now pass through as raw bytes, with a clear toast instead of a silent still image when over the limits), QQ group relays rendering as grey system text (the parser accepts the "[tag] name: content" shape and keeps online players' avatars), Tab on an empty chat input locking all typing on both 1.21.1 loaders, the hotbar HUD vanishing while the chat panel was open (the panel no longer hides the HUD), our own uploaded images randomly "failing to load" (no wasted probes on JPEGs, a local cache of own uploads, the de-duplication fix finally landed on NeoForge and Fabric, server rate limit 4 -> 16), and the blank background-framing screen. Added: a framing editor for the custom panel background (a selection box locked to the panel's aspect ratio; drag to pan, scroll to zoom, re-fits automatically when the panel width changes). Changed: animation limits aligned with AtomChat (120 frames with an 8M-pixel decoded budget that trims instead of rejecting), custom emote cap raised from 10 to 32, still GIF thumbnails with a badge in the emote panel (sent messages keep animating). Debug: temporary diagnostics for the suggestion list not responding to mouse clicks (enable debug_log and reproduce once; the fix lands next version).
Fixed: sent GIFs losing their animation (animated sources now pass through as raw bytes, with a clear toast instead of a silent still image when over the limits), QQ group relays rendering as grey system text (the parser accepts the "[tag] name: content" shape and keeps online players' avatars), Tab on an empty chat input locking all typing on both 1.21.1 loaders, the hotbar HUD vanishing while the chat panel was open (the panel no longer hides the HUD), our own uploaded images randomly "failing to load" (no wasted probes on JPEGs, a local cache of own uploads, the de-duplication fix finally landed on NeoForge and Fabric, server rate limit 4 -> 16), and the blank background-framing screen. Added: a framing editor for the custom panel background (a selection box locked to the panel's aspect ratio; drag to pan, scroll to zoom, re-fits automatically when the panel width changes). Changed: animation limits aligned with AtomChat (120 frames with an 8M-pixel decoded budget that trims instead of rejecting), custom emote cap raised from 10 to 32, still GIF thumbnails with a badge in the emote panel (sent messages keep animating). Debug: temporary diagnostics for the suggestion list not responding to mouse clicks (enable debug_log and reproduce once; the fix lands next version).
New Features

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
True Release
Fixed a bug:player cant join servers.
Fixed so many bugs
Fixed server compatibility
anti_spam,No Chat Reports compact
fix bug: can't open config screen when installed mod menu
Rebuilt the chat interception architecture
notification bar (new message / @mention alerts when scrolled up, clickable), @/quote strong hint on HUD
(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
Fixed mod welcome/update notifications being wiped from the chat panel on first open — world-change detection now runs
per-tick instead of on chat-screen init, so messages that arrive after joining a world persist correctly.
Fix bug:messages from previous world persist after switching saves
E33Chat Icon
Download E33Chat
Select game version
Select platform