UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

37 lines (36 loc) 4.46 kB
import Chunk from "../../chunk/Chunk.es.js"; import BaseProvider from "../BaseProvider.es.js"; import fs from "node:fs"; import BinaryStream from "@jsprismarine/jsbinaryutils"; import path from "node:path"; //#region src/world/providers/filesystem/Filesystem.ts var Filesystem = class extends BaseProvider { constructor(folderPath, server) { super(folderPath, server); if (!fs.existsSync(path.join(this.getPath(), "chunks"))) fs.mkdirSync(path.join(this.getPath(), "chunks")); } async readChunk(cx, cz, seed, generator, config) { try { const buffer = Buffer.from(await fs.promises.readFile(path.join(this.getPath(), "chunks", `${cx}_${cz}.dat`), { flag: "r", encoding: "utf-8" })); return Chunk.networkDeserialize(new BinaryStream(buffer), cx, cz); } catch { return generator.generateChunk(cx, cz, seed, config); } } /** * @TODO: format version, entities etc. */ async writeChunk(chunk) { await fs.promises.writeFile(path.join(this.getPath(), "chunks", `${chunk.getX()}_${chunk.getZ()}.dat`), chunk.networkSerialize(), { flag: "w+", encoding: "utf-8", flush: true }); } }; //#endregion export { Filesystem as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsZXN5c3RlbS5lcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ybGQvcHJvdmlkZXJzL2ZpbGVzeXN0ZW0vRmlsZXN5c3RlbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgU2VydmVyIGZyb20gJy4uLy4uLy4uL1NlcnZlcic7XG5pbXBvcnQgdHlwZSB7IEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL0dlbmVyYXRvcic7XG5pbXBvcnQgQ2h1bmsgZnJvbSAnLi4vLi4vY2h1bmsvQ2h1bmsnO1xuaW1wb3J0IEJhc2VQcm92aWRlciBmcm9tICcuLi9CYXNlUHJvdmlkZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlc3lzdGVtIGV4dGVuZHMgQmFzZVByb3ZpZGVyIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZm9sZGVyUGF0aDogc3RyaW5nLCBzZXJ2ZXI6IFNlcnZlcikge1xuICAgICAgICBzdXBlcihmb2xkZXJQYXRoLCBzZXJ2ZXIpO1xuXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4odGhpcy5nZXRQYXRoKCksICdjaHVua3MnKSkpIGZzLm1rZGlyU3luYyhwYXRoLmpvaW4odGhpcy5nZXRQYXRoKCksICdjaHVua3MnKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlYWRDaHVuayhjeDogbnVtYmVyLCBjejogbnVtYmVyLCBzZWVkOiBudW1iZXIsIGdlbmVyYXRvcjogR2VuZXJhdG9yLCBjb25maWc/OiBhbnkpOiBQcm9taXNlPENodW5rPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShwYXRoLmpvaW4odGhpcy5nZXRQYXRoKCksICdjaHVua3MnLCBgJHtjeH1fJHtjen0uZGF0YCksIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZzogJ3InLFxuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogJ3V0Zi04J1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICByZXR1cm4gQ2h1bmsubmV0d29ya0Rlc2VyaWFsaXplKG5ldyBCaW5hcnlTdHJlYW0oYnVmZmVyKSwgY3gsIGN6KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmdlbmVyYXRlQ2h1bmsoY3gsIGN6LCBzZWVkLCBjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQFRPRE86IGZvcm1hdCB2ZXJzaW9uLCBlbnRpdGllcyBldGMuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHdyaXRlQ2h1bmsoY2h1bms6IENodW5rKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgZmFpbHVyZXMuXG4gICAgICAgIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShcbiAgICAgICAgICAgIHBhdGguam9pbih0aGlzLmdldFBhdGgoKSwgJ2NodW5rcycsIGAke2NodW5rLmdldFgoKX1fJHtjaHVuay5nZXRaKCl9LmRhdGApLFxuICAgICAgICAgICAgY2h1bmsubmV0d29ya1NlcmlhbGl6ZSgpLFxuICAgICAgICAgICAgeyBmbGFnOiAndysnLCBlbmNvZGluZzogJ3V0Zi04JywgZmx1c2g6IHRydWUgfVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBUUEsSUFBcUIsYUFBckIsY0FBd0MsYUFBYTtDQUNqRCxZQUFtQixZQUFvQixRQUFnQjtFQUNuRCxNQUFNLFlBQVksTUFBTTtFQUV4QixJQUFJLENBQUMsR0FBRyxXQUFXLEtBQUssS0FBSyxLQUFLLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLFVBQVUsS0FBSyxLQUFLLEtBQUssUUFBUSxHQUFHLFFBQVEsQ0FBQztDQUM3RztDQUVBLE1BQWEsVUFBVSxJQUFZLElBQVksTUFBYyxXQUFzQixRQUE4QjtFQUM3RyxJQUFJO0dBQ0EsTUFBTSxTQUFTLE9BQU8sS0FDbEIsTUFBTSxHQUFHLFNBQVMsU0FBUyxLQUFLLEtBQUssS0FBSyxRQUFRLEdBQUcsVUFBVSxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRztJQUMvRSxNQUFNO0lBQ04sVUFBVTtHQUNkLENBQUMsQ0FDTDtHQUVBLE9BQU8sTUFBTSxtQkFBbUIsSUFBSSxhQUFhLE1BQU0sR0FBRyxJQUFJLEVBQUU7RUFDcEUsUUFBUTtHQUNKLE9BQU8sVUFBVSxjQUFjLElBQUksSUFBSSxNQUFNLE1BQU07RUFDdkQ7Q0FDSjs7OztDQUtBLE1BQWEsV0FBVyxPQUE2QjtFQUVqRCxNQUFNLEdBQUcsU0FBUyxVQUNkLEtBQUssS0FBSyxLQUFLLFFBQVEsR0FBRyxVQUFVLEdBQUcsTUFBTSxLQUFLLEVBQUUsR0FBRyxNQUFNLEtBQUssRUFBRSxLQUFLLEdBQ3pFLE1BQU0saUJBQWlCLEdBQ3ZCO0dBQUUsTUFBTTtHQUFNLFVBQVU7R0FBUyxPQUFPO0VBQUssQ0FDakQ7Q0FDSjtBQUNKIn0=