@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
37 lines (36 loc) • 4.46 kB
JavaScript
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=