@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
101 lines (100 loc) • 8.83 kB
JavaScript
"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