Track storage inventories across Folia regions#293
Draft
Alexteens24 wants to merge 1 commit into
Draft
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.
What changed
Inventory#getHolder().Root cause
The listener used
getHolder(false)to determine whether every incoming inventory belonged to SmartSpawner. On modern versions, a player can retain a block inventory across a teleport. The player thread can therefore own region B while the block-backed inventory still belongs to region A, and merely resolving its holder performs a forbidden cross-region block-state read.Moving holder resolution into
InventoryCloseEventis not sufficient because the close itself may happen after the region change. Thread checks also require a safely known location first. Tracking only the virtual inventories SmartSpawner creates avoids touching unrelated block inventories entirely. Entity scheduling remains appropriate for operations that target the player because it follows the entity across regions.Impact
SmartSpawner no longer probes arbitrary chest or block inventories from its storage listeners, and storage viewer updates remain valid when players change Folia regions. This follows up on #292.
Validation
./gradlew :core:compileJavagit diff --check