Paper 26.2 line: in-game fixes, agent snapshot bridge, spawn immunity and MySQL reconnect - #104
Merged
Merged
Conversation
Component J4. The snapshot described the bot's position, health and inventory but not the effects acting on it, so the bot could not see the spawn window it was standing in. That window changes what the correct opening is. Spawn grants Strength 3 for 5s, Resistance 1 for ~19s, Absorption 5, Haste for 30s and Slowness 1 for the first 3s. An engagement inside the strength window is favourable in a way it will not be forty seconds later, and the reflex tier cannot know that without remaining durations. Published for the self player only, alongside inventory, since effects on other players are not something the bot is entitled to read. Durations are milliseconds rather than ticks so nothing downstream has to know Minecraft's tick rate, and an infinite effect reports -1. Levels are one-based as the game displays them rather than Bukkit's zero-based amplifier. This also makes the effectActive atom admissible, which it was not before.
Routes to Joc.iniciarCommand, the same handler behind the blaze-rod "Inicia la partida" button, so canBeStartedBy and host privileges apply unchanged. An agent driving a real client cannot reliably trigger an inventory button, so a command gives it the same authority by a path that works.
The test compared signed deltas, so a player who only moved in -X/-Z, or only ever turned one way, never cleared immunity. It is set on every respawn, which left players unkillable for a whole life depending on which way they happened to face; in Quakecraft it also broke the railgun victim chain, which skips immune players. Affects all games.
100 ticks / 7500 ms capped the usable decision budget at 6750 ms, since a bot refuses a snapshot with less than its budget of life left - a live match discarded every reply the model produced. Now 40 ticks / 15000 ms. Safe because the snapshot carries only slow state: rosters, objective positions, phase. Fast state reaches the bot through its own client.
…7580% A connection left idle past wait_timeout (eight hours) is closed by the server but stays non-null in the field, and repairConnection only reopened a null one. So once the connection aged out it was never replaced and every query threw for the rest of the process's life. getAvgGameLength answered that failure with 0, and Joc.getGameProgressETA divides elapsed time by it. Zero makes the quotient Infinity, and Math.round(Infinity) is Long.MAX_VALUE, which the announcer divides by 10 and prints: the reported figure is exactly Long.MAX_VALUE / 10. One change per link in that chain. repairConnection now asks the connection whether it is valid and replaces it when it is not. getAvgGameLength treats an unusable database, and a game with no finished matches, as unknown - half an hour - rather than instant. Both getGameProgressETA implementations refuse to divide by a zero reference. Parkour has 354 finished matches averaging 132s, so the live reading came from the dead connection, not from missing history.
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.
Summary
Brings the line the Paper 26.2 server is built from onto
master. Until now it lived only on one machine. It continuesworktree/paper-26.2-migrationat718fbccand adds:61eae52,5556eb4): a loopback HTTP endpoint that publishes the match snapshot a bot needs to play, including the bot's own potion effect durations.0e15c1a): graceful game finalization and resilient match persistence, bounded asynchronous timestamp writes, runtime-world cleanup, Quakecraft and RainbowClay exception fixes, Torres, Arena 4, InkWars and Parkour gameplay fixes. This is the content of In-game stability and balance fixes #103 rebased onto the agent bridge./minicatstart(10c01c3): a command path to the same handler as the blaze-rod start button, socanBeStartedByand host privileges apply unchanged.e6a968f): the signed-delta test left players immune for a whole life when they only moved in -X/-Z; in Quakecraft it also broke the railgun victim chain. Affects all games.0a349fe) to 40 ticks / 15000 ms so a model turn fits inside a snapshot's life.ab68dea): an idle connection closed by the server was never replaced,getAvgGameLengthanswered 0, and the progress announcer printedLong.MAX_VALUE / 10as a percentage. Each link in that chain is fixed.Deployment state
The live server runs the 2026-08-10 build, which is
0e15c1aplus the content of10c01c3and0a349fe.e6a968fandab68deaare built and verified locally but not deployed yet. Builds are reproducible:ab68deabuilds to sha2563d27b9a0….Relation to open PRs
worktree/paper-26.2-migration) shares1cabda8and718fbccwith this branch; its two later fixes (c90ce80,dfea4b5) merge into this line without conflicts and the result compiles. They are not included here so Worktree/paper 26.2 migration #102 can land on its own.0e15c1a.CI
The Java CI job fails on every branch of this repository for one reason:
BielAPI:BielAPI:0.0.10-SNAPSHOTis resolved from the local Maven cache and is not available to the runner. It is not a compile failure.