feat(map): read worlds through Falco instead of the Minestom loader - #143
Merged
Conversation
Contributor
Test results138 files 138 suites 1m 1s ⏱️ Results for commit dd2c1aa. ♻️ This comment has been updated with latest results. |
Replace Minestom's AnvilLoader with net.onelitefeather:falco-anvil 1.0.0 for every map instance, in the game module as well as in the setup one. Falco reads a region file without serialising its readers, and a failed read throws instead of reporting the chunk as absent — which keeps the server from overwriting real data with a freshly generated chunk. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
theEvilReaper
force-pushed
the
feat/falco-chunk-loader
branch
from
August 4, 2026 08:15
92e056f to
b17e200
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
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.
Swaps the chunk loader of every map instance from Minestom's
AnvilLoadertonet.onelitefeather:falco-anvil:1.0.0, in the game module as well as in the setup one.Why
Falco reads a region file without serialising its readers, so several chunks can be read at the same time. A failed read throws instead of reporting the chunk as absent, which keeps the server from overwriting real map data with a freshly generated chunk.
Measured on the setup server against the same map, same machine, both loaders warm:
Summed time is used rather than wall clock because the reads were spread over a session with idle time between them, which stretches wall clock without saying anything about the loader.
What this brings with it
Closing.
FalcoAnvilLoaderholds its region files open and isAutoCloseable; Minestom's loader is neither.GameMapProviderkeeps every loader it opens and closes them from a shutdown task, a setup closes its own inreset().Instance registration. Aves'
AbstractMapProvider#registerInstancehard-wires the Minestom loader, and the released Aves1.16.1has no overload taking a loader factory.GameMapProvidertherefore registers its instances itself, mirroring what the Aves method does. The unreleased Aves branchfeat/chunk-loader-factoryadds that overload — once it ships, the private method here can go and call the Aves one again..gitignore. A prerequisite, not a drive-by: the unanchoreddata/entry for the LuckPerms runtime directory also hid thenet.onelitefeather.cygnus.setup.dataJava package, so no test could ever be added there. It is now anchored to the working directories a service actually runs in (/data/,/setup/data/,/game/data/).Tests
GameMapProviderIntegrationTest— lobby and game instance each get their own Falco loader,close()is repeatableInstanceSetupDataIntegrationTest— the loader is attached to the instance,reset()releases it,reset()without an instance is harmless./gradlew buildgreen.Not in this PR
The light engine (
falco-light) andfalco-instanceare untouched — this is the loader swap only. Cygnus sets no chunk supplier for lighting today, which is unchanged and therefore no regression.🤖 Generated with Claude Code