UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

101 lines (100 loc) 8.83 kB
"use strict"; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); const require_block_blocks_Air = require("../block/blocks/Air.cjs.cjs"); const require_inventory_ContainerEntry = require("./ContainerEntry.cjs.cjs"); //#region src/inventory/Inventory.ts /** * Inventory. */ var Inventory = class { /** * Number of slots. * @private */ slots; /** * <Slot number, Item in the slot> * @private */ content = /* @__PURE__ */ new Map(); constructor(slots = 0, items = []) { this.slots = slots; this.setItems(items); } /** * Get window id. * @todo: implement this. */ getId() { return 0; } /** * Adds an array of items into the inventory. * @param {ContainerEntry[]} [items=[]] - the entires. */ setItems(items = []) { if (items.length > this.slots) items = items.slice(0, this.slots); for (let i = 0; i < this.getSlotCount(); i++) this.setItem(i, items[i] ?? new require_inventory_ContainerEntry.default({ item: new require_block_blocks_Air.default() })); } /** * Returns all the items inside the inventory. * @param {boolean} [includeAir=false] - if air should be accounted for. * @returns {ContainerEntry[]} the entries. */ getItems(includeAir = false) { if (includeAir) return Array.from(this.content.values()); return Array.from(this.content.values()).filter((item) => !(item.getItem() instanceof require_block_blocks_Air.default)); } /** * Sets an item in the inventory content. * @param {number} slot - the slot. * @param {ContainerEntry} item - the item. */ setItem(slot, item) { if (slot > this.slots) return false; this.content.set(slot, item); return true; } /** * Add an item to the first available slot * @param {ContainerEntry} item - the item. */ addItem(item) { for (let i = 0; i < this.slots; i++) if (!this.content.has(i)) { this.setItem(i, item); return; } } /** * Returns the item in the slot. * @param {number} slot - the slot. * @returns {Item | Air} the item in the slot. */ getItem(slot) { if (this.content.has(slot)) return this.content.get(slot).getItem(); return new require_block_blocks_Air.default(); } /** * Removes an item from a slot and returns it. * @param {number} slot - the slot. */ removeItem(slot) { if (!this.content.has(slot)) return new require_block_blocks_Air.default(); const item = this.content.get(slot); this.content.delete(slot); return item; } /** * Returns the slot count of the inventory. * @returns {number} the slot count. */ getSlotCount() { return this.slots; } }; //#endregion exports.default = Inventory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52ZW50b3J5LmNqcy5janMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludmVudG9yeS9JbnZlbnRvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEFpciBmcm9tICcuLi9ibG9jay9ibG9ja3MvQWlyJztcbmltcG9ydCBDb250YWluZXJFbnRyeSBmcm9tICcuL0NvbnRhaW5lckVudHJ5JztcbmltcG9ydCB0eXBlIHsgSXRlbSB9IGZyb20gJy4uL2l0ZW0vSXRlbSc7XG5cbi8qKlxuICogSW52ZW50b3J5LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnZlbnRvcnkge1xuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBzbG90cy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2xvdHM6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIDxTbG90IG51bWJlciwgSXRlbSBpbiB0aGUgc2xvdD5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGVudDogTWFwPG51bWJlciwgQ29udGFpbmVyRW50cnk+ID0gbmV3IE1hcCgpIGFzIE1hcDxudW1iZXIsIENvbnRhaW5lckVudHJ5PjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzbG90cyA9IDAsIGl0ZW1zOiBDb250YWluZXJFbnRyeVtdID0gW10pIHtcbiAgICAgICAgdGhpcy5zbG90cyA9IHNsb3RzO1xuICAgICAgICB0aGlzLnNldEl0ZW1zKGl0ZW1zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgd2luZG93IGlkLlxuICAgICAqIEB0b2RvOiBpbXBsZW1lbnQgdGhpcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBhcnJheSBvZiBpdGVtcyBpbnRvIHRoZSBpbnZlbnRvcnkuXG4gICAgICogQHBhcmFtIHtDb250YWluZXJFbnRyeVtdfSBbaXRlbXM9W11dIC0gdGhlIGVudGlyZXMuXG4gICAgICovXG4gICAgcHVibGljIHNldEl0ZW1zKGl0ZW1zOiBDb250YWluZXJFbnRyeVtdID0gW10pIHtcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IHRoaXMuc2xvdHMpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBpbnZlbnRvcnkgc2xvdHMgYXJlIGxlc3MgdGhhbiBpdGVtcyBjdXQgdGhlIGl0ZW1zIGFycmF5LlxuICAgICAgICAgICAgaXRlbXMgPSBpdGVtcy5zbGljZSgwLCB0aGlzLnNsb3RzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5nZXRTbG90Q291bnQoKTsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnNldEl0ZW0oaSwgaXRlbXNbaV0gPz8gbmV3IENvbnRhaW5lckVudHJ5KHsgaXRlbTogbmV3IEFpcigpIGFzIGFueSBhcyBJdGVtIH0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWxsIHRoZSBpdGVtcyBpbnNpZGUgdGhlIGludmVudG9yeS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlQWlyPWZhbHNlXSAtIGlmIGFpciBzaG91bGQgYmUgYWNjb3VudGVkIGZvci5cbiAgICAgKiBAcmV0dXJucyB7Q29udGFpbmVyRW50cnlbXX0gdGhlIGVudHJpZXMuXG4gICAgICovXG4gICAgcHVibGljIGdldEl0ZW1zKGluY2x1ZGVBaXIgPSBmYWxzZSk6IENvbnRhaW5lckVudHJ5W10ge1xuICAgICAgICBpZiAoaW5jbHVkZUFpcikge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jb250ZW50LnZhbHVlcygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY29udGVudC52YWx1ZXMoKSkuZmlsdGVyKChpdGVtKSA9PiAhKGl0ZW0uZ2V0SXRlbSgpIGluc3RhbmNlb2YgQWlyKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhbiBpdGVtIGluIHRoZSBpbnZlbnRvcnkgY29udGVudC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2xvdCAtIHRoZSBzbG90LlxuICAgICAqIEBwYXJhbSB7Q29udGFpbmVyRW50cnl9IGl0ZW0gLSB0aGUgaXRlbS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0SXRlbShzbG90OiBudW1iZXIsIGl0ZW06IENvbnRhaW5lckVudHJ5KSB7XG4gICAgICAgIGlmIChzbG90ID4gdGhpcy5zbG90cykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250ZW50LnNldChzbG90LCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGFuIGl0ZW0gdG8gdGhlIGZpcnN0IGF2YWlsYWJsZSBzbG90XG4gICAgICogQHBhcmFtIHtDb250YWluZXJFbnRyeX0gaXRlbSAtIHRoZSBpdGVtLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRJdGVtKGl0ZW06IENvbnRhaW5lckVudHJ5KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zbG90czsgaSsrKVxuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnQuaGFzKGkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJdGVtKGksIGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpdGVtIGluIHRoZSBzbG90LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzbG90IC0gdGhlIHNsb3QuXG4gICAgICogQHJldHVybnMge0l0ZW0gfCBBaXJ9IHRoZSBpdGVtIGluIHRoZSBzbG90LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJdGVtKHNsb3Q6IG51bWJlcik6IEl0ZW0ge1xuICAgICAgICBpZiAodGhpcy5jb250ZW50LmhhcyhzbG90KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudC5nZXQoc2xvdCkhLmdldEl0ZW0oKSE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBaXIoKSBhcyBhbnkgYXMgSXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFuIGl0ZW0gZnJvbSBhIHNsb3QgYW5kIHJldHVybnMgaXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNsb3QgLSB0aGUgc2xvdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlSXRlbShzbG90OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnQuaGFzKHNsb3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFpcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY29udGVudC5nZXQoc2xvdCk7XG4gICAgICAgIHRoaXMuY29udGVudC5kZWxldGUoc2xvdCk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNsb3QgY291bnQgb2YgdGhlIGludmVudG9yeS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgc2xvdCBjb3VudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2xvdENvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnNsb3RzO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFPQSxJQUFxQixZQUFyQixNQUErQjs7Ozs7Q0FLM0I7Ozs7O0NBTUEsMEJBQXdELElBQUksSUFBSTtDQUVoRSxZQUFtQixRQUFRLEdBQUcsUUFBMEIsQ0FBQyxHQUFHO0VBQ3hELEtBQUssUUFBUTtFQUNiLEtBQUssU0FBUyxLQUFLO0NBQ3ZCOzs7OztDQU1BLFFBQXVCO0VBQ25CLE9BQU87Q0FDWDs7Ozs7Q0FNQSxTQUFnQixRQUEwQixDQUFDLEdBQUc7RUFDMUMsSUFBSSxNQUFNLFNBQVMsS0FBSyxPQUVwQixRQUFRLE1BQU0sTUFBTSxHQUFHLEtBQUssS0FBSztFQUdyQyxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksS0FBSyxhQUFhLEdBQUcsS0FDckMsS0FBSyxRQUFRLEdBQUcsTUFBTSxNQUFNLElBQUksaUNBQUEsUUFBZSxFQUFFLE1BQU0sSUFBSSx5QkFBQSxRQUFJLEVBQWlCLENBQUMsQ0FBQztDQUUxRjs7Ozs7O0NBT0EsU0FBZ0IsYUFBYSxPQUF5QjtFQUNsRCxJQUFJLFlBQ0EsT0FBTyxNQUFNLEtBQUssS0FBSyxRQUFRLE9BQU8sQ0FBQztFQUczQyxPQUFPLE1BQU0sS0FBSyxLQUFLLFFBQVEsT0FBTyxDQUFDLEVBQUUsUUFBUSxTQUFTLEVBQUUsS0FBSyxRQUFRLGFBQWEseUJBQUEsUUFBSTtDQUM5Rjs7Ozs7O0NBT0EsUUFBZSxNQUFjLE1BQXNCO0VBQy9DLElBQUksT0FBTyxLQUFLLE9BQ1osT0FBTztFQUdYLEtBQUssUUFBUSxJQUFJLE1BQU0sSUFBSTtFQUMzQixPQUFPO0NBQ1g7Ozs7O0NBTUEsUUFBZSxNQUFzQjtFQUNqQyxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksS0FBSyxPQUFPLEtBQzVCLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEdBQUc7R0FDdEIsS0FBSyxRQUFRLEdBQUcsSUFBSTtHQUNwQjtFQUNKO0NBQ1I7Ozs7OztDQU9BLFFBQWUsTUFBb0I7RUFDL0IsSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLEdBQ3JCLE9BQU8sS0FBSyxRQUFRLElBQUksSUFBSSxFQUFHLFFBQVE7RUFFM0MsT0FBTyxJQUFJLHlCQUFBLFFBQUk7Q0FDbkI7Ozs7O0NBTUEsV0FBa0IsTUFBYztFQUM1QixJQUFJLENBQUMsS0FBSyxRQUFRLElBQUksSUFBSSxHQUN0QixPQUFPLElBQUkseUJBQUEsUUFBSTtFQUduQixNQUFNLE9BQU8sS0FBSyxRQUFRLElBQUksSUFBSTtFQUNsQyxLQUFLLFFBQVEsT0FBTyxJQUFJO0VBQ3hCLE9BQU87Q0FDWDs7Ozs7Q0FNQSxlQUE4QjtFQUMxQixPQUFPLEtBQUs7Q0FDaEI7QUFDSiJ9