plugin-agones-minestom when your gamemode or lobby runs on Minestom and should report
Agones state from player activity. In runtime-based servers, Agones is a provider-backed Grounds
module selected by module ID.
Once started, the module syncs Agones state from Minestom player events: the first player switches
the gameserver to Allocated, and the last player leaving switches it back to Ready.
plugin-agones-minestom 0.6.0 and newer exposes a GroundsModuleProvider with ID
grounds.agones.Requirements
Your Minestom pod must run with an Agones sidecar exposing the SDK onhttp://localhost:9358. The
Grounds Minestom image path configures this through the Agones-managed workload.
Your runtime application must use grounds-minestom-runtime and include the Agones Minestom module
on the runtime classpath.
Add the dependency
The module is published to thegroundsgg GitHub Packages Maven registry as
gg.grounds:plugin-agones-minestom.
build.gradle.kts
Select the provider
CalldiscoverProviders() and select grounds.agones in your runtime composition.
META-INF/services, validates it, creates the module,
and owns the lifecycle calls:
install(ctx)registers the player listeners.start()reconciles the initial Agones state and starts the fallback loop.stop()removes listeners, cancels the fallback task, and releases coroutine resources.
Discovery does not activate every provider on the classpath. The runtime starts Agones only when
you explicitly call
useProvider("grounds.agones").Manifest example
Keep the release module source ingrounds.yaml so teammates and CI use the same default.
grounds.yaml
modules lets the CLI replace plugin-agones with a local repository during development. Your
Gradle dependencies still define the actual runtime classpath.
State sync semantics
| Event | Resulting Agones state |
|---|---|
PlayerSpawnEvent when the server had no other players | Allocated |
PlayerSpawnEvent with existing players | No change |
PlayerDisconnectEvent that leaves the server empty | Ready |
| Fallback tick every 10 seconds | Reconciled from current player count |
All state transitions go through
AgonesHelper, which first fetches the gameserver state from the
sidecar and only sends Allocate or Ready when it differs. Repeat calls are no-ops.Label your GameServer
The Minestom module only handles state sync. For the Velocity proxy to discover your Minestom gameserver, you still need to follow the discovery contract:- deploy into the
gamesnamespace - add
grounds/server-type: <lobby|game|match>to theGameServerresource metadata - listen on port
25565in the pod
Low-level direct usage
GroundsPluginAgones still exposes direct enable() and disable() calls for non-runtime
embeds.
grounds-minestom-runtime, do not call enable() yourself. The runtime calls
install, start, and stop through the selected provider.
Failure modes
Provider was requested but not discovered
Provider was requested but not discovered
Grounds module provider grounds.agones was requested but not discovered means the runtime selected
the provider ID, but plugin-agones-minestom was not on the runtime classpath or did not expose the
provider service file. Use plugin-agones-minestom 0.6.0 or newer and rebuild the distribution.Agones sidecar unreachable
Agones sidecar unreachable
Errors from the sidecar are logged at error level through the class logger. The fallback loop keeps
retrying every 10 seconds, so a short sidecar outage is recovered automatically without any action
from your gamemode.
No Agones sidecar at all
No Agones sidecar at all
If your deployment has no Agones sidecar, every sidecar call fails. The module continues to run, but
cannot influence Agones state. In that setup, do not select
grounds.agones to keep logs clean.Next steps
- Read Minestom Runtime composition for the provider selection model.
- Read Local Minestom Modules to test local
Agones module changes during
grounds push. - Read the Velocity page to see how the proxy picks up this gameserver once it reaches a running Agones state.
