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