easyx/php-minecraft-query

PHP 库,用于查询 Minecraft 服务器

1.0.2 2024-05-08 17:20 UTC

This package is not auto-updated.

Last update: 2024-09-25 19:00:10 UTC


README

该库可用于查询 Minecraft 服务器的基本信息。

⚠️ 当您无法从服务器检索信息时,请不要创建问题,除非您能证明库中存在错误。

Ping 和 Query 之间的区别

有两种方法可以获取 Minecraft 服务器的信息。

Ping

Ping 协议自 Minecraft 1.7 版本开始添加,用于查询服务器以获取最少量信息(主机名、motd、图标和玩家样本)。这更容易使用,且不需要在服务器端进行额外设置。它使用与您连接服务器相同的端口的 TCP 协议。

MinecraftPing 类包含一个 QueryOldPre17 方法,可以用于查询 1.6 或更早版本的服务器。

Query

此方法使用 GameSpy4 协议,并需要在您的 server.properties 中启用 query 监听器,如下所示:

enable-query=true
query.port=25565

Query 允许请求服务器插件和玩家的完整列表,但此方法更容易出错,因此如果您不需要所有这些信息,请坚持使用 ping 方法,因为它更可靠。

RCON

您可以使用 Source RCON 协议 远程地向 Minecraft 服务器发送控制台命令。对于 RCON 需要,请使用 PHP Source Query 库。

SRV DNS 记录

该库会自动尝试解析 SRV 记录。如果您不希望这样做,请在构造函数中(在超时参数之后)将第四个参数传递为 false

示例

<?php
	require __DIR__ . '/src/MinecraftPing.php';
	require __DIR__ . '/src/MinecraftPingException.php';

	use EasyX\MinecraftPing;
	use EasyX\MinecraftPingException;

	try {
		$query = new MinecraftPing('localhost', 25565);

		print_r($query->Query($protocolVersion = 4));
	}
	catch(MinecraftPingException $e) {
		echo $e->getMessage();
	}
	finally {
		if ($query) {
			$query->Close();
		}
	}
?>

如果您想从使用低于 Minecraft 1.7 版本的旧版本服务器获取 ping 信息,则请使用 QueryOldPre17 函数而不是 Query

如果服务器启用了查询(enable-query),则您可以使用 MinecraftQuery 获取有关服务器的更多信息。

<?php
	require __DIR__ . '/src/MinecraftQuery.php';
	require __DIR__ . '/src/MinecraftQueryException.php';

	use EasyX\MinecraftQuery;
	use EasyX\MinecraftQueryException;

	$query = new MinecraftQuery();

	try {
		$query->Connect('localhost', 25565);

		print_r($query->GetInfo());
		print_r($query->GetPlayers());
	}
	catch(MinecraftQueryException $e) {
		echo $e->getMessage();
	}
?>

对于基岩服务器(MCPE),请使用 ConnectBedrock 函数而不是 Connect,然后 GetInfo 将会工作。

许可

MIT