@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
47 lines (46 loc) • 5.91 kB
JavaScript
import BinaryStream from "@jsprismarine/jsbinaryutils";
import * as BedrockData from "@jsprismarine/bedrock-data";
import { ByteOrder, NBTReader } from "@jsprismarine/nbt";
import { gunzipSync } from "zlib";
//#region src/block/BlockMappings.ts
/**
* Class used to manage runtime Ids.
*/
var BlockMappings = class {
static nameToRuntime = /* @__PURE__ */ new Map();
static runtimeToName = /* @__PURE__ */ new Map();
static async initMappings(server) {
try {
const reader = new NBTReader(new BinaryStream(gunzipSync(BedrockData.canonical_block_states)), 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);
return {
id: BedrockData.block_id_map[name] & 15,
meta: 0
};
}
};
//#endregion
export { BlockMappings };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2tNYXBwaW5ncy5lcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvY2svQmxvY2tNYXBwaW5ncy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE5CVFRhZ0NvbXBvdW5kIH0gZnJvbSAnQGpzcHJpc21hcmluZS9uYnQnO1xuaW1wb3J0IHsgQnl0ZU9yZGVyLCBOQlRSZWFkZXIgfSBmcm9tICdAanNwcmlzbWFyaW5lL25idCc7XG5cbmltcG9ydCAqIGFzIEJlZHJvY2tEYXRhIGZyb20gJ0Bqc3ByaXNtYXJpbmUvYmVkcm9jay1kYXRhJztcbmltcG9ydCBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCB7IGd1bnppcFN5bmMgfSBmcm9tICd6bGliJztcbmltcG9ydCB0eXBlIFNlcnZlciBmcm9tICcuLi9TZXJ2ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeUlkIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG1ldGE6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDbGFzcyB1c2VkIHRvIG1hbmFnZSBydW50aW1lIElkcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJsb2NrTWFwcGluZ3Mge1xuICAgIC8vIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGxlZ2FjeVRvUnVudGltZUlkOiBNYXA8bnVtYmVyLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8vIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHJ1bnRpbWVJZFRvTGVnYWN5OiBNYXA8bnVtYmVyLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8vIGJsb2NrIG5hbWUgLT4gcnVudGltZUlkICh3aWxsIG5vdCBzdXBwb3J0IHN0YXRlcyBmb3Igbm93IDooLi4uKVxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IG5hbWVUb1J1bnRpbWU6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcnVudGltZVRvTmFtZTogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXAoKTtcblxuICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgaW5pdE1hcHBpbmdzKHNlcnZlcjogU2VydmVyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBuZXcgQmluYXJ5U3RyZWFtKFxuICAgICAgICAgICAgICAgIGd1bnppcFN5bmMoQmVkcm9ja0RhdGEuY2Fub25pY2FsX2Jsb2NrX3N0YXRlcykgLy8gVmFuaWxsYSBzdGF0ZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCByZWFkZXI6IE5CVFJlYWRlciA9IG5ldyBOQlRSZWFkZXIoc3RyZWFtLCBCeXRlT3JkZXIuQklHX0VORElBTik7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYmxvY2tUYWcgb2YgcmVhZGVyLnBhcnNlTGlzdDxOQlRUYWdDb21wb3VuZD4oKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBibG9ja1RhZy5nZXRTdHJpbmcoJ25hbWUnLCAnbWluZWNyYWZ0OmFpcicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bnRpbWVJZCA9IGJsb2NrVGFnLmdldE51bWJlcigncnVudGltZUlkJywgMCk7IC8vIFRPRE86IEFpciBydW50aW1lIElEXG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlck1hcHBpbmcobmFtZSwgcnVudGltZUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgIHNlcnZlci5nZXRMb2dnZXIoKS5lcnJvcignRmFpbGVkIHRvIGxvYWQgYmxvY2sgbWFwcGluZ3MnKTtcbiAgICAgICAgICAgIHNlcnZlci5nZXRMb2dnZXIoKS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlc2V0KCkge1xuICAgICAgICB0aGlzLm5hbWVUb1J1bnRpbWUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5ydW50aW1lVG9OYW1lLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVnaXN0ZXJNYXBwaW5nKG5hbWU6IHN0cmluZywgcnVudGltZUlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYW1lVG9SdW50aW1lLnNldChuYW1lLCBydW50aW1lSWQpO1xuICAgICAgICB0aGlzLnJ1bnRpbWVUb05hbWUuc2V0KHJ1bnRpbWVJZCwgbmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRSdW50aW1lSWQobmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBuYW1lID8gdGhpcy5uYW1lVG9SdW50aW1lLmdldChuYW1lKSEgOiAwOyAvLyBUT0RPOiBBaXIgcnVudGltZSBJRFxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TGVnYWN5SWQocnVudGltZUlkOiBudW1iZXIpOiBMZWdhY3lJZCB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnJ1bnRpbWVUb05hbWUuZ2V0KHJ1bnRpbWVJZCkhO1xuICAgICAgICBjb25zdCBsZWdhY3lJZCA9IChCZWRyb2NrRGF0YSBhcyBhbnkpLmJsb2NrX2lkX21hcFtuYW1lXSBhcyBudW1iZXI7XG4gICAgICAgIC8vIFRPRE86IHByb3BlciBtZXRhXG4gICAgICAgIHJldHVybiA8TGVnYWN5SWQ+eyBpZDogbGVnYWN5SWQgJiAweGYsIG1ldGE6IDAgfTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBZ0JBLElBQWEsZ0JBQWIsTUFBMkI7Q0FJdkIsT0FBd0IsZ0NBQXFDLElBQUksSUFBSTtDQUNyRSxPQUF3QixnQ0FBcUMsSUFBSSxJQUFJO0NBRXJFLGFBQW9CLGFBQWEsUUFBZ0I7RUFDN0MsSUFBSTtHQUlBLE1BQU0sU0FBb0IsSUFBSSxVQUFVLElBSHJCLGFBQ2YsV0FBVyxZQUFZLHNCQUFzQixDQUVULEdBQVEsVUFBVSxVQUFVO0dBRXBFLEtBQUssTUFBTSxZQUFZLE9BQU8sVUFBMEIsR0FBRztJQUN2RCxNQUFNLE9BQU8sU0FBUyxVQUFVLFFBQVEsZUFBZTtJQUN2RCxNQUFNLFlBQVksU0FBUyxVQUFVLGFBQWEsQ0FBQztJQUNuRCxLQUFLLGdCQUFnQixNQUFNLFNBQVM7R0FDeEM7RUFDSixTQUFTLE9BQWdCO0dBQ3JCLE9BQU8sVUFBVSxFQUFFLE1BQU0sK0JBQStCO0dBQ3hELE9BQU8sVUFBVSxFQUFFLE1BQU0sS0FBSztFQUNsQztDQUNKO0NBRUEsT0FBYyxRQUFRO0VBQ2xCLEtBQUssY0FBYyxNQUFNO0VBQ3pCLEtBQUssY0FBYyxNQUFNO0NBQzdCO0NBRUEsT0FBZSxnQkFBZ0IsTUFBYyxXQUF5QjtFQUNsRSxLQUFLLGNBQWMsSUFBSSxNQUFNLFNBQVM7RUFDdEMsS0FBSyxjQUFjLElBQUksV0FBVyxJQUFJO0NBQzFDO0NBRUEsT0FBYyxhQUFhLE1BQXlDO0VBQ2hFLE9BQU8sT0FBTyxLQUFLLGNBQWMsSUFBSSxJQUFJLElBQUs7Q0FDbEQ7Q0FFQSxPQUFjLFlBQVksV0FBNkI7RUFDbkQsTUFBTSxPQUFPLEtBQUssY0FBYyxJQUFJLFNBQVM7RUFHN0MsT0FBaUI7R0FBRSxJQUZELFlBQW9CLGFBQWEsUUFFakI7R0FBSyxNQUFNO0VBQUU7Q0FDbkQ7QUFDSiJ9