Commit Graph

296 Commits

Author SHA1 Message Date
Spottedleaf 25ee657a82 Add missing synchronisation for map data
Fixes possible CME when accessing the map data storage
2024-04-11 17:07:12 -07:00
Spottedleaf 6b9a96f604 Update Paper 2024-04-11 17:03:29 -07:00
Spottedleaf ef2c697189 Properly handle unticked hopper tick adjustment
For unticked hoppers, we should use MIN_VALUE as a marker
so that they compare equivalently regardless of whether they've
been through a region merge.
2024-03-28 18:43:02 -07:00
Spottedleaf e50d09b67b Use redstone time in a few appropriate areas
1. Moving piston last tick
2. Living entity last damage stamp
3. Entity piston deltas

This should resolve primarily timing problems using pistons.
2024-03-28 18:38:09 -07:00
Spottedleaf a9e9e5f7e0 Use ThreadLocal for SignItem#openSign
This fixes cross-region data access where there shouldn't be any
2024-03-28 18:38:09 -07:00
Spottedleaf e73566fdc2 Use redstone game time for hopper tickedGameTime
This should fix timing inconsistencies for hoppers
2024-03-28 18:38:09 -07:00
Jason Penilla 7bc84f49be
Add missing remove event cause (fixes tests) 2024-03-27 12:17:09 -07:00
Spottedleaf 3a91a4a5cf Allow off-region access to entities not added to world
This should allow worldgen threads to interact with the entity.

Fixes https://github.com/PaperMC/Folia/issues/204
2024-03-24 14:14:51 -07:00
Spottedleaf b843a3512d Fix incorrect max player slot check
Using the total number of users in the connection set
is not correct since those users may not be logged in
yet. Instead, track separately the number of users
who have passed the slot check.

Fixes https://github.com/PaperMC/Folia/issues/205
2024-03-24 14:01:03 -07:00
Spottedleaf ad2ef004b9 Update Paper 2024-03-24 13:44:25 -07:00
Spottedleaf 035f8e33c5 Make RedStoneWireBlock.isSignalSource return true if off-region
This may be invoked by a worldgen thread, in which case the
region data would be null and cause a crash. Returning true
is the default state of shouldSignal, so this should maintain
expected behavior.
2024-03-24 13:10:56 -07:00
Spottedleaf e97b1eee63 Move Connection tick to after world tick
The world tick will synchronise block data to clients. If
the connection tick is ran before, then the server will
send the block ack before the block updates - which causes
the client to think that any blocks it broke/placed
were rejected.

Fixes https://github.com/PaperMC/Folia/issues/194
2024-02-21 16:23:51 -08:00
Spottedleaf 7f0a317854 Update Paper 2024-02-20 18:42:54 -08:00
Spottedleaf 5652259e1a Fix entity tracker desync when new players are added to the tracker
The delta position packet instructs the client to update
the entity position by a position difference. However, this position
difference is relative to the last position in the entity tracker
state, not the last position which has been sent to the player. As
a result, if the last position the player has recorded is different
than the one stored in the entity tracker (which occurs when a new
player is added to an existing entity tracker state) then the sent
position difference will cause a position desync for the client.

We can resolve this problem by either tracking the last position
sent per-player, or by simply resetting the last sent position
in the entity tracker state every time a new player is added.
Resetting the last sent position every time a new player is
added to the tracker is just easier to do, so that is what
this patch does.

Fixes https://github.com/PaperMC/Folia/issues/197
2024-02-20 18:30:53 -08:00
Spottedleaf 0265fdd4f4 Make endermite spawn at original thrower position
This is how Vanilla does it, and we don't have any reason to change
this other than an oversight in copying the code.
2024-02-20 17:25:53 -08:00
Spottedleaf e22501a8e3 Remove pending connections for login VERIFYING state
The login state PROTOCOL_SWITCHING is only set once the player
passes initial login checks during the VERIFYING state
(ban,whitelist,slots,login event), but we add to pending during
the VERIFYING state.

Fixes https://github.com/PaperMC/Folia/issues/201 https://github.com/PaperMC/Folia/issues/200
2024-02-20 16:26:42 -08:00
Spottedleaf 7a3dea9038 Add support for Eigen/Alternate current
The data both store are caches which are cleared after updates,
which means that there is no block/position data being tracked
across ticks. As long as each region has its own instance, there
should be no cross-region data access.

Fixes https://github.com/PaperMC/Folia/issues/202
2024-02-20 16:16:18 -08:00
Spottedleaf 8939611bb5 No longer plan to add tick rate manager support
It doesn't really make sense to use this as most of the features
involve stopping/stepping the world, which do not make much sense
given the nature of multiple parallel ticking regions.
2024-02-13 16:20:21 -08:00
Spottedleaf d3d0df309c Update Paper 2024-02-13 16:20:10 -08:00
Spottedleaf 32ff12e4dc Update Paper
Also included is a fix to Connection#handleDisconnection
using the wrong login state for removing pending login
2024-02-05 11:41:39 -08:00
Spottedleaf 7bc26ecc74 Update Paper
Additionally, fix ActivationRange using global state to store
the AABBs it checks entities against. This fixes an issue where
entities would not be activated when they should be.
2024-01-20 20:33:21 -08:00
Spottedleaf 27561750dd Add rcon command source to dispatch check
I am surprised it does not implement ConsoleCommandSender.
2024-01-20 19:11:06 -08:00
Spottedleaf 4d78338afe Generated API
Fixes build
2024-01-10 14:03:31 -08:00
Spottedleaf be90fb8d36 Update Paper 2024-01-09 14:49:27 -08:00
Spottedleaf 16e8d3aea4 Check processed disconnect after invoking keepConnectionAlive()
Since we move this up, we need to check it to prevent ticking
a possibly removed player
2024-01-09 14:37:27 -08:00
Spottedleaf e89a107ef0 Guard against double onDisconnect calls in common packet listener
The non-game type implementation will not guard against double calls,
which means that any invocation of disconnect() would immediately
call onDisconnect and then later the connection handler would
also call onDisconnect.

Fixes https://github.com/PaperMC/Folia/pull/181
2024-01-09 14:22:00 -08:00
Spottedleaf 6928284a56 Update Paper and add configurable region shift
The region shift is configurable under `grid-exponent`, which
allows setting the region shift to any value in [0, 31]. Note
that values above 6 affect the lock shift, as the lock shift
currently is computed as max(ticket shift = 6, region shift).
The shift is left configurable for now as the lower default
shift of 2 may have negative performance impacts.

The default region shift has been adjusted to 2 from 4, and
the empty chunk buffer has been reduced to 8 from 16. These
changes reduce, but do not eliminate, player spread
requirements. The previous block range was around ~1500 blocks
at VD = 10, but is now closer to ~900 blocks at VD = 10. This
roughly reduces the area that each player uses in the regioniser
by 2.5x.
2023-12-30 17:20:19 -08:00
Spottedleaf 9a389a1a5e Update Paper 2023-12-23 06:03:14 -08:00
Spottedleaf cd713b8ea2 Fix compile/run for 1.20.4
Currently, /tick is disabled but is planned to be re-added.
It's unlikely that support for sprinting can be implemented
precisely due to the fact that Folia ticks many regions
independently. However, a best-effort approach will be used.
2023-12-18 15:06:11 -08:00
Spottedleaf de6a87e338 Apply patches for 1.20.4
- Compile needs to be checked.
- Behaviors around the new tick manager need to be designed
  and implemented.

Chk update.txt for anything specific.
2023-12-16 15:32:48 -08:00
Spottedleaf 1e5e2154c9 Implement command execution support for RCON
Just need to change the executeBlocking() call to use the
global region to execute the command instead.
2023-11-24 19:43:47 -08:00
Jason Penilla c1e3c3c532 Bump paper-mojangapi and Gradle 2023-11-24 17:23:52 -08:00
Jason Penilla 3843340cba Fix command sender check 2023-11-21 13:27:29 -08:00
Siroshun09 d58fab2cce Fix animal spawning issue 2023-11-21 13:12:55 -08:00
Spottedleaf 7aacf902b0 Update Paper 2023-11-16 14:33:41 -08:00
Spottedleaf 757cb09c41 Update Paper 2023-10-16 19:08:01 -07:00
Spottedleaf 9190eb011c Update paper 2023-10-15 13:03:17 -07:00
Spottedleaf 84aecdc64a Update paper 2023-10-09 10:13:26 -07:00
Spottedleaf 905cf0b6be Fix crash when generating swamp structure
Need to implement structureManager on CB's DelegatedGeneratorAccess,
as that is now used during population.
2023-10-06 19:33:13 -07:00
Spottedleaf 8cde60d1f9 Use tracker field instead of entity map lookup in CraftEntity#getTrackedBy
Fixes compilation
2023-10-06 18:30:21 -07:00
Spottedleaf dc3fcef3bb Use postprocess annotation for config 2023-10-06 18:26:56 -07:00
Spottedleaf 6c59a955b0 Re-add RandomCommand
Now that RandomSequences is thread-safe, do not need to disable
this command
2023-10-06 17:53:48 -07:00
Spottedleaf 726cdc39a5 Update paper 2023-10-06 17:50:00 -07:00
Spottedleaf a4d99b3cd3 Update paperweight to 1.5.7
Apparently, fixes some compile issues for some users.
2023-10-06 17:36:18 -07:00
Spottedleaf e5b552fb0c Properly synchronise RandomSequences access
The underlying map should be CHM, and the access to the
underlying random should be synchronised as well.
2023-10-06 17:34:34 -07:00
Spottedleaf e876103942 Region profiler
Profiling for a region starts with the /profiler command.
The usage for /profiler:
/profiler <world> <block x> <block z> <time in s> [radius, default 100 blocks]

Any region within the radius of the specified block coordinates
will be profiled. The profiling will stop after the specified
time has passed.

Once the profiler finishes, it will place a report in
the directory ./profiler/<id>.

Since regions can split into smaller regions, or merge into
other regions, the profiler will track this information. If
a profiled region splits, then all of the regions it splits
into are attached to the same profiler instance. If a profiled
region merges into another region, then the merged region is
profiled. This information is tracked and logged into the
"journal.txt" file contained in the report directory. The
journal tracks the region ids for the merge/split operations.

Region profiling is placed into the "region-X.txt" file where
X is the region id inside the profile directory. The header
of the file describes some stats about the region, namely
total profiling duration, ticks, utilisation, TPS, and MSPT.

Then, the timing tree is follows. The format is as specified:

There are two types of data recorded: Timers and Counters.

Timers are specified as follows:
<indent><name> X% total, Y% parent, self A% total, self B% children, avg D sum E, Fms raw sum
The above specifies the format for a named timer.

The <indent> specifies the number of parent timers.

"X" represents the percentage of time the timer took relative
to the entire profiling instance.

"Y" represents the percentage of time the timer took relative
to its _parents_ timer. For example:
```
Full Tick 100.000% total, 100.000% parent, self 0.889% total, self 0.889% children, avg 200.000 sum 200, 401.300ms raw sum
|+++Tick World: minecraft:overworld 81.409% total, 81.409% parent, self 1.873% total, self 2.301% children, avg 1.000 sum 200, 326.694ms raw sum
|---|---Entity Tick 56.784% total, 69.751% parent, self 6.049% total, self 10.652% children, avg 1.000 sum 200, 227.874ms raw sum
```
"Entity Tick" measured 69.751% of the time for the "Tick World: minecraft:overworld" timer.

"A" represents the self time relative to the entire profiling instance.
The self time is the amount of time for a timer that is _not_ measured
by a child timer.

"B" represents the self time relative to its _parents_ timer.

"D" represents the average number of times the timer is invoked relative to
its parent.
For example:
```
|---|---|---Entity Tick: bat 2.642% total, 7.343% parent, self 2.642% total, self 100.000% children, avg 14.975 sum 2,995, 23.127ms raw sum
```
In this case, an average of 14.975 bats were ticked for every
time the "Entity Tick" timer was invoked.

"E" represents the total number of times the timer is invoked.

"F" represents the total raw time accumulated by the timer.

Counters are specified as follows:
<indent>#<name> avg X sum Y

The X is the average number of times the counter is invoked
relative to the parent, exactly similar to the D field of Timers,
where Y is the total number of times the counter is invoked.
2023-10-03 06:27:57 -07:00
Spottedleaf cdf356915b Properly revert reversion of per-player mob caps
Some diffs were stilled dropped, which made mob spawning
limitless.
2023-09-26 13:53:10 -07:00
Spottedleaf 4a59238743 Update to 1.20.2
Very early build, network configuration switching is supported
but not tested (note: changes need to be backported to Paper)

Changes:
 - Supports per player mob caps
 - Adds entity tracker optimisations which are not in Paper
   (and will not be ported to Paper due to plugin conflicts)
 - No longer reverts paper distance map optimisations, as
   those are replaced by the NearbyPlayers class

These changes should bring Folia in-line with Paper's optimisations
at least (probably more given the entity tracker optimisations),
still missing features like world loading / some commands
2023-09-26 13:28:33 -07:00
Spottedleaf edafbcef68 Update Paper 2023-09-11 11:18:04 -07:00
Spottedleaf 372d479cc1 Update upstream Paper 2023-09-06 20:02:39 -07:00