68 lines
1.5 KiB
Go
68 lines
1.5 KiB
Go
package resources
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"gopkg.in/yaml.v2"
|
|
)
|
|
|
|
type ConsoleConfig struct {
|
|
Debug bool `yaml:"debug"`
|
|
}
|
|
|
|
type PluginsConfig struct {
|
|
Folder string `yaml:"folder"`
|
|
}
|
|
|
|
type Config struct {
|
|
ServerName string `yaml:"server-name"`
|
|
ServerIP string `yaml:"server-ip"`
|
|
ServerPort int `yaml:"server-port"`
|
|
MaxPlayers int `yaml:"max-players"`
|
|
MOTD string `yaml:"motd"`
|
|
MotdProtocol int `yaml:"motd-protocol"`
|
|
Console ConsoleConfig `yaml:"console"`
|
|
Plugins PluginsConfig `yaml:"plugins"`
|
|
}
|
|
|
|
func DefaultConfig() *Config {
|
|
return &Config{
|
|
ServerName: "Frodding Server",
|
|
ServerIP: "0.0.0.0",
|
|
ServerPort: 19132,
|
|
MaxPlayers: 20,
|
|
MOTD: "A Frodding Server",
|
|
Console: ConsoleConfig{Debug: false},
|
|
Plugins: PluginsConfig{Folder: "plugins"},
|
|
}
|
|
}
|
|
|
|
func LoadConfig(path string) (*Config, error) {
|
|
cfg := DefaultConfig()
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
if saveErr := SaveConfig(path, cfg); saveErr != nil {
|
|
fmt.Printf("[Frodding] Warning: could not save default config: %v\n", saveErr)
|
|
} else {
|
|
fmt.Println("[Frodding] Created default server.yml")
|
|
}
|
|
return cfg, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
if err := yaml.Unmarshal(data, cfg); err != nil {
|
|
return nil, err
|
|
}
|
|
return cfg, nil
|
|
}
|
|
|
|
func SaveConfig(path string, cfg *Config) error {
|
|
data, err := yaml.Marshal(cfg)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return os.WriteFile(path, data, 0o644)
|
|
}
|