UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

195 lines (190 loc) • 15.9 kB
'use strict'; Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const BedrockData = require('@jsprismarine/bedrock-data'); const item_ItemEnchantmentType = require('../item/ItemEnchantmentType.cjs.cjs'); const item_ItemTieredToolType = require('../item/ItemTieredToolType.cjs.cjs'); const block_BlockToolType = require('./BlockToolType.cjs.cjs'); class Block { /** * The block's numeric block ID. */ id; /** * The block's namespaced block ID. */ name; /** * The block's java-edition namespaced block ID. */ javaName; hardness; meta = 0; networkId; // TODO nbt = null; count = 1; constructor({ id, name, javaName, parentName, hardness }) { Object.setPrototypeOf(this, Block.prototype); this.id = id; this.name = name; this.javaName = javaName ?? name; this.hardness = hardness ?? 0; this.networkId = BedrockData.item_id_map[parentName ?? name]; } get [Symbol.toStringTag]() { return `Block(${this.toString()})`; } toString() { return this.name; } /** * Get the Block's namespaced id. */ getName() { return this.name; } /** * Get the Block's meta value. */ getMeta() { return this.meta; } /** * Get the Block's numeric id. * * @returns The block's numeric ID. */ getId() { return this.id; } /** * Get the Block's network numeric id. */ getNetworkId() { return this.networkId || this.getId(); } /** * Get the Block's hardness value. */ getHardness() { return this.hardness; } /** * Get the Block's break time. */ getBreakTime(_item, _server) { return this.getHardness(); } /** * Get the Block's blast resistance. */ getBlastResistance() { return this.getHardness() * 5; } /** * Get the Block's light level emission. */ getLightLevel() { return 0; } /** * Get the Block's flammability. */ getFlammability() { return 0; } /** * Get the Block's required tool type. */ getToolType() { return [block_BlockToolType.BlockToolType.None]; } /** * Get the Block's required item tool tier. */ getToolHarvestLevel() { return item_ItemTieredToolType.ItemTieredToolType.None; } /** * Get the Block's drop(s) if the tool is compatible. */ getDropsForCompatibleTool(_item, _server) { return [this]; } /** * Get the Block's drop(s) from the current item. */ getDrops(item, server) { if (this.isCompatibleWithTool(item)) { if (this.isAffectedBySilkTouch() && item?.hasEnchantment(item_ItemEnchantmentType.ItemEnchantmentType.SilkTouch)) return this.getSilkTouchDrops(item, server); return this.getDropsForCompatibleTool(item, server); } return []; } /** * Get the Block's drop(s) if silk touch is used. */ getSilkTouchDrops(_item, _server) { return [this]; } getLightFilter() { return 15; } canPassThrough() { return false; } /** * Sets if the block can be replaced when place action occurs on it. */ canBeReplaced() { return false; } canBePlaced() { return true; } canBeFlowedInto() { return false; } isTransparent() { return false; } /** * Check if the block is breakable. * * @returns `true` if the block is breakable otherwise `false`. */ isBreakable() { return true; } /** * Check if the block is solid. * * @returns `true` if the block is solid otherwise `false`. */ isSolid() { return false; } isCompatibleWithTool(item) { const toolType = this.getToolType(); const harvestLevel = this.getToolHarvestLevel(); if (toolType.includes(block_BlockToolType.BlockToolType.None) || harvestLevel <= 0) return true; if (!item) return false; if (toolType.includes(item.getToolType()) && item.getToolHarvestLevel() >= harvestLevel) return true; return false; } isAffectedBySilkTouch() { return true; } isPartOfCreativeInventory() { return true; } } exports.Block = Block; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2suY2pzLmNqcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jsb2NrL0Jsb2NrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGl0ZW1faWRfbWFwIGFzIEJsb2NrSWRNYXAgfSBmcm9tICdAanNwcmlzbWFyaW5lL2JlZHJvY2stZGF0YSc7XG5pbXBvcnQgdHlwZSBTZXJ2ZXIgZnJvbSAnLi4vU2VydmVyJztcbmltcG9ydCB0eXBlIHsgSXRlbSB9IGZyb20gJy4uL2l0ZW0vSXRlbSc7XG5pbXBvcnQgeyBJdGVtRW5jaGFudG1lbnRUeXBlIH0gZnJvbSAnLi4vaXRlbS9JdGVtRW5jaGFudG1lbnRUeXBlJztcbmltcG9ydCB7IEl0ZW1UaWVyZWRUb29sVHlwZSB9IGZyb20gJy4uL2l0ZW0vSXRlbVRpZXJlZFRvb2xUeXBlJztcbmltcG9ydCB7IEJsb2NrVG9vbFR5cGUgfSBmcm9tICcuL0Jsb2NrVG9vbFR5cGUnO1xuXG5leHBvcnQgY2xhc3MgQmxvY2sge1xuICAgIC8qKlxuICAgICAqIFRoZSBibG9jaydzIG51bWVyaWMgYmxvY2sgSUQuXG4gICAgICovXG4gICAgcHVibGljIGlkOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxvY2sncyBuYW1lc3BhY2VkIGJsb2NrIElELlxuICAgICAqL1xuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxvY2sncyBqYXZhLWVkaXRpb24gbmFtZXNwYWNlZCBibG9jayBJRC5cbiAgICAgKi9cbiAgICBwdWJsaWMgamF2YU5hbWU6IHN0cmluZztcbiAgICBwdWJsaWMgaGFyZG5lc3M6IG51bWJlcjtcbiAgICBwdWJsaWMgbWV0YSA9IDA7XG4gICAgcHJpdmF0ZSBuZXR3b3JrSWQ6IG51bWJlcjtcblxuICAgIC8vIFRPRE9cbiAgICBwdWJsaWMgbmJ0ID0gbnVsbDtcbiAgICBwdWJsaWMgY291bnQgPSAxO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHtcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGphdmFOYW1lLFxuICAgICAgICBwYXJlbnROYW1lLFxuICAgICAgICBoYXJkbmVzc1xuICAgIH06IHtcbiAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBqYXZhTmFtZT86IHN0cmluZztcbiAgICAgICAgcGFyZW50TmFtZT86IHN0cmluZztcbiAgICAgICAgaGFyZG5lc3M/OiBudW1iZXI7XG4gICAgfSkge1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgQmxvY2sucHJvdG90eXBlKTtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmphdmFOYW1lID0gamF2YU5hbWUgPz8gbmFtZTtcbiAgICAgICAgdGhpcy5oYXJkbmVzcyA9IGhhcmRuZXNzID8/IDA7XG5cbiAgICAgICAgdGhpcy5uZXR3b3JrSWQgPSAoQmxvY2tJZE1hcCBhcyBhbnkpW3BhcmVudE5hbWUgPz8gbmFtZV0gYXMgbnVtYmVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgIHJldHVybiBgQmxvY2soJHt0aGlzLnRvU3RyaW5nKCl9KWA7XG4gICAgfVxuICAgIHB1YmxpYyB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIEJsb2NrJ3MgbmFtZXNwYWNlZCBpZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIEJsb2NrJ3MgbWV0YSB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TWV0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIEJsb2NrJ3MgbnVtZXJpYyBpZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBibG9jaydzIG51bWVyaWMgSUQuXG4gICAgICovXG4gICAgcHVibGljIGdldElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIEJsb2NrJ3MgbmV0d29yayBudW1lcmljIGlkLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROZXR3b3JrSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ldHdvcmtJZCB8fCB0aGlzLmdldElkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBCbG9jaydzIGhhcmRuZXNzIHZhbHVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRIYXJkbmVzcygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXJkbmVzcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIEJsb2NrJ3MgYnJlYWsgdGltZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QnJlYWtUaW1lKF9pdGVtOiBJdGVtIHwgbnVsbCwgX3NlcnZlcjogU2VydmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhhcmRuZXNzKCk7IC8vIFRPRE86IEZpeCBicmVhayB0aW1lIGNhbGN1bGF0aW9uc1xuXG4gICAgICAgIC8qIGxldCBiYXNlID0gdGhpcy5nZXRIYXJkbmVzcygpO1xuICAgICAgICBiYXNlICo9IHRoaXMuaXNDb21wYXRpYmxlV2l0aFRvb2woaXRlbSkgPyAxLjUgOiA1O1xuICAgICAgICBjb25zdCBlZmZpY2llbmN5ID0gMTsgLy8gSXRlbS5nZXRNaW5pbmdFZmZpY2llbmN5KHRoaXMpO1xuICAgICAgICByZXR1cm4gKGJhc2UgLz0gZWZmaWNpZW5jeSk7ICovXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBCbG9jaydzIGJsYXN0IHJlc2lzdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGdldEJsYXN0UmVzaXN0YW5jZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SGFyZG5lc3MoKSAqIDU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBCbG9jaydzIGxpZ2h0IGxldmVsIGVtaXNzaW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRMaWdodExldmVsKCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIEJsb2NrJ3MgZmxhbW1hYmlsaXR5LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRGbGFtbWFiaWxpdHkoKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgQmxvY2sncyByZXF1aXJlZCB0b29sIHR5cGUuXG4gICAgICovXG4gICAgcHVibGljIGdldFRvb2xUeXBlKCk6IEJsb2NrVG9vbFR5cGVbXSB7XG4gICAgICAgIHJldHVybiBbQmxvY2tUb29sVHlwZS5Ob25lXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIEJsb2NrJ3MgcmVxdWlyZWQgaXRlbSB0b29sIHRpZXIuXG4gICAgICovXG4gICAgcHVibGljIGdldFRvb2xIYXJ2ZXN0TGV2ZWwoKTogSXRlbVRpZXJlZFRvb2xUeXBlIHtcbiAgICAgICAgcmV0dXJuIEl0ZW1UaWVyZWRUb29sVHlwZS5Ob25lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgQmxvY2sncyBkcm9wKHMpIGlmIHRoZSB0b29sIGlzIGNvbXBhdGlibGUuXG4gICAgICovXG4gICAgcHVibGljIGdldERyb3BzRm9yQ29tcGF0aWJsZVRvb2woX2l0ZW06IEl0ZW0gfCBudWxsLCBfc2VydmVyOiBTZXJ2ZXIpOiBBcnJheTxCbG9jayB8IEl0ZW0gfCBudWxsPiB7XG4gICAgICAgIHJldHVybiBbdGhpc107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBCbG9jaydzIGRyb3AocykgZnJvbSB0aGUgY3VycmVudCBpdGVtLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXREcm9wcyhpdGVtOiBJdGVtIHwgbnVsbCwgc2VydmVyOiBTZXJ2ZXIpOiBBcnJheTxCbG9jayB8IEl0ZW0gfCBudWxsPiB7XG4gICAgICAgIGlmICh0aGlzLmlzQ29tcGF0aWJsZVdpdGhUb29sKGl0ZW0pKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0FmZmVjdGVkQnlTaWxrVG91Y2goKSAmJiBpdGVtPy5oYXNFbmNoYW50bWVudChJdGVtRW5jaGFudG1lbnRUeXBlLlNpbGtUb3VjaCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2lsa1RvdWNoRHJvcHMoaXRlbSwgc2VydmVyKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJvcHNGb3JDb21wYXRpYmxlVG9vbChpdGVtLCBzZXJ2ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgQmxvY2sncyBkcm9wKHMpIGlmIHNpbGsgdG91Y2ggaXMgdXNlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2lsa1RvdWNoRHJvcHMoX2l0ZW06IEl0ZW0sIF9zZXJ2ZXI6IFNlcnZlcikge1xuICAgICAgICByZXR1cm4gW3RoaXNdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRMaWdodEZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIDE1O1xuICAgIH1cblxuICAgIHB1YmxpYyBjYW5QYXNzVGhyb3VnaCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgaWYgdGhlIGJsb2NrIGNhbiBiZSByZXBsYWNlZCB3aGVuIHBsYWNlIGFjdGlvbiBvY2N1cnMgb24gaXQuXG4gICAgICovXG4gICAgcHVibGljIGNhbkJlUmVwbGFjZWQoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuQmVQbGFjZWQoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYW5CZUZsb3dlZEludG8oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNUcmFuc3BhcmVudCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSBibG9jayBpcyBicmVha2FibGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGJsb2NrIGlzIGJyZWFrYWJsZSBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNCcmVha2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSBibG9jayBpcyBzb2xpZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgYmxvY2sgaXMgc29saWQgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgcHVibGljIGlzU29saWQoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDb21wYXRpYmxlV2l0aFRvb2woaXRlbTogSXRlbSB8IG51bGwpIHtcbiAgICAgICAgY29uc3QgdG9vbFR5cGUgPSB0aGlzLmdldFRvb2xUeXBlKCk7XG4gICAgICAgIGNvbnN0IGhhcnZlc3RMZXZlbCA9IHRoaXMuZ2V0VG9vbEhhcnZlc3RMZXZlbCgpO1xuXG4gICAgICAgIGlmICh0b29sVHlwZS5pbmNsdWRlcyhCbG9ja1Rvb2xUeXBlLk5vbmUpIHx8IGhhcnZlc3RMZXZlbCA8PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0b29sVHlwZS5pbmNsdWRlcyhpdGVtLmdldFRvb2xUeXBlKCkpICYmIGl0ZW0uZ2V0VG9vbEhhcnZlc3RMZXZlbCgpID49IGhhcnZlc3RMZXZlbCkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBZmZlY3RlZEJ5U2lsa1RvdWNoKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNQYXJ0T2ZDcmVhdGl2ZUludmVudG9yeSgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbIkJsb2NrSWRNYXAiLCJCbG9ja1Rvb2xUeXBlIiwiSXRlbVRpZXJlZFRvb2xUeXBlIiwiSXRlbUVuY2hhbnRtZW50VHlwZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBT08sTUFBTSxLQUFNLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlSLEVBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLFFBQUE7QUFBQSxFQUNBLFFBQUE7QUFBQSxFQUNBLElBQU8sR0FBQSxDQUFBO0FBQUEsRUFDTixTQUFBO0FBQUE7QUFBQSxFQUdELEdBQU0sR0FBQSxJQUFBO0FBQUEsRUFDTixLQUFRLEdBQUEsQ0FBQTtBQUFBLEVBRVIsV0FBWSxDQUFBO0FBQUEsSUFDZixFQUFBO0FBQUEsSUFDQSxJQUFBO0FBQUEsSUFDQSxRQUFBO0FBQUEsSUFDQSxVQUFBO0FBQUEsSUFDQTtBQUFBLEdBT0QsRUFBQTtBQUNDLElBQU8sTUFBQSxDQUFBLGNBQUEsQ0FBZSxJQUFNLEVBQUEsS0FBQSxDQUFNLFNBQVMsQ0FBQTtBQUMzQyxJQUFBLElBQUEsQ0FBSyxFQUFLLEdBQUEsRUFBQTtBQUNWLElBQUEsSUFBQSxDQUFLLElBQU8sR0FBQSxJQUFBO0FBQ1osSUFBQSxJQUFBLENBQUssV0FBVyxRQUFZLElBQUEsSUFBQTtBQUM1QixJQUFBLElBQUEsQ0FBSyxXQUFXLFFBQVksSUFBQSxDQUFBO0FBRTVCLElBQUssSUFBQSxD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