@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
76 lines (73 loc) • 8.63 kB
JavaScript
import { Vector3 } from '@jsprismarine/math';
import BlockStorage from './BlockStorage.es.js';
class SubChunk {
storages = /* @__PURE__ */ new Map();
constructor(storages = /* @__PURE__ */ new Map()) {
this.storages = storages;
}
/**
* Returns if the SubChunk is all air (basically empty).
*/
isEmpty() {
for (const storage of this.storages.values()) {
if (!storage.isEmpty()) return false;
}
return true;
}
getStorage(index) {
if (!this.storages.has(index)) {
for (let i = 0; i <= index; i++) {
if (!this.storages.has(i)) {
this.storages.set(i, new BlockStorage({}));
}
}
}
return this.storages.get(index);
}
getStorages() {
return Array.from(this.storages.values());
}
/**
* Returns the legacy block id in the given position.
*
* @param bx - block x
* @param by - block y
* @param bz - block z
* @param layer - block storage layer
*/
getBlock(bx, by = 0, bz = 0, layer = 0) {
if (bx instanceof Vector3) {
return this.getBlock(bx.getX(), bx.getY(), bx.getZ(), layer);
}
return this.getStorage(layer).getBlock(bx, by, bz);
}
/**
* Sets a block by runtime Id in the given storage layer.
*
* @param bx - block x
* @param by - block y
* @param bz - block z
* @param runtimeId - block runtime Id
* @param layer - block storage layer
*/
setBlock(bx, by, bz, runtimeId, layer) {
this.getStorage(layer).setBlock(bx, by, bz, runtimeId);
}
networkSerialize(stream) {
stream.writeByte(8);
stream.writeByte(this.storages.size);
for (const storage of this.storages.values()) {
storage.networkSerialize(stream);
}
}
static networkDeserialize(stream) {
const subChunk = new SubChunk();
const layerCount = stream.readByte();
for (let i = 0; i < layerCount; i++) {
subChunk.storages.set(i, BlockStorage.networkDeserialize(stream));
}
return subChunk;
}
}
export { SubChunk as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViQ2h1bmsuZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93b3JsZC9jaHVuay9TdWJDaHVuay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICdAanNwcmlzbWFyaW5lL21hdGgnO1xuaW1wb3J0IHR5cGUgeyBMZWdhY3lJZCB9IGZyb20gJy4uLy4uL2Jsb2NrL0Jsb2NrTWFwcGluZ3MnO1xuaW1wb3J0IEJsb2NrU3RvcmFnZSBmcm9tICcuL0Jsb2NrU3RvcmFnZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YkNodW5rIHtcbiAgICBwcml2YXRlIHN0b3JhZ2VzOiBNYXA8bnVtYmVyLCBCbG9ja1N0b3JhZ2U+ID0gbmV3IE1hcCgpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHN0b3JhZ2VzOiBNYXA8bnVtYmVyLCBCbG9ja1N0b3JhZ2U+ID0gbmV3IE1hcCgpKSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZXMgPSBzdG9yYWdlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSBTdWJDaHVuayBpcyBhbGwgYWlyIChiYXNpY2FsbHkgZW1wdHkpLlxuICAgICAqL1xuICAgIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICBmb3IgKGNvbnN0IHN0b3JhZ2Ugb2YgdGhpcy5zdG9yYWdlcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgaWYgKCFzdG9yYWdlLmlzRW1wdHkoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3RvcmFnZShpbmRleDogbnVtYmVyKTogQmxvY2tTdG9yYWdlIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0b3JhZ2VzLmhhcyhpbmRleCkpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhbGwgbWlzc2luZyBzdG9yYWdlIGxheWVyc1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdG9yYWdlcy5oYXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlcy5zZXQoaSwgbmV3IEJsb2NrU3RvcmFnZSh7fSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2VzLmdldChpbmRleCkhO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTdG9yYWdlcygpOiBCbG9ja1N0b3JhZ2VbXSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuc3RvcmFnZXMudmFsdWVzKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxlZ2FjeSBibG9jayBpZCBpbiB0aGUgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnggLSBibG9jayB4XG4gICAgICogQHBhcmFtIGJ5IC0gYmxvY2sgeVxuICAgICAqIEBwYXJhbSBieiAtIGJsb2NrIHpcbiAgICAgKiBAcGFyYW0gbGF5ZXIgLSBibG9jayBzdG9yYWdlIGxheWVyXG4gICAgICovXG4gICAgcHVibGljIGdldEJsb2NrKGJ4OiBWZWN0b3IzIHwgbnVtYmVyLCBieTogbnVtYmVyID0gMCwgYno6IG51bWJlciA9IDAsIGxheWVyOiBudW1iZXIgPSAwKTogTGVnYWN5SWQge1xuICAgICAgICBpZiAoYnggaW5zdGFuY2VvZiBWZWN0b3IzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRCbG9jayhieC5nZXRYKCksIGJ4LmdldFkoKSwgYnguZ2V0WigpLCBsYXllcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdG9yYWdlKGxheWVyKS5nZXRCbG9jayhieCwgYnksIGJ6KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgYmxvY2sgYnkgcnVudGltZSBJZCBpbiB0aGUgZ2l2ZW4gc3RvcmFnZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBieCAtIGJsb2NrIHhcbiAgICAgKiBAcGFyYW0gYnkgLSBibG9jayB5XG4gICAgICogQHBhcmFtIGJ6IC0gYmxvY2sgelxuICAgICAqIEBwYXJhbSBydW50aW1lSWQgLSBibG9jayBydW50aW1lIElkXG4gICAgICogQHBhcmFtIGxheWVyIC0gYmxvY2sgc3RvcmFnZSBsYXllclxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRCbG9jayhieDogbnVtYmVyLCBieTogbnVtYmVyLCBiejogbnVtYmVyLCBydW50aW1lSWQ6IG51bWJlciwgbGF5ZXI6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmdldFN0b3JhZ2UobGF5ZXIpLnNldEJsb2NrKGJ4LCBieSwgYnosIHJ1bnRpbWVJZCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5ldHdvcmtTZXJpYWxpemUoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiB2b2lkIHtcbiAgICAgICAgLy8gU3ViQ2h1bmsgdmVyc2lvblxuICAgICAgICBzdHJlYW0ud3JpdGVCeXRlKDgpO1xuICAgICAgICAvLyBMYXllciBjb3VudFxuICAgICAgICBzdHJlYW0ud3JpdGVCeXRlKHRoaXMuc3RvcmFnZXMuc2l6ZSk7XG4gICAgICAgIGZvciAoY29uc3Qgc3RvcmFnZSBvZiB0aGlzLnN0b3JhZ2VzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBzdG9yYWdlLm5ldHdvcmtTZXJpYWxpemUoc3RyZWFtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbmV0d29ya0Rlc2VyaWFsaXplKHN0cmVhbTogQmluYXJ5U3RyZWFtKTogU3ViQ2h1bmsge1xuICAgICAgICBjb25zdCBzdWJDaHVuayA9IG5ldyBTdWJDaHVuaygpO1xuXG4gICAgICAgIC8vIGNvbnN0IHZlcnNpb24gPSBzdHJlYW0ucmVhZEJ5dGUoKTtcbiAgICAgICAgY29uc3QgbGF5ZXJDb3VudCA9IHN0cmVhbS5yZWFkQnl0ZSgpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJDaHVuay5zdG9yYWdlcy5zZXQoaSwgQmxvY2tTdG9yYWdlLm5ldHdvcmtEZXNlcmlhbGl6ZShzdHJlYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWJDaHVuaztcbiAgICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EsTUFBcUIsUUFBUyxDQUFBO0FBQUEsRUFDbEIsUUFBQSx1QkFBMEMsR0FBSSxFQUFBO0FBQUEsRUFFL0MsV0FBWSxDQUFBLFFBQUEsbUJBQTBDLElBQUEsR0FBQSxFQUFPLEVBQUE7QUFDaEUsSUFBQSxJQUFBLENBQUssUUFBVyxHQUFBLFFBQUE7QUFBQTtBQUNwQjtBQUFBO0FBQUE7QUFBQSxFQUtPLE9BQW1CLEdBQUE7QUFDdEIsSUFBQSxLQUFBLE1BQVcsT0FBVyxJQUFBLElBQUEsQ0FBSyxRQUFTLENBQUEsTUFBQSxFQUFVLEVBQUE7QUFDMUMsTUFBQSxJQUFJLENBQUMsT0FBQSxDQUFRLE9BQVEsRUFBQSxFQUFVLE9BQUEsS0FBQTtBQUFBO0FBRW5DLElBQU8sT0FBQSxJQUFBO0FBQUE7QUFDWCxFQUVRLFdBQVcsS0FBNkIsRUFBQTtBQUM1QyxJQUFBLElBQUksQ0FBQyxJQUFBLENBQUssUUFBUyxDQUFBLEdBQUEsQ0FBSSxLQUFLLENBQUcsRUFBQTtBQUUzQixNQUFBLEtBQUEsSUFBUyxDQUFJLEdBQUEsQ0FBQSxFQUFHLENBQUssSUFBQSxLQUFBLEVBQU8sQ0FBSyxFQUFBLEVBQUE7QUFDN0IsUUFBQSxJQUFJLENBQUMsSUFBQSxDQUFLLFFBQVMsQ0FBQSxHQUFBLENBQUksQ0FBQyxDQUFHLEVBQUE7QUFDdkIsVUFBQSxJQUFBLENBQUssU0FBUyxHQUFJLENBQUEsQ0FBQSxFQUFHLElBQUksWUFBYSxDQUFBLEVBQUUsQ0FBQyxDQUFBO0FBQUE7QUFDN0M7QUFDSjtBQUdKLElBQU8sT0FBQSxJQUFBLENBQUssUUFBUyxDQUFBLEdBQUEsQ0FBSSxLQUFLLENBQUE7QUFBQTtBQUNsQyxFQUVPLFdBQThCLEdBQUE7QUFDakMsSUFBQSxPQUFPLEtBQU0sQ0FBQSxJQUFBLENBQUssSUFBSyxDQUFBLFFBQUEsQ0FBUyxRQUFRLENBQUE7QUFBQTtBQUM1QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVTyxTQUFTLEVBQXNCLEVBQUEsRUFBQSxHQUFhLEdBQUcsRUFBYSxHQUFBLENBQUEsRUFBRyxRQUFnQixDQUFhLEVBQUE7QUFDL0YsSUFBQSxJQUFJLGNBQWMsT0FBUyxFQUFBO0FBQ3ZCLE1BQU8sT0FBQSxJQUFBLENBQUssUUFBUyxDQUFBLEVBQUEsQ0FBRyxJQUFLLEVBQUEsRUFBRyxFQUFHLENBQUEsSUFBQSxFQUFRLEVBQUEsRUFBQSxDQUFHLElBQUssRUFBQSxFQUFHLEtBQUssQ0FBQTtBQUFBO0FBRy9ELElBQUEsT0FBTyxLQUFLLFVBQVcsQ0FBQSxLQUFLLEVBQUUsUUFBUyxDQUFBLEVBQUEsRUFBSSxJQUFJLEVBQUUsQ0FBQTtBQUFBO0FBQ3JEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBV08sUUFBUyxDQUFBLEVBQUEsRUFBWSxFQUFZLEVBQUEsRUFBQSxFQUFZLFdBQW1CLEtBQXFCLEVBQUE7QUFDeEYsSUFBQSxJQUFBLENBQUssV0FBVyxLQUFLLENBQUEsQ0FBRSxTQUFTLEVBQUksRUFBQSxFQUFBLEVBQUksSUFBSSxTQUFTLENBQUE7QUFBQTtBQUN6RCxFQUVPLGlCQUFpQixNQUE0QixFQUFBO0FBRWhELElBQUEsTUFBQSxDQUFPLFVBQVUsQ0FBQyxDQUFBO0FBRWxCLElBQU8sTUFBQSxDQUFBLFNBQUEsQ0FBVSxJQUFLLENBQUEsUUFBQSxDQUFTLElBQUksQ0FBQTtBQUNuQyxJQUFBLEtBQUEsTUFBVyxPQUFXLElBQUEsSUFBQSxDQUFLLFFBQVMsQ0FBQSxNQUFBLEVBQVUsRUFBQTtBQUMxQyxNQUFBLE9BQUEsQ0FBUSxpQkFBaUIsTUFBTSxDQUFBO0FBQUE7QUFDbkM7QUFDSixFQUVBLE9BQWMsbUJBQW1CLE1BQWdDLEVBQUE7QUFDN0QsSUFBTSxNQUFBLFFBQUEsR0FBVyxJQUFJLFFBQVMsRUFBQTtBQUc5QixJQUFNLE1BQUEsVUFBQSxHQUFhLE9BQU8sUUFBUyxFQUFBO0FBRW5DLElBQUEsS0FBQSxJQUFTLENBQUksR0FBQSxDQUFBLEVBQUcsQ0FBSSxHQUFBLFVBQUEsRUFBWSxDQUFLLEVBQUEsRUFBQTtBQUNqQyxNQUFBLFFBQUEsQ0FBUyxTQUFTLEdBQUksQ0FBQSxDQUFBLEVBQUcsWUFBYSxDQUFBLGtCQUFBLENBQW1CLE1BQU0sQ0FBQyxDQUFBO0FBQUE7QUFHcEUsSUFBTyxPQUFBLFFBQUE7QUFBQTtBQUVmOzs7OyJ9