UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

106 lines (105 loc) 12.9 kB
import BinaryStream from "@jsprismarine/jsbinaryutils"; //#region src/query/QueryManager.ts var QueryType = /* @__PURE__ */ function(QueryType) { QueryType[QueryType["Handshake"] = 0] = "Handshake"; QueryType[QueryType["Stats"] = 9] = "Stats"; return QueryType; }({}); var QueryManager = class { server; constructor(server) { this.server = server; } async onRaw(buffer, rinfo) { return new Promise(async (resolve, reject) => { const stream = new BinaryStream(buffer); const magic = stream.readUnsignedShort(); const type = stream.readByte(); const sessionId = stream.readInt() & 252645135; if (!this.server.getRaknet()) { reject(/* @__PURE__ */ new Error("Server is not started")); return; } if (magic !== 65277) { reject(/* @__PURE__ */ new Error("Invalid magic")); return; } switch (type) { case 0: { const res = new BinaryStream(); res.writeByte(9); res.writeInt(sessionId); res.write(Buffer.from(`9513307\0`, "binary")); this.server.getRaknet()?.sendBuffer(res.getBuffer(), { address: rinfo.getAddress(), port: rinfo.getPort(), family: "IPv4", size: 0 }); resolve(res.getBuffer()); return; } case 9: { const res = new BinaryStream(); res.writeByte(0); res.writeByte(115); res.writeByte(112); res.writeByte(108); res.writeByte(105); res.writeByte(116); res.writeByte(110); res.writeByte(117); res.writeByte(109); res.writeByte(0); res.writeByte(128); res.writeByte(0); res.write(Buffer.from(`\0${[ "hostname", this.server.getMetadata().getMotd(), "gametype", "SMP", "game_id", "MINECRAFTPE", "version", this.server.getVersion(), "plugins", `JSPrismarine on Prismarine ${this.server.getVersion()} ${[].join("; ")}`, "map", this.server.getWorldManager().getDefaultWorld().getName(), "numplayers", this.server.getMetadata().getOnlinePlayerCount(), "maxplayers", this.server.getMetadata().getMaxPlayerCount(), "hostport", this.server.getConfig().getServerPort(), "hostip", this.server.getConfig().getServerIp() ].join("\0")}\0\0`, "binary")); res.writeByte(1); res.writeByte(112); res.writeByte(108); res.writeByte(97); res.writeByte(121); res.writeByte(101); res.writeByte(114); res.writeByte(95); res.writeByte(0); res.writeByte(0); res.write(Buffer.from(`${this.server.getSessionManager().getAllPlayers().map((player) => `${player.getName()}\0`)}\0`, "binary")); this.server.getRaknet()?.sendBuffer(res.getBuffer(), { address: rinfo.getAddress(), port: rinfo.getPort(), family: "IPv4", size: 0 }); resolve(res.getBuffer()); return; } default: throw new Error("Invalid QueryType"); } }); } }; //#endregion export { QueryManager, QueryType }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVlcnlNYW5hZ2VyLmVzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyeS9RdWVyeU1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpbmFyeVN0cmVhbSBmcm9tICdAanNwcmlzbWFyaW5lL2pzYmluYXJ5dXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBJbmV0QWRkcmVzcyB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvcmFrbmV0JztcbmltcG9ydCB0eXBlIFNlcnZlciBmcm9tICcuLi9TZXJ2ZXInO1xuXG5leHBvcnQgZW51bSBRdWVyeVR5cGUge1xuICAgIEhhbmRzaGFrZSA9IDAsXG4gICAgU3RhdHMgPSA5XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVyeU1hbmFnZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmVyOiBTZXJ2ZXI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2VydmVyOiBTZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5zZXJ2ZXIgPSBzZXJ2ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9uUmF3KGJ1ZmZlcjogQnVmZmVyLCByaW5mbzogSW5ldEFkZHJlc3MpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IEJpbmFyeVN0cmVhbShidWZmZXIpO1xuICAgICAgICAgICAgY29uc3QgbWFnaWMgPSBzdHJlYW0ucmVhZFVuc2lnbmVkU2hvcnQoKTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGU6IFF1ZXJ5VHlwZSA9IHN0cmVhbS5yZWFkQnl0ZSgpO1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gc3RyZWFtLnJlYWRJbnQoKSAmIDB4MGYwZjBmMGY7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5zZXJ2ZXIuZ2V0UmFrbmV0KCkpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTZXJ2ZXIgaXMgbm90IHN0YXJ0ZWQnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWFnaWMgIT09IDY1Mjc3KSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignSW52YWxpZCBtYWdpYycpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgUXVlcnlUeXBlLkhhbmRzaGFrZToge1xuICAgICAgICAgICAgICAgICAgICAvLyBIYW5kc2hha2VcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gbmV3IEJpbmFyeVN0cmVhbSgpO1xuICAgICAgICAgICAgICAgICAgICByZXMud3JpdGVCeXRlKDkpO1xuICAgICAgICAgICAgICAgICAgICByZXMud3JpdGVJbnQoc2Vzc2lvbklkKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlKEJ1ZmZlci5mcm9tKGA5NTEzMzA3XFwwYCwgJ2JpbmFyeScpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXIuZ2V0UmFrbmV0KCk/LnNlbmRCdWZmZXIocmVzLmdldEJ1ZmZlcigpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiByaW5mby5nZXRBZGRyZXNzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3J0OiByaW5mby5nZXRQb3J0KCksXG4gICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk6ICdJUHY0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IDBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzLmdldEJ1ZmZlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2UgUXVlcnlUeXBlLlN0YXRzOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBCaW5hcnlTdHJlYW0oKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlQnl0ZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUGFkZGluZ1xuICAgICAgICAgICAgICAgICAgICByZXMud3JpdGVCeXRlKDExNSk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZUJ5dGUoMTEyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlQnl0ZSgxMDgpO1xuICAgICAgICAgICAgICAgICAgICByZXMud3JpdGVCeXRlKDEwNSk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZUJ5dGUoMTE2KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlQnl0ZSgxMTApO1xuICAgICAgICAgICAgICAgICAgICByZXMud3JpdGVCeXRlKDExNyk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZUJ5dGUoMTA5KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlQnl0ZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlQnl0ZSgxMjgpO1xuICAgICAgICAgICAgICAgICAgICByZXMud3JpdGVCeXRlKDApO1xuICAgICAgICAgICAgICAgICAgICAvLyBFbmQgcGFkZGluZ1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsdWdpbnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlci5mcm9tKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcXDAke1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hvc3RuYW1lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXIuZ2V0TWV0YWRhdGEoKS5nZXRNb3RkKCksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dhbWV0eXBlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NNUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnYW1lX2lkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01JTkVDUkFGVFBFJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZlci5nZXRWZXJzaW9uKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbHVnaW5zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYEpTUHJpc21hcmluZSBvbiBQcmlzbWFyaW5lICR7dGhpcy5zZXJ2ZXIuZ2V0VmVyc2lvbigpfSAke3BsdWdpbnMuam9pbignOyAnKX1gLCAvLyBUT0RPXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZlci5nZXRXb3JsZE1hbmFnZXIoKS5nZXREZWZhdWx0V29ybGQoKSEuZ2V0TmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtcGxheWVycycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmVyLmdldE1ldGFkYXRhKCkuZ2V0T25saW5lUGxheWVyQ291bnQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21heHBsYXllcnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZlci5nZXRNZXRhZGF0YSgpLmdldE1heFBsYXllckNvdW50KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdob3N0cG9ydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmVyLmdldENvbmZpZygpLmdldFNlcnZlclBvcnQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hvc3RpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmVyLmdldENvbmZpZygpLmdldFNlcnZlcklwKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLmpvaW4oJ1xcMCcpfVxcMFxcMGAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpbmFyeSdcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBQYWRkaW5nXG4gICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZUJ5dGUoMSk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZUJ5dGUoMTEyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlQnl0ZSgxMDgpO1xuICAgICAgICAgICAgICAgICAgICByZXMud3JpdGVCeXRlKDk3KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlQnl0ZSgxMjEpO1xuICAgICAgICAgICAgICAgICAgICByZXMud3JpdGVCeXRlKDEwMSk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZUJ5dGUoMTE0KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlQnl0ZSg5NSk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZUJ5dGUoMCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZUJ5dGUoMCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEVuZCBwYWRkaW5nXG5cbiAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyLmZyb20oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5zZXJ2ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFNlc3Npb25NYW5hZ2VyKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEFsbFBsYXllcnMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChwbGF5ZXIpID0+IGAke3BsYXllci5nZXROYW1lKCl9XFwwYCl9XFwwYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmluYXJ5J1xuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZlci5nZXRSYWtuZXQoKT8uc2VuZEJ1ZmZlcihyZXMuZ2V0QnVmZmVyKCksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IHJpbmZvLmdldEFkZHJlc3MoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ6IHJpbmZvLmdldFBvcnQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseTogJ0lQdjQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogMFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcy5nZXRCdWZmZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFF1ZXJ5VHlwZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBSUEsSUFBWSxZQUFMLHlCQUFBLFdBQUE7Q0FDSCxVQUFBLFVBQUEsZUFBQSxLQUFBO0NBQ0EsVUFBQSxVQUFBLFdB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