diff --git a/lib/java.js b/lib/java.js index fa339b9..6039e52 100644 --- a/lib/java.js +++ b/lib/java.js @@ -8,16 +8,15 @@ import net from 'net'; import varint from './varint.js'; -const PROTOCOL_VERSION = 0; - /** * Ping a Minecraft Java server. * @param {string} host The host of the Java server. * @param {number} [port=25565] The port of the Java server. * @param {function} cb The callback function to handle the ping response. * @param {number} [timeout=5000] The timeout duration in milliseconds. + * @param {number} [protocolVersion=-1] The protocol version of the Java client. */ -function ping(host, port = 25565, cb, timeout = 5000) { +function ping(host, port = 25565, cb, timeout = 5000, protocolVersion = -1) { const socket = net.createConnection(({ host, port })); // Set manual timeout interval. @@ -56,7 +55,7 @@ function ping(host, port = 25565, cb, timeout = 5000) { socket.on('connect', () => { const handshake = varint.concat([ varint.encodeInt(0), - varint.encodeInt(PROTOCOL_VERSION), + varint.encodeInt(protocolVersion), varint.encodeInt(host.length), varint.encodeString(host), varint.encodeUShort(port), @@ -118,7 +117,7 @@ function ping(host, port = 25565, cb, timeout = 5000) { /** * Asynchronously ping Minecraft Java server. - * The optional `options` argument can be an object with a `ping` (default is `25565`) or/and `timeout` (default is `5000`) property. + * The optional `options` argument can be an object with a `port` (default is `25565`) or/and `timeout` (default is `5000`) or/and `protocolVersion` (default is `-1`) property. * @param {string} host The Java server address. * @param {import('../types/index.js').PingOptions} options The configuration for pinging Minecraft Java server. * @returns {Promise} @@ -126,11 +125,11 @@ function ping(host, port = 25565, cb, timeout = 5000) { export function pingJava(host, options = {}) { if (!host) throw new Error('Host argument is not provided'); - const { port = 25565, timeout = 5000 } = options; + const { port = 25565, timeout = 5000, protocolVersion = -1 } = options; return new Promise((resolve, reject) => { ping(host, port, (res, err) => { err ? reject(err) : resolve(res); - }, timeout); + }, timeout, protocolVersion); }); -} \ No newline at end of file +} diff --git a/types/lib/bedrock.d.ts b/types/lib/bedrock.d.ts index 923cf14..856a2c4 100644 --- a/types/lib/bedrock.d.ts +++ b/types/lib/bedrock.d.ts @@ -2,7 +2,7 @@ * @param port The server port. * @param timeout The read/write socket timeout. */ -export type PingOptions = { +export type BedrockPingOptions = { port: number, timeout: number; }; @@ -45,5 +45,5 @@ export type BedrockPingResponse = { * ``` * @see [source](https://github.com/minescope/mineping/blob/915edbec9c9ad811459458600af3531ec0836911/lib/bedrock.js#L204) */ -export function pingBedrock(host: string, options?: PingOptions): Promise; +export function pingBedrock(host: string, options?: BedrockPingOptions): Promise; diff --git a/types/lib/java.d.ts b/types/lib/java.d.ts index 4b66d6d..af02188 100644 --- a/types/lib/java.d.ts +++ b/types/lib/java.d.ts @@ -1,4 +1,13 @@ -import { PingOptions } from "./bedrock"; +/** + * @param port The server port. + * @param timeout The read/write socket timeout. + * @param protocolVersion The protocol version. + */ +export type JavaPingOptions = { + port: number, + timeout: number, + protocolVersion: number; +}; /** * JSON format chat component used for description field. @@ -67,5 +76,5 @@ export type JavaPingResponse = { * ``` * @see [source](https://github.com/minescope/mineping/blob/915edbec9c9ad811459458600af3531ec0836911/lib/java.js#L117) */ -export function pingJava(host: string, options?: PingOptions): Promise; +export function pingJava(host: string, options?: JavaPingOptions): Promise;