UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

86 lines (85 loc) 8.8 kB
"use strict"; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); const require_block_BlockIdsType = require("./BlockIdsType.cjs.cjs"); const require_block_Blocks = require("./Blocks.cjs.cjs"); const require_events_block_BlockRegisterEvent = require("../events/block/BlockRegisterEvent.cjs.cjs"); const require_utils_Timer = require("../utils/Timer.cjs.cjs"); //#region src/block/BlockManager.ts var BlockManager = class { server; blocks = /* @__PURE__ */ new Map(); javaBlocks = /* @__PURE__ */ new Map(); constructor(server) { this.server = server; } /** * On enable hook. * @group Lifecycle */ async enable() { await this.importBlocks(); } /** * On disable hook. * @group Lifecycle */ async disable() { this.blocks.clear(); } /** * Get block by namespaced ID. */ getBlock(name) { if (!this.blocks.has(name) && !this.javaBlocks.has(name)) throw new Error(`invalid block with id ${name}`); return this.blocks.get(name) || this.javaBlocks.get(name); } /** * Get block by numeric ID. */ getBlockById(id) { if (!require_block_BlockIdsType.BlockIdsType[id]) throw new Error(`invalid block with numeric id ${id}`); return this.getBlocks().find((a) => a.getId() === id && a.meta === 0); } /** * Get block by numeric id and meta value. */ getBlockByIdAndMeta(id, meta) { return this.getBlocks().find((a) => a.id === id && a.meta === meta) || null; } /** * Get all blocks. * * @returns all registered blocks. */ getBlocks() { return Array.from(this.blocks.values()); } /** * Register a block. * * @param block - The block */ async registerBlock(block) { if (this.blocks.get(block.name) || this.getBlockByIdAndMeta(block.getId(), block.getMeta())) throw new Error(`Block with id ${block.getName()} (${block.getId()}:${block.getMeta()}) already exists`); const event = new require_events_block_BlockRegisterEvent.default(block); await this.server.emit("blockRegister", event); if (event.isCancelled()) return; this.server.getLogger().debug(`Block with id §b${block.name}§r registered`); this.blocks.set(block.name, block); this.javaBlocks.set(block.javaName, block); } /** * Register blocks exported by './Blocks' */ async importBlocks() { const timer = new require_utils_Timer.default(); await Promise.all(Object.entries(require_block_Blocks.Blocks_exports).map(async ([, block]) => this.registerBlock(new block()))); this.server.getLogger().verbose(`Registered §b${this.blocks.size}§r block(s) (took §e${timer.stop()} ms§r)!`); } }; //#endregion exports.default = BlockManager; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2tNYW5hZ2VyLmNqcy5janMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jsb2NrL0Jsb2NrTWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBCbG9ja3MgZnJvbSAnLi9CbG9ja3MnO1xuXG5pbXBvcnQgdHlwZSBTZXJ2ZXIgZnJvbSAnLi4vU2VydmVyJztcbmltcG9ydCBCbG9ja1JlZ2lzdGVyRXZlbnQgZnJvbSAnLi4vZXZlbnRzL2Jsb2NrL0Jsb2NrUmVnaXN0ZXJFdmVudCc7XG5pbXBvcnQgVGltZXIgZnJvbSAnLi4vdXRpbHMvVGltZXInO1xuaW1wb3J0IHR5cGUgeyBCbG9jayB9IGZyb20gJy4vQmxvY2snO1xuaW1wb3J0IHsgQmxvY2tJZHNUeXBlIH0gZnJvbSAnLi9CbG9ja0lkc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCbG9ja01hbmFnZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmVyOiBTZXJ2ZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBibG9ja3MgPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBqYXZhQmxvY2tzID0gbmV3IE1hcCgpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNlcnZlcjogU2VydmVyKSB7XG4gICAgICAgIHRoaXMuc2VydmVyID0gc2VydmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIGVuYWJsZSBob29rLlxuICAgICAqIEBncm91cCBMaWZlY3ljbGVcbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZW5hYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmltcG9ydEJsb2NrcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIGRpc2FibGUgaG9vay5cbiAgICAgKiBAZ3JvdXAgTGlmZWN5Y2xlXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGRpc2FibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuYmxvY2tzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGJsb2NrIGJ5IG5hbWVzcGFjZWQgSUQuXG4gICAgICovXG4gICAgcHVibGljIGdldEJsb2NrKG5hbWU6IHN0cmluZyk6IEJsb2NrIHtcbiAgICAgICAgaWYgKCF0aGlzLmJsb2Nrcy5oYXMobmFtZSkgJiYgIXRoaXMuamF2YUJsb2Nrcy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBibG9jayB3aXRoIGlkICR7bmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAodGhpcy5ibG9ja3MuZ2V0KG5hbWUpIHx8IHRoaXMuamF2YUJsb2Nrcy5nZXQobmFtZSkpIGFzIEJsb2NrO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBibG9jayBieSBudW1lcmljIElELlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRCbG9ja0J5SWQoaWQ6IG51bWJlcik6IEJsb2NrIHtcbiAgICAgICAgaWYgKCFCbG9ja0lkc1R5cGVbaWRdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYmxvY2sgd2l0aCBudW1lcmljIGlkICR7aWR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRCbG9ja3MoKS5maW5kKChhKSA9PiBhLmdldElkKCkgPT09IGlkICYmIGEubWV0YSA9PT0gMCkhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBibG9jayBieSBudW1lcmljIGlkIGFuZCBtZXRhIHZhbHVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRCbG9ja0J5SWRBbmRNZXRhKGlkOiBudW1iZXIsIG1ldGE6IG51bWJlcik6IEJsb2NrIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGJsb2NrID0gdGhpcy5nZXRCbG9ja3MoKS5maW5kKChhKSA9PiBhLmlkID09PSBpZCAmJiBhLm1ldGEgPT09IG1ldGEpO1xuICAgICAgICByZXR1cm4gYmxvY2sgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIGJsb2Nrcy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGFsbCByZWdpc3RlcmVkIGJsb2Nrcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QmxvY2tzKCk6IEJsb2NrW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmJsb2Nrcy52YWx1ZXMoKSkgYXMgQmxvY2tbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhIGJsb2NrLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2NrIC0gVGhlIGJsb2NrXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHJlZ2lzdGVyQmxvY2soYmxvY2s6IEJsb2NrKSB7XG4gICAgICAgIGlmICh0aGlzLmJsb2Nrcy5nZXQoYmxvY2submFtZSkgfHwgdGhpcy5nZXRCbG9ja0J5SWRBbmRNZXRhKGJsb2NrLmdldElkKCksIGJsb2NrLmdldE1ldGEoKSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJsb2NrIHdpdGggaWQgJHtibG9jay5nZXROYW1lKCl9ICgke2Jsb2NrLmdldElkKCl9OiR7YmxvY2suZ2V0TWV0YSgpfSkgYWxyZWFkeSBleGlzdHNgKTtcblxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBCbG9ja1JlZ2lzdGVyRXZlbnQoYmxvY2spO1xuICAgICAgICBhd2FpdCB0aGlzLnNlcnZlci5lbWl0KCdibG9ja1JlZ2lzdGVyJywgZXZlbnQpO1xuICAgICAgICBpZiAoZXZlbnQuaXNDYW5jZWxsZWQoKSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc2VydmVyLmdldExvZ2dlcigpLmRlYnVnKGBCbG9jayB3aXRoIGlkIMKnYiR7YmxvY2submFtZX3Cp3IgcmVnaXN0ZXJlZGApO1xuICAgICAgICB0aGlzLmJsb2Nrcy5zZXQoYmxvY2submFtZSwgYmxvY2spO1xuICAgICAgICB0aGlzLmphdmFCbG9ja3Muc2V0KGJsb2NrLmphdmFOYW1lLCBibG9jayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYmxvY2tzIGV4cG9ydGVkIGJ5ICcuL0Jsb2NrcydcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGltcG9ydEJsb2NrcygpIHtcbiAgICAgICAgY29uc3QgdGltZXIgPSBuZXcgVGltZXIoKTtcblxuICAgICAgICAvLyBEeW5hbWljYWxseSByZWdpc3RlciBibG9ja3NcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoQmxvY2tzKS5tYXAoYXN5bmMgKFssIGJsb2NrXSkgPT4gdGhpcy5yZWdpc3RlckJsb2NrKG5ldyBibG9jaygpKSkpO1xuXG4gICAgICAgIHRoaXMuc2VydmVyLmdldExvZ2dlcigpLnZlcmJvc2UoYFJlZ2lzdGVyZWQgwqdiJHt0aGlzLmJsb2Nrcy5zaXplfcKnciBibG9jayhzKSAodG9vayDCp2Uke3RpbWVyLnN0b3AoKX0gbXPCp3IpIWApO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQVFBLElBQXFCLGVBQXJCLE1BQWtDO0NBQzlCO0NBQ0EseUJBQTBCLElBQUksSUFBSTtDQUNsQyw2QkFBOEIsSUFBSSxJQUFJO0NBRXRDLFlBQW1CLFFBQWdCO0VBQy9CLEtBQUssU0FBUztDQUNsQjs7Ozs7Q0FNQSxNQUFhLFNBQXdCO0VBQ2pDLE1BQU0sS0FBSyxhQUFhO0NBQzVCOzs7OztDQU1BLE1BQWEsVUFBeUI7RUFDbEMsS0FBSyxPQUFPLE1BQU07Q0FDdEI7Ozs7Q0FLQSxTQUFnQixNQUFxQjtFQUNqQyxJQUFJLENBQUMsS0FBSyxPQUFPLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxXQUFXLElBQUksSUFBSSxHQUNuRCxNQUFNLElBQUksTUFBTSx5QkFBeUIsTUFBTTtFQUduRCxPQUFRLEtBQUssT0FBTyxJQUFJLElBQUksS0FBSyxLQUFLLFdBQVcsSUFBSSxJQUFJO0NBQzdEOzs7O0NBS0EsYUFBb0IsSUFBbUI7RUFDbkMsSUFBSSxDQUFDLDJCQUFBLGFBQWEsS0FDZCxNQUFNLElBQUksTUFBTSxpQ0FBaUMsSUFBSTtFQUd6RCxPQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sTUFBTSxFQUFFLE1BQU0sTUFBTSxNQUFNLEVBQUUsU0FBUyxDQUFDO0NBQ3hFOzs7O0NBS0Esb0JBQTJCLElBQVksTUFBNEI7RUFFL0QsT0FEYyxLQUFLLFVBQVUsRUFBRSxNQUFNLE1BQU0sRUFBRSxPQUFPLE1BQU0sRUFBRSxTQUFTLElBQzlELEtBQVM7Q0FDcEI7Ozs7OztDQU9BLFlBQTRCO0VBQ3hCLE9BQU8sTUFBTSxLQUFLLEtBQUssT0FBTyxPQUFPLENBQUM7Q0FDMUM7Ozs7OztDQU9BLE1BQWEsY0FBYyxPQUFjO0VBQ3JDLElBQUksS0FBSyxPQUFPLElBQUksTUFBTSxJQUFJLEtBQUssS0FBSyxvQkFBb0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsR0FDdEYsTUFBTSxJQUFJLE1BQU0saUJBQWlCLE1BQU0sUUFBUSxFQUFFLElBQUksTUFBTSxNQUFNLEVBQUUsR0FBRyxNQUFNLFFBQVEsRUFBRSxpQkFBaUI7RUFFM0csTUFBTSxRQUFRLElBQUksd0NBQUEsUUFBbUIsS0FBSztFQUMxQyxNQUFNLEtBQUssT0FBTyxLQUFLLGlCQUFpQixLQUFLO0VBQzdDLElBQUksTUFBTSxZQUFZLEdBQUc7RUFFekIsS0FBSyxPQUFPLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixNQUFNLEtBQUssY0FBYztFQUMxRSxLQUFLLE9BQU8sSUFBSSxNQUFNLE1BQU0sS0FBSztFQUNqQyxLQUFLLFdBQVcsSUFBSSxNQUFNLFVBQVUsS0FBSztDQUM3Qzs7OztDQUtBLE1BQWMsZUFBZTtFQUN6QixNQUFNLFFBQVEsSUFBSSxvQkFBQSxRQUFNO0VBR3hCLE1BQU0sUUFBUSxJQUFJLE9BQU8sUUFBUSxxQkFBQSxjQUFNLEVBQUUsSUFBSSxPQUFPLEdBQUcsV0FBVyxLQUFLLGNBQWMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDO0VBRWxHLEtBQUssT0FBTyxVQUFVLEVBQUUsUUFBUSxnQkFBZ0IsS0FBSyxPQUFPLEtBQUssc0JBQXNCLE1BQU0sS0FBSyxFQUFFLFFBQVE7Q0FDaEg7QUFDSiJ9