zlh-agent/internal/provision/minecraft/vanilla.go
2025-12-13 20:54:18 +00:00

51 lines
1.2 KiB
Go

package minecraft
import (
"fmt"
"io"
"net/http"
"os"
"path/filepath"
"zlh-agent/internal/state"
"zlh-agent/internal/provcommon"
)
func InstallMinecraftVanilla(cfg state.Config) error {
dir := provcommon.ServerDir(cfg)
if err := os.MkdirAll(dir, 0o755); err != nil {
return fmt.Errorf("mkdir server dir: %w", err)
}
url := provcommon.BuildArtifactURL(cfg.ArtifactPath)
dest := filepath.Join(dir, "server.jar")
resp, err := http.Get(url)
if err != nil {
return fmt.Errorf("download vanilla: %w", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("bad status %s", resp.Status)
}
out, err := os.Create(dest)
if err != nil {
return fmt.Errorf("create server.jar: %w", err)
}
defer out.Close()
if _, err := io.Copy(out, resp.Body); err != nil {
return fmt.Errorf("write server.jar: %w", err)
}
// 🔹 NEW: verify + self-repair (java, server.jar, start.sh, etc.)
if err := VerifyMinecraftInstallWithRepair(cfg); err != nil {
return fmt.Errorf("vanilla install verification failed: %w", err)
}
return nil
}