UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

106 lines (103 loc) 9.92 kB
import Air from '../block/blocks/Air.es.js'; import ContainerEntry from './ContainerEntry.es.js'; class Inventory { /** * 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 ContainerEntry({ item: new Air() })); } } /** * 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 Air)); } /** * 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 Air(); } /** * Removes an item from a slot and returns it. * @param {number} slot - the slot. */ removeItem(slot) { if (!this.content.has(slot)) { return new Air(); } 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; } } export { Inventory as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52ZW50b3J5LmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW52ZW50b3J5L0ludmVudG9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQWlyIGZyb20gJy4uL2Jsb2NrL2Jsb2Nrcy9BaXInO1xuaW1wb3J0IENvbnRhaW5lckVudHJ5IGZyb20gJy4vQ29udGFpbmVyRW50cnknO1xuaW1wb3J0IHR5cGUgeyBJdGVtIH0gZnJvbSAnLi4vaXRlbS9JdGVtJztcblxuLyoqXG4gKiBJbnZlbnRvcnkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEludmVudG9yeSB7XG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHNsb3RzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBzbG90czogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogPFNsb3QgbnVtYmVyLCBJdGVtIGluIHRoZSBzbG90PlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZW50OiBNYXA8bnVtYmVyLCBDb250YWluZXJFbnRyeT4gPSBuZXcgTWFwKCkgYXMgTWFwPG51bWJlciwgQ29udGFpbmVyRW50cnk+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNsb3RzID0gMCwgaXRlbXM6IENvbnRhaW5lckVudHJ5W10gPSBbXSkge1xuICAgICAgICB0aGlzLnNsb3RzID0gc2xvdHM7XG4gICAgICAgIHRoaXMuc2V0SXRlbXMoaXRlbXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB3aW5kb3cgaWQuXG4gICAgICogQHRvZG86IGltcGxlbWVudCB0aGlzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIGFycmF5IG9mIGl0ZW1zIGludG8gdGhlIGludmVudG9yeS5cbiAgICAgKiBAcGFyYW0ge0NvbnRhaW5lckVudHJ5W119IFtpdGVtcz1bXV0gLSB0aGUgZW50aXJlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0SXRlbXMoaXRlbXM6IENvbnRhaW5lckVudHJ5W10gPSBbXSkge1xuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gdGhpcy5zbG90cykge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGludmVudG9yeSBzbG90cyBhcmUgbGVzcyB0aGFuIGl0ZW1zIGN1dCB0aGUgaXRlbXMgYXJyYXkuXG4gICAgICAgICAgICBpdGVtcyA9IGl0ZW1zLnNsaWNlKDAsIHRoaXMuc2xvdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmdldFNsb3RDb3VudCgpOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SXRlbShpLCBpdGVtc1tpXSA/PyBuZXcgQ29udGFpbmVyRW50cnkoeyBpdGVtOiBuZXcgQWlyKCkgYXMgYW55IGFzIEl0ZW0gfSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbGwgdGhlIGl0ZW1zIGluc2lkZSB0aGUgaW52ZW50b3J5LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luY2x1ZGVBaXI9ZmFsc2VdIC0gaWYgYWlyIHNob3VsZCBiZSBhY2NvdW50ZWQgZm9yLlxuICAgICAqIEByZXR1cm5zIHtDb250YWluZXJFbnRyeVtdfSB0aGUgZW50cmllcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SXRlbXMoaW5jbHVkZUFpciA9IGZhbHNlKTogQ29udGFpbmVyRW50cnlbXSB7XG4gICAgICAgIGlmIChpbmNsdWRlQWlyKSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNvbnRlbnQudmFsdWVzKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jb250ZW50LnZhbHVlcygpKS5maWx0ZXIoKGl0ZW0pID0+ICEoaXRlbS5nZXRJdGVtKCkgaW5zdGFuY2VvZiBBaXIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGFuIGl0ZW0gaW4gdGhlIGludmVudG9yeSBjb250ZW50LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzbG90IC0gdGhlIHNsb3QuXG4gICAgICogQHBhcmFtIHtDb250YWluZXJFbnRyeX0gaXRlbSAtIHRoZSBpdGVtLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRJdGVtKHNsb3Q6IG51bWJlciwgaXRlbTogQ29udGFpbmVyRW50cnkpIHtcbiAgICAgICAgaWYgKHNsb3QgPiB0aGlzLnNsb3RzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRlbnQuc2V0KHNsb3QsIGl0ZW0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYW4gaXRlbSB0byB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3RcbiAgICAgKiBAcGFyYW0ge0NvbnRhaW5lckVudHJ5fSBpdGVtIC0gdGhlIGl0ZW0uXG4gICAgICovXG4gICAgcHVibGljIGFkZEl0ZW0oaXRlbTogQ29udGFpbmVyRW50cnkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNsb3RzOyBpKyspXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29udGVudC5oYXMoaSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEl0ZW0oaSwgaXRlbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGl0ZW0gaW4gdGhlIHNsb3QuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNsb3QgLSB0aGUgc2xvdC5cbiAgICAgKiBAcmV0dXJucyB7SXRlbSB8IEFpcn0gdGhlIGl0ZW0gaW4gdGhlIHNsb3QuXG4gICAgICovXG4gICAgcHVibGljIGdldEl0ZW0oc2xvdDogbnVtYmVyKTogSXRlbSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnQuaGFzKHNsb3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50LmdldChzbG90KSEuZ2V0SXRlbSgpITtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEFpcigpIGFzIGFueSBhcyBJdGVtO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYW4gaXRlbSBmcm9tIGEgc2xvdCBhbmQgcmV0dXJucyBpdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2xvdCAtIHRoZSBzbG90LlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVJdGVtKHNsb3Q6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMuY29udGVudC5oYXMoc2xvdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWlyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5jb250ZW50LmdldChzbG90KTtcbiAgICAgICAgdGhpcy5jb250ZW50LmRlbGV0ZShzbG90KTtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2xvdCBjb3VudCBvZiB0aGUgaW52ZW50b3J5LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IHRoZSBzbG90IGNvdW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTbG90Q291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xvdHM7XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLE1BQXFCLFNBQVUsQ0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLVixLQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLE9BQUEsdUJBQTJDLEdBQUksRUFBQTtBQUFBLEVBRXpELFdBQVksQ0FBQSxLQUFBLEdBQVEsQ0FBRyxFQUFBLEtBQUEs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