diff --git a/patches/server/0182-Use-no-tick-view-distance-for-tracker.patch b/patches/server/0182-Use-no-tick-view-distance-for-tracker.patch new file mode 100644 index 000000000..b0cc9377a --- /dev/null +++ b/patches/server/0182-Use-no-tick-view-distance-for-tracker.patch @@ -0,0 +1,68 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Ben Kerllenevich +Date: Sat, 13 Mar 2021 17:21:49 -0500 +Subject: [PATCH] Use no-tick-view-distance for tracker + + +diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java +index d7a17689ce44ccb8281906fb6ac7ba2ae53161e5..11140f89cb2b1837aa09a77d4f4fa8eb6ffbebbb 100644 +--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java ++++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java +@@ -213,7 +213,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + com.destroystokyo.paper.util.misc.PlayerAreaMap trackMap = this.playerEntityTrackerTrackMaps[i]; + int trackRange = this.entityTrackerTrackRanges[i]; + +- trackMap.add(player, chunkX, chunkZ, Math.min(trackRange, this.getEffectiveViewDistance())); ++ trackMap.add(player, chunkX, chunkZ, Math.min(trackRange, player.world.purpurConfig.useNoTickForTracker ? this.getEffectiveNoTickViewDistance() : this.getEffectiveViewDistance())); // Purpur + } + // Paper end - use distance map to optimise entity tracker + // Paper start - optimise PlayerChunkMap#isOutsideRange +@@ -268,7 +268,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + com.destroystokyo.paper.util.misc.PlayerAreaMap trackMap = this.playerEntityTrackerTrackMaps[i]; + int trackRange = this.entityTrackerTrackRanges[i]; + +- trackMap.update(player, chunkX, chunkZ, Math.min(trackRange, this.getEffectiveViewDistance())); ++ trackMap.update(player, chunkX, chunkZ, Math.min(trackRange, player.world.purpurConfig.useNoTickForTracker ? this.getEffectiveNoTickViewDistance() : this.getEffectiveViewDistance())); // Purpur + } + // Paper end - use distance map to optimise entity tracker + // Paper start - optimise PlayerChunkMap#isOutsideRange +@@ -2541,7 +2541,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially + double vec3d_dy = entityplayer.locY() - this.tracker.locY(); + double vec3d_dz = entityplayer.locZ() - this.tracker.locZ(); + // Paper end - remove allocation of Vec3D here +- int i = Math.min(this.b(), (PlayerChunkMap.this.viewDistance - 1) * 16); ++ int i = Math.min(this.b(), entityplayer.world.purpurConfig.useNoTickForTracker ? PlayerChunkMap.this.getEffectiveNoTickViewDistance() * 16 : (PlayerChunkMap.this.viewDistance - 1) * 16); // Purpur + boolean flag = vec3d_dx >= (double) (-i) && vec3d_dx <= (double) i && vec3d_dz >= (double) (-i) && vec3d_dz <= (double) i && this.tracker.a(entityplayer); // Paper - remove allocation of Vec3D here + + if (flag) { +@@ -2557,7 +2557,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially + PlayerChunk playerchunk = PlayerChunkMap.this.trackerGetVisibleChunk(chunkcoordintpair); // Airplane + + if (playerchunk != null && playerchunk.getSendingChunk() != null) { // Paper - no-tick view distance +- flag1 = PlayerChunkMap.someDistanceCalculation(x, z, entityplayer, false) <= PlayerChunkMap.this.viewDistance; ++ flag1 = PlayerChunkMap.someDistanceCalculation(x, z, entityplayer, false) <= Math.max(PlayerChunkMap.this.viewDistance, PlayerChunkMap.this.noTickViewDistance); // Purpur + // Airplane end + } + } +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 45c5b7b9e7b207e25d80c008a87b06b91e81668b..3a69b31335d296e0ede1bb5bc10976a41e840a57 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -284,6 +284,7 @@ public class PurpurWorldConfig { + public int animalBreedingCooldownSeconds = 0; + public boolean creativeOnePunch = false; + public boolean playerSleepNearMonsters = false; ++ + private void miscGameplayMechanicsSettings() { + useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); + alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative); +@@ -1975,4 +1976,9 @@ public class PurpurWorldConfig { + baseCrystalExplosionEffect = Explosion.Effect.DESTROY; + } + } ++ ++ public boolean useNoTickForTracker = false; ++ private void trackerSettings() { ++ useNoTickForTracker = getBoolean("tracker.use-no-tick-distance-for-range", useNoTickForTracker); ++ } + }