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