ChatStack
Find out which chat mod is silencing the others — and give the line back
Install two chat mods on a Hytale server and sometimes both work, sometimes only one does. No error, no warning, nothing in the log — the ranks prefix simply stops appearing, or the level badge does, and there is no way to tell which mod took the chat or why
ChatStack is the reason that stops happening
The problem, precisely
Hytale gives every chat message one formatter slot:
public class PlayerChatEvent {
private PlayerChatEvent.Formatter formatter; // one slot
public void setFormatter(Formatter f) { ... } // last writer replaces
}
Every chat mod has to claim that slot to do its job — and what happens with two of them depends entirely on how each was written:
- A mod that captures the formatter it finds and calls it leaves the others intact. Both show up
- A mod that ignores it silently erases everything beneath. One of them is dead weight
Nothing in the API distinguishes the two. From the outside, a working stack and a broken one look identical: one mod is on top, and you cannot see whether it kept the rest. There are more than ten published Hytale chat mods, and no way to know which pairs survive together
What ChatStack does
1. It tells you who is fighting, and who actually reaches players
/chatstack status lists every mod that claimed the chat formatter this session, named by its jar
file, and says whether each one keeps what it found or replaces it:
ChatStack - 12 chat message(s) seen
[outermost] Azeys:PrefixesPlus claimed 12, keeps what it found
[nested] com.hytale:HyChat claimed 12, replaces what it found
All 2 mods reach players: each one calls the formatter below it
and when one of them is eating the others, it says so by name:
[outermost] SomeChatMod claimed 12, replaces what it found
[nested] Azeys:PrefixesPlus claimed 12, never runs
Azeys:PrefixesPlus never reaches players: SomeChatMod discards the formatter
it finds instead of calling it
Use /chatstack owner Azeys:PrefixesPlus to give it the chat line instead.
That information does not exist anywhere else today — not in the log, not in game
2. It lets you choose
/chatstack owner <mod> decides which mod owns the chat line, per server, in game or in config. No
more "whichever loaded last". auto hands it back
How it works, honestly
ChatStack registers the same observation at six points across the chat dispatch, so a mod that claims the slot between two of them is caught by the later one. Between every pair of claims it leaves a marker that renders exactly what the formatter beneath it renders and notes that it was called. A marker being reached means precisely one thing — that mod called what it found — and that single fact is what the whole report is built from
It adds no calls to anyone's code. Each marker delegates exactly once, so every mod's formatter runs exactly as often as it would if ChatStack were not installed. Nothing is called with test input; nothing is invoked twice
It cannot break chat. Every probe is wrapped: a failure logs once and leaves the event untouched. A mod that only watches has no business taking a server's chat down with it
Its one honest limit: two mods that claim the slot between the same two probes are reported as one, because nothing of ChatStack's ran in between. In practice mods register at the named priorities, which is exactly where the probes sit
Install
Drop the jar in [GameFolder]/UserData/Mods/ (singleplayer) or [ServerFolder]/Mods/ (dedicated
server). That is all
One jar. No dependencies. No early plugin, no bytecode patching, no launcher replacement. ChatStack uses nothing but Hytale's public plugin API
Requirements
Hytale 0.6.3 or later. Server-side only — players install nothing
Compatibility
ChatStack does not replace your chat mods, and it does not ask you to. It sits behind them and reports. Remove it and every mod behaves exactly as it did before
It works with mods released before it existed, and with mods released after it that never hear of it
What comes next
Reporting the conflict is the half that can be done with certainty. The other half — merging two mods' decorations into one line so both appear at once — is designed and prototyped, and will ship once it can be done without ever guessing. Taking a formatter apart means calling another mod's code with test input, and that is not something to switch on casually or by default
If you want it, say so on this page: it moves up the list