# VentureChat Research — Replacement for Carbon 3.0.0-beta.36 **Date:** 2026-05-07 **Target:** racked.ru (Purpur 1.21.11, single server, no Velocity) **Repo:** github.com/Aust1n46/VentureChat **Verdict (one line):** **Cautious recommend** — architecture fixes the viewer-context bug, but maintainer is slow and 1.21.10/.11 has open bug reports unresolved since Jan 2026. --- ## 1. Project Health | Signal | Value | |---|---| | Latest release | **v3.8.0** (2025-08-20) — built for 1.21.8 | | Last commit on master | 2025-08-20 (`b9e19e2` — 1.21.8 update) | | Previous commit gap | 6 months (2025-02 → 2025-08) | | Open issues | 71 (incl. #157 "update for 1.21.10!!!", #154 sound fix, #155 `/msg` crashes server, #146 `/tell` crashes 1.21.4) | | Stars | 48 | | License | **GPL-3.0** | | API version declared | `1.13` (means it should load on 1.21.x but no native Paper API use) | **Status: maintained but slow.** One active maintainer (Aust1n46). Long gaps between updates. Multiple users requesting 1.21.10+ updates with no response yet. **Risky for a 1.21.11 server today** — v3.8.0 was tested against 1.21.8. --- ## 2. Architecture — Does it fix the viewer-context bug? **Yes, by design.** Evidence from `src/main/java/mineverse/Aust1n46/chat/utilities/Format.java` and `listeners/ChatListener.java`: ```java // Format is built ONCE, against the SENDER (icp = MineverseChatPlayer sender): PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), placeholder) format = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), ...)); // Then dispatched per-recipient as a pre-rendered packet — placeholders NOT re-resolved per viewer: for (Player p : recipients) { String json = Format.formatModerationGUI(globalJSON, p, mcp.getName(), channel.getName(), hash); PacketContainer packet = Format.createPacketPlayOutChat(json); Format.sendPacketPlayOutChat(p, packet); } ``` This is the **pre-1.19 chat model** — VentureChat hooks the legacy `AsyncPlayerChatEvent` and ships rendered JSON packets via ProtocolLib. It does **not** implement Paper's `AsyncChatEvent` `ChatRenderer` (which is what causes Carbon to re-render the format per viewer and resolve `` against each viewer instead of the sender). **Plugin → player `sendMessage` interception:** Not intercepted. VentureChat only acts on the chat event; `Player.sendMessage()` and `Audience.sendMessage()` bypass it entirely. Good for plugins that send system messages directly. --- ## 3. Feature Parity vs Carbon (only diffs that matter) | Feature | Carbon | VentureChat | |---|---|---| | Format syntax | MiniMessage | **Legacy `&` codes only** (no MM, no Adventure Component) | | Channels | yes | yes (alias, distance, perm, color, format, filter, mutable, autojoin, cooldown) | | Channel cmd / focus | `/ch ` | per-channel alias (e.g. `/g`) + `/channel` | | Mute / ignore | yes | yes (per-channel mute, time-based mutes `10m`/`1h`/`1d`) | | Mentions / pings | yes | yes (configurable sound + format) | | Profanity filter swap | yes | yes (regex `pattern,replacement`) | | DiscordSRV | yes | **yes** — first-class hook, channel-link config | | PAPI | yes | yes (`{vault_prefix}`, `{player_displayname}`, `{venturechat_channel_prefix}`, `sender_*`/`receiver_*`) | | **MiniPlaceholders** | yes | **NO native support** — only PAPI bracket placeholders | | Vault group prefix | via PAPI | via Vault directly + `{vault_prefix}` | | Hover/click events | MM tags | Per-group `hover_text` / `click_action` / `click_text` lists in config | | 1.19+ signed chat | preview-aware | Cancels & reships as packets — preview not used | | Bungee/Velocity | yes | yes (irrelevant for racked.ru) | **Material gaps:** No MiniMessage, no MiniPlaceholders. LP Expansion via PAPI bracket placeholders works (it's just `{luckperms_prefix}` etc.). --- ## 4. Migration Cost: **Medium** Concrete breakage list: - **Format rewrite:** every Carbon MM format string ` » ` becomes legacy `&` form: `{luckperms_prefix}{player_displayname} &7» &f{message}`. Hover/click move from MM tags to per-group YAML. - **MiniPlaceholders dropped.** If anything in current chat-format uses MM-only tags or MiniPlaceholders-exclusive resolvers, those need PAPI equivalents. - **Permission rename:** `carbon.*` → `venturechat.` (e.g. `venturechat.global`), plus `venturechat.mute`, `venturechat.staffchannel`, etc. LuckPerms group nodes need a one-pass rewrite. - **User data:** mute/ignore lists not migratable from Carbon — players re-mute fresh. - **DiscordSRV config:** channels block needs the VentureChat channel name, not Carbon's. Format templates in DiscordSRV `messages` may need adjustment if they referenced Carbon-specific placeholders. - **partychat:** delete the channel block in `config.yml`; remove the LP perm grant. LP `&`-coded prefixes are **already legacy**, so they render natively — no Carbon-style `` wrapping needed. This is the biggest migration win. --- ## 5. Specific Bug Check | Bug | Carbon | VentureChat | |---|---|---| | `` resolves to viewer's prefix | YES (per-viewer ChatRenderer) | **NO — resolves once against sender** (verified in source) | | Plugin → player `sendMessage` silently dropped | Possibly intercepted by ChatRenderer | **Not intercepted** — no AsyncChatEvent hook, no Audience interception | --- ## 6. Performance / Maturity - Long-running plugin (originally MineverseChat, ~10 years old, #1 chat plugin on Spigot historically). - Memory footprint expected low — no Adventure Component graph, just string ops + JSON. - ProtocolLib dependency adds a small overhead per chat packet but is already on the server. - No specific 1000+ player evidence found; reviews indicate widespread use on mid-size networks. - **Risk:** open `/msg` and `/tell` crash issues on 1.21.4/1.21.5 (#146, #155) — must verify these are fixed in v3.8.0 or test before going live. --- ## Verdict **Cautious recommend.** Architecture is the right shape to fix the viewer-context bug — placeholders resolved once against sender, no Paper ChatRenderer pipeline, plugin sendMessage untouched. **But** v3.8.0 targets 1.21.8 (not .11), maintainer turnaround is months not days, and there are unresolved crash reports on close-by versions. Stage in a test instance against 1.21.11 first.