@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
110 lines (105 loc) • 10.2 kB
JavaScript
'use strict';
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
const block_blocks_Air = require('../block/blocks/Air.cjs.cjs');
const inventory_ContainerEntry = require('./ContainerEntry.cjs.cjs');
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 inventory_ContainerEntry.default({ item: new 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 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 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 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;
}
}
exports.default = Inventory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52ZW50b3J5LmNqcy5janMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnZlbnRvcnkvSW52ZW50b3J5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBaXIgZnJvbSAnLi4vYmxvY2svYmxvY2tzL0Fpcic7XG5pbXBvcnQgQ29udGFpbmVyRW50cnkgZnJvbSAnLi9Db250YWluZXJFbnRyeSc7XG5pbXBvcnQgdHlwZSB7IEl0ZW0gfSBmcm9tICcuLi9pdGVtL0l0ZW0nO1xuXG4vKipcbiAqIEludmVudG9yeS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW52ZW50b3J5IHtcbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2Ygc2xvdHMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNsb3RzOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiA8U2xvdCBudW1iZXIsIEl0ZW0gaW4gdGhlIHNsb3Q+XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRlbnQ6IE1hcDxudW1iZXIsIENvbnRhaW5lckVudHJ5PiA9IG5ldyBNYXAoKSBhcyBNYXA8bnVtYmVyLCBDb250YWluZXJFbnRyeT47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2xvdHMgPSAwLCBpdGVtczogQ29udGFpbmVyRW50cnlbXSA9IFtdKSB7XG4gICAgICAgIHRoaXMuc2xvdHMgPSBzbG90cztcbiAgICAgICAgdGhpcy5zZXRJdGVtcyhpdGVtcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHdpbmRvdyBpZC5cbiAgICAgKiBAdG9kbzogaW1wbGVtZW50IHRoaXMuXG4gICAgICovXG4gICAgcHVibGljIGdldElkKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gYXJyYXkgb2YgaXRlbXMgaW50byB0aGUgaW52ZW50b3J5LlxuICAgICAqIEBwYXJhbSB7Q29udGFpbmVyRW50cnlbXX0gW2l0ZW1zPVtdXSAtIHRoZSBlbnRpcmVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRJdGVtcyhpdGVtczogQ29udGFpbmVyRW50cnlbXSA9IFtdKSB7XG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiB0aGlzLnNsb3RzKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgaW52ZW50b3J5IHNsb3RzIGFyZSBsZXNzIHRoYW4gaXRlbXMgY3V0IHRoZSBpdGVtcyBhcnJheS5cbiAgICAgICAgICAgIGl0ZW1zID0gaXRlbXMuc2xpY2UoMCwgdGhpcy5zbG90cyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZ2V0U2xvdENvdW50KCk7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5zZXRJdGVtKGksIGl0ZW1zW2ldID8/IG5ldyBDb250YWluZXJFbnRyeSh7IGl0ZW06IG5ldyBBaXIoKSBhcyBhbnkgYXMgSXRlbSB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFsbCB0aGUgaXRlbXMgaW5zaWRlIHRoZSBpbnZlbnRvcnkuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5jbHVkZUFpcj1mYWxzZV0gLSBpZiBhaXIgc2hvdWxkIGJlIGFjY291bnRlZCBmb3IuXG4gICAgICogQHJldHVybnMge0NvbnRhaW5lckVudHJ5W119IHRoZSBlbnRyaWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJdGVtcyhpbmNsdWRlQWlyID0gZmFsc2UpOiBDb250YWluZXJFbnRyeVtdIHtcbiAgICAgICAgaWYgKGluY2x1ZGVBaXIpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY29udGVudC52YWx1ZXMoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNvbnRlbnQudmFsdWVzKCkpLmZpbHRlcigoaXRlbSkgPT4gIShpdGVtLmdldEl0ZW0oKSBpbnN0YW5jZW9mIEFpcikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgYW4gaXRlbSBpbiB0aGUgaW52ZW50b3J5IGNvbnRlbnQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNsb3QgLSB0aGUgc2xvdC5cbiAgICAgKiBAcGFyYW0ge0NvbnRhaW5lckVudHJ5fSBpdGVtIC0gdGhlIGl0ZW0uXG4gICAgICovXG4gICAgcHVibGljIHNldEl0ZW0oc2xvdDogbnVtYmVyLCBpdGVtOiBDb250YWluZXJFbnRyeSkge1xuICAgICAgICBpZiAoc2xvdCA+IHRoaXMuc2xvdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29udGVudC5zZXQoc2xvdCwgaXRlbSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhbiBpdGVtIHRvIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdFxuICAgICAqIEBwYXJhbSB7Q29udGFpbmVyRW50cnl9IGl0ZW0gLSB0aGUgaXRlbS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkSXRlbShpdGVtOiBDb250YWluZXJFbnRyeSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2xvdHM7IGkrKylcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250ZW50LmhhcyhpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SXRlbShpLCBpdGVtKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaXRlbSBpbiB0aGUgc2xvdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2xvdCAtIHRoZSBzbG90LlxuICAgICAqIEByZXR1cm5zIHtJdGVtIHwgQWlyfSB0aGUgaXRlbSBpbiB0aGUgc2xvdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SXRlbShzbG90OiBudW1iZXIpOiBJdGVtIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGVudC5oYXMoc2xvdCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0KHNsb3QpIS5nZXRJdGVtKCkhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQWlyKCkgYXMgYW55IGFzIEl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbiBpdGVtIGZyb20gYSBzbG90IGFuZCByZXR1cm5zIGl0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzbG90IC0gdGhlIHNsb3QuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUl0ZW0oc2xvdDogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250ZW50LmhhcyhzbG90KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBaXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNvbnRlbnQuZ2V0KHNsb3QpO1xuICAgICAgICB0aGlzLmNvbnRlbnQuZGVsZXRlKHNsb3QpO1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzbG90IGNvdW50IG9mIHRoZSBpbnZlbnRvcnkuXG4gICAgICogQHJldHVybnMge251bWJlcn0gdGhlIHNsb3QgY291bnQuXG4gICAgICovXG4gICAgcHVibGljIGdldFNsb3RDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zbG90cztcbiAgICB9XG59XG4iXSwibmFtZXMiOlsiQ29udGFpbmVyRW50cnkiLCJBaXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFPQSxNQUFxQixTQUFVLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS1YsS0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxPQUFBLHVCQUEyQyxHQUFJLEVBQUE7QUFBQSxFQUV6RCxXQUFZLENB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