All versions
1.0+1.20.1
Release
MirrorMod 1.0+1.20.13 months ago 341
Compatibility
Minecraft: Java Edition
1.20.1–1.20.6
Platform
Fabric
Supported environments
Client and server
Required content
Unavailable version
Changes
Fixed - TNT
- TNT now really explodes in every chunk. The explosion result was never written back to the mirror template, so craters were filled straight back in — either by block tasks still sitting in the queue, or the next time the chunk reloaded. It looked exactly like "TNT didn't go off over here". The crater is now recorded in the template, so chunks that load later get it too.
- No more random repeat explosions. Walking around after a detonation no longer sets off "spontaneous" blasts in freshly loaded chunks for the next 10 seconds.
- No more double explosions in one chunk. Igniting TNT with a redstone torch mirrored the torch as well, and in every chunk that copy genuinely primed the mirrored TNT — on top of the mod's own scheduled wave. Result: craters twice as deep in some chunks. Mirror chunks no longer run TNT physics of their own.
- Fixed the lock-up where TNT refused to mirror at all. After any mass explosion every loaded chunk was guarded for 10 seconds, and each failed attempt extended that guard — so it never expired as long as you kept trying. The guard is gone, replaced by three precise checks that can actually tell an echo from a player.
Fixed — other
- Craters and player-broken blocks survive a server restart. Air entries were being silently discarded when loading the saved template, so destruction was forgotten while construction was remembered.
- Fluid flow watchers could stop ageing under load and hang around forever, holding a reference to the world.
- Armor stand copies could be left behind when the removal budget was spent on unloaded chunks.
- Player language data leaked on disconnect.
/voidworldcould overwrite the owner of an existing world.- Several unbounded registries now have ceilings.
Performance
- Mirrored blocks no longer fire neighbour updates. Every copy used to wake six neighbours; across thousands of chunks that avalanche was the single biggest source of lag.
- Loading a chunk no longer queues the entire template. Positions that already match are skipped outright, so a chunk that is already mirrored costs nothing. This was the main reason the server stuttered while you moved around.
- Redstone polling was O(components × loaded chunks) and did a full cycle only every few dozen ticks. It is now O(components), so mirrored repeaters and comparators keep up.
- Removed per-tick full-queue scans and a string allocation from the hottest loop.
- Block budget raised from 10 ms to 12 ms per tick, total mod budget from 15 ms to 18 ms.
Known limitations
- The crater shape is sampled from one chunk, so on uneven terrain it is applied at the same local coordinates everywhere and can end up floating or buried. This is how the mod already handles breaking a natural block.
- Each explosion adds roughly 150–250 template entries. Watch
/mirrormod statusand use/mirrormod clearif it gets heavy. - Mirrored mobs and armor stands in distant chunks do not tick — those chunks are loaded but not ticking. TNT is unaffected; its explosion is driven by server ticks.
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:GFrLqjh0:QrM2Bxt1"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:GFrLqjh0:QrM2Bxt1"
}

