Note: This cannot happen on the Fabric/NeoForge versions since
async ticket level processing is not allowed, but can happen on
Paper. This change is made here so that Paper can
remain in sync.
Ticket level decreases may be handled asynchronously when the
off-thread invokes processTicketUpdates() when the main thread
is running ChunkHolderManager#tick(). This is because the ticket
update is queued during tick(), but not executed (invoking
processTicketUpdates) until after releasing the ticket lock.
This creates a small window for an off-thread to invoke
processTicketUpdates() and steal the update.
When the update is stolen, the full chunk status update (if any)
will be eventually queued to execute via the chunk task queue.
If the chunk queue is processed during the server tick at any
point other than the ChunkHolderManager tick, then any ticket
level decrease will violate an important invariant in the
Moonrise chunk system: ticket level decreases only occur during
ChunkHolderManager tick. This invariant exists to make interfacing
with the chunk system easier, especially working with off-thread
contexts.
This change is specifically made to work towards fixing
https://github.com/PaperMC/Folia/issues/363
If an exception is thrown during decompress then the read process
would be started again, which of course would eventually throw in
the decompress process.
* Use YamlConfig from Paper repo
* Add comment to settings
* Use ConcurrentUtil from Paper repo and use release of YamlConfig
* Use ConcurrentUtil release
The caller would block indefinitely if a sync load is requested
during shutdown. Rather than block indefinitely, we should throw
an exception to indicate to the caller that the chunk system is
unable to process requests.
1. For NearbyPlayers, we need to be using the view distance, and
not the load distance (which is +1 of the view distance).
2. Correctly clamp tick distance to view distance. Since
load distance is +1 of view distance, we need to subtract
one from the load distance when clamping.
Additionally, add checks inside ViewDistances to ensure that
the inputs are in range to catch future errors.
Our previous hack did not actually catch every case. For now,
it will only assume a constant collision shape of EMPTY for
air blocks.
Fixes https://github.com/PaperMC/Paper/issues/11697
* Change min/max section optimisations
* Correctly init dimension type
We need to initialise the field as early as possible in the constructor
to avoid problems.
Also, do not cache min/max section in EntityLookup. Note that mods
that implement worlds with variable heights will not work still,
as the entity slices expect a fixed height.
* Cache calculated height values
---------
Co-authored-by: Spottedleaf <Spottedleaf@users.noreply.github.com>