UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

73 lines (70 loc) 13.3 kB
import { literal, argument, string, greedyString } from '@jsprismarine/brigadier'; import { Command } from '../Command.es.js'; class DebugCommand extends Command { constructor() { super({ id: "jsprismarine:debug", description: "Debug output.", permission: "jsprismarine.command.debug" }); } async register(dispatcher) { dispatcher.register( literal("debug").then( argument("action", string()).then( argument("value", greedyString()).executes(async (context) => { const source = context.getSource(); const action = context.getArgument("action"); const value = context.getArgument("value"); switch (action) { case "loadWorld": { const worldData = source.getServer().getConfig().getWorlds()[value]; const world = await source.getServer().getWorldManager().loadWorld(worldData, value); return `Loaded world ${world.getName()}`; } case "changeWorld": { const world = source.getServer().getWorldManager().getWorldByName(value); await source.setWorld(world); return `Moved ${source.getFormattedUsername()} to ${world.getName()}`; } case "setConfig": { const config = value.split(" ")[0]; const data = value.replace(`${config} `, ""); source.getServer().getConfig()[config] = data; return `Set config ${config} to ${data}`; } default: { throw new Error("Invalid action!"); } } }) ) ).executes(async (context) => { const source = context.getSource(); const worlds = source.getServer().getWorldManager().getWorlds(); await source.sendMessage(`§dWorlds Loaded§r (${worlds.length}):`); for (const world of worlds) { await source.sendMessage( `- uuid: §a${world.getUUID()}§r, name: §b${world.getName()}§r, ticks: §b${world.getTicks()}§r` ); const gamerules = Array.from(world.getGameruleManager().getGamerules()); await source.sendMessage(` §dGamerules§r (${gamerules.length}):`); await Promise.all( gamerules.map(async ([id, value]) => { await source.sendMessage(` - id: §a${id}§r, value: §b${value}§r`); }) ); const entities = world.getEntities(); await source.sendMessage(` §dEntities§r (${entities.length}):`); await Promise.all(entities.map(async (e) => source.sendMessage(` - ${e.toString()}`))); } await source.sendMessage(`§dConfig§r:`); await source.sendMessage(` - online-mode: ${source.getServer().getConfig().getOnlineMode()}`); await source.sendMessage(` - max-players: ${source.getServer().getConfig().getMaxPlayers()}`); await source.sendMessage(` - motd: ${source.getServer().getConfig().getMotd()}`); }) ); } } export { DebugCommand as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVidWdDb21tYW5kLmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZC9qc3ByaXNtYXJpbmUvRGVidWdDb21tYW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tbWFuZERpc3BhdGNoZXIgfSBmcm9tICdAanNwcmlzbWFyaW5lL2JyaWdhZGllcic7XG5pbXBvcnQgeyBhcmd1bWVudCwgZ3JlZWR5U3RyaW5nLCBsaXRlcmFsLCBzdHJpbmcgfSBmcm9tICdAanNwcmlzbWFyaW5lL2JyaWdhZGllcic7XG5cbmltcG9ydCB0eXBlIFBsYXllciBmcm9tICcuLi8uLi9QbGF5ZXInO1xuaW1wb3J0IHR5cGUgeyBXb3JsZERhdGEgfSBmcm9tICcuLi8uLi93b3JsZC9Xb3JsZE1hbmFnZXInO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJy4uL0NvbW1hbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWJ1Z0NvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGlkOiAnanNwcmlzbWFyaW5lOmRlYnVnJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRGVidWcgb3V0cHV0LicsXG4gICAgICAgICAgICBwZXJtaXNzaW9uOiAnanNwcmlzbWFyaW5lLmNvbW1hbmQuZGVidWcnXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWdpc3RlcihkaXNwYXRjaGVyOiBDb21tYW5kRGlzcGF0Y2hlcjxhbnk+KSB7XG4gICAgICAgIGRpc3BhdGNoZXIucmVnaXN0ZXIoXG4gICAgICAgICAgICBsaXRlcmFsKCdkZWJ1ZycpXG4gICAgICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50KCdhY3Rpb24nLCBzdHJpbmcoKSkudGhlbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50KCd2YWx1ZScsIGdyZWVkeVN0cmluZygpKS5leGVjdXRlcyhhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGNvbnRleHQuZ2V0U291cmNlKCkgYXMgUGxheWVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGNvbnRleHQuZ2V0QXJndW1lbnQoJ2FjdGlvbicpIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbnRleHQuZ2V0QXJndW1lbnQoJ3ZhbHVlJykgYXMgc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbG9hZFdvcmxkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29ybGREYXRhID0gc291cmNlLmdldFNlcnZlcigpLmdldENvbmZpZygpLmdldFdvcmxkcygpW3ZhbHVlXSBhcyBXb3JsZERhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3b3JsZCA9IGF3YWl0IHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2ZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRXb3JsZE1hbmFnZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5sb2FkV29ybGQod29ybGREYXRhLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYExvYWRlZCB3b3JsZCAke3dvcmxkLmdldE5hbWUoKX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NoYW5nZVdvcmxkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29ybGQgPSBzb3VyY2UuZ2V0U2VydmVyKCkuZ2V0V29ybGRNYW5hZ2VyKCkuZ2V0V29ybGRCeU5hbWUodmFsdWUpITtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNvdXJjZS5zZXRXb3JsZCh3b3JsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE1vdmVkICR7c291cmNlLmdldEZvcm1hdHRlZFVzZXJuYW1lKCl9IHRvICR7d29ybGQuZ2V0TmFtZSgpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2V0Q29uZmlnJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gdmFsdWUuc3BsaXQoJyAnKVswXSE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gdmFsdWUucmVwbGFjZShgJHtjb25maWd9IGAsICcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZS5nZXRTZXJ2ZXIoKS5nZXRDb25maWcoKSBhcyBhbnkpW2NvbmZpZ10gPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBTZXQgY29uZmlnICR7Y29uZmlnfSB0byAke2RhdGF9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYWN0aW9uIScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuZXhlY3V0ZXMoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlID0gY29udGV4dC5nZXRTb3VyY2UoKSBhcyBQbGF5ZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29ybGRzID0gc291cmNlLmdldFNlcnZlcigpLmdldFdvcmxkTWFuYWdlcigpLmdldFdvcmxkcygpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzb3VyY2Uuc2VuZE1lc3NhZ2UoYMKnZFdvcmxkcyBMb2FkZWTCp3IgKCR7d29ybGRzLmxlbmd0aH0pOmApO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHdvcmxkIG9mIHdvcmxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc291cmNlLnNlbmRNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAtIHV1aWQ6IMKnYSR7d29ybGQuZ2V0VVVJRCgpfcKnciwgbmFtZTogwqdiJHt3b3JsZC5nZXROYW1lKCl9wqdyLCB0aWNrczogwqdiJHt3b3JsZC5nZXRUaWNrcygpfcKncmBcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdhbWVydWxlcyA9IEFycmF5LmZyb20od29ybGQuZ2V0R2FtZXJ1bGVNYW5hZ2VyKCkuZ2V0R2FtZXJ1bGVzKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc291cmNlLnNlbmRNZXNzYWdlKGAgIMKnZEdhbWVydWxlc8KnciAoJHtnYW1lcnVsZXMubGVuZ3RofSk6YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYW1lcnVsZXMubWFwKGFzeW5jIChbaWQsIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBzb3VyY2Uuc2VuZE1lc3NhZ2UoYCAgLSBpZDogwqdhJHtpZH3Cp3IsIHZhbHVlOiDCp2Ike3ZhbHVlfcKncmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRpdGllcyA9IHdvcmxkLmdldEVudGl0aWVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBzb3VyY2Uuc2VuZE1lc3NhZ2UoYCAgwqdkRW50aXRpZXPCp3IgKCR7ZW50aXRpZXMubGVuZ3RofSk6YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChlbnRpdGllcy5tYXAoYXN5bmMgKGUpID0+IHNvdXJjZS5zZW5kTWVzc2FnZShgICAtICR7ZS50b1N0cmluZygpfWApKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzb3VyY2Uuc2VuZE1lc3NhZ2UoYMKnZENvbmZpZ8KncjpgKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc291cmNlLnNlbmRNZXNzYWdlKGAgIC0gb25saW5lLW1vZGU6ICR7c291cmNlLmdldFNlcnZlcigpLmdldENvbmZpZygpLmdldE9ubGluZU1vZGUoKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc291cmNlLnNlbmRNZXNzYWdlKGAgIC0gbWF4LXBsYXllcnM6ICR7c291cmNlLmdldFNlcnZlcigpLmdldENvbmZpZygpLmdldE1heFBsYXllcnMoKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc291cmNlLnNlbmRNZXNzYWdlKGAgIC0gbW90ZDogJHtzb3VyY2UuZ2V0U2VydmVyKCkuZ2V0Q29uZmlnKCkuZ2V0TW90ZCgpfWApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLE1BQXFCLHFCQUFxQixPQUFRLENBQUE7QUFBQSxFQUN2QyxXQUFjLEdBQUE7QUFDakIsSUFBTSxLQUFBLENBQUE7QUFBQSxNQUNGLEVBQUksRUFBQSxvQkFBQTtBQUFBLE1BQ0osV0FBYSxFQUFBLGVBQUE7QUFBQSxNQUNiLFVBQVksRUFBQTtBQUFBLEtBQ2YsQ0FBQTtBQUFBO0FBQ0wsRUFFQSxNQUFhLFNBQVMsVUFBb0MsRUFBQTtBQUN0RCxJQUFXLFVBQUEsQ0FBQSxRQUFBO0FBQUEsTUFDUCxPQUFBLENBQVEsT0FBTyxDQUNWLENBQUEsSUFBQTtBQUFBLFFBQ0csUUFBUyxDQUFBLFFBQUEsRUFBVSxNQUFPLEVBQUMsQ0FBRSxDQUFBLElBQUE7QUFBQSxVQUN6QixTQUFTLE9BQVMsRUFBQSxZQUFBLEVBQWMsQ0FBRSxDQUFBLFFBQUEsQ0FBUyxPQUFPLE9BQVksS0FBQTtBQUMxRCxZQUFNLE1BQUEsTUFBQSxHQUFTLFFBQVEsU0FBVSxFQUFBO0FBQ2pDLFlBQU0sTUFBQSxNQUFBLEdBQVMsT0FBUSxDQUFBLFdBQUEsQ0FBWSxRQUFRLENBQUE7QUFDM0MsWUFBTSxNQUFBLEtBQUEsR0FBUSxPQUFRLENBQUEsV0FBQSxDQUFZLE9BQU8sQ0FBQTtBQUV6QyxZQUFBLFFBQVEsTUFBUTtBQUFBLGNBQ1osS0FBSyxXQUFhLEVBQUE7QUFDZCxnQkFBTSxNQUFBLFNBQUEsR0FBWSxPQUFPLFNBQVUsRUFBQSxDQUFFLFdBQVksQ0FBQSxTQUFBLEdBQVksS0FBSyxDQUFBO0FBQ2xFLGdCQUFNLE1BQUEsS0FBQSxHQUFRLE1BQU0sTUFDZixDQUFBLFNBQUEsR0FDQSxlQUFnQixFQUFBLENBQ2hCLFNBQVUsQ0FBQSxTQUFBLEVBQVcsS0FBSyxDQUFBO0FB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