UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

39 lines (36 loc) 5.04 kB
import BinaryStream from '@jsprismarine/jsbinaryutils'; import fs from 'node:fs'; import path from 'node:path'; import Chunk from '../../chunk/Chunk.es.js'; import BaseProvider from '../BaseProvider.es.js'; class Filesystem 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 } ); } } export { Filesystem as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsZXN5c3RlbS5lcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmxkL3Byb3ZpZGVycy9maWxlc3lzdGVtL0ZpbGVzeXN0ZW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpbmFyeVN0cmVhbSBmcm9tICdAanNwcmlzbWFyaW5lL2pzYmluYXJ5dXRpbHMnO1xuaW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB0eXBlIFNlcnZlciBmcm9tICcuLi8uLi8uLi9TZXJ2ZXInO1xuaW1wb3J0IHR5cGUgeyBHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9HZW5lcmF0b3InO1xuaW1wb3J0IENodW5rIGZyb20gJy4uLy4uL2NodW5rL0NodW5rJztcbmltcG9ydCBCYXNlUHJvdmlkZXIgZnJvbSAnLi4vQmFzZVByb3ZpZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZXN5c3RlbSBleHRlbmRzIEJhc2VQcm92aWRlciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZvbGRlclBhdGg6IHN0cmluZywgc2VydmVyOiBTZXJ2ZXIpIHtcbiAgICAgICAgc3VwZXIoZm9sZGVyUGF0aCwgc2VydmVyKTtcblxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aC5qb2luKHRoaXMuZ2V0UGF0aCgpLCAnY2h1bmtzJykpKSBmcy5ta2RpclN5bmMocGF0aC5qb2luKHRoaXMuZ2V0UGF0aCgpLCAnY2h1bmtzJykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWFkQ2h1bmsoY3g6IG51bWJlciwgY3o6IG51bWJlciwgc2VlZDogbnVtYmVyLCBnZW5lcmF0b3I6IEdlbmVyYXRvciwgY29uZmlnPzogYW55KTogUHJvbWlzZTxDaHVuaz4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oXG4gICAgICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUocGF0aC5qb2luKHRoaXMuZ2V0UGF0aCgpLCAnY2h1bmtzJywgYCR7Y3h9XyR7Y3p9LmRhdGApLCB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWc6ICdyJyxcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6ICd1dGYtOCdcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuIENodW5rLm5ldHdvcmtEZXNlcmlhbGl6ZShuZXcgQmluYXJ5U3RyZWFtKGJ1ZmZlciksIGN4LCBjeik7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5nZW5lcmF0ZUNodW5rKGN4LCBjeiwgc2VlZCwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBUT0RPOiBmb3JtYXQgdmVyc2lvbiwgZW50aXRpZXMgZXRjLlxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyB3cml0ZUNodW5rKGNodW5rOiBDaHVuayk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBGSVhNRTogSGFuZGxlIGZhaWx1cmVzLlxuICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoXG4gICAgICAgICAgICBwYXRoLmpvaW4odGhpcy5nZXRQYXRoKCksICdjaHVua3MnLCBgJHtjaHVuay5nZXRYKCl9XyR7Y2h1bmsuZ2V0WigpfS5kYXRgKSxcbiAgICAgICAgICAgIGNodW5rLm5ldHdvcmtTZXJpYWxpemUoKSxcbiAgICAgICAgICAgIHsgZmxhZzogJ3crJywgZW5jb2Rpbmc6ICd1dGYtOCcsIGZsdXNoOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBUUEsTUFBcUIsbUJBQW1CLFlBQWEsQ0FBQTtBQUFBLEVBQzFDLFdBQUEsQ0FBWSxZQUFvQixNQUFnQixFQUFBO0FBQ25ELElBQUEsS0FBQSxDQUFNLFlBQVksTUFBTSxDQUFBO0FBRXhCLElBQUEsSUFBSSxDQUFDLEVBQUcsQ0FBQSxVQUFBLENBQVcsS0FBSyxJQUFLLENBQUEsSUFBQSxDQUFLLFNBQVcsRUFBQSxRQUFRLENBQUMsQ0FBRyxFQUFBLEVBQUEsQ0FBRyxVQUFVLElBQUssQ0FBQSxJQUFBLENBQUssS0FBSyxPQUFRLEVBQUEsRUFBRyxRQUFRLENBQUMsQ0FBQTtBQUFBO0FBQzdHLEVBRUEsTUFBYSxTQUFVLENBQUEsRUFBQSxFQUFZLEVBQVksRUFBQSxJQUFBLEVBQWMsV0FBc0IsTUFBOEIsRUFBQTtBQUM3RyxJQUFJLElBQUE7QUFDQSxNQUFBLE1BQU0sU0FBUyxNQUFPLENBQUEsSUFBQTtBQUFBLFFBQ2xCLE1BQU0sRUFBQSxDQUFHLFFBQVMsQ0FBQSxRQUFBLENBQVMsS0FBSyxJQUFLLENBQUEsSUFBQSxDQUFLLE9BQVEsRUFBQSxFQUFHLFVBQVUsQ0FBRyxFQUFBLEVBQUUsQ0FBSSxDQUFBLEVBQUEsRUFBRSxNQUFNLENBQUcsRUFBQTtBQUFBLFVBQy9FLElBQU0sRUFBQSxHQUFBO0FBQUEsVUFDTixRQUFVLEVBQUE7QUFBQSxTQUNiO0FBQUEsT0FDTDtBQUVBLE1BQUEsT0FBTyxNQUFNLGtCQUFtQixDQUFBLElBQUksYUFBYSxNQUFNLENBQUEsRUFBRyxJQUFJLEVBQUUsQ0FBQTtBQUFBLEtBQzVELENBQUEsTUFBQTtBQUNKLE1BQUEsT0FBTyxTQUFVLENBQUEsYUFBQSxDQUFjLEVBQUksRUFBQSxFQUFBLEVBQUksTUFBTSxNQUFNLENBQUE7QUFBQTtBQUN2RDtBQUNKO0FBQUE7QUFBQTtBQUFBLEVBS0EsTUFBYSxXQUFXLEtBQTZCLEVBQUE7QUFFakQsSUFBQSxNQUFNLEdBQUcsUUFBUyxDQUFBLFNBQUE7QUFBQSxNQUNkLElBQUssQ0FBQSxJQUFBLENBQUssSUFBSyxDQUFBLE9BQUEsSUFBVyxRQUFVLEVBQUEsQ0FBQSxFQUFHLEtBQU0sQ0FBQSxJQUFBLEVBQU0sQ0FBQSxDQUFBLEVBQUksS0FBTSxDQUFBLElBQUEsRUFBTSxDQUFNLElBQUEsQ0FBQSxDQUFBO0FBQUEsTUFDekUsTUFBTSxnQkFBaUIsRUFBQTtBQUFBLE1BQ3ZCLEVBQUUsSUFBTSxFQUFBLElBQUEsRUFBTSxRQUFVLEVBQUEsT0FBQSxFQUFTLE9BQU8sSUFBSztBQUFBLEtBQ2pEO0FBQUE7QUFFUjs7OzsifQ==