easyx / php-minecraft-query
PHP 库,用于查询 Minecraft 服务器
Requires
- php: >=8.0
Requires (Dev)
- phpstan/phpstan: ^1.10
- vimeo/psalm: ^5.16
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
将会工作。