A wrapper for querying Minecraft Java Edition servers using the vanilla Server List Ping protocol.
Install using go get github.com/Cryptkeeper/go-minecraftping
package main
import (
"fmt"
"github.com/Cryptkeeper/go-minecraftping"
"log"
"time"
)
func main() {
var protocolVersion = 575 // Minecraft Java Edition 1.15.1
resp, err := minecraftping.Ping("myip", 25565, protocolVersion, time.Second * 5)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%d/%d players are online.", resp.Players.Online, resp.Players.Max)
}(The default Minecraft port, 25565, is also available as a const, minecraftping.DefaultPort.)
protocolVersion is ever changing as Minecraft updates. See protocol version numbers for a complete and updated listing. If the server compatible with the sent protocol version, the server will reply with the same protocol version in the Response object, otherwise it will send its required protocol version (keep in mind, some servers may be compatible with multiple protocol versions.)
The response structure is described in minecraftping.Response
- This does not support Minecraft's legacy ping protocol for pre-Minecraft version 1.6 servers.
- The
descriptionfield ofResponseis provided as ajson.RawMessageobject. This is because the field's schema follows the Chat schema (a Minecraft specific schema) that I'm not willing to support at this functionality level. - This does not support the
PingorPongbehavior of the Server List Ping protocol. If you wish to determine the latency of the connection do you should do so manually.