From 0c804fdd419d981d5709ac89b73c8ac7844f8e02 Mon Sep 17 00:00:00 2001 From: Tnze Date: Tue, 21 Jun 2022 18:07:41 +0800 Subject: [PATCH] Fix command compound --- examples/frameworkServer/main.go | 106 ------------------------------- server/command/component.go | 37 ++--------- 2 files changed, 5 insertions(+), 138 deletions(-) delete mode 100644 examples/frameworkServer/main.go diff --git a/examples/frameworkServer/main.go b/examples/frameworkServer/main.go deleted file mode 100644 index de22c0b..0000000 --- a/examples/frameworkServer/main.go +++ /dev/null @@ -1,106 +0,0 @@ -package main - -import ( - "context" - _ "embed" - "flag" - "image" - _ "image/png" - "log" - "os" - - "github.com/Tnze/go-mc/chat" - "github.com/Tnze/go-mc/server" - "github.com/Tnze/go-mc/server/command" -) - -var motd = chat.Message{Text: "A Minecraft Server ", Extra: []chat.Message{{Text: "Powered by go-mc", Color: "yellow"}}} -var addr = flag.String("Address", "127.0.0.1:25565", "Listening address") -var iconPath = flag.String("ServerIcon", "./server-icon.png", "The path to server icon") -var maxPlayer = flag.Int("MaxPlayer", 16384, "The maximum number of players") -var regionPath = flag.String("Regions", "./save/testdata/region/", "The region files") -var playerdataPath = flag.String("PlayerData", "./save/testdata/playerdata", "The player data files") - -func main() { - flag.Parse() - logger := Logger{log.Default()} - playerList := server.NewPlayerList(*maxPlayer) - serverInfo, err := server.NewPingInfo(playerList, server.ProtocolName, server.ProtocolVersion, motd, readIcon()) - if err != nil { - logger.Fatalf("Set server info error: %v", err) - } - keepAlive := server.NewKeepAlive() - commands := command.NewGraph() - handleFunc := func(ctx context.Context, args []command.ParsedData) error { - logger.Printf("Command: args: %v", args) - return nil - } - commands.AppendLiteral(commands.Literal("me"). - AppendArgument(commands.Argument("action", command.StringParser(2)). - HandleFunc(handleFunc)). - Unhandle(), - ).AppendLiteral(commands.Literal("help"). - AppendArgument(commands.Argument("command", command.StringParser(0)). - HandleFunc(handleFunc)). - HandleFunc(handleFunc), - ).AppendLiteral(commands.Literal("list"). - AppendLiteral(commands.Literal("uuids"). - HandleFunc(handleFunc)). - HandleFunc(handleFunc), - ) - game := server.NewGame( - logger, - playerList, - keepAlive, - commands, - ) - go game.Run(context.Background()) - - s := server.Server{ - ListPingHandler: serverInfo, - LoginHandler: &server.MojangLoginHandler{ - OnlineMode: true, - Threshold: 256, - LoginChecker: playerList, - }, - GamePlay: game, - } - if err := s.Listen(*addr); err != nil { - log.Fatalf("Listen error: %v", err) - } -} - -func readIcon() image.Image { - f, err := os.Open(*iconPath) - // if the file doesn't exist, return nil - if os.IsNotExist(err) { - return nil - } else if err != nil { - log.Fatalf("Open icon file error: %v", err) - } - defer f.Close() - - icon, _, err := image.Decode(f) - if err != nil { - log.Fatalf("Decode image error: %v", err) - } - return icon -} - -type Logger struct{ *log.Logger } - -func (l Logger) Init(g *server.Game) { - l.Print("Server init") -} - -func (l Logger) Run(ctx context.Context) { - l.Print("Server is running") -} - -func (l Logger) ClientJoin(c *server.Client, p *server.Player) { - l.Printf("Player join [%s]%v from %v", p.Name, p.UUID, c.Socket.RemoteAddr()) -} - -func (l Logger) ClientLeft(c *server.Client, p *server.Player, reason error) { - l.Printf("Player left [%s]%v reason: %v", p.Name, p.UUID, reason) -} diff --git a/server/command/component.go b/server/command/component.go index 6cc4837..3de8c51 100644 --- a/server/command/component.go +++ b/server/command/component.go @@ -1,44 +1,17 @@ package command import ( - "context" - "strings" - "github.com/Tnze/go-mc/data/packetid" pk "github.com/Tnze/go-mc/net/packet" - "github.com/Tnze/go-mc/server" ) -// Init implement server.Component for Graph -func (g *Graph) Init(game *server.Game) { - game.AddHandler(&server.PacketHandler{ - ID: packetid.ServerboundChat, - F: func(client *server.Client, player *server.Player, packet server.Packet758) error { - var msg pk.String - if err := pk.Packet(packet).Scan(&msg); err != nil { - return err - } - if cmd := string(msg); strings.HasPrefix(cmd, "/") { - ctx := context.WithValue(context.TODO(), "sender", player) - cmderr := g.Execute(ctx, strings.TrimPrefix(cmd, "/")) - if cmderr != nil { - // TODO: tell player that their command has error - } - } - return nil - }, - }) +type Client interface { + SendPacket(p pk.Packet) } -// Run implement server.Component for Graph -func (g *Graph) Run(ctx context.Context) {} - // ClientJoin implement server.Component for Graph -func (g *Graph) ClientJoin(client *server.Client, _ *server.Player) { - client.WritePacket(server.Packet758(pk.Marshal( +func (g *Graph) ClientJoin(client Client) { + client.SendPacket(pk.Marshal( packetid.ClientboundCommands, g, - ))) + )) } - -// ClientLeft implement server.Component for Graph -func (g *Graph) ClientLeft(_ *server.Client, _ *server.Player, _ error) {}