Skip to content

v0.3.0 — semantic version control (history + 3-way merge)

Choose a tag to compare

@BangRocket BangRocket released this 03 Jun 17:10
· 205 commits to main since this release

Turns mcadiff into a git-like, semantic version-control system for Minecraft worlds — on top of the existing diff and patch/restore.

New: repository

A content-addressed, deduplicating object store (external repo). Each chunk is hashed by its decoded NBT, so an unchanged chunk is stored once no matter how many snapshots reference it — the thing fastback + git-LFS fundamentally can't do (they store whole region blobs per snapshot).

mcadiff init    <repo>
mcadiff commit  <repo> <world> -m "msg"
mcadiff log     <repo>
mcadiff status  <repo> <world>
mcadiff checkout <repo> <ref> <world-out>
mcadiff branch  <repo> [name]
mcadiff merge   <repo> <other-branch> [--theirs]
  • Whole-world snapshots: region/entities/poi as deduped per-chunk objects, loose NBT canonical, all other files (datapacks, stats, advancements) as raw blobs → faithful, playable checkout.
  • True 3-way merge: finds the common ancestor and merges per NBT node — changes from both sides touching different nodes both land; only a genuine same-node clash is a conflict (kept ours, or theirs with --theirs, and reported). Far finer than line-based merge.

Quality

55 tests (was 48): object-store dedup, canonical-form determinism, commit→checkout reproduces a world, merge-base, and 3-way merge (combine / conflict ours+theirs / fast-forward). Verified on the example worlds — committing Older then Newer reproduces each exactly on checkout, and shared chunks are stored once (~4,389 objects for ~5,250 chunks across both commits).

Requires .NET 9. See the README's Version control section.