Mod loading, disgusting struct parsing

This commit is contained in:
comp500
2019-04-27 16:54:27 +01:00
parent db7c837bfa
commit 5f92843226
5 changed files with 87 additions and 7 deletions

View File

@@ -1,5 +1,9 @@
package core
import "github.com/BurntSushi/toml"
import (
"errors"
"github.com/BurntSushi/toml"
)
// Mod stores metadata about a mod. This is written to a TOML file for each mod.
type Mod struct {
@@ -13,7 +17,7 @@ type Mod struct {
HashFormat string `toml:"hash-format"`
Hash string `toml:"hash"`
} `toml:"download"`
Update map[string]toml.Primitive `toml:"update"`
Update map[string]interface{} `toml:"update"`
}
// The three possible values of Side (the side that the mod is on) are "server", "client", and "both".
@@ -23,6 +27,28 @@ const (
UniversalSide = "both"
)
// LoadMod attempts to load a mod file from a path
func LoadMod(modFile string) (Mod, error) {
var mod Mod
if _, err := toml.DecodeFile(modFile, &mod); err != nil {
return Mod{}, err
}
// Horrible reflection library to convert to Updaters
for k, v := range mod.Update {
updateParser, ok := UpdateParsers[k]
if ok {
updater, err := updateParser.ParseUpdate(v)
if err != nil {
return mod, err
}
mod.Update[k] = updater
} else {
return mod, errors.New("Update plugin " + k + " not found!")
}
}
return mod, nil
}
func (m Mod) Write() {
}