Files
mc-tool/main.go
2026-06-24 13:56:36 -04:00

107 lines
2.7 KiB
Go

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.ExactArgs(1),
}
var stopCmd = &cobra.Command{
Use: "stop",
Short: "Stop the minecraft server",
Run: server.Stop,
Args: cobra.ExactArgs(1),
}
var restartCmd = &cobra.Command{
Use: "restart",
Short: "Restart the minecraft server",
Run: server.Restart,
Args: cobra.ExactArgs(1),
}
var shellCmd = &cobra.Command{
Use: "shell",
Short: "Access RCON shell",
Run: server.Shell,
Args: cobra.ExactArgs(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.MinimumNArgs(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)
}
}