@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
86 lines (85 loc) • 8.8 kB
JavaScript
;
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