diff --git a/cli/cmd/inspect/command.go b/cli/cmd/inspect/command.go index ef6674e7..570a224e 100644 --- a/cli/cmd/inspect/command.go +++ b/cli/cmd/inspect/command.go @@ -79,6 +79,8 @@ func NewCommand(ctx context.Context, cliCtx cli.Context) *cobra.Command { versionData.AddRow(indent3+v.Version+":", "") versionData.AddRow(indent4+"ID:", v.Id) versionData.AddRow(indent4+"Minecraft version"+":", v.MinecraftVersion) + versionData.AddRow(indent4+"Min Players"+":", v.MinPlayers) + versionData.AddRow(indent4+"Max Players"+":", v.MaxPlayers) versionData.AddRow(indent4+"Created at:", fmtTime(v.CreatedAt)) versionData.AddRow(indent4+"Build status:", v.BuildStatus) versionData.Print() diff --git a/cli/cmd/publish/builder.go b/cli/cmd/publish/builder.go index c0ccd7f4..f366aa5f 100644 --- a/cli/cmd/publish/builder.go +++ b/cli/cmd/publish/builder.go @@ -216,6 +216,8 @@ func (b builder) handlePrerequisites(ctx context.Context, data *buildData) error Hash: data.local.hash, FileHashes: hashes, MinecraftVersion: data.local.minecraftVersion, + MinPlayers: data.local.minPlayers, + MaxPlayers: data.local.maxPlayers, }) if err != nil { return fmt.Errorf("error while creating flavor version: %w", err) diff --git a/cli/cmd/publish/plan.go b/cli/cmd/publish/plan.go index a812215f..d03782d1 100644 --- a/cli/cmd/publish/plan.go +++ b/cli/cmd/publish/plan.go @@ -107,13 +107,14 @@ type actionable struct { } type plan struct { - addedFlavors []localFlavor - changedFlavors []changedFlavor - deletedFlavors []deletedFlavor - actionables []actionable - conflicts []conflict - updateThumbnail bool - chunkWillBeRemoved bool + addedFlavors []localFlavor + changedFlavors []changedFlavor + deletedFlavors []deletedFlavor + actionables []actionable + conflicts []conflict + updateThumbnail bool + chunkWillBeRemoved bool + minOrMaxPlayersChanged bool } func newPlan(logger *slog.Logger, cfg config.Config, supportedVersions []string, chunk *chunkv1alpha1.Chunk) plan { @@ -140,6 +141,8 @@ func newPlan(logger *slog.Logger, cfg config.Config, supportedVersions []string, version: f.Version, path: f.Path, minecraftVersion: f.MinecraftVersion, + minPlayers: uint32(f.MinPlayers), + maxPlayers: uint32(f.MaxPlayers), } if !slices.Contains(supportedVersions, local.minecraftVersion) { @@ -198,12 +201,18 @@ func newPlan(logger *slog.Logger, cfg config.Config, supportedVersions []string, added, changed, removed = local.fileDiff(prevVersion.FileHashes) ) + if prevVersion.MinPlayers != local.minPlayers || prevVersion.MaxPlayers != local.maxPlayers { + p.minOrMaxPlayersChanged = true + } + p.changedFlavors = append(p.changedFlavors, changedFlavor{ - onDisk: local, - prevVersion: prevVersion.Version, - addedFiles: added, - modifiedFiles: changed, - removedFiles: removed, + onDisk: local, + prevVersion: prevVersion.Version, + prevMinPlayers: prevVersion.MinPlayers, + prevMaxPlayers: prevVersion.MaxPlayers, + addedFiles: added, + modifiedFiles: changed, + removedFiles: removed, }) continue } @@ -344,6 +353,8 @@ func (p plan) print() { sec.AddRow(cli.ColorGreen+indent1+fl.name+":", "") sec.AddRow(indent2+addPrefix+"Version:", fl.version) sec.AddRow(indent2+addPrefix+"Path:", fl.path) + sec.AddRow(indent2+addPrefix+"Min Players:", fl.minPlayers) + sec.AddRow(indent2+addPrefix+"Max Players:", fl.maxPlayers) sec.AddRow(indent2+addPrefix+"Files:", "") sec.Print() for _, fi := range fl.files { @@ -359,8 +370,15 @@ func (p plan) print() { sec.AddRow(cli.ColorYellow+indent1+fl.onDisk.name+":", "") sec.AddRow(indent2+modPrefix+"Version:", fmt.Sprintf("%s -> %s", fl.prevVersion, fl.onDisk.version)) sec.AddRow(indent2+modPrefix+"Path:", fl.onDisk.path) - sec.AddRow(indent2+modPrefix+"Files:", "") + sec.AddRow(indent2+modPrefix+"Min Players:", fmt.Sprintf("%d -> %d", fl.prevMinPlayers, fl.onDisk.minPlayers)) + sec.AddRow(indent2+modPrefix+"Max Players:", fmt.Sprintf("%d -> %d", fl.prevMaxPlayers, fl.onDisk.maxPlayers)) + + if len(fl.addedFiles)+len(fl.modifiedFiles)+len(fl.removedFiles) > 0 { + sec.AddRow(indent2+modPrefix+"Files:", "") + } + sec.Print() + for _, fh := range fl.addedFiles { fmt.Println(indent3, addPrefix, fh.Path) } diff --git a/cli/cmd/publish/publish.go b/cli/cmd/publish/publish.go index ecb5e72b..53d9f4e5 100644 --- a/cli/cmd/publish/publish.go +++ b/cli/cmd/publish/publish.go @@ -39,11 +39,13 @@ import ( ) type changedFlavor struct { - onDisk localFlavor - prevVersion string - addedFiles []file.Hash - modifiedFiles []file.Hash - removedFiles []file.Hash + onDisk localFlavor + prevVersion string + prevMinPlayers uint32 + prevMaxPlayers uint32 + addedFiles []file.Hash + modifiedFiles []file.Hash + removedFiles []file.Hash } type localFlavor struct { @@ -53,6 +55,8 @@ type localFlavor struct { path string hash string files []file.Hash + minPlayers uint32 + maxPlayers uint32 } type deletedFlavor struct { @@ -196,7 +200,8 @@ func NewCommand(ctx context.Context, cliCtx cli.Context) *cobra.Command { len(plan.changedFlavors)+ len(plan.actionables)+ len(plan.deletedFlavors) == 0 && - !plan.updateThumbnail { + !plan.updateThumbnail && + !plan.minOrMaxPlayersChanged { fmt.Println("Nothing to publish.") return nil } diff --git a/cli/config/config.go b/cli/config/config.go index d1c7e935..7db51c47 100644 --- a/cli/config/config.go +++ b/cli/config/config.go @@ -28,6 +28,8 @@ type Flavor struct { Version string `json:"version"` MinecraftVersion string `json:"minecraftVersion"` Path string `json:"path"` + MinPlayers int `json:"minPlayers"` + MaxPlayers int `json:"maxPlayers"` } var schemaV1Alpha1 = zog.Struct(zog.Shape{ @@ -42,6 +44,8 @@ var schemaV1Alpha1 = zog.Struct(zog.Shape{ "version": zog.String().Required(), "minecraftVersion": zog.String().Required(), "path": zog.String().Required(), + "minPlayers": zog.Int().GTE(1).Required(), + "maxPlayers": zog.Int().GTE(1).Required(), })), }), })