Links
Tags
Creators
Details
Licensed MIT
Published 5 months ago
Updated yesterday
All versions
0.4.1+26.2-fabric
Release
World Mirror 0.4.1+26.2-fabriclast week 14
Compatibility
Minecraft: Java Edition
26.2
Platform
Fabric
Supported environments
Client-side
Changes
[0.4.1] — 2026-08-23
Changed
- Entity capture now uses Minecraft's vanilla serializer for complete top-level entities
and passenger trees instead of a hand-written
ValueOutputadapter. - Entity persistence now models versioned partial and complete observations independently from terrain-cache eviction, and merges affected UUIDs through atomic entity-region replacements.
Fixed
- Reconciled UUID moves across chunks and regions, recursively removed stale passenger copies, preserved unobserved on-disk entities during partial observations, and retained failed entity revisions for retry.
- Empty entity MCA placeholders no longer abort dimension-wide entity writes. Target placeholders are replaced atomically, and region/UUID verification now completes before entity revisions are acknowledged.
- The status screen now reads an open mirror's original source and metadata directly, refreshes metadata when an export finishes, and labels the timestamp as the last successful sync.
- New mirrors copy the source world's time, weather, and difficulty by default, with configurable morning, clear, and Peaceful fallbacks. Existing mirrors expose separate manual sync actions for those settings, preventing hostile entities from being discarded when a mirror was created with the wrong difficulty.
- Preserved immutable terrain, entity, and container snapshots when a stop-time export is deferred behind an active worker, preventing disconnect races from losing the final observed state.
- Minecraft 26.1.2 and 26.2 saves now write
world_clocks.datin the directdata.<clock-id>.<state>shape accepted byPackedClockStates.CODEC. Existing files with World Mirror 0.4.0's exact extradata.clockswrapper are validated and repaired atomically; unrelated clock payloads are not modified.
[0.4.0] — 2026-08-23
Added
- Opt-in
Experimental Adaptivedownload pipeline with dirty-backlog and maximum-latency triggers; the hardenedStable Periodicpipeline remains the default and mode changes apply only on the next activation. - Coalesced event capture for full chunks, block changes, block entities, biomes, lighting, containers, chunk loads, and a final synchronous capture on unload.
- Configurable main-thread capture ceiling, bounded capture-hint queue, adaptive high-water mark, and export-cooldown controls.
- Default-off performance diagnostics covering queue pressure, capture/frame/tick percentiles, per-pass export triggers and stages, slow regions, failures, and JVM heap/GC use.
Changed
- Stable periodic and adaptive scheduling now implement one
DownloadPipelinecontract, keeping both strategies parallel and making future strategies independent of lifecycle orchestration. - Split the download controller into dedicated main-thread capture, background export,
output-path, and nearby-export owners;
DownloadManagerremains the lifecycle/command facade. - Moved the shared
WorldStructureCreatorandStatusScreenbehavior into root source, leaving thin per-target adapters for Minecraft level-data, rendering, and screen APIs. - Region output now uses Minecraft's streaming
RegionFileAPI and materializes one chunk at a time instead of deep-copying and converting the whole cache through temporary byte arrays. - Automatic exports no longer run the nearby 17×17 pre-export scan; the optional scan is reserved for explicit manual export.
- Entity regions are also streamed one region at a time instead of retaining every parsed entity MCA file for the pass.
- Adaptive high-watermark exports use low-watermark hysteresis and a cooldown; automatic requests never create immediate deferred tail passes behind an active export.
- Capture diagnostics aggregate latency by bounded reason, report rate-limited slow outliers, and wait for a complete first sampling window.
- Updated the README and Modrinth usage instructions to distinguish starting a session, flushing captured data, and selecting a world-list-visible save location.
Fixed
- Clearing or switching a source world now clears chunk, entity, and container live state, while in-flight dirty snapshots retain their own lighting overlays until export finishes.
- Bulk conflict overwrite deletes a conflict MCA only after every applicable chunk was written successfully; failed world writes retain the conflict file for retry.
- Exact monotonic revisions prevent an update arriving during an older write from being acknowledged or invalidated accidentally.
- Dirty chunks can no longer be evicted before both region flush and SQLite durability-index commit; failed stages remain cached for retry.
- SQLite records each captured timestamp and refuses to regress a newer durability record.
- Manual conflicts use streaming region writes and remain dirty for retry if conflict persistence fails.
- Entity snapshots now include type IDs and write one-shot empty markers for moves/despawns in still-loaded chunks without deleting entities merely because their chunk unloaded.
- Replaced the unbounded per-region lock cache with fixed lock striping.
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:RjnX4gR2:FAX0yhqC"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:RjnX4gR2:FAX0yhqC"
}

