UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

96 lines (95 loc) 8.47 kB
import Air from "../block/blocks/Air.es.js"; import ContainerEntry from "./ContainerEntry.es.js"; //#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 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; } }; //#endregion export { Inventory as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52ZW50b3J5LmVzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnZlbnRvcnkvSW52ZW50b3J5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBaXIgZnJvbSAnLi4vYmxvY2svYmxvY2tzL0Fpcic7XG5pbXBvcnQgQ29udGFpbmVyRW50cnkgZnJvbSAnLi9Db250YWluZXJFbnRyeSc7XG5pbXBvcnQgdHlwZSB7IEl0ZW0gfSBmcm9tICcuLi9pdGVtL0l0ZW0nO1xuXG4vKipcbiAqIEludmVudG9yeS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW52ZW50b3J5IHtcbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2Ygc2xvdHMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNsb3RzOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiA8U2xvdCBudW1iZXIsIEl0ZW0gaW4gdGhlIHNsb3Q+XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRlbnQ6IE1hcDxudW1iZXIsIENvbnRhaW5lckVudHJ5PiA9IG5ldyBNYXAoKSBhcyBNYXA8bnVtYmVyLCBDb250YWluZXJFbnRyeT47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2xvdHMgPSAwLCBpdGVtczogQ29udGFpbmVyRW50cnlbXSA9IFtdKSB7XG4gICAgICAgIHRoaXMuc2xvdHMgPSBzbG90cztcbiAgICAgICAgdGhpcy5zZXRJdGVtcyhpdGVtcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHdpbmRvdyBpZC5cbiAgICAgKiBAdG9kbzogaW1wbGVtZW50IHRoaXMuXG4gICAgICovXG4gICAgcHVibGljIGdldElkKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gYXJyYXkgb2YgaXRlbXMgaW50byB0aGUgaW52ZW50b3J5LlxuICAgICAqIEBwYXJhbSB7Q29udGFpbmVyRW50cnlbXX0gW2l0ZW1zPVtdXSAtIHRoZSBlbnRpcmVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRJdGVtcyhpdGVtczogQ29udGFpbmVyRW50cnlbXSA9IFtdKSB7XG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiB0aGlzLnNsb3RzKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgaW52ZW50b3J5IHNsb3RzIGFyZSBsZXNzIHRoYW4gaXRlbXMgY3V0IHRoZSBpdGVtcyBhcnJheS5cbiAgICAgICAgICAgIGl0ZW1zID0gaXRlbXMuc2xpY2UoMCwgdGhpcy5zbG90cyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZ2V0U2xvdENvdW50KCk7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5zZXRJdGVtKGksIGl0ZW1zW2ldID8/IG5ldyBDb250YWluZXJFbnRyeSh7IGl0ZW06IG5ldyBBaXIoKSBhcyBhbnkgYXMgSXRlbSB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFsbCB0aGUgaXRlbXMgaW5zaWRlIHRoZSBpbnZlbnRvcnkuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5jbHVkZUFpcj1mYWxzZV0gLSBpZiBhaXIgc2hvdWxkIGJlIGFjY291bnRlZCBmb3IuXG4gICAgICogQHJldHVybnMge0NvbnRhaW5lckVudHJ5W119IHRoZSBlbnRyaWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJdGVtcyhpbmNsdWRlQWlyID0gZmFsc2UpOiBDb250YWluZXJFbnRyeVtdIHtcbiAgICAgICAgaWYgKGluY2x1ZGVBaXIpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY29udGVudC52YWx1ZXMoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNvbnRlbnQudmFsdWVzKCkpLmZpbHRlcigoaXRlbSkgPT4gIShpdGVtLmdldEl0ZW0oKSBpbnN0YW5jZW9mIEFpcikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgYW4gaXRlbSBpbiB0aGUgaW52ZW50b3J5IGNvbnRlbnQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNsb3QgLSB0aGUgc2xvdC5cbiAgICAgKiBAcGFyYW0ge0NvbnRhaW5lckVudHJ5fSBpdGVtIC0gdGhlIGl0ZW0uXG4gICAgICovXG4gICAgcHVibGljIHNldEl0ZW0oc2xvdDogbnVtYmVyLCBpdGVtOiBDb250YWluZXJFbnRyeSkge1xuICAgICAgICBpZiAoc2xvdCA+IHRoaXMuc2xvdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29udGVudC5zZXQoc2xvdCwgaXRlbSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhbiBpdGVtIHRvIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdFxuICAgICAqIEBwYXJhbSB7Q29udGFpbmVyRW50cnl9IGl0ZW0gLSB0aGUgaXRlbS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkSXRlbShpdGVtOiBDb250YWluZXJFbnRyeSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2xvdHM7IGkrKylcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250ZW50LmhhcyhpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SXRlbShpLCBpdGVtKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaXRlbSBpbiB0aGUgc2xvdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2xvdCAtIHRoZSBzbG90LlxuICAgICAqIEByZXR1cm5zIHtJdGVtIHwgQWlyfSB0aGUgaXRlbSBpbiB0aGUgc2xvdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SXRlbShzbG90OiBudW1iZXIpOiBJdGVtIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGVudC5oYXMoc2xvdCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0KHNsb3QpIS5nZXRJdGVtKCkhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQWlyKCkgYXMgYW55IGFzIEl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbiBpdGVtIGZyb20gYSBzbG90IGFuZCByZXR1cm5zIGl0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzbG90IC0gdGhlIHNsb3QuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUl0ZW0oc2xvdDogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250ZW50LmhhcyhzbG90KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBaXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNvbnRlbnQuZ2V0KHNsb3QpO1xuICAgICAgICB0aGlzLmNvbnRlbnQuZGVsZXRlKHNsb3QpO1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzbG90IGNvdW50IG9mIHRoZSBpbnZlbnRvcnkuXG4gICAgICogQHJldHVybnMge251bWJlcn0gdGhlIHNsb3QgY291bnQuXG4gICAgICovXG4gICAgcHVibGljIGdldFNsb3RDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zbG90cztcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQU9BLElBQXFCLFlBQXJCLE1BQStCOzs7OztDQUszQjs7Ozs7Q0FNQSwwQkFBd0QsSUFBSSxJQUFJO0NBRWhFLFlBQW1CLFFBQVEsR0FBRyxRQUEwQixDQUFDLEdBQUc7RUFDeEQsS0FBSyxRQUFRO0VBQ2IsS0FBSyxTQUFTLEtBQUs7Q0FDdkI7Ozs7O0NBTUEsUUFBdUI7RUFDbkIsT0FBTztDQUNYOzs7OztDQU1BLFNBQWdCLFFBQTBCLENBQUMsR0FBRztFQUMxQyxJQUFJLE1BQU0sU0FBUyxLQUFLLE9BRXBCLFFBQVEsTUFBTSxNQUFNLEdBQUcsS0FBSyxLQUFLO0VBR3JDLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxLQUFLLGFBQWEsR0FBRyxLQUNyQyxLQUFLLFFBQVEsR0FBRyxNQUFNLE1BQU0sSUFBSSxlQUFlLEVBQUUsTUFBTSxJQUFJLElBQUksRUFBaUIsQ0FBQyxDQUFDO0NBRTFGOzs7Ozs7Q0FPQSxTQUFnQixhQUFhLE9BQXlCO0VBQ2xELElBQUksWUFDQSxPQUFPLE1BQU0sS0FBSyxLQUFLLFFBQVEsT0FBTyxDQUFDO0VBRzNDLE9BQU8sTUFBTSxLQUFLLEtBQUssUUFBUSxPQUFPLENBQUMsRUFBRSxRQUFRLFNBQVMsRUFBRSxLQUFLLFFBQVEsYUFBYSxJQUFJO0NBQzlGOzs7Ozs7Q0FPQSxRQUFlLE1BQWMsTUFBc0I7RUFDL0MsSUFBSSxPQUFPLEtBQUssT0FDWixPQUFPO0VBR1gsS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJO0VBQzNCLE9BQU87Q0FDWDs7Ozs7Q0FNQSxRQUFlLE1BQXNCO0VBQ2pDLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxLQUFLLE9BQU8sS0FDNUIsSUFBSSxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsR0FBRztHQUN0QixLQUFLLFFBQVEsR0FBRyxJQUFJO0dBQ3BCO0VBQ0o7Q0FDUjs7Ozs7O0NBT0EsUUFBZSxNQUFvQjtFQUMvQixJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksR0FDckIsT0FBTyxLQUFLLFFBQVEsSUFBSSxJQUFJLEVBQUcsUUFBUTtFQUUzQyxPQUFPLElBQUksSUFBSTtDQUNuQjs7Ozs7Q0FNQSxXQUFrQixNQUFjO0VBQzVCLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxJQUFJLEdBQ3RCLE9BQU8sSUFBSSxJQUFJO0VBR25CLE1BQU0sT0FBTyxLQUFLLFFBQVEsSUFBSSxJQUFJO0VBQ2xDLEtBQUssUUFBUSxPQUFPLElBQUk7RUFDeEIsT0FBTztDQUNYOzs7OztDQU1BLGVBQThCO0VBQzFCLE9BQU8sS0FBSztDQUNoQjtBQUNKIn0=