Signed-off-by: Matheus Sampaio Queiroga <srherobrine20@gmail.com>
81 lines
2.0 KiB
Go
81 lines
2.0 KiB
Go
package run
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/urfave/cli/v3"
|
|
"sirherobrine23.com.br/go-bds/bds-cli/app/config"
|
|
"sirherobrine23.com.br/go-bds/go-bds/bedrock"
|
|
"sirherobrine23.com.br/go-bds/request/v2"
|
|
)
|
|
|
|
var (
|
|
StaticBedrockVersions = "https://sirherobrine23.com.br/go-bds/BedrockFetch/raw/branch/main/versions.json"
|
|
BedrockVersions bedrock.Versions = bedrock.Versions{}
|
|
)
|
|
|
|
func GetBedrockVersions() error {
|
|
if _, err := request.DoJSON(StaticBedrockVersions, &BedrockVersions, nil); err != nil {
|
|
if v, ok := err.(*request.ResponseError); ok {
|
|
if v.Response.StatusCode != 200 {
|
|
BedrockVersions = BedrockVersions[:0]
|
|
return BedrockVersions.FetchFromMinecraftDotNet()
|
|
}
|
|
}
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func Bedrock(ctx context.Context, c *cli.Command, appConfig *config.Config) (err error) {
|
|
versionFolder, cwd, upper, workdir := config.GetFolders(ctx)
|
|
versionFolder = filepath.Join(versionFolder, "bedrock")
|
|
if _, err := os.Stat(versionFolder); os.IsNotExist(err) {
|
|
if err = os.MkdirAll(versionFolder, 0777); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
fmt.Fprintln(os.Stderr, "Getting bedrock versions...")
|
|
if err = GetBedrockVersions(); err != nil {
|
|
return
|
|
}
|
|
|
|
var bdsVersion *bedrock.Version
|
|
if appConfig.Version == "latest" {
|
|
bdsVersion = BedrockVersions.LatestStable()
|
|
} else {
|
|
bdsVersion, err = BedrockVersions.Get(appConfig.Version)
|
|
}
|
|
|
|
// return error if exists
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
// Mount struct to run bedrock server
|
|
fmt.Fprintln(os.Stderr, "Starting server ...")
|
|
var serverExec *bedrock.Bedrock
|
|
if serverExec, err = bedrock.NewBedrock(bdsVersion, versionFolder, cwd, upper, workdir); err != nil {
|
|
return
|
|
}
|
|
|
|
serverExec.PID.AppendToStderr(os.Stderr)
|
|
serverExec.PID.AppendToStdout(os.Stdout)
|
|
go io.Copy(serverExec.PID, os.Stdin)
|
|
|
|
if err := serverExec.Start(); err != nil {
|
|
return fmt.Errorf("cannot start server: %s", err)
|
|
}
|
|
if serverExec.Overlayfs != nil {
|
|
defer serverExec.Overlayfs.Unmount()
|
|
}
|
|
|
|
return serverExec.PID.Wait()
|
|
}
|