54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
package minecraft
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"zlh-agent/internal/state"
|
|
)
|
|
|
|
/*
|
|
EnforceForgeServerProperties
|
|
- Runs AFTER first Forge/NeoForge server start
|
|
- Ensures Velocity-compatible settings
|
|
- Requires restart to take effect
|
|
*/
|
|
func EnforceForgeServerProperties(cfg state.Config) error {
|
|
variant := strings.ToLower(cfg.Variant)
|
|
if variant != "forge" && variant != "neoforge" {
|
|
return nil
|
|
}
|
|
|
|
// Forge working directory is authoritative
|
|
serverDir := filepath.Join("/opt/zlh/minecraft", variant, "world")
|
|
propsPath := filepath.Join(serverDir, "server.properties")
|
|
|
|
data, err := os.ReadFile(propsPath)
|
|
if err != nil {
|
|
return fmt.Errorf("read server.properties: %w", err)
|
|
}
|
|
|
|
lines := strings.Split(string(data), "\n")
|
|
found := false
|
|
|
|
for i, l := range lines {
|
|
if strings.HasPrefix(l, "online-mode=") {
|
|
lines[i] = "online-mode=false"
|
|
found = true
|
|
}
|
|
}
|
|
|
|
if !found {
|
|
lines = append(lines, "online-mode=false")
|
|
}
|
|
|
|
out := strings.Join(lines, "\n")
|
|
if err := os.WriteFile(propsPath, []byte(out), 0644); err != nil {
|
|
return fmt.Errorf("write server.properties: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|