1.0.2
Compatibility
Required content
Changes
[1.0.2] — 2026-04-16
Fixed
-
Staff messages STILL leaked through DCIntegration after 1.0.1. Reported by SYLX again. Disassembling
dcintegration-fabric-3.0.7.2-1.21.jarrevealed the actual hook:de.erdbeerbaerlp.dcintegration.fabric.mixin.ChatMixinuses@Redirectto wrap thePlayerManager.broadcast(SignedMessage, …)call insideServerPlayNetworkHandler.handleDecoratedMessage(). At the bytecode level, the broadcast invocation is REPLACED by their handler — which forwards the message to Discord and (typically) calls broadcast itself. The 1.0.1 phase-ordering fix was useless here because Fabric'sALLOW_CHAT_MESSAGEevent fires INSIDEPlayerManager.broadcast, which means by the time the event would fire, DCIntegration had already POSTed to Discord.The real fix is a Mixin of our own:
ServerPlayNetworkHandlerMixininjects at HEAD ofhandleDecoratedMessagewithcancellable = true. This runs BEFORE the method body (and therefore before any@Redirecton calls inside the body). When we cancel, the entire body is skipped — DCIntegration's@Redirectnever fires, the broadcast call never happens, no Discord post.Only staff-chat traffic is intercepted (toggle mode +
@quick-prefix). Regular global chat passes through unchanged so DCIntegration continues to mirror it normally.
Notes for server operators
- Drop the new jar in
mods/and restart. No config changes. - The 1.0.1 phase-ordered listener is left in place as a fallback for
servers running chat-bridge mods that DON'T use Mixins (the listener
- the mixin can both fire safely; whichever runs first cancels the message).
- This fix is robust against any chat-bridge mod that hooks at or
below
PlayerManager.broadcast(the most common pattern). A bridge that hooksServerPlayNetworkHandler.handleChatMessage(the much earlier entry point, before signature decoration) would still see the message — that's a much more invasive integration and isn't the case for DCIntegration / Styled Chat / simple-discord-bridge / any mainstream Fabric chat bridge I've seen.
Optional dependencies
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:wYn2zpCf:gkLsfVXe"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:wYn2zpCf:gkLsfVXe"
}

