feat: game templates, schemas and validator
Validate game templates / validate (push) Successful in 10m6s
Validate game templates / validate (push) Successful in 10m6s
Public game templates for GBR Hosting, one games/<id>/game.yaml per game, imported from the panel. A Go tool validates them against JSON Schemas and checks for credentials, private addresses and consents that default to accepted; CI runs it on every push. Admin/RCON passwords are no longer shared defaults: they are blank with x-generate so the panel creates one per server, and Palworld/ARK no longer publish their RCON/REST ports. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
commit
822b44e2e5
20 files changed
+2283
No files matched your search
@@ -0,0 +1,387 @@
|
||||
# yaml-language-server: $schema=../../schema/game.schema.json
|
||||
id: minecraft-crossplay
|
||||
name: Minecraft (Crossplay Java & Bedrock)
|
||||
defaultDockerImage: itzg/minecraft-server:latest
|
||||
requiredMemoryMb: 4096
|
||||
requiredDiskMb: 8192
|
||||
defaultPorts:
|
||||
- 25565/tcp
|
||||
- 19132/udp
|
||||
- 19132/tcp
|
||||
installMethod: NONE
|
||||
installConfig:
|
||||
configPatches:
|
||||
- enabledWhen: '{config:XBOX_BROADCAST_ENABLED}'
|
||||
format: YAML
|
||||
path: plugins/Geyser-Spigot/extensions/mcxboxbroadcast/config.yml
|
||||
set:
|
||||
session.remote-address: '{config:XBOX_BROADCAST_REMOTE_ADDRESS}'
|
||||
session.remote-port: '{config:XBOX_BROADCAST_REMOTE_PORT}'
|
||||
files:
|
||||
- enabledWhen: '{config:XBOX_BROADCAST_ENABLED}'
|
||||
path: plugins/Geyser-Spigot/extensions/MCXboxBroadcastExtension.jar
|
||||
url: '{config:XBOX_BROADCAST_DOWNLOAD_URL}'
|
||||
defaultConfig:
|
||||
ALLOW_FLIGHT: true
|
||||
DIFFICULTY: easy
|
||||
ENABLE_RCON: true
|
||||
ENABLE_WHITELIST: false
|
||||
ENFORCE_WHITELIST: false
|
||||
EULA: false
|
||||
HARDCORE: false
|
||||
JVM_OPTS: -DgeyserTransport=nethernet -DgeyserAdvertiseAddresses={PUBLIC_IP}:{PUBLIC_PORT_19132}
|
||||
MAX_PLAYERS: 20
|
||||
MEMORY: 4G
|
||||
MODE: survival
|
||||
MOTD: GBRHosting - {SERVER_NAME}
|
||||
ONLINE_MODE: true
|
||||
PAPER_CHANNEL: default
|
||||
PLUGINS: https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot,https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot,https://api.spiget.org/v2/resources/19254/download
|
||||
PVP: true
|
||||
RCON_PASSWORD: ""
|
||||
RCON_PORT: 25575
|
||||
SERVER_PORT: 25565
|
||||
TYPE: PAPER
|
||||
USE_AIKAR_FLAGS: true
|
||||
VERSION: LATEST
|
||||
XBOX_BROADCAST_DOWNLOAD_URL: https://github.com/MCXboxBroadcast/Broadcaster/releases/download/159/MCXboxBroadcastExtension.jar
|
||||
XBOX_BROADCAST_ENABLED: true
|
||||
XBOX_BROADCAST_REMOTE_ADDRESS: '{PUBLIC_HOST}'
|
||||
XBOX_BROADCAST_REMOTE_PORT: '{PUBLIC_PORT_19132}'
|
||||
configSchema:
|
||||
$schema: http://json-schema.org/draft-07/schema#
|
||||
properties:
|
||||
ALLOW_FLIGHT:
|
||||
category: Gameplay & Rules
|
||||
default: true
|
||||
description: Required for Bedrock and Geyser crossplay compatibility to prevent phantom kick events.
|
||||
title: Allow Flight
|
||||
type: boolean
|
||||
DIFFICULTY:
|
||||
category: Gameplay & Rules
|
||||
default: easy
|
||||
description: The world difficulty level.
|
||||
enum:
|
||||
- peaceful
|
||||
- easy
|
||||
- normal
|
||||
- hard
|
||||
title: Difficulty
|
||||
type: string
|
||||
ENABLE_RCON:
|
||||
category: Security & Access
|
||||
default: true
|
||||
description: Enables remote console (RCON) access for GBR action buttons and player moderation.
|
||||
title: Enable RCON
|
||||
type: boolean
|
||||
ENABLE_WHITELIST:
|
||||
category: Security & Access
|
||||
default: false
|
||||
description: When enabled, only players listed in the whitelist are permitted to join.
|
||||
title: Enable Whitelist
|
||||
type: boolean
|
||||
ENFORCE_WHITELIST:
|
||||
category: Security & Access
|
||||
default: false
|
||||
description: Enforces whitelist immediately upon server startup and reloading.
|
||||
title: Enforce Whitelist
|
||||
type: boolean
|
||||
EULA:
|
||||
category: System & General
|
||||
default: false
|
||||
description: Minecraft requires every server owner to accept Mojang's End User License Agreement. The server will not start without it.
|
||||
showOnDeploy: true
|
||||
title: Minecraft EULA
|
||||
type: boolean
|
||||
x-consent:
|
||||
label: I have read and agree to the Minecraft End User License Agreement (EULA)
|
||||
linkText: Read the Minecraft EULA
|
||||
url: https://aka.ms/MinecraftEULA
|
||||
HARDCORE:
|
||||
category: Gameplay & Rules
|
||||
default: false
|
||||
description: Players are permanently switched to spectator mode upon death.
|
||||
title: Hardcore Mode
|
||||
type: boolean
|
||||
JVM_OPTS:
|
||||
category: System & General
|
||||
default: -DgeyserTransport=nethernet -DgeyserAdvertiseAddresses={PUBLIC_IP}:{PUBLIC_PORT_19132}
|
||||
description: Extra JVM flags. Enables Geyser NetherNet (required for Bedrock 26.60+, Oct 27 2026). {PUBLIC_IP} and {PUBLIC_PORT_19132} are filled in by GBR with the address players reach (relay, dedicated IP or node).
|
||||
title: JVM Options
|
||||
type: string
|
||||
MAX_PLAYERS:
|
||||
category: System & General
|
||||
default: 20
|
||||
description: The maximum number of concurrent players allowed on the server.
|
||||
title: Max Players
|
||||
type: integer
|
||||
MEMORY:
|
||||
category: System & General
|
||||
default: 4G
|
||||
description: Maximum heap memory allocated to the Java process (e.g. 4G, 6G, 8G).
|
||||
title: Memory Allocation
|
||||
type: string
|
||||
MODE:
|
||||
category: Gameplay & Rules
|
||||
default: survival
|
||||
description: Default game mode for players.
|
||||
enum:
|
||||
- survival
|
||||
- creative
|
||||
- adventure
|
||||
- spectator
|
||||
title: Game Mode
|
||||
type: string
|
||||
MOTD:
|
||||
category: System & General
|
||||
default: GBRHosting - {SERVER_NAME}
|
||||
description: Server name shown in the Java server list and to Bedrock/console friends. Defaults to "GBRHosting - <your server name>"; type anything to change it.
|
||||
title: Message of the Day
|
||||
type: string
|
||||
ONLINE_MODE:
|
||||
category: Security & Access
|
||||
default: true
|
||||
description: Validates Java accounts with Mojang. Floodgate handles Bedrock account authentication automatically.
|
||||
title: Online Mode
|
||||
type: boolean
|
||||
PAPER_CHANNEL:
|
||||
category: System & General
|
||||
default: default
|
||||
description: Keep set to 'default' for rock-solid stability with Geyser crossplay. Use 'experimental' only for test builds.
|
||||
enum:
|
||||
- default
|
||||
- experimental
|
||||
title: Paper Release Channel
|
||||
type: string
|
||||
PLUGINS:
|
||||
category: System & General
|
||||
default: https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot,https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot,https://api.spiget.org/v2/resources/19254/download
|
||||
description: Download URLs for Geyser, Floodgate, and ViaVersion for permanent crossplay compatibility.
|
||||
title: Plugins List / URLs
|
||||
type: string
|
||||
PVP:
|
||||
category: Gameplay & Rules
|
||||
default: true
|
||||
description: Allows players to attack and deal damage to one another.
|
||||
title: Enable PvP
|
||||
type: boolean
|
||||
RCON_PASSWORD:
|
||||
category: Security & Access
|
||||
default: ""
|
||||
description: Password GBR uses for RCON actions. RCON is only reachable from the host node. Leave blank and GBR generates one for your server.
|
||||
title: RCON Password
|
||||
type: string
|
||||
x-generate:
|
||||
type: password
|
||||
replace:
|
||||
- minecraft
|
||||
RCON_PORT:
|
||||
category: Security & Access
|
||||
default: 25575
|
||||
description: TCP port for remote console. Only reachable from the host node (not published publicly); GBR uses it for actions and player moderation.
|
||||
title: RCON Port
|
||||
type: integer
|
||||
SERVER_PORT:
|
||||
category: System & General
|
||||
default: 25565
|
||||
description: The TCP network port on which Java Edition Minecraft players connect.
|
||||
title: Java Server Port
|
||||
type: integer
|
||||
TYPE:
|
||||
category: System & General
|
||||
default: PAPER
|
||||
description: The Minecraft server distribution to run. PAPER provides high performance and plugin support.
|
||||
title: Server Software Type
|
||||
type: string
|
||||
USE_AIKAR_FLAGS:
|
||||
category: System & General
|
||||
default: true
|
||||
description: Applies tuned JVM garbage collection flags designed to reduce lag spikes on Paper servers.
|
||||
title: Use Aikar's Flags
|
||||
type: boolean
|
||||
VERSION:
|
||||
category: System & General
|
||||
default: LATEST
|
||||
description: The version of Minecraft to run. With ViaVersion installed, newer clients can always connect even if the server is on the stable release.
|
||||
title: Minecraft Version
|
||||
type: string
|
||||
XBOX_BROADCAST_DOWNLOAD_URL:
|
||||
category: Crossplay & Friends Broadcast
|
||||
default: https://github.com/MCXboxBroadcast/Broadcaster/releases/download/159/MCXboxBroadcastExtension.jar
|
||||
description: Pinned extension build. Update this URL to upgrade (or point it at your own mirror).
|
||||
title: MCXboxBroadcast Extension URL
|
||||
type: string
|
||||
XBOX_BROADCAST_ENABLED:
|
||||
category: Crossplay & Friends Broadcast
|
||||
default: true
|
||||
description: Shows this server in Xbox/PlayStation/Switch friends lists via a spare Microsoft account. Unofficial and not affiliated with Microsoft or Mojang; use a spare account. On first start, sign in with the code shown on the server's Overview page.
|
||||
title: Friends Broadcast (MCXboxBroadcast)
|
||||
type: boolean
|
||||
XBOX_BROADCAST_REMOTE_ADDRESS:
|
||||
category: Crossplay & Friends Broadcast
|
||||
default: '{PUBLIC_HOST}'
|
||||
description: Address friends are sent to when they join. {PUBLIC_HOST} is filled in with this server's relay/public address. Never leave this as 'auto' behind the relay (it would expose the node's home IP).
|
||||
title: Broadcast Join Address
|
||||
type: string
|
||||
XBOX_BROADCAST_REMOTE_PORT:
|
||||
category: Crossplay & Friends Broadcast
|
||||
default: '{PUBLIC_PORT_19132}'
|
||||
description: Bedrock port friends are sent to. {PUBLIC_PORT_19132} is filled in with the public Bedrock port.
|
||||
title: Broadcast Join Port
|
||||
type: string
|
||||
required:
|
||||
- EULA
|
||||
type: object
|
||||
configFileFormat: INI
|
||||
configFormatOptions:
|
||||
assignment: =
|
||||
falseValue: "false"
|
||||
footer: ""
|
||||
header: ""
|
||||
quoteStrings: false
|
||||
separator: ""
|
||||
trueValue: "true"
|
||||
unquotedKeys: []
|
||||
uppercaseKeys: false
|
||||
agnosticCommandConfig:
|
||||
actions:
|
||||
Ban:
|
||||
command: ban {target}
|
||||
passwordKey: RCON_PASSWORD
|
||||
portKey: RCON_PORT
|
||||
type: RCON
|
||||
Broadcast:
|
||||
command: say {message}
|
||||
passwordKey: RCON_PASSWORD
|
||||
portKey: RCON_PORT
|
||||
type: RCON
|
||||
Kick:
|
||||
command: kick {target}
|
||||
passwordKey: RCON_PASSWORD
|
||||
portKey: RCON_PORT
|
||||
type: RCON
|
||||
RefreshBroadcastSignIn:
|
||||
command: mcxboxbroadcast restart
|
||||
type: STDIN
|
||||
Save:
|
||||
command: save-all
|
||||
passwordKey: RCON_PASSWORD
|
||||
portKey: RCON_PORT
|
||||
type: RCON
|
||||
connectedAccountsConfig:
|
||||
authType: MINECRAFT_BEDROCK
|
||||
authUrl: https://www.microsoft.com/link
|
||||
buttonLabel: Connect Account
|
||||
clientId: "0000000048183522"
|
||||
defaultPort: 19132
|
||||
description: Hook spare Microsoft/Xbox accounts to keep your server visible in friends' tabs on Xbox, PlayStation, and Nintendo Switch 24/7.
|
||||
deviceCodeUrl: https://login.live.com/oauth20_connect.srf
|
||||
dynamicVariables:
|
||||
- refreshMinutes: 360
|
||||
select:
|
||||
releaseType: release
|
||||
type: HTTP_JSON
|
||||
url: https://raw.githubusercontent.com/PrismarineJS/minecraft-data/master/data/bedrock/common/protocolVersions.json
|
||||
vars:
|
||||
BEDROCK_PROTOCOL: version
|
||||
BEDROCK_VERSION: minecraftVersion
|
||||
enabled: false
|
||||
gameVersion: '{BEDROCK_VERSION}'
|
||||
maxAccounts: 5
|
||||
mpsdProperties:
|
||||
BroadcastSetting: 3
|
||||
CrossPlayDisabled: false
|
||||
Joinability: joinable_by_friends
|
||||
LanGame: false
|
||||
MaxMemberCount: '{config:MAX_PLAYERS}'
|
||||
MemberCount: 1
|
||||
OnlineCrossPlatformGame: true
|
||||
SupportedConnections:
|
||||
- ConnectionType: 6
|
||||
HostIpAddress: '{SERVER_HOST}'
|
||||
HostPort: '{SERVER_PORT}'
|
||||
RakNetGUID: ""
|
||||
TitleId: 0
|
||||
TransportLayer: 2
|
||||
hostName: '{SERVER_HOST}'
|
||||
isEditorWorld: false
|
||||
isHardcore: '{config:HARDCORE}'
|
||||
levelId: level
|
||||
ownerId: '{XUID}'
|
||||
protocol: '{BEDROCK_PROTOCOL}'
|
||||
rakNetGUID: '{RAKNET_GUID}'
|
||||
version: '{BEDROCK_VERSION}'
|
||||
worldName: '{config:MOTD}'
|
||||
worldType: Survival
|
||||
provider: MICROSOFT_XBOX
|
||||
providerLabel: Xbox / Microsoft Gamertag
|
||||
rtaConnection: true
|
||||
scope: service::user.auth.xboxlive.com::MBI_SSL
|
||||
serviceConfigId: 4fc10100-5f7a-4470-899b-280835760c07
|
||||
sessionTemplateName: MinecraftLobby
|
||||
title: Crossplay Friends Broadcast
|
||||
titleId: "1739947436"
|
||||
tokenUrl: https://login.live.com/oauth20_token.srf
|
||||
connectionGuides:
|
||||
- actionText: Link Account
|
||||
actionUrl: https://www.microsoft.com/link
|
||||
badge: Crossplay
|
||||
id: console
|
||||
steps:
|
||||
- Add the broadcast account (shown on the server's Overview page after sign-in) as a friend on your console or in the Xbox app.
|
||||
- Open Minecraft and go to Play → Friends.
|
||||
- Under 'Joinable Friends', select the server to join.
|
||||
title: Console (Xbox, PS, Switch)
|
||||
- actionText: 1-Click Connect
|
||||
actionUrl: minecraft://?addExternalServer={SERVER_NAME}|{CONNECTION_HOST}:{BEDROCK_PORT}
|
||||
id: bedrock-direct
|
||||
steps:
|
||||
- Open Minecraft (Bedrock Edition) -> Play -> Servers -> Add Server.
|
||||
- 'Server Name: {SERVER_NAME}'
|
||||
- 'Server Address: {CONNECTION_HOST}'
|
||||
- 'Port: {BEDROCK_PORT}'
|
||||
title: Bedrock (Mobile, Win10)
|
||||
- id: java-direct
|
||||
steps:
|
||||
- Open Minecraft (Java Edition) -> Multiplayer -> Add Server.
|
||||
- 'Server Address: {CONNECTION_HOST}:{PORT}'
|
||||
title: Java Edition (PC, Mac)
|
||||
consoleSignIn:
|
||||
codePattern: open the page\s+(https://\S+)\s+and enter the code\s+([A-Z0-9-]+)
|
||||
codeTtlMinutes: 5
|
||||
description: Shows this server in Xbox, PlayStation and Switch friends lists using a spare Microsoft account. Unofficial - not affiliated with Microsoft or Mojang.
|
||||
enabledConfigKey: XBOX_BROADCAST_ENABLED
|
||||
failurePattern: Failed to get/refresh auth token
|
||||
refreshAction: RefreshBroadcastSignIn
|
||||
signInHint: Sign in with a SPARE Microsoft account, never your main one. Enter the code within 5 minutes.
|
||||
signedInHint: Add this account as a friend on your console or in the Xbox app, then join from Play → Friends.
|
||||
successPattern: Successfully authenticated as (.+?) \((\d+)\)
|
||||
title: Crossplay Friends Broadcast
|
||||
deviceCodePattern: open the page\s+(https://\S+)\s+and enter the code\s+([A-Z0-9-]+)
|
||||
deviceCodeTitle: Friends Broadcast sign-in required
|
||||
joinButtonLabel: How to Join
|
||||
joinModalTitle: How to Join This Server
|
||||
pingPort: 25565
|
||||
pingPortKey: SERVER_PORT
|
||||
playerJoinRegex: :\s+([a-zA-Z0-9_.*]+) joined the game
|
||||
playerLeaveRegex: :\s+([a-zA-Z0-9_.*]+) left the game
|
||||
playersCommand: null
|
||||
playersFormat: null
|
||||
playersRegex: null
|
||||
queryPortKey: null
|
||||
queryType: MINECRAFT_PING
|
||||
rconPasswordKey: RCON_PASSWORD
|
||||
rconPortKey: RCON_PORT
|
||||
restEndpoint: null
|
||||
restPasswordKey: null
|
||||
restPortKey: null
|
||||
restUser: null
|
||||
backupPaths:
|
||||
- world
|
||||
- world_nether
|
||||
- world_the_end
|
||||
- plugins
|
||||
- config
|
||||
- server.properties
|
||||
maxBackupSizeMb: 8192
|
||||
maxPlayersConfigKey: MAX_PLAYERS
|
||||
@@ -0,0 +1,5 @@
|
||||
# yaml-language-server: $schema=../../schema/test.schema.json
|
||||
# Values CI uses to boot-test this game. Never put real credentials here: map them under 'secrets'.
|
||||
config:
|
||||
EULA: true
|
||||
timeoutSec: 900
|
||||
Reference in new issue
Block a user