@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
77 lines (76 loc) • 6.75 kB
JavaScript
import Timer from "../utils/Timer.es.js";
import { Items_exports } from "./Items.es.js";
import ItemRegisterEvent from "../events/items/ItemRegisterEvent.es.js";
//#region src/item/ItemManager.ts
var ItemManager = class {
server;
items = /* @__PURE__ */ new Map();
/**
* Construct an ItemManager.
* @param {Server} server - The server instance.
* @returns {ItemManager} The item manager instance.
*/
constructor(server) {
this.server = server;
}
/**
* On enable hook.
* @group Lifecycle
*/
async enable() {
await this.importItems();
}
/**
* On disable hook.
* @group Lifecycle
*/
async disable() {
this.items.clear();
}
/**
* Get an item from it's name.
* @param {string} name - tha item's name.
* @returns {Item | null} the item.
*/
getItem(name) {
return this.items.get(name) ?? null;
}
/**
* Get item by numeric id
* @param {number} id - tha item's ID.
* @returns {Item | null} the item.
*/
getItemById(id) {
return this.getItems().find((a) => a.getId() === id) ?? null;
}
/**
* Get all items.
* @returns {Item[]} all registered items.
*/
getItems() {
return Array.from(this.items.values());
}
/**
* Register an item.
* @param {Item} item - The item to be registered
* @returns {Promise<void>} The promise.
*/
registerItem = async (item) => {
const event = new ItemRegisterEvent(item);
await this.server.emit("itemRegister", event);
if (event.isCancelled()) return;
this.server.getLogger().debug(`Item with id §b${item.getName()}§r registered`, "ItemManager/registerClassItem");
this.items.set(item.getName(), item);
};
/**
* Register items exported by './Items'.
*/
async importItems() {
const timer = new Timer();
await Promise.all(Object.entries(Items_exports).map(async ([, item]) => this.registerItem(new item())));
this.server.getLogger().verbose(`Registered §b${this.items.size}§r item(s) (took §e${timer.stop()} ms§r)!`);
}
};
//#endregion
export { ItemManager as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXRlbU1hbmFnZXIuZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2l0ZW0vSXRlbU1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgSXRlbXMgZnJvbSAnLi9JdGVtcyc7XG5cbmltcG9ydCB0eXBlIFNlcnZlciBmcm9tICcuLi9TZXJ2ZXInO1xuaW1wb3J0IEl0ZW1SZWdpc3RlckV2ZW50IGZyb20gJy4uL2V2ZW50cy9pdGVtcy9JdGVtUmVnaXN0ZXJFdmVudCc7XG5pbXBvcnQgVGltZXIgZnJvbSAnLi4vdXRpbHMvVGltZXInO1xuaW1wb3J0IHR5cGUgeyBJdGVtIH0gZnJvbSAnLi9JdGVtJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXRlbU1hbmFnZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmVyOiBTZXJ2ZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpdGVtcyA9IG5ldyBNYXA8c3RyaW5nLCBJdGVtPigpO1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0IGFuIEl0ZW1NYW5hZ2VyLlxuICAgICAqIEBwYXJhbSB7U2VydmVyfSBzZXJ2ZXIgLSBUaGUgc2VydmVyIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIHtJdGVtTWFuYWdlcn0gVGhlIGl0ZW0gbWFuYWdlciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2VydmVyOiBTZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5zZXJ2ZXIgPSBzZXJ2ZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gZW5hYmxlIGhvb2suXG4gICAgICogQGdyb3VwIExpZmVjeWNsZVxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBlbmFibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW1wb3J0SXRlbXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBkaXNhYmxlIGhvb2suXG4gICAgICogQGdyb3VwIExpZmVjeWNsZVxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLml0ZW1zLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFuIGl0ZW0gZnJvbSBpdCdzIG5hbWUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSB0aGEgaXRlbSdzIG5hbWUuXG4gICAgICogQHJldHVybnMge0l0ZW0gfCBudWxsfSB0aGUgaXRlbS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SXRlbShuYW1lOiBzdHJpbmcpOiBJdGVtIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmdldChuYW1lKSA/PyBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBpdGVtIGJ5IG51bWVyaWMgaWRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSB0aGEgaXRlbSdzIElELlxuICAgICAqIEByZXR1cm5zIHtJdGVtIHwgbnVsbH0gdGhlIGl0ZW0uXG4gICAgICovXG4gICAgcHVibGljIGdldEl0ZW1CeUlkKGlkOiBudW1iZXIpOiBJdGVtIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1zKCkuZmluZCgoYSkgPT4gYS5nZXRJZCgpID09PSBpZCkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIGl0ZW1zLlxuICAgICAqIEByZXR1cm5zIHtJdGVtW119IGFsbCByZWdpc3RlcmVkIGl0ZW1zLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJdGVtcygpOiBJdGVtW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLml0ZW1zLnZhbHVlcygpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhbiBpdGVtLlxuICAgICAqIEBwYXJhbSB7SXRlbX0gaXRlbSAtIFRoZSBpdGVtIHRvIGJlIHJlZ2lzdGVyZWRcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gVGhlIHByb21pc2UuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVySXRlbSA9IGFzeW5jIChpdGVtOiBJdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEl0ZW1SZWdpc3RlckV2ZW50KGl0ZW0pO1xuICAgICAgICBhd2FpdCB0aGlzLnNlcnZlci5lbWl0KCdpdGVtUmVnaXN0ZXInLCBldmVudCk7XG4gICAgICAgIGlmIChldmVudC5pc0NhbmNlbGxlZCgpKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXIuZ2V0TG9nZ2VyKCkuZGVidWcoYEl0ZW0gd2l0aCBpZCDCp2Ike2l0ZW0uZ2V0TmFtZSgpfcKnciByZWdpc3RlcmVkYCwgJ0l0ZW1NYW5hZ2VyL3JlZ2lzdGVyQ2xhc3NJdGVtJyk7XG4gICAgICAgIHRoaXMuaXRlbXMuc2V0KGl0ZW0uZ2V0TmFtZSgpLCBpdGVtKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgaXRlbXMgZXhwb3J0ZWQgYnkgJy4vSXRlbXMnLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgaW1wb3J0SXRlbXMoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gbmV3IFRpbWVyKCk7XG5cbiAgICAgICAgLy8gRHluYW1pY2FsbHkgcmVnaXN0ZXIgYmxvY2tzXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKEl0ZW1zKS5tYXAoYXN5bmMgKFssIGl0ZW1dKSA9PiB0aGlzLnJlZ2lzdGVySXRlbShuZXcgaXRlbSgpKSkpO1xuXG4gICAgICAgIHRoaXMuc2VydmVyLmdldExvZ2dlcigpLnZlcmJvc2UoYFJlZ2lzdGVyZWQgwqdiJHt0aGlzLml0ZW1zLnNpemV9wqdyIGl0ZW0ocykgKHRvb2sgwqdlJHt0aW1lci5zdG9wKCl9IG1zwqdyKSFgKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFPQSxJQUFxQixjQUFyQixNQUFpQztDQUM3QjtDQUNBLHdCQUF5QixJQUFJLElBQWtCOzs7Ozs7Q0FPL0MsWUFBbUIsUUFBZ0I7RUFDL0IsS0FBSyxTQUFTO0NBQ2xCOzs7OztDQU1BLE1BQWEsU0FBd0I7RUFDakMsTUFBTSxLQUFLLFlBQVk7Q0FDM0I7Ozs7O0NBTUEsTUFBYSxVQUFVO0VBQ25CLEtBQUssTUFBTSxNQUFNO0NBQ3JCOzs7Ozs7Q0FPQSxRQUFlLE1BQTJCO0VBQ3RDLE9BQU8sS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLO0NBQ25DOzs7Ozs7Q0FPQSxZQUFtQixJQUF5QjtFQUN4QyxPQUFPLEtBQUssU0FBUyxFQUFFLE1BQU0sTUFBTSxFQUFFLE1BQU0sTUFBTSxFQUFFLEtBQUs7Q0FDNUQ7Ozs7O0NBTUEsV0FBMEI7RUFDdEIsT0FBTyxNQUFNLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztDQUN6Qzs7Ozs7O0NBT0EsZUFBc0IsT0FBTyxTQUFlO0VBQ3hDLE1BQU0sUUFBUSxJQUFJLGtCQUFrQixJQUFJO0VBQ3hDLE1BQU0sS0FBSyxPQUFPLEtBQUssZ0JBQWdCLEtBQUs7RUFDNUMsSUFBSSxNQUFNLFlBQVksR0FBRztFQUV6QixLQUFLLE9BQU8sVUFBVSxFQUFFLE1BQU0sa0JBQWtCLEtBQUssUUFBUSxFQUFFLGdCQUFnQiwrQkFBK0I7RUFDOUcsS0FBSyxNQUFNLElBQUksS0FBSyxRQUFRLEdBQUcsSUFBSTtDQUN2Qzs7OztDQUtBLE1BQWMsY0FBYztFQUN4QixNQUFNLFFBQVEsSUFBSSxNQUFNO0VBR3hCLE1BQU0sUUFBUSxJQUFJLE9BQU8sUUFBUSxhQUFLLEVBQUUsSUFBSSxPQUFPLEdBQUcsVUFBVSxLQUFLLGFBQWEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBRTlGLEtBQUssT0FBTyxVQUFVLEVBQUUsUUFBUSxnQkFBZ0IsS0FBSyxNQUFNLEtBQUsscUJBQXFCLE1BQU0sS0FBSyxFQUFFLFFBQVE7Q0FDOUc7QUFDSiJ9