@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
96 lines (95 loc) • 8.47 kB
JavaScript
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=