package main import ( _ "embed" "log" "mc-tool/config" "mc-tool/server" "os" "text/template" "github.com/spf13/cobra" ) var rootCmd = &cobra.Command{ Use: "mc-tool [command]", Short: "Minecraft Management Tool", Long: "mc-tool simplifies common server administration actions", Args: cobra.MinimumNArgs(1), } var createCmd = &cobra.Command{ Use: "create", Short: "Creates a new minecraft server", Run: server.New, Args: cobra.ExactArgs(1), } var startCmd = &cobra.Command{ Use: "start", Short: "Start the minecraft server", Run: server.Start, Args: cobra.MaximumNArgs(1), } var stopCmd = &cobra.Command{ Use: "stop", Short: "Stop the minecraft server", Run: server.Stop, Args: cobra.MaximumNArgs(1), } var restartCmd = &cobra.Command{ Use: "restart", Short: "Restart the minecraft server", Run: server.Restart, Args: cobra.MaximumNArgs(1), } var shellCmd = &cobra.Command{ Use: "shell", Short: "Access RCON shell", Run: server.Shell, Args: cobra.MaximumNArgs(1), } var sayCmd = &cobra.Command{ Use: "say", Short: "Say something in the server", Run: server.Say, Args: cobra.MinimumNArgs(1), } var statusCmd = &cobra.Command{ Use: "status", Short: "Get the status of the server", Run: server.Status, Args: cobra.MaximumNArgs(1), } //go:embed templates/docker-compose.yml var dockerCompose string func init() { createCmd.Flags().StringVarP(&config.Cfg.Name, "name", "n", "minecraft-server", "set the name of the server") createCmd.Flags().StringVarP(&config.Cfg.Version, "version", "v", "1.21.1", "set the version of the server") createCmd.Flags().StringVarP(&config.Cfg.Type, "type", "t", "VANILLA", "set the type of the server") createCmd.Flags().StringVarP(&config.Cfg.Ram, "ram", "r", "2G", "set the memory limit of the server") createCmd.Flags().StringVarP(&config.Cfg.MOTD, "motd", "m", "This server was created using mc-tool", "set the message of the day for the server") createCmd.Flags().StringVarP(&config.Cfg.RestartPolicy, "restart", "R", "no", "what to do when the server fails or host turns off") createCmd.Flags().FuncP("port", "p", "set additional ports for the container to expose", func(s string) error { config.Cfg.Ports = append(config.Cfg.Ports, s) return nil }) rootCmd.AddCommand(createCmd) rootCmd.AddCommand(startCmd) rootCmd.AddCommand(stopCmd) rootCmd.AddCommand(restartCmd) rootCmd.AddCommand(shellCmd) rootCmd.AddCommand(sayCmd) rootCmd.AddCommand(statusCmd) t, err := template.New("compose").Parse(dockerCompose) if err != nil { log.Fatal(err) } config.Data.DockerCompose = t } func main() { log.SetFlags(0) if err := rootCmd.Execute(); err != nil { log.Fatal(err) os.Exit(1) } }