UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

143 lines (136 loc) • 16.1 kB
'use strict'; Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const nbt = require('@jsprismarine/nbt'); const BedrockData = require('@jsprismarine/bedrock-data'); const BinaryStream = require('@jsprismarine/jsbinaryutils'); const block_BlockMappings = require('../block/BlockMappings.cjs.cjs'); const block_BlockToolType = require('../block/BlockToolType.cjs.cjs'); const _interopDefault = e => e && e.__esModule ? e : { default: e }; const BinaryStream__default = /*#__PURE__*/_interopDefault(BinaryStream); class Item { id; networkId; name; meta = 0; durability = this.getMaxDurability(); // TODO nbt = null; count = 1; constructor({ id, name, meta }) { this.id = id; this.name = name; if (meta) this.meta = meta; this.networkId = BedrockData.item_id_map[name]; } getName() { return this.name; } getId() { return this.id; } /** * Get the Block's network numeric id */ getNetworkId() { return this.networkId || this.getId(); } isTool() { return false; } isArmorPiece() { return false; } getBurnTime() { return 0; } getToolType() { return block_BlockToolType.BlockToolType.None; } getToolHarvestLevel() { return 0; } getArmorDefensePoints() { return 0; } getArmorToughness() { return 0; } hasEnchantment(_enchantment) { return false; } getEnchantability() { return 0; } getMaxDurability() { return 0; } getDurability() { return this.durability; } getMaxAmount() { return 64; } getAmount() { return this.count; } isPartOfCreativeInventory() { return true; } networkSerialize(stream, additionalData = null) { stream.writeVarInt(this.getNetworkId()); if (this.getId() === 0 || this.getName() === "minecraft:air") { return; } stream.writeShortLE(this.getAmount()); stream.writeUnsignedVarInt(this.meta); if (additionalData) { additionalData(stream); } stream.writeVarInt(block_BlockMappings.BlockMappings.getRuntimeId(this.getName())); const str = new BinaryStream__default.default(); str.writeShortLE(0); str.writeIntLE(0); str.writeIntLE(0); if (this.getName() === "minecraft:shield") { str.writeLongLE(BigInt(0)); } stream.writeUnsignedVarInt(str.getBuffer().byteLength); stream.write(new Uint8Array(str.getBuffer())); } static networkDeserialize(stream, extra = false) { const id = stream.readVarInt(); if (id === 0) { return new Item({ id: 0, name: "minecraft:air" }); } stream.readUnsignedShortLE(); stream.readUnsignedVarInt(); if (extra && stream.readBoolean()) { stream.readVarInt(); } const temp = stream.readVarInt(); const data = temp >> 8; let _nbt = null; const extraLen = stream.readUnsignedShortLE(); if (extraLen === -1) { stream.readByte(); try { const nbtReader = new nbt.NBTReader(stream, nbt.ByteOrder.LITTLE_ENDIAN); nbtReader.setUseVarint(true); _nbt = nbtReader.parse(); } catch (error) { throw new Error(`Failed to parse item stack nbt`, { cause: error }); } } const countPlaceOn = stream.readVarInt(); for (let i = 0; i < countPlaceOn; i++) { stream.read(stream.readUnsignedShortLE()); } const countCanBreak = stream.readVarInt(); for (let i = 0; i < countCanBreak; i++) { stream.read(stream.readUnsignedShortLE()); } return new Item({ id, name: "minecraft:unknown", meta: data }); } } exports.Item = Item; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXRlbS5janMuY2pzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaXRlbS9JdGVtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ5dGVPcmRlciwgTkJUUmVhZGVyIH0gZnJvbSAnQGpzcHJpc21hcmluZS9uYnQnO1xuXG5pbXBvcnQgeyBpdGVtX2lkX21hcCBhcyBJdGVtSWRNYXAgfSBmcm9tICdAanNwcmlzbWFyaW5lL2JlZHJvY2stZGF0YSc7XG5pbXBvcnQgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgeyBCbG9ja01hcHBpbmdzIH0gZnJvbSAnLi4vYmxvY2svQmxvY2tNYXBwaW5ncyc7XG5pbXBvcnQgeyBCbG9ja1Rvb2xUeXBlIH0gZnJvbSAnLi4vYmxvY2svQmxvY2tUb29sVHlwZSc7XG5pbXBvcnQgdHlwZSB7IEl0ZW1FbmNoYW50bWVudFR5cGUgfSBmcm9tICcuL0l0ZW1FbmNoYW50bWVudFR5cGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEl0ZW1Qcm9wcyB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbWV0YT86IG51bWJlcjtcbiAgICBuYnQ/OiBhbnk7XG4gICAgY291bnQ/OiBudW1iZXI7XG4gICAgZHVyYWJpbGl0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEl0ZW0ge1xuICAgIHByaXZhdGUgaWQ6IG51bWJlcjtcbiAgICBwcml2YXRlIG5ldHdvcmtJZDogbnVtYmVyO1xuICAgIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyBtZXRhID0gMDtcbiAgICBwdWJsaWMgZHVyYWJpbGl0eTogbnVtYmVyID0gdGhpcy5nZXRNYXhEdXJhYmlsaXR5KCk7XG5cbiAgICAvLyBUT0RPXG4gICAgcHVibGljIG5idCA9IG51bGw7XG4gICAgcHVibGljIGNvdW50ID0gMTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih7IGlkLCBuYW1lLCBtZXRhIH06IEl0ZW1Qcm9wcykge1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIGlmIChtZXRhKSB0aGlzLm1ldGEgPSBtZXRhO1xuXG4gICAgICAgIHRoaXMubmV0d29ya0lkID0gKEl0ZW1JZE1hcCBhcyBhbnkpW25hbWVdIGFzIG51bWJlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBCbG9jaydzIG5ldHdvcmsgbnVtZXJpYyBpZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROZXR3b3JrSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ldHdvcmtJZCB8fCB0aGlzLmdldElkKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzVG9vbCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0FybW9yUGllY2UoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnVyblRpbWUoKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb29sVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIEJsb2NrVG9vbFR5cGUuTm9uZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG9vbEhhcnZlc3RMZXZlbCgpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFybW9yRGVmZW5zZVBvaW50cygpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFybW9yVG91Z2huZXNzKCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzRW5jaGFudG1lbnQoX2VuY2hhbnRtZW50OiBJdGVtRW5jaGFudG1lbnRUeXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RW5jaGFudGFiaWxpdHkoKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNYXhEdXJhYmlsaXR5KCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RHVyYWJpbGl0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHVyYWJpbGl0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TWF4QW1vdW50KCkge1xuICAgICAgICByZXR1cm4gNjQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFtb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUGFydE9mQ3JlYXRpdmVJbnZlbnRvcnkoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXR3b3JrU2VyaWFsaXplKFxuICAgICAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IG51bGwgfCAoKHN0cmVhbTogQmluYXJ5U3RyZWFtKSA9PiB2b2lkKSA9IG51bGxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgc3RyZWFtLndyaXRlVmFySW50KHRoaXMuZ2V0TmV0d29ya0lkKCkpO1xuICAgICAgICBpZiAodGhpcy5nZXRJZCgpID09PSAwIHx8IHRoaXMuZ2V0TmFtZSgpID09PSAnbWluZWNyYWZ0OmFpcicpIHtcbiAgICAgICAgICAgIC8vIFRoZSBpdGVtIGlzIEFpciBzbyB0aGVyZSdzIG5vIGFkZGl0aW9uYWwgZGF0YVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtLndyaXRlU2hvcnRMRSh0aGlzLmdldEFtb3VudCgpKTtcbiAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRWYXJJbnQodGhpcy5tZXRhKTtcblxuICAgICAgICAvLyBVc2UgYSBjbG9zdXJlIHRvIGFkZCBhZGRpdGlvbmFsIGRhdGFcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxEYXRhKSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsRGF0YShzdHJlYW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogUHJvcGVyIGJsb2NrIHJ1bnRpbWUgSURcbiAgICAgICAgc3RyZWFtLndyaXRlVmFySW50KEJsb2NrTWFwcGluZ3MuZ2V0UnVudGltZUlkKHRoaXMuZ2V0TmFtZSgpKSk7XG5cbiAgICAgICAgY29uc3Qgc3RyID0gbmV3IEJpbmFyeVN0cmVhbSgpO1xuXG4gICAgICAgIC8qIGlmICh0aGlzLm5idCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGFtb3VudCBvZiB0YWdzIHRvIHdyaXRlXG4gICAgICAgICAgICAvLyAoMSkgYWNjb3JkaW5nIHRvIHZhbmlsbGFcbiAgICAgICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkU2hvcnRMRSgweGZmZmYpO1xuICAgICAgICAgICAgc3RyZWFtLndyaXRlQnl0ZSgxKTtcblxuICAgICAgICAgICAgLy8gV3JpdGUgaGFyZGNvZGVkIE5CVCB0YWdcbiAgICAgICAgICAgIC8vIFRPRE86IHVuaW1wbGVtZW50ZWQgTkJULndyaXRlKG5idCwgdHJ1ZSwgdHJ1ZSlcbiAgICAgICAgfSAqL1xuXG4gICAgICAgIC8vIFRPRE86IHByb3BlciBOQlRcbiAgICAgICAgc3RyLndyaXRlU2hvcnRMRSgwKTtcblxuICAgICAgICAvLyBDYW5QbGFjZSBhbmQgY2FuQnJlYWtcbiAgICAgICAgc3RyLndyaXRlSW50TEUoMCk7XG4gICAgICAgIHN0ci53cml0ZUludExFKDApO1xuXG4gICAgICAgIC8vIFRPRE86IGNoZWNrIGZvciBhZGRpdGlvbmFsIGRhdGFcbiAgICAgICAgaWYgKHRoaXMuZ2V0TmFtZSgpID09PSAnbWluZWNyYWZ0OnNoaWVsZCcpIHtcbiAgICAgICAgICAgIHN0ci53cml0ZUxvbmdMRShCaWdJbnQoMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRWYXJJbnQoc3RyLmdldEJ1ZmZlcigpLmJ5dGVMZW5ndGgpO1xuICAgICAgICBzdHJlYW0ud3JpdGUobmV3IFVpbnQ4QXJyYXkoc3RyLmdldEJ1ZmZlcigpKSk7XG5cbiAgICAgICAgLy8gVE9ETzogY2hlY2sgZm9yIGFkZGl0aW9uYWwgZGF0YVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbmV0d29ya0Rlc2VyaWFsaXplKHN0cmVhbTogQmluYXJ5U3RyZWFtLCBleHRyYSA9IGZhbHNlKTogSXRlbSB7XG4gICAgICAgIGNvbnN0IGlkID0gc3RyZWFtLnJlYWRWYXJJbnQoKTtcbiAgICAgICAgaWYgKGlkID09PSAwKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBpdGVtc1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJdGVtKHsgaWQ6IDAsIG5hbWU6ICdtaW5lY3JhZnQ6YWlyJyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IF9jb3VudCA9IHN0cmVhbS5yZWFkVW5zaWduZWRTaG9ydExFKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgdW51c2VkLWltcG9ydHMvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgY29uc3QgX25ldERhdGEgPSBzdHJlYW0ucmVhZFVuc2lnbmVkVmFySW50KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgdW51c2VkLWltcG9ydHMvbm8tdW51c2VkLXZhcnNcblxuICAgICAgICAvLyBUT0RPOiByZWZhY3RvciBldmVyeXRoaW5nIGJhc2ljYWxseS4uLlxuICAgICAgICBpZiAoZXh0cmEgJiYgc3RyZWFtLnJlYWRCb29sZWFuKCkpIHtcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkVmFySW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZW1wID0gc3RyZWFtLnJlYWRWYXJJbnQoKTtcbiAgICAgICAgLy8gY29uc3QgYW1vdW50ID0gdGVtcCAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0ZW1wID4+IDg7XG5cbiAgICAgICAgbGV0IF9uYnQgPSBudWxsO1xuICAgICAgICBjb25zdCBleHRyYUxlbiA9IHN0cmVhbS5yZWFkVW5zaWduZWRTaG9ydExFKCk7XG4gICAgICAgIGlmIChleHRyYUxlbiA9PT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBzdHJlYW0ucmVhZEJ5dGUoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSB1bnVzZWQtaW1wb3J0cy9uby11bnVzZWQtdmFyc1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5idFJlYWRlciA9IG5ldyBOQlRSZWFkZXIoc3RyZWFtLCBCeXRlT3JkZXIuTElUVExFX0VORElBTik7XG4gICAgICAgICAgICAgICAgbmJ0UmVhZGVyLnNldFVzZVZhcmludCh0cnVlKTtcbiAgICAgICAgICAgICAgICBfbmJ0ID0gbmJ0UmVhZGVyLnBhcnNlKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIGl0ZW0gc3RhY2sgbmJ0YCwgeyBjYXVzZTogZXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogSnVzdCBsb2cgYW5kIHJldHVybiBBSVJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvdW50UGxhY2VPbiA9IHN0cmVhbS5yZWFkVmFySW50KCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnRQbGFjZU9uOyBpKyspIHtcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkKHN0cmVhbS5yZWFkVW5zaWduZWRTaG9ydExFKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY291bnRDYW5CcmVhayA9IHN0cmVhbS5yZWFkVmFySW50KCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnRDYW5CcmVhazsgaSsrKSB7XG4gICAgICAgICAgICBzdHJlYW0ucmVhZChzdHJlYW0ucmVhZFVuc2lnbmVkU2hvcnRMRSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IGNoZWNrIGlmIGhhcyBhZGRpdGlvbmFsIGRhdGFcblxuICAgICAgICAvLyBUT0RPOiBydW50aW1lSWRcbiAgICAgICAgLy8gVE9ETzogaHR0cHM6Ly9naXRodWIuY29tL0pTUHJpc21hcmluZS9KU1ByaXNtYXJpbmUvaXNzdWVzLzEwNm5ld1xuICAgICAgICByZXR1cm4gbmV3IEl0ZW0oeyBpZCwgbmFtZTogJ21pbmVjcmFmdDp1bmtub3duJywgbWV0YTogZGF0YSB9KTtcbiAgICB9XG59XG4iXSwibmFtZXMiOlsiSXRlbUlkTWFwIiwiQmxvY2tUb29sVHlwZSIsIkJsb2NrTWFwcGluZ3MiLCJCaW5hcnlTdHJlYW0iLCJOQlRSZWFkZXIiLCJCeXRlT3JkZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBaUJPLE1BQU0sSUFBSyxDQUFBO0FBQUEsRUFDTixFQUFBO0FBQUEsRUFDQSxTQUFBO0FBQUEsRUFDQSxJQUFBO0FBQUEsRUFDRCxJQUFPLEdBQUEsQ0FBQTtBQUFBLEVBQ1AsVUFBQSxHQUFxQixLQUFLLGdCQUFpQixFQUFBO0FBQUE7QUFBQSxFQUczQyxHQUFNLEdBQUEsSUFBQTtBQUFBLEVBQ04sS0FBUSxHQUFBLENBQUE7QUFBQSxFQUVSLFdBQVksQ0FBQSxFQUFFLEVBQUksRUFBQSxJQUFBLEVBQU0sTUFBbUIsRUFBQTtBQUM5QyxJQUFBLElBQUEsQ0FBSyxFQUFLLEdBQUEsRUFBQTtBQUNWLElBQUEsSUFBQSxDQUFLLElBQU8sR0FBQSxJQUFBO0FBQ1osSUFBSSxJQUFBLElBQUEsT0FBVyxJQUFPLEdBQUEsSUFBQTtBQUV0QixJQUFLLElBQUEsQ0FBQSxTQUFBLEdBQWFBLHdCQUFrQixJQUFJLENBQUE7QUFBQTtB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