Rename cmd -> examples
This commit is contained in:
17
examples/mcping/README.md
Normal file
17
examples/mcping/README.md
Normal file
@ -0,0 +1,17 @@
|
||||
# mcping
|
||||
|
||||
Ping tool for Minecraft: Java Edition.
|
||||
Just for example. Not recommended for daily use. Use [github.com/go-mc/mcping](github.com/go-mc/mcping) instead, which including SRV parse.
|
||||
|
||||
适用于Minecraft: Java Edition的ping工具。
|
||||
只起示例作用,日常使用建议使用完整版[github.com/go-mc/mcping](github.com/go-mc/mcping),包含SRV解析等功能。
|
||||
|
||||
Install with go tools:
|
||||
```go get -u github.com/Tnze/go-mc/cmd/mcping```
|
||||
`$GOPATH/bin` should in your `$PATH`.
|
||||
|
||||
Install with Homebrew:
|
||||
```brew tap Tnze/tap && brew install mcping```
|
||||
|
||||
Useage:
|
||||
```mcping <hostname>[:port]```
|
72
examples/mcping/mcping.go
Normal file
72
examples/mcping/mcping.go
Normal file
@ -0,0 +1,72 @@
|
||||
// Usage: go run examples/ping/ping.go localhost
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/Tnze/go-mc/bot"
|
||||
"github.com/Tnze/go-mc/chat"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type status struct {
|
||||
Description chat.Message
|
||||
Players struct {
|
||||
Max int
|
||||
Online int
|
||||
Sample []struct {
|
||||
ID uuid.UUID
|
||||
Name string
|
||||
}
|
||||
}
|
||||
Version struct {
|
||||
Name string
|
||||
Protocol int
|
||||
}
|
||||
//favicon ignored
|
||||
}
|
||||
|
||||
func main() {
|
||||
addr := getAddr()
|
||||
fmt.Printf("MCPING (%s):\n", addr)
|
||||
resp, delay, err := bot.PingAndList(addr)
|
||||
if err != nil {
|
||||
fmt.Printf("ping and list server fail: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
var s status
|
||||
err = json.Unmarshal(resp, &s)
|
||||
if err != nil {
|
||||
fmt.Print("unmarshal resp fail:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
fmt.Print(s)
|
||||
fmt.Println("Delay:", delay)
|
||||
}
|
||||
|
||||
func getAddr() string {
|
||||
const usage = "Usage: mcping <hostname>[:port]"
|
||||
if len(os.Args) < 2 {
|
||||
fmt.Println("no host name.", usage)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
return os.Args[1]
|
||||
}
|
||||
|
||||
func (s status) String() string {
|
||||
var sb strings.Builder
|
||||
fmt.Fprintln(&sb, "Server:", s.Version.Name)
|
||||
fmt.Fprintln(&sb, "Protocol:", s.Version.Protocol)
|
||||
fmt.Fprintln(&sb, "Description:", s.Description)
|
||||
fmt.Fprintf(&sb, "Players: %d/%d\n", s.Players.Online, s.Players.Max)
|
||||
for _, v := range s.Players.Sample {
|
||||
fmt.Fprintf(&sb, "- [%s] %v\n", v.Name, v.ID)
|
||||
}
|
||||
return sb.String()
|
||||
}
|
Reference in New Issue
Block a user