@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
195 lines (188 loc) • 18.3 kB
JavaScript
;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
const math = require('@jsprismarine/math');
const entity_Entity = require('./entity/Entity.cjs.cjs');
require('./network/packet/ActorFallPacket.cjs.cjs');
require('./network/packet/AddActorPacket.cjs.cjs');
require('./network/packet/AddItemActorPacket.cjs.cjs');
require('./network/packet/AddPlayerPacket.cjs.cjs');
require('./network/packet/AnimatePacket.cjs.cjs');
require('./network/packet/AvailableActorIdentifiersPacket.cjs.cjs');
require('./network/packet/AvailableCommandsPacket.cjs.cjs');
require('@jsprismarine/jsbinaryutils');
require('zlib');
require('./network/CompressionProvider.cjs.cjs');
require('./network/packet/NetworkSettingsPacket.cjs.cjs');
require('./network/packet/BiomeDefinitionListPacket.cjs.cjs');
require('./network/packet/ChangeDimensionPacket.cjs.cjs');
require('./network/packet/ChunkRadiusUpdatedPacket.cjs.cjs');
require('./network/packet/CommandRequestPacket.cjs.cjs');
require('./network/packet/ContainerClosePacket.cjs.cjs');
require('./network/packet/ContainerOpenPacket.cjs.cjs');
require('./network/packet/CreativeContentPacket.cjs.cjs');
require('./network/packet/DisconnectPacket.cjs.cjs');
require('./network/packet/EmoteListPacket.cjs.cjs');
require('./network/packet/InteractPacket.cjs.cjs');
require('./network/packet/InventoryContentPacket.cjs.cjs');
require('./network/packet/InventoryTransactionPacket.cjs.cjs');
require('./network/packet/ItemComponentPacket.cjs.cjs');
require('./network/packet/ItemStackRequestPacket.cjs.cjs');
require('./network/packet/ItemStackResponsePacket.cjs.cjs');
require('./network/packet/LevelChunkPacket.cjs.cjs');
require('./network/packet/LevelSoundEventPacket.cjs.cjs');
require('./network/packet/LoginPacket.cjs.cjs');
require('./network/packet/MobEquipmentPacket.cjs.cjs');
require('./network/packet/MoveActorAbsolutePacket.cjs.cjs');
require('./network/packet/MovePlayerPacket.cjs.cjs');
require('./network/packet/NetworkChunkPublisherUpdatePacket.cjs.cjs');
require('./network/packet/OnScreenTextureAnimationPacket.cjs.cjs');
require('./network/packet/PacketViolationWarningPacket.cjs.cjs');
require('./network/packet/PlaySoundPacket.cjs.cjs');
require('./network/packet/PlayStatusPacket.cjs.cjs');
require('./network/packet/PlayerActionPacket.cjs.cjs');
require('./network/packet/PlayerListPacket.cjs.cjs');
require('./network/packet/PlayerSkinPacket.cjs.cjs');
require('./network/packet/RemoveActorPacket.cjs.cjs');
require('./network/packet/RequestChunkRadiusPacket.cjs.cjs');
require('./network/packet/RequestNetworkSettingsPacket.cjs.cjs');
require('./network/packet/ResourcePackResponsePacket.cjs.cjs');
require('./network/packet/ResourcePackStackPacket.cjs.cjs');
require('./network/packet/ResourcePacksInfoPacket.cjs.cjs');
require('./network/packet/ServerSettingsRequestPacket.cjs.cjs');
require('./network/packet/SetActorDataPacket.cjs.cjs');
require('./network/packet/SetDefaultGametypePacket.cjs.cjs');
require('./network/packet/SetHealthPacket.cjs.cjs');
require('./network/packet/SetLocalPlayerAsInitializedPacket.cjs.cjs');
require('./network/packet/SetPlayerGametypePacket.cjs.cjs');
require('./network/packet/SetTimePacket.cjs.cjs');
require('./network/packet/ShowProfilePacket.cjs.cjs');
require('./network/packet/StartGamePacket.cjs.cjs');
require('./network/packet/TextPacket.cjs.cjs');
require('./network/packet/TickSyncPacket.cjs.cjs');
require('./network/packet/TransferPacket.cjs.cjs');
require('./network/packet/UpdateAdventureSettingsPacket.cjs.cjs');
require('./network/packet/UpdateAttributesPacket.cjs.cjs');
require('./network/packet/UpdateBlockPacket.cjs.cjs');
require('./network/packet/WorldEventPacket.cjs.cjs');
require('@jsprismarine/bedrock-data');
require('./block/BlockToolType.cjs.cjs');
const process = require('node:process');
const readline = require('node:readline');
const _interopDefault = e => e && e.__esModule ? e : { default: e };
const process__default = /*#__PURE__*/_interopDefault(process);
const readline__default = /*#__PURE__*/_interopDefault(readline);
class Console extends entity_Entity.EntityLike {
cli;
constructor(server, runtimeId = BigInt(-1)) {
const world = server.getWorldManager().getDefaultWorld();
super({
server,
runtimeId,
world
});
}
/**
* On enable hook.
* @group Lifecycle
*/
async enable() {
if (this.cli) return;
if (!process__default.default.stdin.setRawMode) {
return;
}
process__default.default.stdin.setRawMode(true);
process__default.default.stdin.setNoDelay(true);
process__default.default.stdin.setKeepAlive(true);
process__default.default.stdin.resume();
this.cli = readline__default.default.createInterface({
input: process__default.default.stdin,
output: process__default.default.stdout,
terminal: true,
prompt: "> ",
tabSize: 4,
removeHistoryDuplicates: true,
completer: this.complete.bind(this)
});
this.server.on("chat", async (evt) => {
if (evt.isCancelled()) return;
await this.sendMessage(evt.getChat().getMessage());
});
this.server.getLogger().setConsole(this);
this.cli.on("keypress", async (_, key) => {
switch (key.name) {
case "c": {
if (key.ctrl) {
await this.server.shutdown();
}
break;
}
}
});
this.cli.on("line", (input) => {
if (input.trim() === "") return;
this.cli?.output.write(`\x1B[2D`);
void this.server.getCommandManager().dispatchCommand(this, this, input);
});
}
/**
* On disable hook.
* @group Lifecycle
*/
async disable() {
this.cli?.close();
this.cli?.removeAllListeners();
}
async complete(line, callback) {
const commands = Array.from(this.server.getCommandManager().getCommands().values()).map(
(command) => command.name
);
const completions = commands.reverse().filter((value, index, self) => self.indexOf(value) === index).reverse();
const hits = completions.filter((c) => c.startsWith(line));
return callback(null, [hits.length ? hits : completions, line]);
}
write(line) {
this.cli?.output.write(`\x1B[${this.cli.getPrompt().length}D`);
this.cli?.output.write(`\r${line}
\r`);
this.cli?._refreshLine?.();
this.cli?.prompt();
}
getName() {
return "CONSOLE";
}
getFormattedUsername() {
return "[CONSOLE]";
}
async sendMessage(message) {
this.server.getLogger().info(message);
}
getWorld() {
return this.server.getWorldManager().getDefaultWorld();
}
isPlayer() {
return false;
}
isOp() {
return true;
}
getX() {
return 0;
}
getY() {
return 0;
}
getZ() {
return 0;
}
getPosition() {
return new math.Vector3(0, 0, 0);
}
getType() {
return "jsprismarine:console";
}
isConsole() {
return true;
}
}
exports.default = Console;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc29sZS5janMuY2pzIiwic291cmNlcyI6WyIuLi9zcmMvQ29uc29sZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnQGpzcHJpc21hcmluZS9tYXRoJztcbmltcG9ydCB0eXBlIHsgU2VydmVyLCBTZXJ2aWNlIH0gZnJvbSAnLi8nO1xuaW1wb3J0IHsgRW50aXR5TGlrZSB9IGZyb20gJy4vZW50aXR5Lyc7XG5pbXBvcnQgdHlwZSBDaGF0RXZlbnQgZnJvbSAnLi9ldmVudHMvY2hhdC9DaGF0RXZlbnQnO1xuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHR5cGUgeyBDb21wbGV0ZXJSZXN1bHQgfSBmcm9tICdub2RlOnJlYWRsaW5lJztcbmltcG9ydCByZWFkbGluZSBmcm9tICdub2RlOnJlYWRsaW5lJztcblxuLy8gRXh0ZW5kIGJ1aWx0aW4gYHJlYWRsaW5lLkludGVyZmFjZWAgdHlwZVxuZGVjbGFyZSBtb2R1bGUgJ25vZGU6cmVhZGxpbmUnIHtcbiAgICBpbnRlcmZhY2UgSW50ZXJmYWNlIHtcbiAgICAgICAgc2V0UmF3TW9kZT8obW9kZTogYm9vbGVhbik6IHZvaWQ7XG4gICAgICAgIG91dHB1dDoge1xuICAgICAgICAgICAgd3JpdGU6IChkYXRhOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgICAgIH07XG4gICAgICAgIGlucHV0OiBhbnk7XG4gICAgICAgIF9yZWZyZXNoTGluZT8oKTogdm9pZDtcbiAgICB9XG59XG5cbi8qKlxuICogU2VydmVyIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnNvbGUgZXh0ZW5kcyBFbnRpdHlMaWtlIGltcGxlbWVudHMgU2VydmljZSB7XG4gICAgcHJpdmF0ZSBjbGk/OiByZWFkbGluZS5JbnRlcmZhY2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2VydmVyOiBTZXJ2ZXIsIHJ1bnRpbWVJZCA9IEJpZ0ludCgtMSkpIHtcbiAgICAgICAgY29uc3Qgd29ybGQgPSBzZXJ2ZXIuZ2V0V29ybGRNYW5hZ2VyKCkuZ2V0RGVmYXVsdFdvcmxkKCkhO1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBzZXJ2ZXIsXG4gICAgICAgICAgICBydW50aW1lSWQsXG4gICAgICAgICAgICB3b3JsZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBlbmFibGUgaG9vay5cbiAgICAgKiBAZ3JvdXAgTGlmZWN5Y2xlXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGVuYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGVuYWJsZSB0aGUgY29uc29sZSB0d2ljZS5cbiAgICAgICAgaWYgKHRoaXMuY2xpKSByZXR1cm47XG5cbiAgICAgICAgaWYgKCFwcm9jZXNzLnN0ZGluLnNldFJhd01vZGUgYXMgYW55KSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgaGVhZGxlc3MgbW9kZXMgYmV0dGVyIChlZyB1bml0IHRlc3RpbmcpLlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvY2Vzcy5zdGRpbi5zZXRSYXdNb2RlKHRydWUpO1xuICAgICAgICBwcm9jZXNzLnN0ZGluLnNldE5vRGVsYXkodHJ1ZSk7XG4gICAgICAgIHByb2Nlc3Muc3RkaW4uc2V0S2VlcEFsaXZlKHRydWUpO1xuICAgICAgICBwcm9jZXNzLnN0ZGluLnJlc3VtZSgpO1xuXG4gICAgICAgIHRoaXMuY2xpID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICAgICAgICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgICAgICAgICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgICAgICAgICAgIHRlcm1pbmFsOiB0cnVlLFxuICAgICAgICAgICAgcHJvbXB0OiAnPiAnLFxuICAgICAgICAgICAgdGFiU2l6ZTogNCxcbiAgICAgICAgICAgIHJlbW92ZUhpc3RvcnlEdXBsaWNhdGVzOiB0cnVlLFxuICAgICAgICAgICAgY29tcGxldGVyOiB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXIub24oJ2NoYXQnLCBhc3luYyAoZXZ0OiBDaGF0RXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldnQuaXNDYW5jZWxsZWQoKSkgcmV0dXJuO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZW5kTWVzc2FnZShldnQuZ2V0Q2hhdCgpLmdldE1lc3NhZ2UoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlcnZlci5nZXRMb2dnZXIoKS5zZXRDb25zb2xlKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuY2xpLm9uKCdrZXlwcmVzcycsIGFzeW5jIChfLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjJzoge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmN0cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VydmVyLnNodXRkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNsaS5vbignbGluZScsIChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5wdXQudHJpbSgpID09PSAnJykgcmV0dXJuO1xuXG4gICAgICAgICAgICAvLyBGaXggY3Vyc29yIHBvc2l0aW9uaW5nLlxuICAgICAgICAgICAgdGhpcy5jbGk/Lm91dHB1dC53cml0ZShgXFx4MWJbMkRgKTtcblxuICAgICAgICAgICAgdm9pZCB0aGlzLnNlcnZlci5nZXRDb21tYW5kTWFuYWdlcigpLmRpc3BhdGNoQ29tbWFuZCh0aGlzIGFzIGFueSwgdGhpcyBhcyBhbnksIGlucHV0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gZGlzYWJsZSBob29rLlxuICAgICAqIEBncm91cCBMaWZlY3ljbGVcbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZGlzYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5jbGk/LmNsb3NlKCk7XG4gICAgICAgIHRoaXMuY2xpPy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvbXBsZXRlKGxpbmU6IHN0cmluZywgY2FsbGJhY2s6IChlcnI/OiBudWxsIHwgRXJyb3IsIHJlc3VsdD86IENvbXBsZXRlclJlc3VsdCkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBjb21tYW5kcyA9IEFycmF5LmZyb20odGhpcy5zZXJ2ZXIuZ2V0Q29tbWFuZE1hbmFnZXIoKS5nZXRDb21tYW5kcygpLnZhbHVlcygpKS5tYXAoXG4gICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5uYW1lXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gTWVyZ2UgYW5kIHJlbW92ZSBkdXBsaWNhdGVzLlxuICAgICAgICBjb25zdCBjb21wbGV0aW9ucyA9IGNvbW1hbmRzXG4gICAgICAgICAgICAucmV2ZXJzZSgpIC8vIFJldmVyc2UgdG8gcmVtb3ZlIGR1cGxpY2F0ZXMgYXQgdGhlIGVuZC5cbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlLCBpbmRleCwgc2VsZikgPT4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXgpXG4gICAgICAgICAgICAucmV2ZXJzZSgpOyAvLyBSZXN0b3JlLlxuXG4gICAgICAgIC8vIFRPRE86IEhhbmRsZSBhcmd1bWVudHMuXG4gICAgICAgIGNvbnN0IGhpdHMgPSBjb21wbGV0aW9ucy5maWx0ZXIoKGMpID0+IGMuc3RhcnRzV2l0aChsaW5lKSk7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBbaGl0cy5sZW5ndGggPyBoaXRzIDogY29tcGxldGlvbnMsIGxpbmVdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGUobGluZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgcHJvbXB0IHRoYXQncyBwcmVmaXhlZCB3aGVuIGxvZ2dpbmcuXG4gICAgICAgIHRoaXMuY2xpPy5vdXRwdXQud3JpdGUoYFxceDFiWyR7dGhpcy5jbGkuZ2V0UHJvbXB0KCkubGVuZ3RofURgKTtcblxuICAgICAgICAvLyBXcml0ZSB0aGUgbGluZS5cbiAgICAgICAgdGhpcy5jbGk/Lm91dHB1dC53cml0ZShgXFxyJHtsaW5lfVxcblxccmApO1xuXG4gICAgICAgIHRoaXMuY2xpPy5fcmVmcmVzaExpbmU/LigpO1xuICAgICAgICB0aGlzLmNsaT8ucHJvbXB0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICdDT05TT0xFJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rm9ybWF0dGVkVXNlcm5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICdbQ09OU09MRV0nO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5zZXJ2ZXIuZ2V0TG9nZ2VyKCkuaW5mbyhtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0V29ybGQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZlci5nZXRXb3JsZE1hbmFnZXIoKS5nZXREZWZhdWx0V29ybGQoKSE7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUGxheWVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGlzT3AoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRYKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0WSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcHVibGljIGdldFooKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBvc2l0aW9uKCk6IFZlY3RvcjMge1xuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFR5cGUoKSB7XG4gICAgICAgIHJldHVybiAnanNwcmlzbWFyaW5lOmNvbnNvbGUnO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0NvbnNvbGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJFbnRpdHlMaWtlIiwicHJvY2VzcyIsInJlYWRsaW5lIiwiVmVjdG9yMyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JBLE1BQXFCLGdCQUFnQkEsd0JBQThCLENBQUE7QUFBQSxFQUN2RCxHQUFBO0FBQUEsRUFFRCxXQUFZLENBQUEsTUFBQSxFQUFnQixTQUFZLEdBQUEsTUFBQSxDQUFPLEVBQUUsQ0FBRyxFQUFBO0FBQ3ZELElBQUEsTUFBTSxLQUFRLEdBQUEsTUFBQSxDQUFPLGVBQWdCLEVBQUEsQ0FBRSxlQUFnQixFQUFBO0FBQ3ZELElBQU0sS0FBQSxDQUFBO0FBQUEsTUFDRixNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsTUFDQTtBQUFBLEtBQ0gsQ0FBQTtBQUFBO0FBQ0w7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLE1BQWEsTUFBd0Is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