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