package main import ( "fmt" "log" "strings" "time" "github.com/jroimartin/gocui" ) var dcfg *DynmapConfig var serverName, baseURL string var close bool const VIEW_KEY = "MAIN_VIEW_KEY" func main() { serverName = "minecraft.br0xen.com" fmt.Println(serverName) baseURL = "http://minecraft.br0xen.com:8123/up/" dcfg = NewDynmapConfig(serverName, baseURL) dcfg.Update() g, err := gocui.NewGui(gocui.OutputNormal) if err != nil { log.Panicln(err) } defer g.Close() list := NewListWidget(VIEW_KEY, 1, 1, LeftPad(" ", 35)+"\n\n\n\n\n\n\n\n") g.SetManager(list) if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil { log.Panicln(err) } go func() { for !close { dcfg.Update() g.Update(func(g *gocui.Gui) error { lst, _ := g.View(VIEW_KEY) lst.Clear() fmt.Fprintln(lst, Center(dcfg.Name, 35)) fmt.Fprintln(lst, Center(fmt.Sprintf("~ %s ~", dcfg.GetServerTime()), 35)) num := fmt.Sprintf("[ %d ]", dcfg.GetOnlinePlayerCount()) for _, v := range dcfg.GetPlayerList() { fmt.Fprintln(lst, "* %s", v) } for i := dcfg.GetOnlinePlayerCount(); i < 6; i++ { fmt.Fprintln(lst, " ") } fmt.Fprintln(lst, LeftPad(num, 35)) return nil }) time.Sleep(time.Second * 5) } }() if err := g.MainLoop(); err != nil && err != gocui.ErrQuit { log.Panicln(err) } close = true } func quit(g *gocui.Gui, v *gocui.View) error { return gocui.ErrQuit } type ListWidget struct { name string x, y int w, h int body string } func NewListWidget(name string, x, y int, body string) *ListWidget { lines := strings.Split(body, "\n") w := 0 for _, l := range lines { if len(l) > w { w = len(l) } } h := len(lines) + 1 w = w + 1 return &ListWidget{name: name, x: x, y: y, w: w, h: h, body: body} } func (w *ListWidget) Layout(g *gocui.Gui) error { v, err := g.SetView(w.name, w.x, w.y, w.x+w.w, w.y+w.h) if err != nil { if err != gocui.ErrUnknownView { return err } fmt.Fprint(v, w.body) } return nil }