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
description
field ofResponse
is provided as ajson.RawMessage
object. 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
Ping
orPong
behavior of the Server List Ping protocol. If you wish to determine the latency of the connection do you should do so manually.