8个稳定版本 (3个主要版本)

5.1.0 2024年7月15日
5.0.0 2024年3月31日
4.0.0 2024年3月29日
3.1.0 2024年3月10日
2.0.2 2023年11月13日

#439 in 网络编程

Download history 1/week @ 2024-06-04 1/week @ 2024-06-11 4/week @ 2024-07-02 69/week @ 2024-07-09 101/week @ 2024-07-16 44/week @ 2024-07-23 42/week @ 2024-07-30

每月下载量 256

ISC 许可

44KB
895

Elytra Ping

轻松获取运行中的Minecraft服务器状态

CI Status

此crate可以与运行Minecraft 1.7或更高版本的服务器交互。如果您有服务器的地址和端口,Elytra Ping可以检索服务器的描述、玩家数量、供应商和图标等元数据。服务器的响应(或不响应)也可以用来推断服务器是否在线且可使用。

安装

cargo add elytra-ping

用法

使用 ping_or_timeout 函数检索服务器状态和延迟,如果耗时过长则终止。

let (ping_info, latency) = elytra_ping::ping_or_timeout(
    ("mc.hypixel.net".to_string(), 25565),
    std::time::Duration::from_secs(1),
).await.unwrap();
println!("{ping_info:#?}, {latency:?}");
// JavaServerInfo {
//     players: 31757 of 200000,
//     ...
// }, 62.84175ms

基岩版

let (ping_info, latency) = elytra_ping::bedrock::ping(
    ("play.cubecraft.net".to_string(), 19132),
    std::time::Duration::from_secs(1),
    3
).await.unwrap();
println!("{ping_info:#?}, {latency:?}");
// BedrockServerInfo {
//     online_players: 10077,
//     max_players: 55000,
//     game_mode: Some(
//         "Survival",
//     ),
//     ...
// }, 83ms

高级API

Elytra Ping可以通过 SlpProtocol API进行自定义,该API提供与Java版服务器发送和接收数据包的接口。

let addrs = ("mc.hypixel.net".to_string(), 25565);
let mut client: elytra_ping::SlpProtocol = elytra_ping::connect(addrs).await?;

// Set up our connection to receive a status packet
client.handshake().await?;
client.write_frame(elytra_ping::protocol::Frame::StatusRequest).await?;

// Read the status packet from the server
let frame: elytra_ping::protocol::Frame = client
    .read_frame(None)
    .await?
    .expect("connection closed by server");

let status: String = match frame {
    elytra_ping::protocol::Frame::StatusResponse { json } => json,
    _ => panic!("expected status packet"),
};

println!("Status: {}", status);

client.disconnect().await?;

依赖

~3–14MB
~172K SLoC