122 lines
2.8 KiB
Go
122 lines
2.8 KiB
Go
package provision
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"zlh-agent/internal/state"
|
|
"zlh-agent/internal/provision/minecraft"
|
|
"zlh-agent/internal/provision/steam"
|
|
)
|
|
|
|
/*
|
|
ProvisionAll — unified entrypoint for MC + Steam.
|
|
IMPORTANT:
|
|
- This function ONLY performs installation.
|
|
- Validation/verification happens in ensureProvisioned().
|
|
*/
|
|
func ProvisionAll(cfg state.Config) error {
|
|
|
|
game := strings.ToLower(cfg.Game)
|
|
variant := strings.ToLower(cfg.Variant)
|
|
|
|
/* ---------------------------------------------------------
|
|
MINECRAFT
|
|
--------------------------------------------------------- */
|
|
if game == "minecraft" {
|
|
|
|
// 1. Install Java (runtime)
|
|
if err := InstallJava(cfg); err != nil {
|
|
return fmt.Errorf("java install failed: %w", err)
|
|
}
|
|
|
|
// 2. Game variant install
|
|
switch variant {
|
|
|
|
case "vanilla", "paper", "purpur", "fabric", "quilt":
|
|
if err := minecraft.InstallMinecraftVanilla(cfg); err != nil {
|
|
return fmt.Errorf("minecraft vanilla install failed: %w", err)
|
|
}
|
|
|
|
case "forge":
|
|
if err := minecraft.InstallMinecraftForge(cfg); err != nil {
|
|
return fmt.Errorf("forge install failed: %w", err)
|
|
}
|
|
|
|
case "neoforge":
|
|
if err := minecraft.InstallMinecraftNeoForge(cfg); err != nil {
|
|
return fmt.Errorf("neoforge install failed: %w", err)
|
|
}
|
|
|
|
default:
|
|
return fmt.Errorf("unsupported minecraft variant: %s", variant)
|
|
}
|
|
|
|
// 3. Config files generated AFTER variant installer
|
|
if err := WriteEula(cfg); err != nil {
|
|
return err
|
|
}
|
|
if err := WriteServerProperties(cfg); err != nil {
|
|
return err
|
|
}
|
|
if err := WriteStartScript(cfg); err != nil {
|
|
return err
|
|
}
|
|
|
|
// DO NOT VERIFY HERE.
|
|
// Verification happens in ensureProvisioned(), AFTER install.
|
|
return nil
|
|
}
|
|
|
|
/* ---------------------------------------------------------
|
|
STEAM GAMES
|
|
--------------------------------------------------------- */
|
|
if IsSteamGame(game) {
|
|
|
|
// 1. SteamCMD install
|
|
if err := steam.EnsureSteamCMD(); err != nil {
|
|
return fmt.Errorf("steamcmd install failed: %w", err)
|
|
}
|
|
|
|
// 2. Install game-specific content
|
|
switch game {
|
|
|
|
case "valheim":
|
|
if err := steam.InstallValheim(cfg); err != nil {
|
|
return err
|
|
}
|
|
|
|
case "rust":
|
|
if err := steam.InstallRust(cfg); err != nil {
|
|
return err
|
|
}
|
|
|
|
case "terraria":
|
|
if err := steam.InstallTerraria(cfg); err != nil {
|
|
return err
|
|
}
|
|
|
|
case "projectzomboid":
|
|
if err := steam.InstallProjectZomboid(cfg); err != nil {
|
|
return err
|
|
}
|
|
|
|
default:
|
|
return fmt.Errorf("unsupported steam game: %s", game)
|
|
}
|
|
|
|
// 3. Start script
|
|
if err := WriteStartScript(cfg); err != nil {
|
|
return err
|
|
}
|
|
|
|
// DO NOT VERIFY HERE (Steam verification TBD later)
|
|
return nil
|
|
}
|
|
|
|
/* ---------------------------------------------------------
|
|
UNKNOWN GAME TYPE
|
|
--------------------------------------------------------- */
|
|
return fmt.Errorf("unsupported game type: %s", game)
|
|
}
|