@@ -18,7 +18,7 @@ Currently includes:
18
18
See https://github.com/Tuinity/Moonrise
19
19
20
20
diff --git a/src/main/java/ca/spottedleaf/moonrise/common/util/ChunkSystem.java b/src/main/java/ca/spottedleaf/moonrise/common/util/ChunkSystem.java
21
- index f7cd0aa43d0b9249d0a317fab41fefa0d951bca0..fc029c8fb22a7c8eeb23bfc171812f6da91c60fa 100644
21
+ index 58a99bc38e137431f10af36fa9e2d04fe61694aa..1d288e73fd8605676c0da676e068afb5b4b8abea 100644
22
22
--- a/src/main/java/ca/spottedleaf/moonrise/common/util/ChunkSystem.java
23
23
+++ b/src/main/java/ca/spottedleaf/moonrise/common/util/ChunkSystem.java
24
24
@@ -2,11 +2,17 @@ package ca.spottedleaf.moonrise.common.util;
@@ -330,17 +330,17 @@ index f7cd0aa43d0b9249d0a317fab41fefa0d951bca0..fc029c8fb22a7c8eeb23bfc171812f6d
330
330
}
331
331
332
332
public static int getSendViewDistance(final ServerPlayer player) {
333
- - return getLoadViewDistance (player) - 1 ;
333
+ - return getViewDistance (player);
334
334
+ return RegionizedPlayerChunkLoader.getAPISendViewDistance(player);
335
335
}
336
336
337
- public static int getLoadViewDistance (final ServerPlayer player) {
337
+ public static int getViewDistance (final ServerPlayer player) {
338
338
- final ServerLevel level = player.serverLevel();
339
339
- if (level == null) {
340
- - return org.bukkit.Bukkit.getViewDistance() + 1 ;
340
+ - return org.bukkit.Bukkit.getViewDistance();
341
341
- }
342
- - return level.chunkSource.chunkMap.serverViewDistance + 1 ;
343
- + return RegionizedPlayerChunkLoader.getLoadViewDistance (player);
342
+ - return level.chunkSource.chunkMap.serverViewDistance;
343
+ + return RegionizedPlayerChunkLoader.getAPIViewDistance (player);
344
344
}
345
345
346
346
public static int getTickViewDistance(final ServerPlayer player) {
@@ -5545,10 +5545,10 @@ index 0000000000000000000000000000000000000000..003a857e70ead858e8437e3c1bfaf22f
5545
5545
+}
5546
5546
diff --git a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/player/RegionizedPlayerChunkLoader.java b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/player/RegionizedPlayerChunkLoader.java
5547
5547
new file mode 100644
5548
- index 0000000000000000000000000000000000000000..5a6defc4c4d30c06d4bba856847feb176950ca1e
5548
+ index 0000000000000000000000000000000000000000..dd2509996bfd08e8c3f9f2be042229eac6d7692d
5549
5549
--- /dev/null
5550
5550
+++ b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/player/RegionizedPlayerChunkLoader.java
5551
- @@ -0,0 +1,1090 @@
5551
+ @@ -0,0 +1,1092 @@
5552
5552
+package ca.spottedleaf.moonrise.patches.chunk_system.player;
5553
5553
+
5554
5554
+import ca.spottedleaf.concurrentutil.util.ConcurrentUtil;
@@ -5557,6 +5557,7 @@ index 0000000000000000000000000000000000000000..5a6defc4c4d30c06d4bba856847feb17
5557
5557
+import ca.spottedleaf.moonrise.common.misc.AllocatingRateLimiter;
5558
5558
+import ca.spottedleaf.moonrise.common.misc.SingleUserAreaMap;
5559
5559
+import ca.spottedleaf.moonrise.common.util.CoordinateUtils;
5560
+ +import ca.spottedleaf.moonrise.common.util.MoonriseConstants;
5560
5561
+import ca.spottedleaf.moonrise.common.util.TickThread;
5561
5562
+import ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel;
5562
5563
+import ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel;
@@ -5665,14 +5666,25 @@ index 0000000000000000000000000000000000000000..5a6defc4c4d30c06d4bba856847feb17
5665
5666
+ int sendViewDistance
5666
5667
+ ) {
5667
5668
+ public ViewDistances setTickViewDistance(final int distance) {
5669
+ + if (distance != -1 && (distance < (0) || distance > (MoonriseConstants.MAX_VIEW_DISTANCE))) {
5670
+ + throw new IllegalArgumentException(Integer.toString(distance));
5671
+ + }
5668
5672
+ return new ViewDistances(distance, this.loadViewDistance, this.sendViewDistance);
5669
5673
+ }
5670
5674
+
5671
5675
+ public ViewDistances setLoadViewDistance(final int distance) {
5676
+ + // note: load view distance = api view distance + 1
5677
+ + if (distance != -1 && (distance < (2 + 1) || distance > (MoonriseConstants.MAX_VIEW_DISTANCE + 1))) {
5678
+ + throw new IllegalArgumentException(Integer.toString(distance));
5679
+ + }
5672
5680
+ return new ViewDistances(this.tickViewDistance, distance, this.sendViewDistance);
5673
5681
+ }
5674
5682
+
5675
5683
+ public ViewDistances setSendViewDistance(final int distance) {
5684
+ + // note: send view distance <= load view distance - 1
5685
+ + if (distance != -1 && (distance < (0) || distance > (MoonriseConstants.MAX_VIEW_DISTANCE))) {
5686
+ + throw new IllegalArgumentException(Integer.toString(distance));
5687
+ + }
5676
5688
+ return new ViewDistances(this.tickViewDistance, this.loadViewDistance, distance);
5677
5689
+ }
5678
5690
+
@@ -5706,16 +5718,6 @@ index 0000000000000000000000000000000000000000..5a6defc4c4d30c06d4bba856847feb17
5706
5718
+ return data.lastLoadDistance - 1;
5707
5719
+ }
5708
5720
+
5709
- + public static int getLoadViewDistance(final ServerPlayer player) {
5710
- + final ServerLevel level = player.serverLevel();
5711
- + final PlayerChunkLoaderData data = ((ChunkSystemServerPlayer)player).moonrise$getChunkLoader();
5712
- + if (data == null) {
5713
- + return ((ChunkSystemServerLevel)level).moonrise$getPlayerChunkLoader().getAPIViewDistance();
5714
- + }
5715
- + // view distance = load distance + 1
5716
- + return data.lastLoadDistance - 1;
5717
- + }
5718
- +
5719
5721
+ public static int getAPISendViewDistance(final ServerPlayer player) {
5720
5722
+ final ServerLevel level = player.serverLevel();
5721
5723
+ final PlayerChunkLoaderData data = ((ChunkSystemServerPlayer)player).moonrise$getChunkLoader();
@@ -6072,7 +6074,7 @@ index 0000000000000000000000000000000000000000..5a6defc4c4d30c06d4bba856847feb17
6072
6074
+ final int playerLoadViewDistance, final int worldLoadViewDistance) {
6073
6075
+ return Math.min(
6074
6076
+ playerTickViewDistance < 0 ? worldTickViewDistance : playerTickViewDistance,
6075
- + playerLoadViewDistance < 0 ? worldLoadViewDistance : playerLoadViewDistance
6077
+ + playerLoadViewDistance < 0 ? ( worldLoadViewDistance - 1) : ( playerLoadViewDistance - 1)
6076
6078
+ );
6077
6079
+ }
6078
6080
+
@@ -24171,7 +24173,7 @@ index d9ad32acdf46a43a649334a3b736aeb7b3af21d1..fae17a075d7efaf24d916877dd5968eb
24171
24173
public static final int RADIUS_AROUND_FULL_CHUNK = FULL_CHUNK_STEP.accumulatedDependencies().getRadius();
24172
24174
public static final int MAX_LEVEL = 33 + RADIUS_AROUND_FULL_CHUNK;
24173
24175
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
24174
- index 16e55cc94c8f6e204e4b7ab6ad8d32a6c443357f..80bbf77454ff34505196998bcfeaa3e40a4f639c 100644
24176
+ index e9b585387f6cbc454e7b16feb36a256e733c5488..67cfc3236a39008cfcf3acffefafda1a604b8573 100644
24175
24177
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
24176
24178
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
24177
24179
@@ -108,7 +108,7 @@ import org.slf4j.Logger;
@@ -25482,7 +25484,7 @@ index 16e55cc94c8f6e204e4b7ab6ad8d32a6c443357f..80bbf77454ff34505196998bcfeaa3e4
25482
25484
25483
25485
public void updatePlayers(List<ServerPlayer> players) {
25484
25486
diff --git a/src/main/java/net/minecraft/server/level/DistanceManager.java b/src/main/java/net/minecraft/server/level/DistanceManager.java
25485
- index f7c2c03749d6be25bf33afd61e1da120770b3432..7a9e7fc688e48d18a6a884f02f768ae652326aae 100644
25487
+ index f7c2c03749d6be25bf33afd61e1da120770b3432..746f61661e22d22f2acbbe54a5933e57fbca45b2 100644
25486
25488
--- a/src/main/java/net/minecraft/server/level/DistanceManager.java
25487
25489
+++ b/src/main/java/net/minecraft/server/level/DistanceManager.java
25488
25490
@@ -34,58 +34,57 @@ import net.minecraft.world.level.ChunkPos;
@@ -25754,7 +25756,7 @@ index f7c2c03749d6be25bf33afd61e1da120770b3432..7a9e7fc688e48d18a6a884f02f768ae6
25754
25756
}
25755
25757
25756
25758
public void removePlayer(SectionPos pos, ServerPlayer player) {
25757
- @@ -284,160 +175,89 @@ public abstract class DistanceManager {
25759
+ @@ -284,160 +175,93 @@ public abstract class DistanceManager {
25758
25760
if (objectset != null) objectset.remove(player); // Paper - some state corruption happens here, don't crash, clean up gracefully
25759
25761
if (objectset == null || objectset.isEmpty()) { // Paper
25760
25762
this.playersPerChunk.remove(i);
@@ -25805,8 +25807,12 @@ index f7c2c03749d6be25bf33afd61e1da120770b3432..7a9e7fc688e48d18a6a884f02f768ae6
25805
25807
- this.simulationDistance = simulationDistance;
25806
25808
- this.tickingTicketsTracker.replacePlayerTicketsLevel(this.getPlayerTicketLevel());
25807
25809
- }
25808
- + ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)this.moonrise$getChunkMap().level).moonrise$getPlayerChunkLoader().setTickDistance(simulationDistance); // Paper - rewrite chunk system
25810
+ + // Paper start - rewrite chunk system
25811
+ + // note: vanilla does not clamp to 0, but we do simply because we need a min of 0
25812
+ + final int clamped = net.minecraft.util.Mth.clamp(simulationDistance, 0, ca.spottedleaf.moonrise.common.util.MoonriseConstants.MAX_VIEW_DISTANCE);
25809
25813
25814
+ + ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)this.moonrise$getChunkMap().level).moonrise$getPlayerChunkLoader().setTickDistance(clamped);
25815
+ + // Paper end - rewrite chunk system
25810
25816
}
25811
25817
25812
25818
public int getNaturalSpawnChunkCount() {
@@ -25940,7 +25946,7 @@ index f7c2c03749d6be25bf33afd61e1da120770b3432..7a9e7fc688e48d18a6a884f02f768ae6
25940
25946
private class ChunkTicketTracker extends ChunkTracker {
25941
25947
25942
25948
private static final int MAX_LEVEL = ChunkLevel.MAX_LEVEL + 1;
25943
- @@ -483,7 +303 ,7 @@ public abstract class DistanceManager {
25949
+ @@ -483,7 +307 ,7 @@ public abstract class DistanceManager {
25944
25950
public int runDistanceUpdates(int distance) {
25945
25951
return this.runUpdates(distance);
25946
25952
}
@@ -25949,15 +25955,15 @@ index f7c2c03749d6be25bf33afd61e1da120770b3432..7a9e7fc688e48d18a6a884f02f768ae6
25949
25955
25950
25956
private class FixedPlayerDistanceChunkTracker extends ChunkTracker {
25951
25957
25952
- @@ -563,6 +383 ,7 @@ public abstract class DistanceManager {
25958
+ @@ -563,6 +387 ,7 @@ public abstract class DistanceManager {
25953
25959
}
25954
25960
}
25955
25961
25956
25962
+ /* // Paper - rewrite chunk system
25957
25963
private class PlayerTicketTracker extends DistanceManager.FixedPlayerDistanceChunkTracker {
25958
25964
25959
25965
private int viewDistance = 0;
25960
- @@ -657,5 +478 ,5 @@ public abstract class DistanceManager {
25966
+ @@ -657,5 +482 ,5 @@ public abstract class DistanceManager {
25961
25967
private boolean haveTicketFor(int distance) {
25962
25968
return distance <= this.viewDistance;
25963
25969
}
@@ -28060,7 +28066,7 @@ index b7d29389a357f142237cecd75f8ca91cf1eb6b5b..e4b0dc3121101d54394a0c3a413dabf8
28060
28066
this.generatingStep = generationStep;
28061
28067
this.cache = chunks;
28062
28068
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
28063
- index 88299abf563a041ade1683b66b43103b0eeeea0d..61f3ee42aaad1641c92df3eb60d699b9dd5679e3 100644
28069
+ index 88299abf563a041ade1683b66b43103b0eeeea0d..7f5686571ace6155247e085560fcc8919e67734c 100644
28064
28070
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
28065
28071
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
28066
28072
@@ -1420,7 +1420,7 @@ public abstract class PlayerList {
@@ -28071,6 +28077,15 @@ index 88299abf563a041ade1683b66b43103b0eeeea0d..61f3ee42aaad1641c92df3eb60d699b9
28071
28077
+ //this.broadcastAll(new ClientboundSetChunkCacheRadiusPacket(viewDistance)); // Paper - rewrite chunk system
28072
28078
Iterator iterator = this.server.getAllLevels().iterator();
28073
28079
28080
+ while (iterator.hasNext()) {
28081
+ @@ -1435,7 +1435,7 @@ public abstract class PlayerList {
28082
+
28083
+ public void setSimulationDistance(int simulationDistance) {
28084
+ this.simulationDistance = simulationDistance;
28085
+ - this.broadcastAll(new ClientboundSetSimulationDistancePacket(simulationDistance));
28086
+ + //this.broadcastAll(new ClientboundSetSimulationDistancePacket(simulationDistance)); // Paper - rewrite chunk system
28087
+ Iterator iterator = this.server.getAllLevels().iterator();
28088
+
28074
28089
while (iterator.hasNext()) {
28075
28090
diff --git a/src/main/java/net/minecraft/util/BitStorage.java b/src/main/java/net/minecraft/util/BitStorage.java
28076
28091
index 68648c5a5e3ff079f832092af0f2f801c42d1ede..e4e153cb8899e70273aa150b8ea26907cf68b15c 100644
@@ -36264,7 +36279,7 @@ index 4a5a0e33af16369f665bf39e70238e4e5a5486da..696152286a4d16fa51a23ff6e15fb297
36264
36279
36265
36280
// Paper start - implement pointers
36266
36281
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
36267
- index 2bce60712c0fc53d019e1f9a76b05c95c0682141..775989ebd426b6b31fba68a649c6658d082e1e58 100644
36282
+ index 7e3552390c7dd11a79fd95d3543707cc5d652c66..71ed0230baf3115a53a8ce8f0a5c72f01954fffc 100644
36268
36283
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
36269
36284
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
36270
36285
@@ -3513,7 +3513,9 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
0 commit comments