Files
bds-cli/cmd/run/bedrock.go
Matheus Sampaio Queiroga 5cd559b331 fix stdin command
Signed-off-by: Matheus Sampaio Queiroga <srherobrine20@gmail.com>
2025-07-01 17:48:28 -03:00

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()
}