fix: report live player presence from game servers - #13
Open
FllipEis wants to merge 2 commits into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The controller needs a live source of truth from both proxies and game servers to repair stale cached player presence. Previously only Velocity and BungeeCord exposed the presence responder, leaving normal servers unverifiable.
This change enables the presence comparison responder on Spigot, legacy Spigot, Paper, Folia, Fabric, and NeoForge. Each platform reports its live player set and returns a full snapshot only when the controller's deterministic count-plus-placement fingerprint differs. The fingerprint contract is covered by a cross-language fixed-value test and detects equal-count player swaps.
The shared Java types now use generic names because they serve proxies and game servers:
ProxyPresenceResponder→PresenceResponderProxyPresencePlayer→PresencePlayerProxyPresencePlayerProvider→PresencePlayerProvidergetProxyPresencePlayers()→getPresencePlayers()Proxy-specific session tracking and generated protobuf names remain unchanged.
Validation:
./gradlew test -x :api:openApiGenerate -x :api:fixOpenApiGeneratedCode -x :api:prepareGeneratedSourcesThe OpenAPI generation tasks are excluded because the current generated controller schema on
mainno longer exposesModelsPatchServerRequest.setPlayerCount, while the existing handwritten client still calls it. That unrelated mismatch also blocks an unmodified full generated build.Deployment: