Skip to content

Commit 730882f

Browse files
committed
Chunk System and Starlight WIP
Chunk system patch was refactored to take advantage of newer ConcurrentUtil's concurrent long hash table (which fixes hash collisions caused by chaining fastutil's long hash and CHM's hash) plus some other minor improvements. The chunk system was also merged with Starlight, which mostly provides a small improvement to ThreadedLevelLightEngine#checkBlock as the scheduling was rewritten.
1 parent ffe310a commit 730882f

23 files changed

+28828
-32
lines changed

Diff for: leaf_notes.txt

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
- Starlight fixlight command + method on light engine (note: add to mod to, after done this)
2+
- note: for paper, the chunk debug command
3+
- rebase IntervalledCounter into util patch
4+
- mcutil diff
5+
- paper debug chunks --async in DedicatedServer
6+
- TODO keep around region file lock?
7+
- mcutil#getTicketLevelFor is wrong, just delete it later
8+
- in the mod:
9+
- ChunkHolder
10+
- isReadyForSaving overwrite
11+
- remove state fields in mod
12+
- addSaveDependency overwrite
13+
- ChunkMap
14+
- pendingUnloads/pendingGenerationTasks/unloadQueue/ field destroy
15+
- DistanceManager
16+
- getTickets/dumpTickets/tickingTracker/ overwrite
17+
- GenerationChunkHolder
18+
- remove state fields in mod
19+
- rescheduleChunkTask/failAndClearPendingFuturesBetween/failAndClearPendingFuture/completeFuture/
20+
findHighestStatusWithPendingFuture/acquireStatusBump/isStatusDisallowed/ overwrite
21+
- LayerLightEngine
22+
- getDebugSectionType overwrite
23+
- ThreadedLayerLightEngine
24+
- waitForPendingTasks overwrite
25+
26+
on another note, clean up mcutils...
27+
28+
later, run a diff compared to the mod and move all of the diff to separate classes
29+
apply todo in levelmixin
30+
31+
to fix later:
32+
- Change loadedChunkMap in ServerChunkCache to use concurrent long map

Diff for: patches/server/0009-MC-Utils.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -6347,7 +6347,7 @@ index 5d4336210e11ee39521b4096a5f0874329053cdc..09d7b416c02eb13c506e9dc92d78e983
63476347
+ // Paper end
63486348
}
63496349
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
6350-
index 419a27a8bdc8adfeb6ea89e3bfe1838a80d75a33..ce0d22452171857e3cf070bf01450a7653ec7142 100644
6350+
index 5b920beb39dad8d392b4e5e12a89880720e41942..319f51eb8adde7584c74780ac0539f4b8ef8fe7f 100644
63516351
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
63526352
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
63536353
@@ -170,6 +170,62 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider

Diff for: patches/server/0023-Timings-v2.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,7 @@ index d38ecbc208c34509eaf77751ac45d9ef51a5dce8..b51c3f8c485496734ea58c15377a1215
978978
// CraftBukkit end
979979
}
980980
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
981-
index ce0d22452171857e3cf070bf01450a7653ec7142..6581566ca4e4fac0691e4f5851f8895d9ac7a38f 100644
981+
index 319f51eb8adde7584c74780ac0539f4b8ef8fe7f..ddadb0f13b96a39ec89cdaeea7bc02ee62ef2a06 100644
982982
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
983983
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
984984
@@ -1,8 +1,10 @@

Diff for: patches/server/0066-Chunk-Save-Reattempt.patch

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ index b24e8255ab18eb5b2e4968aa62aa3d72ef33f0eb..12b7d50f49a2184aaf220a4a50a137b2
1919
}
2020
}
2121
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
22-
index 4091d4d68b58bdefb2fdac1815e351d4f7c8a523..b7d0a48f38f0d8ae586012bb4e9a9faec21103c2 100644
22+
index 40f2f4d052add3b4270d29c843e49fb621e1bc8d..df099d4c7f101f50d40dae99b45c271b02712434 100644
2323
--- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
2424
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
25-
@@ -134,6 +134,11 @@ public class RegionFileStorage implements AutoCloseable {
25+
@@ -134,6 +134,11 @@ public final class RegionFileStorage implements AutoCloseable {
2626

2727
protected void write(ChunkPos pos, @Nullable CompoundTag nbt) throws IOException {
2828
RegionFile regionfile = this.getRegionFile(pos, false); // CraftBukkit
@@ -34,7 +34,7 @@ index 4091d4d68b58bdefb2fdac1815e351d4f7c8a523..b7d0a48f38f0d8ae586012bb4e9a9fae
3434

3535
if (nbt == null) {
3636
regionfile.clear(pos);
37-
@@ -158,7 +163,18 @@ public class RegionFileStorage implements AutoCloseable {
37+
@@ -158,7 +163,18 @@ public final class RegionFileStorage implements AutoCloseable {
3838
dataoutputstream.close();
3939
}
4040
}

Diff for: patches/server/0082-Sanitise-RegionFileCache-and-make-configurable.patch

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ The implementation uses a LinkedHashMap as an LRU cache (modified from HashMap).
1111
The maximum size of the RegionFileCache is also made configurable.
1212

1313
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
14-
index b7d0a48f38f0d8ae586012bb4e9a9faec21103c2..7d4aa3d375bde32e0d2606346202929d481acad0 100644
14+
index df099d4c7f101f50d40dae99b45c271b02712434..491035aaefff4ee96435ec5d3f9417e28eae0796 100644
1515
--- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
1616
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
17-
@@ -39,7 +39,7 @@ public class RegionFileStorage implements AutoCloseable {
17+
@@ -39,7 +39,7 @@ public final class RegionFileStorage implements AutoCloseable {
1818
if (regionfile != null) {
1919
return regionfile;
2020
} else {

Diff for: patches/server/0165-PlayerNaturallySpawnCreaturesEvent.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ from triggering monster spawns on a server.
99
Also a highly more effecient way to blanket block spawns in a world
1010

1111
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
12-
index 6581566ca4e4fac0691e4f5851f8895d9ac7a38f..c96346bd0207537899d266fe2c8f29a1663e10c3 100644
12+
index ddadb0f13b96a39ec89cdaeea7bc02ee62ef2a06..d04b69838c6f5fd1808782cacb31c6e00087bbac 100644
1313
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
1414
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
1515
@@ -1101,7 +1101,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider

Diff for: patches/server/0227-Add-Debug-Entities-option-to-debug-dupe-uuid-issues.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Subject: [PATCH] Add Debug Entities option to debug dupe uuid issues
55

66

77
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
8-
index c96346bd0207537899d266fe2c8f29a1663e10c3..e2f176d34443f0d1b00649efa45c65138042a015 100644
8+
index d04b69838c6f5fd1808782cacb31c6e00087bbac..96b7f0ac35a1e87c3f78a24180b207c32749fb71 100644
99
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
1010
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
1111
@@ -1321,6 +1321,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider

Diff for: patches/server/0312-Tracking-Range-Improvements.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Sets tracking range of watermobs to animals instead of misc and simplifies code
88
Also ignores Enderdragon, defaulting it to Mojang's setting
99

1010
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
11-
index e2f176d34443f0d1b00649efa45c65138042a015..3784fbe3548727ab5ad8cfefef2d8d594a76123f 100644
11+
index 96b7f0ac35a1e87c3f78a24180b207c32749fb71..795c81c8f6fa59eded8b5a5084a8acb46d118fdb 100644
1212
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
1313
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
1414
@@ -1613,6 +1613,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider

Diff for: patches/server/0334-Prevent-Double-PlayerChunkMap-adds-crashing-server.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Suspected case would be around the technique used in .stopRiding
77
Stack will identify any causer of this and warn instead of crashing.
88

99
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
10-
index 3784fbe3548727ab5ad8cfefef2d8d594a76123f..5732aded2e4dbeea84dbe6ebac71c2ad5ce4729a 100644
10+
index 795c81c8f6fa59eded8b5a5084a8acb46d118fdb..1709821c73362b2ae54681ec1d59b40bfa9335b3 100644
1111
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
1212
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
1313
@@ -1308,6 +1308,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider

Diff for: patches/server/0345-Fire-PlayerJoinEvent-when-Player-is-actually-ready.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ delays anymore.
3131
public net.minecraft.server.level.ChunkMap addEntity(Lnet/minecraft/world/entity/Entity;)V
3232

3333
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
34-
index 5732aded2e4dbeea84dbe6ebac71c2ad5ce4729a..d1247df5c51b0d377a27ea7cc5b5a2d1f1bf9b32 100644
34+
index 1709821c73362b2ae54681ec1d59b40bfa9335b3..68a1cc5f4f7f5997dfb7d40647e3e027c23ffb14 100644
3535
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
3636
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
3737
@@ -1315,6 +1315,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider

Diff for: patches/server/0612-Oprimise-map-impl-for-tracked-players.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Reference2BooleanOpenHashMap is going to have
77
better lookups than HashMap.
88

99
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
10-
index d1247df5c51b0d377a27ea7cc5b5a2d1f1bf9b32..cf7c7813d528429a18dc25051df7fc06dc159930 100644
10+
index 68a1cc5f4f7f5997dfb7d40647e3e027c23ffb14..77f064fb4437c1d98cf91dde98d4d88b28afa7c8 100644
1111
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
1212
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
1313
@@ -1529,7 +1529,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider

Diff for: patches/server/0641-Only-write-chunk-data-to-disk-if-it-serializes-witho.patch

+4-4
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ index 12b7d50f49a2184aaf220a4a50a137b217c57124..f1237f6fd6414900ffbad0caee31aa83
4444
public void close() throws IOException {
4545
ByteBuffer bytebuffer = ByteBuffer.wrap(this.buf, 0, this.count);
4646
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
47-
index 7d4aa3d375bde32e0d2606346202929d481acad0..36e914b26de070035f195f67c65ee1df0d10daf0 100644
47+
index 491035aaefff4ee96435ec5d3f9417e28eae0796..4c1212c6ef48594e766fa9e35a6e15916602d587 100644
4848
--- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
4949
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
50-
@@ -147,10 +147,17 @@ public class RegionFileStorage implements AutoCloseable {
50+
@@ -147,10 +147,17 @@ public final class RegionFileStorage implements AutoCloseable {
5151

5252
try {
5353
NbtIo.write(nbt, (DataOutput) dataoutputstream);
@@ -66,7 +66,7 @@ index 7d4aa3d375bde32e0d2606346202929d481acad0..36e914b26de070035f195f67c65ee1df
6666
} catch (Throwable throwable1) {
6767
throwable.addSuppressed(throwable1);
6868
}
69-
@@ -158,10 +165,7 @@ public class RegionFileStorage implements AutoCloseable {
69+
@@ -158,10 +165,7 @@ public final class RegionFileStorage implements AutoCloseable {
7070

7171
throw throwable;
7272
}
@@ -78,7 +78,7 @@ index 7d4aa3d375bde32e0d2606346202929d481acad0..36e914b26de070035f195f67c65ee1df
7878
}
7979
// Paper start - Chunk save reattempt
8080
return;
81-
@@ -208,4 +212,13 @@ public class RegionFileStorage implements AutoCloseable {
81+
@@ -208,4 +212,13 @@ public final class RegionFileStorage implements AutoCloseable {
8282
public RegionStorageInfo info() {
8383
return this.info;
8484
}

Diff for: patches/server/0752-Fix-a-bunch-of-vanilla-bugs.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ index 6854ca4d4fec2b4fa541c3fabf63787665572609..e7b444a10b244828827b3c66c5346520
8585
}
8686

8787
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
88-
index cf7c7813d528429a18dc25051df7fc06dc159930..ef46d904fa49a779c235971883380b3e33e6dba1 100644
88+
index 77f064fb4437c1d98cf91dde98d4d88b28afa7c8..ccbd527803a2a4e911a01f815cc9c7ab785af836 100644
8989
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
9090
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
9191
@@ -1091,7 +1091,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider

Diff for: patches/server/0781-Player-Entity-Tracking-Events.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Subject: [PATCH] Player Entity Tracking Events
55

66

77
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
8-
index ef46d904fa49a779c235971883380b3e33e6dba1..8eae75993ad60226a86456487f3b3a59999ab423 100644
8+
index ccbd527803a2a4e911a01f815cc9c7ab785af836..e2521e1a56df8dcb1de815e5973de952408d3b8b 100644
99
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
1010
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
1111
@@ -1601,7 +1601,11 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider

Diff for: patches/server/0870-Configurable-entity-tracking-range-by-Y-coordinate.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Subject: [PATCH] Configurable entity tracking range by Y coordinate
66
Options to configure entity tracking by Y coordinate, also for each entity category.
77

88
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
9-
index 8eae75993ad60226a86456487f3b3a59999ab423..38df456d3646c384d17ae9aec60c18fcd0651b4b 100644
9+
index e2521e1a56df8dcb1de815e5973de952408d3b8b..6c5557aad2455b79bb2adf8939eb9a6127ccc3c3 100644
1010
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
1111
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
1212
@@ -1593,6 +1593,15 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider

Diff for: patches/server/0902-Don-t-check-if-we-can-see-non-visible-entities.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Subject: [PATCH] Don't check if we can see non-visible entities
55

66

77
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
8-
index 38df456d3646c384d17ae9aec60c18fcd0651b4b..cf4517e57169856acd0782e5ced4eb8c045b8d78 100644
8+
index 6c5557aad2455b79bb2adf8939eb9a6127ccc3c3..469f1dcb22c06025681e727e281b5b53f2b21c1f 100644
99
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
1010
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
1111
@@ -1604,7 +1604,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider

Diff for: patches/server/0931-Reduce-allocation-of-Vec3D-by-entity-tracker.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ index a043ac10834562d357ef0b5aded2e916e2a0d056..74276c368016fcc4dbf9579b2ecbadc9
1818
@VisibleForTesting
1919
static long encode(double value) {
2020
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
21-
index cf4517e57169856acd0782e5ced4eb8c045b8d78..6129720c9da217745fcd281186de7894597c267c 100644
21+
index 469f1dcb22c06025681e727e281b5b53f2b21c1f..2ce7da9707d7c1a48b5609ae51a516d599d7aee8 100644
2222
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
2323
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
2424
@@ -1587,10 +1587,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider

0 commit comments

Comments
 (0)