Server-side mod (Minecraft 1.21.1, NeoForge and Fabric) that relays chat and player events to the metaconcord bridge over WebSocket. Counterpart of gmod-metaconcord.
- Player chat,
/meemotes, joins, leaves, deaths and earned advancements are sent to the bridge (/minecraft/wsendpoint), which posts them to Discord. - Deaths and advancements follow the vanilla rules: they are only relayed when
showDeathMessages/announceAdvancementsis on and the advancement would be announced in chat. - Messages from the dedicated Discord channel are broadcast in-game as
[Discord] Name: message.
- Build with
./gradlew build. Jars:neoforge/build/libs/metaconcord-neoforge-<version>.jarandfabric/build/libs/metaconcord-fabric-<version>.jar. Prebuilt jars for every commit are attached to the build workflow runs. - Drop the jar for your loader in the server's
mods/folder. The Fabric build requires Fabric API. - Start the server, then edit
config/metaconcord-common.toml:endpoint: full WebSocket URI, e.g.wss://your-host/minecraft/wstoken: the shared token from the bridge'sconfig/minecraft.json
- Restart the server.
On NeoForge /me is captured from the parsed command before it runs. On Fabric it is captured when the emote is broadcast. Same result on vanilla.
Same as gmod-metaconcord: outbound frames {"name": "...", "data": {...}}, inbound {"payload": {"name": "...", "data": {...}}}, empty-string heartbeat every 10s, exponential reconnect backoff capped at 5 minutes. Auth is the X-Auth-Token header plus an IP allowlist on the bridge side.
./gradlew :neoforge:runServer or ./gradlew :fabric:runServer starts a dedicated dev server (accept the EULA in <loader>/run/eula.txt). Point endpoint at a local bridge with ws://localhost:3000/minecraft/ws.
Layout: common/ holds the loader-independent code (socket, payloads, stats, console relay, config) and is compiled into each loader jar; neoforge/ and fabric/ hold the entrypoints and event wiring.