UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

76 lines (68 loc) 7.81 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 Zlib = require('zlib'); const _interopDefault = e => e && e.__esModule ? e : { default: e }; function _interopNamespace(e) { if (e && e.__esModule) return e; const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } }); if (e) { for (const k in e) { if (k !== 'default') { const d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: () => e[k] }); } } } n.default = e; return Object.freeze(n); } const BedrockData__namespace = /*#__PURE__*/_interopNamespace(BedrockData); const BinaryStream__default = /*#__PURE__*/_interopDefault(BinaryStream); class BlockMappings { // private static readonly legacyToRuntimeId: Map<number, number> = new Map(); // private static readonly runtimeIdToLegacy: Map<number, number> = new Map(); // block name -> runtimeId (will not support states for now :(...) static nameToRuntime = /* @__PURE__ */ new Map(); static runtimeToName = /* @__PURE__ */ new Map(); static async initMappings(server) { try { const stream = new BinaryStream__default.default( Zlib.gunzipSync(BedrockData__namespace.canonical_block_states) // Vanilla states ); const reader = new nbt.NBTReader(stream, nbt.ByteOrder.BIG_ENDIAN); for (const blockTag of reader.parseList()) { const name = blockTag.getString("name", "minecraft:air"); const runtimeId = blockTag.getNumber("runtimeId", 0); this.registerMapping(name, runtimeId); } } catch (error) { server.getLogger().error("Failed to load block mappings"); server.getLogger().error(error); } } static reset() { this.nameToRuntime.clear(); this.runtimeToName.clear(); } static registerMapping(name, runtimeId) { this.nameToRuntime.set(name, runtimeId); this.runtimeToName.set(runtimeId, name); } static getRuntimeId(name) { return name ? this.nameToRuntime.get(name) : 0; } static getLegacyId(runtimeId) { const name = this.runtimeToName.get(runtimeId); const legacyId = BedrockData__namespace.block_id_map[name]; return { id: legacyId & 15, meta: 0 }; } } exports.BlockMappings = BlockMappings; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2tNYXBwaW5ncy5janMuY2pzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvY2svQmxvY2tNYXBwaW5ncy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE5CVFRhZ0NvbXBvdW5kIH0gZnJvbSAnQGpzcHJpc21hcmluZS9uYnQnO1xuaW1wb3J0IHsgQnl0ZU9yZGVyLCBOQlRSZWFkZXIgfSBmcm9tICdAanNwcmlzbWFyaW5lL25idCc7XG5cbmltcG9ydCAqIGFzIEJlZHJvY2tEYXRhIGZyb20gJ0Bqc3ByaXNtYXJpbmUvYmVkcm9jay1kYXRhJztcbmltcG9ydCBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCB7IGd1bnppcFN5bmMgfSBmcm9tICd6bGliJztcbmltcG9ydCB0eXBlIFNlcnZlciBmcm9tICcuLi9TZXJ2ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeUlkIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG1ldGE6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDbGFzcyB1c2VkIHRvIG1hbmFnZSBydW50aW1lIElkcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJsb2NrTWFwcGluZ3Mge1xuICAgIC8vIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGxlZ2FjeVRvUnVudGltZUlkOiBNYXA8bnVtYmVyLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8vIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHJ1bnRpbWVJZFRvTGVnYWN5OiBNYXA8bnVtYmVyLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8vIGJsb2NrIG5hbWUgLT4gcnVudGltZUlkICh3aWxsIG5vdCBzdXBwb3J0IHN0YXRlcyBmb3Igbm93IDooLi4uKVxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IG5hbWVUb1J1bnRpbWU6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcnVudGltZVRvTmFtZTogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXAoKTtcblxuICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgaW5pdE1hcHBpbmdzKHNlcnZlcjogU2VydmVyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBuZXcgQmluYXJ5U3RyZWFtKFxuICAgICAgICAgICAgICAgIGd1bnppcFN5bmMoQmVkcm9ja0RhdGEuY2Fub25pY2FsX2Jsb2NrX3N0YXRlcykgLy8gVmFuaWxsYSBzdGF0ZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCByZWFkZXI6IE5CVFJlYWRlciA9IG5ldyBOQlRSZWFkZXIoc3RyZWFtLCBCeXRlT3JkZXIuQklHX0VORElBTik7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYmxvY2tUYWcgb2YgcmVhZGVyLnBhcnNlTGlzdDxOQlRUYWdDb21wb3VuZD4oKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBibG9ja1RhZy5nZXRTdHJpbmcoJ25hbWUnLCAnbWluZWNyYWZ0OmFpcicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bnRpbWVJZCA9IGJsb2NrVGFnLmdldE51bWJlcigncnVudGltZUlkJywgMCk7IC8vIFRPRE86IEFpciBydW50aW1lIElEXG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlck1hcHBpbmcobmFtZSwgcnVudGltZUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgIHNlcnZlci5nZXRMb2dnZXIoKS5lcnJvcignRmFpbGVkIHRvIGxvYWQgYmxvY2sgbWFwcGluZ3MnKTtcbiAgICAgICAgICAgIHNlcnZlci5nZXRMb2dnZXIoKS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlc2V0KCkge1xuICAgICAgICB0aGlzLm5hbWVUb1J1bnRpbWUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5ydW50aW1lVG9OYW1lLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVnaXN0ZXJNYXBwaW5nKG5hbWU6IHN0cmluZywgcnVudGltZUlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYW1lVG9SdW50aW1lLnNldChuYW1lLCBydW50aW1lSWQpO1xuICAgICAgICB0aGlzLnJ1bnRpbWVUb05hbWUuc2V0KHJ1bnRpbWVJZCwgbmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRSdW50aW1lSWQobmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBuYW1lID8gdGhpcy5uYW1lVG9SdW50aW1lLmdldChuYW1lKSEgOiAwOyAvLyBUT0RPOiBBaXIgcnVudGltZSBJRFxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TGVnYWN5SWQocnVudGltZUlkOiBudW1iZXIpOiBMZWdhY3lJZCB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnJ1bnRpbWVUb05hbWUuZ2V0KHJ1bnRpbWVJZCkhO1xuICAgICAgICBjb25zdCBsZWdhY3lJZCA9IChCZWRyb2NrRGF0YSBhcyBhbnkpLmJsb2NrX2lkX21hcFtuYW1lXSBhcyBudW1iZXI7XG4gICAgICAgIC8vIFRPRE86IHByb3BlciBtZXRhXG4gICAgICAgIHJldHVybiA8TGVnYWN5SWQ+eyBpZDogbGVnYWN5SWQgJiAweGYsIG1ldGE6IDAgfTtcbiAgICB9XG59XG4iXSwibmFtZXMiOlsiQmluYXJ5U3RyZWFtIiwiZ3VuemlwU3luYyIsIkJlZHJvY2tEYXRhIiwiTkJUUmVhZGVyIiwiQnl0ZU9yZGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCTyxNQUFNLGFBQWMsQ0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSXZCLE9BQXdCLGFBQXFDLG1CQUFBLElBQUksR0FBSSxFQUFBO0FBQUEsRUFDckUsT0FBd0IsYUFBcUMsbUJBQUEsSUFBSSxHQUFJLEVBQUE7QUFBQSxFQUVyRSxhQUFvQixhQUFhLE1BQWdCLEVBQUE7QUFDN0MsSUFBSSxJQUFBO0FBQ0EsTUFBQSxNQUFNLFNBQVMsSUFBSUEsNkJBQUE7QUFBQSxRQUNmQyxlQUFBLENBQVdDLHVCQUFZLHNCQUFzQjtBQUFBO0FBQUEsT0FDakQ7QUFDQSxNQUFBLE1BQU0sTUFBb0IsR0FBQSxJQUFJQyxhQUFVLENBQUEsTUFBQSxFQUFRQyxjQUFVLFVBQVUsQ0FBQTtBQUVwRSxNQUFXLEtBQUEsTUFBQSxRQUFBLElBQVksTUFBTyxDQUFBLFNBQUEsRUFBNkIsRUFBQTtBQUN2RCxRQUFBLE1BQU0sSUFBTyxHQUFBLFFBQUEsQ0FBUyxTQUFVLENBQUEsTUFBQSxFQUFRLGVBQWUsQ0FBQTtBQUN2RCxRQUFBLE1BQU0sU0FBWSxHQUFBLFFBQUEsQ0FBUyxTQUFVLENBQUEsV0FBQSxFQUFhLENBQUMsQ0FBQTtBQUNuRCxRQUFLLElBQUEsQ0FBQSxlQUFBLENBQWdCLE1BQU0sU0FBUyxDQUFBO0FBQUE7QUFDeEMsYUFDSyxLQUFnQixFQUFBO0FBQ3JCLE1BQU8sTUFBQSxDQUFBLFNBQUEsRUFBWSxDQUFBLEtBQUEsQ0FBTSwrQkFBK0IsQ0FBQTtBQUN4RCxNQUFPLE1BQUEsQ0FBQSxTQUFBLEVBQVksQ0FBQSxLQUFBLENBQU0sS0FBSyxDQUFBO0FBQUE7QUFDbEM7QUFDSixFQUVBLE9BQWMsS0FBUSxHQUFBO0FBQ2xCLElBQUEsSUFBQSxDQUFLLGNBQWMsS0FBTSxFQUFBO0FBQ3pCLElBQUEsSUFBQSxDQUFLLGNBQWMsS0FBTSxFQUFBO0FBQUE7QUFDN0IsRUFFQSxPQUFlLGVBQWdCLENBQUEsSUFBQSxFQUFjLFNBQXlCLEVBQUE7QUFDbEUsSUFBSyxJQUFBLENBQUEsYUFBQSxDQUFjLEdBQUksQ0FBQSxJQUFBLEVBQU0sU0FBUyxDQUFBO0FBQ3RDLElBQUssSUFBQSxDQUFBLGFBQUEsQ0FBYyxHQUFJLENBQUEsU0FBQSxFQUFXLElBQUksQ0FBQTtBQUFBO0FBQzFDLEVBRUEsT0FBYyxhQUFhLElBQXlDLEVBQUE7QUFDaEUsSUFBQSxPQUFPLElBQU8sR0FBQSxJQUFBLENBQUssYUFBYyxDQUFBLEdBQUEsQ0FBSSxJQUFJLENBQUssR0FBQSxDQUFBO0FBQUE7QUFDbEQsRUFFQSxPQUFjLFlBQVksU0FBNkIsRUFBQTtBQUNuRCxJQUFBLE1BQU0sSUFBTyxHQUFBLElBQUEsQ0FBSyxhQUFjLENBQUEsR0FBQSxDQUFJLFNBQVMsQ0FBQTtBQUM3QyxJQUFNLE1BQUEsUUFBQSxHQUFZRixzQkFBb0IsQ0FBQSxZQUFBLENBQWEsSUFBSSxDQUFBO0FBRXZELElBQUEsT0FBaUIsRUFBRSxFQUFBLEVBQUksUUFBVyxHQUFBLEVBQUEsRUFBSyxNQUFNLENBQUUsRUFBQTtBQUFBO0FBRXZEOzs7OyJ9