From 89f50251a157848dcff9c1f6a53ef7ef21016630 Mon Sep 17 00:00:00 2001 From: MrMelon Date: Sun, 22 Nov 2020 23:41:58 +0000 Subject: [PATCH] First commit for mc server player locator --- go.mod | 8 ++++ go.sum | 7 +++ build => install | 0 mc-server-player-locator.go | 88 +++++++++++++++++++++++++++++++++++++ 4 files changed, 103 insertions(+) create mode 100644 go.mod create mode 100644 go.sum rename build => install (100%) mode change 100644 => 100755 create mode 100644 mc-server-player-locator.go diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..19cfc61 --- /dev/null +++ b/go.mod @@ -0,0 +1,8 @@ +module codehub.onpointcoding.net/sean/go-mcserverplayerlocator + +go 1.15 + +require ( + codehub.onpointcoding.net/sean/go-mclookup v0.0.0-20201122232238-6a804b5efe4c + github.com/Tnze/go-mc v1.16.1 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..71bfe67 --- /dev/null +++ b/go.sum @@ -0,0 +1,7 @@ +codehub.onpointcoding.net/sean/go-mclookup v0.0.0-20201122214338-c6eacd5035dd h1:+rANY6/6B0JUvjv1L/2F83OcPPD4pKEOpNZcYptJf5s= +codehub.onpointcoding.net/sean/go-mclookup v0.0.0-20201122214338-c6eacd5035dd/go.mod h1:BFdow03DiFDFpVqVDdFzzJTkPtTDMUSJcq0AiO59TPI= +codehub.onpointcoding.net/sean/go-mclookup v0.0.0-20201122232238-6a804b5efe4c h1:FJJ4+UnY2vvKd2Rr3KBZqEfsBpEBJ5ugtR7i7EEhg98= +codehub.onpointcoding.net/sean/go-mclookup v0.0.0-20201122232238-6a804b5efe4c/go.mod h1:BFdow03DiFDFpVqVDdFzzJTkPtTDMUSJcq0AiO59TPI= +github.com/Tnze/go-mc v1.16.1 h1:KX2h8pLjqz6bJVVJpMa0TE6lkcPmAyzhlfhFp8AwyEs= +github.com/Tnze/go-mc v1.16.1/go.mod h1:LKj1KKSj4m58fpJaTmOHC3DdQKJ1RSfEGHFR1zMLSF8= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= diff --git a/build b/install old mode 100644 new mode 100755 similarity index 100% rename from build rename to install diff --git a/mc-server-player-locator.go b/mc-server-player-locator.go new file mode 100644 index 0000000..11c6d68 --- /dev/null +++ b/mc-server-player-locator.go @@ -0,0 +1,88 @@ +package main + +import ( + "bytes" + "compress/gzip" + "fmt" + "io" + "io/ioutil" + "log" + "os" + "path/filepath" + "strings" + + mclookup "codehub.onpointcoding.net/sean/go-mclookup" + "github.com/Tnze/go-mc/nbt" +) + +func main() { + fmt.Printf("MC Server Player Locator -- by MrMelon\n") + if pddir, err := os.Stat("playerdata/"); !os.IsNotExist(err) { + if pddir.IsDir() { + files, err := filepath.Glob("playerdata/*dat") + if err != nil { + fmt.Printf("Error getting playerdata NBT files\n") + return + } + for _, file := range files { + base := filepath.Base(file) + fmt.Printf("Parsing %s...\r", base) + + uuid := strings.Replace(base, ".dat", "", -1) + + apiResult, err := mclookup.LookupPlayer(uuid) + if err != nil { + panic(err) + } + + filedata, err := ioutil.ReadFile(file) + if err != nil { + panic(err) + } + + zr, err := gzip.NewReader(bytes.NewBuffer(filedata)) + if err != nil { + log.Fatal(err) + } + + var content bytes.Buffer + + if _, err := io.Copy(&content, zr); err != nil { + log.Fatal(err) + } + + if err := zr.Close(); err != nil { + log.Fatal(err) + } + + player := playerCompound{} + err = nbt.Unmarshal(content.Bytes(), &player) + if err != nil { + panic(err) + } + + if len(player.Pos) == 3 { + fmt.Printf("%s (%s): %v, %v, %v\n", apiResult.Data.Player.Username, uuid, player.Pos[0], player.Pos[1], player.Pos[2]) + } + + continue + } + } else { + fmt.Printf("playerdata isn't a folder\n") + } + } else { + fmt.Printf("playerdata folder doesn't exist\n") + } +} + +type playerCompound struct { + Pos []float64 `nbt:"Pos"` +} + +func fileExists(filename string) bool { + info, err := os.Stat(filename) + if os.IsNotExist(err) { + return false + } + return !info.IsDir() +}