@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
70 lines (69 loc) • 7.73 kB
JavaScript
;
Object.defineProperties(exports, {
__esModule: { value: true },
[Symbol.toStringTag]: { value: "Module" }
});
require("../../_virtual/_rolldown/runtime.cjs.cjs");
const require_world_chunk_BlockStorage = require("./BlockStorage.cjs.cjs");
let _jsprismarine_math = require("@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 require_world_chunk_BlockStorage.default({}));
}
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 _jsprismarine_math.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, require_world_chunk_BlockStorage.default.networkDeserialize(stream));
return subChunk;
}
};
//#endregion
exports.default = SubChunk;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViQ2h1bmsuY2pzLmNqcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd29ybGQvY2h1bmsvU3ViQ2h1bmsudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnQGpzcHJpc21hcmluZS9tYXRoJztcbmltcG9ydCB0eXBlIHsgTGVnYWN5SWQgfSBmcm9tICcuLi8uLi9ibG9jay9CbG9ja01hcHBpbmdzJztcbmltcG9ydCBCbG9ja1N0b3JhZ2UgZnJvbSAnLi9CbG9ja1N0b3JhZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJDaHVuayB7XG4gICAgcHJpdmF0ZSBzdG9yYWdlczogTWFwPG51bWJlciwgQmxvY2tTdG9yYWdlPiA9IG5ldyBNYXAoKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzdG9yYWdlczogTWFwPG51bWJlciwgQmxvY2tTdG9yYWdlPiA9IG5ldyBNYXAoKSkge1xuICAgICAgICB0aGlzLnN0b3JhZ2VzID0gc3RvcmFnZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgU3ViQ2h1bmsgaXMgYWxsIGFpciAoYmFzaWNhbGx5IGVtcHR5KS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChjb25zdCBzdG9yYWdlIG9mIHRoaXMuc3RvcmFnZXMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGlmICghc3RvcmFnZS5pc0VtcHR5KCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN0b3JhZ2UoaW5kZXg6IG51bWJlcik6IEJsb2NrU3RvcmFnZSB7XG4gICAgICAgIGlmICghdGhpcy5zdG9yYWdlcy5oYXMoaW5kZXgpKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYWxsIG1pc3Npbmcgc3RvcmFnZSBsYXllcnNcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RvcmFnZXMuaGFzKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZXMuc2V0KGksIG5ldyBCbG9ja1N0b3JhZ2Uoe30pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlcy5nZXQoaW5kZXgpITtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U3RvcmFnZXMoKTogQmxvY2tTdG9yYWdlW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnN0b3JhZ2VzLnZhbHVlcygpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsZWdhY3kgYmxvY2sgaWQgaW4gdGhlIGdpdmVuIHBvc2l0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJ4IC0gYmxvY2sgeFxuICAgICAqIEBwYXJhbSBieSAtIGJsb2NrIHlcbiAgICAgKiBAcGFyYW0gYnogLSBibG9jayB6XG4gICAgICogQHBhcmFtIGxheWVyIC0gYmxvY2sgc3RvcmFnZSBsYXllclxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRCbG9jayhieDogVmVjdG9yMyB8IG51bWJlciwgYnk6IG51bWJlciA9IDAsIGJ6OiBudW1iZXIgPSAwLCBsYXllcjogbnVtYmVyID0gMCk6IExlZ2FjeUlkIHtcbiAgICAgICAgaWYgKGJ4IGluc3RhbmNlb2YgVmVjdG9yMykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QmxvY2soYnguZ2V0WCgpLCBieC5nZXRZKCksIGJ4LmdldFooKSwgbGF5ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmFnZShsYXllcikuZ2V0QmxvY2soYngsIGJ5LCBieik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIGJsb2NrIGJ5IHJ1bnRpbWUgSWQgaW4gdGhlIGdpdmVuIHN0b3JhZ2UgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnggLSBibG9jayB4XG4gICAgICogQHBhcmFtIGJ5IC0gYmxvY2sgeVxuICAgICAqIEBwYXJhbSBieiAtIGJsb2NrIHpcbiAgICAgKiBAcGFyYW0gcnVudGltZUlkIC0gYmxvY2sgcnVudGltZSBJZFxuICAgICAqIEBwYXJhbSBsYXllciAtIGJsb2NrIHN0b3JhZ2UgbGF5ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0QmxvY2soYng6IG51bWJlciwgYnk6IG51bWJlciwgYno6IG51bWJlciwgcnVudGltZUlkOiBudW1iZXIsIGxheWVyOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRTdG9yYWdlKGxheWVyKS5zZXRCbG9jayhieCwgYnksIGJ6LCBydW50aW1lSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXR3b3JrU2VyaWFsaXplKHN0cmVhbTogQmluYXJ5U3RyZWFtKTogdm9pZCB7XG4gICAgICAgIC8vIFN1YkNodW5rIHZlcnNpb25cbiAgICAgICAgc3RyZWFtLndyaXRlQnl0ZSg4KTtcbiAgICAgICAgLy8gTGF5ZXIgY291bnRcbiAgICAgICAgc3RyZWFtLndyaXRlQnl0ZSh0aGlzLnN0b3JhZ2VzLnNpemUpO1xuICAgICAgICBmb3IgKGNvbnN0IHN0b3JhZ2Ugb2YgdGhpcy5zdG9yYWdlcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgc3RvcmFnZS5uZXR3b3JrU2VyaWFsaXplKHN0cmVhbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG5ldHdvcmtEZXNlcmlhbGl6ZShzdHJlYW06IEJpbmFyeVN0cmVhbSk6IFN1YkNodW5rIHtcbiAgICAgICAgY29uc3Qgc3ViQ2h1bmsgPSBuZXcgU3ViQ2h1bmsoKTtcblxuICAgICAgICAvLyBjb25zdCB2ZXJzaW9uID0gc3RyZWFtLnJlYWRCeXRlKCk7XG4gICAgICAgIGNvbnN0IGxheWVyQ291bnQgPSBzdHJlYW0ucmVhZEJ5dGUoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVyQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgc3ViQ2h1bmsuc3RvcmFnZXMuc2V0KGksIEJsb2NrU3RvcmFnZS5uZXR3b3JrRGVzZXJpYWxpemUoc3RyZWFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3ViQ2h1bms7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFLQSxJQUFxQixXQUFyQixNQUFxQixTQUFTO0NBQzFCLDJCQUE4QyxJQUFJLElBQUk7Q0FFdEQsWUFBbUIsMkJBQXNDLElBQUksSUFBSSxHQUFHO0VBQ2hFLEtBQUssV0FBVztDQUNwQjs7OztDQUtBLFVBQTBCO0VBQ3RCLEtBQUssTUFBTSxXQUFXLEtBQUssU0FBUyxPQUFPLEdBQ3ZDLElBQUksQ0FBQyxRQUFRLFFBQVEsR0FBRyxPQUFPO0VBRW5DLE9BQU87Q0FDWDtDQUVBLFdBQW1CLE9BQTZCO0VBQzVDLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxLQUFLO1FBRW5CLElBQUksSUFBSSxHQUFHLEtBQUssT0FBTyxLQUN4QixJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxHQUNwQixLQUFLLFNBQVMsSUFBSSxHQUFHLElBQUksaUNBQUEsUUFBYSxDQUFDLENBQUMsQ0FBQztFQUFBO0VBS3JELE9BQU8sS0FBSyxTQUFTLElBQUksS0FBSztDQUNsQztDQUVBLGNBQXFDO0VBQ2pDLE9BQU8sTUFBTSxLQUFLLEtBQUssU0FBUyxPQUFPLENBQUM7Q0FDNUM7Ozs7Ozs7OztDQVVBLFNBQWdCLElBQXNCLEtBQWEsR0FBRyxLQUFhLEdBQUcsUUFBZ0IsR0FBYTtFQUMvRixJQUFJLGNBQWMsbUJBQUEsU0FDZCxPQUFPLEtBQUssU0FBUyxHQUFHLEtBQUssR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLEtBQUssR0FBRyxLQUFLO0VBRy9ELE9BQU8sS0FBSyxXQUFXLEtBQUssRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFO0NBQ3JEOzs7Ozs7Ozs7O0NBV0EsU0FBZ0IsSUFBWSxJQUFZLElBQVksV0FBbUIsT0FBcUI7RUFDeEYsS0FBSyxXQUFXLEtBQUssRUFBRSxTQUFTLElBQUksSUFBSSxJQUFJLFNBQVM7Q0FDekQ7Q0FFQSxpQkFBd0IsUUFBNEI7RUFFaEQsT0FBTyxVQUFVLENBQUM7RUFFbEIsT0FBTyxVQUFVLEtBQUssU0FBUyxJQUFJO0VBQ25DLEtBQUssTUFBTSxXQUFXLEtBQUssU0FBUyxPQUFPLEdBQ3ZDLFFBQVEsaUJBQWlCLE1BQU07Q0FFdkM7Q0FFQSxPQUFjLG1CQUFtQixRQUFnQztFQUM3RCxNQUFNLFdBQVcsSUFBSSxTQUFTO0VBRzlCLE1BQU0sYUFBYSxPQUFPLFNBQVM7RUFFbkMsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLFlBQVksS0FDNUIsU0FBUyxTQUFTLElBQUksR0FBRyxpQ0FBQSxRQUFhLG1CQUFtQixNQUFNLENBQUM7RUFHcEUsT0FBTztDQUNYO0FBQ0oifQ==