Li-Fan Chen says to OwO
"use strict"; var MCAManager = require('./mca.js'), nbt = require('prismarine-nbt'), findDiff = require('deep-diff').diff; var arrPromise = []; function MCADiff(file1, file2, output) { function readChunk(m, x, z) { return new Promise((resolve, reject) => { m.read(x, z, function(err, region) { if (err) throw err; if (region) { nbt.parse(region, function(err, data) { if (err) throw err; data = nbt.simplify(data); data.Level.Sections = data.Level.Sections.map(v => { v.Add = byteTo4bits(v.Add); v.Data = byteTo4bits(v.Data); v.BlockLight = byteTo4bits(v.BlockLight); v.SkyLight = byteTo4bits(v.SkyLight); return v; }) resolve(data); }) } }) }); } function byteTo4bits(byteArray) { if (!byteArray) return; var newArr = []; byteArray.forEach(ele => { newArr.push(ele & 0xF); newArr.push(ele >> 4); }) return newArr; } function processDiff(diff, blocks, lChunk, rChunk) { switch (diff.path[1]) { case "Sections": if (diff.path[3] == "Y") break; blocks[diff.path[2]] = (diff.path[2] in blocks) ? blocks[diff.path[2]] : {}; blocks[diff.path[2]][diff.path[4]] = blocks[diff.path[2]][diff.path[4]] ? blocks[diff.path[2]][diff.path[4]] : {}; blocks[diff.path[2]][diff.path[4]][diff.path[3]] = { lhs: diff.lhs, rhs: diff.rhs } default: // code } return blocks; } var m = new MCAManager(file1); var n = new MCAManager(file2); //var i = 0, // j = 31; for (var i = 0; i <= 31; i++) { for (var j = 0; j <= 31; j++) { arrPromise.push(Promise.all([readChunk(m, i, j), readChunk(n, i, j)]).then(values => { var blocks = { xPos: values[0].Level.xPos, zPos: values[0].Level.zPos }; if(values[0].Level.LastUpdate==values[1].Level.LastUpdate) return; var difference = { diff: findDiff(values[0], values[1]) }; if (difference.diff) { difference.xPos = values[0].Level.xPos; difference.zPos = values[0].Level.zPos; difference.diff.forEach((ele) => { switch (ele.kind) { case 'E': blocks = processDiff(ele, blocks, values[0], values[1]); break; default: // code } }); output(blocks); } })); } } return Promise.all(arrPromise); } module.exports = MCADiff; /* MCADiff("r.0.-1_old.mca", "r.0.-1.mca", diff => { console.log(JSON.stringify(diff)); });*/