@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
64 lines (63 loc) • 7.41 kB
JavaScript
import BlockStorage from "./BlockStorage.es.js";
import { Vector3 } from "@jsprismarine/math";
//#region src/world/chunk/SubChunk.ts
var SubChunk = 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;
}
};
//#endregion
export { SubChunk as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViQ2h1bmsuZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dvcmxkL2NodW5rL1N1YkNodW5rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIEJpbmFyeVN0cmVhbSBmcm9tICdAanNwcmlzbWFyaW5lL2pzYmluYXJ5dXRpbHMnO1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvbWF0aCc7XG5pbXBvcnQgdHlwZSB7IExlZ2FjeUlkIH0gZnJvbSAnLi4vLi4vYmxvY2svQmxvY2tNYXBwaW5ncyc7XG5pbXBvcnQgQmxvY2tTdG9yYWdlIGZyb20gJy4vQmxvY2tTdG9yYWdlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViQ2h1bmsge1xuICAgIHByaXZhdGUgc3RvcmFnZXM6IE1hcDxudW1iZXIsIEJsb2NrU3RvcmFnZT4gPSBuZXcgTWFwKCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc3RvcmFnZXM6IE1hcDxudW1iZXIsIEJsb2NrU3RvcmFnZT4gPSBuZXcgTWFwKCkpIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlcyA9IHN0b3JhZ2VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgdGhlIFN1YkNodW5rIGlzIGFsbCBhaXIgKGJhc2ljYWxseSBlbXB0eSkuXG4gICAgICovXG4gICAgcHVibGljIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIGZvciAoY29uc3Qgc3RvcmFnZSBvZiB0aGlzLnN0b3JhZ2VzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBpZiAoIXN0b3JhZ2UuaXNFbXB0eSgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdG9yYWdlKGluZGV4OiBudW1iZXIpOiBCbG9ja1N0b3JhZ2Uge1xuICAgICAgICBpZiAoIXRoaXMuc3RvcmFnZXMuaGFzKGluZGV4KSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGFsbCBtaXNzaW5nIHN0b3JhZ2UgbGF5ZXJzXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN0b3JhZ2VzLmhhcyhpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2VzLnNldChpLCBuZXcgQmxvY2tTdG9yYWdlKHt9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZXMuZ2V0KGluZGV4KSE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN0b3JhZ2VzKCk6IEJsb2NrU3RvcmFnZVtdIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5zdG9yYWdlcy52YWx1ZXMoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbGVnYWN5IGJsb2NrIGlkIGluIHRoZSBnaXZlbiBwb3NpdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBieCAtIGJsb2NrIHhcbiAgICAgKiBAcGFyYW0gYnkgLSBibG9jayB5XG4gICAgICogQHBhcmFtIGJ6IC0gYmxvY2sgelxuICAgICAqIEBwYXJhbSBsYXllciAtIGJsb2NrIHN0b3JhZ2UgbGF5ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QmxvY2soYng6IFZlY3RvcjMgfCBudW1iZXIsIGJ5OiBudW1iZXIgPSAwLCBiejogbnVtYmVyID0gMCwgbGF5ZXI6IG51bWJlciA9IDApOiBMZWdhY3lJZCB7XG4gICAgICAgIGlmIChieCBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEJsb2NrKGJ4LmdldFgoKSwgYnguZ2V0WSgpLCBieC5nZXRaKCksIGxheWVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFN0b3JhZ2UobGF5ZXIpLmdldEJsb2NrKGJ4LCBieSwgYnopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgYSBibG9jayBieSBydW50aW1lIElkIGluIHRoZSBnaXZlbiBzdG9yYWdlIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJ4IC0gYmxvY2sgeFxuICAgICAqIEBwYXJhbSBieSAtIGJsb2NrIHlcbiAgICAgKiBAcGFyYW0gYnogLSBibG9jayB6XG4gICAgICogQHBhcmFtIHJ1bnRpbWVJZCAtIGJsb2NrIHJ1bnRpbWUgSWRcbiAgICAgKiBAcGFyYW0gbGF5ZXIgLSBibG9jayBzdG9yYWdlIGxheWVyXG4gICAgICovXG4gICAgcHVibGljIHNldEJsb2NrKGJ4OiBudW1iZXIsIGJ5OiBudW1iZXIsIGJ6OiBudW1iZXIsIHJ1bnRpbWVJZDogbnVtYmVyLCBsYXllcjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0U3RvcmFnZShsYXllcikuc2V0QmxvY2soYngsIGJ5LCBieiwgcnVudGltZUlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmV0d29ya1NlcmlhbGl6ZShzdHJlYW06IEJpbmFyeVN0cmVhbSk6IHZvaWQge1xuICAgICAgICAvLyBTdWJDaHVuayB2ZXJzaW9uXG4gICAgICAgIHN0cmVhbS53cml0ZUJ5dGUoOCk7XG4gICAgICAgIC8vIExheWVyIGNvdW50XG4gICAgICAgIHN0cmVhbS53cml0ZUJ5dGUodGhpcy5zdG9yYWdlcy5zaXplKTtcbiAgICAgICAgZm9yIChjb25zdCBzdG9yYWdlIG9mIHRoaXMuc3RvcmFnZXMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIHN0b3JhZ2UubmV0d29ya1NlcmlhbGl6ZShzdHJlYW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBuZXR3b3JrRGVzZXJpYWxpemUoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiBTdWJDaHVuayB7XG4gICAgICAgIGNvbnN0IHN1YkNodW5rID0gbmV3IFN1YkNodW5rKCk7XG5cbiAgICAgICAgLy8gY29uc3QgdmVyc2lvbiA9IHN0cmVhbS5yZWFkQnl0ZSgpO1xuICAgICAgICBjb25zdCBsYXllckNvdW50ID0gc3RyZWFtLnJlYWRCeXRlKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllckNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHN1YkNodW5rLnN0b3JhZ2VzLnNldChpLCBCbG9ja1N0b3JhZ2UubmV0d29ya0Rlc2VyaWFsaXplKHN0cmVhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1YkNodW5rO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBS0EsSUFBcUIsV0FBckIsTUFBcUIsU0FBUztDQUMxQiwyQkFBOEMsSUFBSSxJQUFJO0NBRXRELFlBQW1CLDJCQUFzQyxJQUFJLElBQUksR0FBRztFQUNoRSxLQUFLLFdBQVc7Q0FDcEI7Ozs7Q0FLQSxVQUEwQjtFQUN0QixLQUFLLE1BQU0sV0FBVyxLQUFLLFNBQVMsT0FBTyxHQUN2QyxJQUFJLENBQUMsUUFBUSxRQUFRLEdBQUcsT0FBTztFQUVuQyxPQUFPO0NBQ1g7Q0FFQSxXQUFtQixPQUE2QjtFQUM1QyxJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksS0FBSztRQUVuQixJQUFJLElBQUksR0FBRyxLQUFLLE9BQU8sS0FDeEIsSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsR0FDcEIsS0FBSyxTQUFTLElBQUksR0FBRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUM7RUFBQTtFQUtyRCxPQUFPLEtBQUssU0FBUyxJQUFJLEtBQUs7Q0FDbEM7Q0FFQSxjQUFxQztFQUNqQyxPQUFPLE1BQU0sS0FBSyxLQUFLLFNBQVMsT0FBTyxDQUFDO0NBQzVDOzs7Ozs7Ozs7Q0FVQSxTQUFnQixJQUFzQixLQUFhLEdBQUcsS0FBYSxHQUFHLFFBQWdCLEdBQWE7RUFDL0YsSUFBSSxjQUFjLFNBQ2QsT0FBTyxLQUFLLFNBQVMsR0FBRyxLQUFLLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxLQUFLLEdBQUcsS0FBSztFQUcvRCxPQUFPLEtBQUssV0FBVyxLQUFLLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRTtDQUNyRDs7Ozs7Ozs7OztDQVdBLFNBQWdCLElBQVksSUFBWSxJQUFZLFdBQW1CLE9BQXFCO0VBQ3hGLEtBQUssV0FBVyxLQUFLLEVBQUUsU0FBUyxJQUFJLElBQUksSUFBSSxTQUFTO0NBQ3pEO0NBRUEsaUJBQXdCLFFBQTRCO0VBRWhELE9BQU8sVUFBVSxDQUFDO0VBRWxCLE9BQU8sVUFBVSxLQUFLLFNBQVMsSUFBSTtFQUNuQyxLQUFLLE1BQU0sV0FBVyxLQUFLLFNBQVMsT0FBTyxHQUN2QyxRQUFRLGlCQUFpQixNQUFNO0NBRXZDO0NBRUEsT0FBYyxtQkFBbUIsUUFBZ0M7RUFDN0QsTUFBTSxXQUFXLElBQUksU0FBUztFQUc5QixNQUFNLGFBQWEsT0FBTyxTQUFTO0VBRW5DLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxZQUFZLEtBQzVCLFNBQVMsU0FBUyxJQUFJLEdBQUcsYUFBYSxtQkFBbUIsTUFBTSxDQUFDO0VBR3BFLE9BQU87Q0FDWDtBQUNKIn0=