From e85e1f4e490d583f3d6580211610604dc47a4ea0 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Thu, 25 Nov 2021 12:08:44 +0100 Subject: [PATCH] Fix fuckups from previous commit --- ...-isOutsideRange-to-use-distance-maps.patch | 44 +++++++++++++++++-- ...tance-map-to-optimise-entity-tracker.patch | 14 ++---- ...ce-map-update-when-spawning-disabled.patch | 4 +- ...ush-calls-for-entity-tracker-packets.patch | 4 +- .../0771-Optimise-nearby-player-lookups.patch | 9 ++-- 5 files changed, 51 insertions(+), 24 deletions(-) diff --git a/patches/server/0432-Optimize-isOutsideRange-to-use-distance-maps.patch b/patches/server/0432-Optimize-isOutsideRange-to-use-distance-maps.patch index f5e3bcb17e..bc8faac338 100644 --- a/patches/server/0432-Optimize-isOutsideRange-to-use-distance-maps.patch +++ b/patches/server/0432-Optimize-isOutsideRange-to-use-distance-maps.patch @@ -272,10 +272,48 @@ index 8868ffcda194e8c2300181a2cdda9337dbde6284..95f195980e28bb59f43e5ca1d5e79ebe public String getDebugStatus() { diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index a66d9d6df1fc0ad68f51ea96d4e1a2d725c73b05..00305a06885b2457615b6bd35bb1a84721ca1d77 100644 +index a66d9d6df1fc0ad68f51ea96d4e1a2d725c73b05..c3875acfad91c50a7fec4b1f8e06e8a32e2ea037 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -928,15 +928,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -881,6 +881,37 @@ public class ServerChunkCache extends ChunkSource { + if (flag) { + this.chunkMap.tick(); + } else { ++ // Paper start - optimize isOutisdeRange ++ ChunkMap playerChunkMap = this.chunkMap; ++ for (ServerPlayer player : this.level.players) { ++ if (!player.affectsSpawning || player.isSpectator()) { ++ playerChunkMap.playerMobSpawnMap.remove(player); ++ continue; ++ } ++ ++ int viewDistance = this.chunkMap.getEffectiveViewDistance(); ++ ++ // copied and modified from isOutisdeRange ++ int chunkRange = level.spigotConfig.mobSpawnRange; ++ chunkRange = (chunkRange > viewDistance) ? (byte)viewDistance : chunkRange; ++ chunkRange = (chunkRange > DistanceManager.MOB_SPAWN_RANGE) ? DistanceManager.MOB_SPAWN_RANGE : chunkRange; ++ ++ com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent event = new com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent(player.getBukkitEntity(), (byte)chunkRange); ++ event.callEvent(); ++ if (event.isCancelled() || event.getSpawnRadius() < 0 || playerChunkMap.playerChunkTickRangeMap.getLastViewDistance(player) == -1) { ++ playerChunkMap.playerMobSpawnMap.remove(player); ++ continue; ++ } ++ ++ int range = Math.min(event.getSpawnRadius(), 32); // limit to max view distance ++ int chunkX = net.minecraft.server.MCUtil.getChunkCoordinate(player.getX()); ++ int chunkZ = net.minecraft.server.MCUtil.getChunkCoordinate(player.getZ()); ++ ++ playerChunkMap.playerMobSpawnMap.addOrUpdate(player, chunkX, chunkZ, range); ++ player.lastEntitySpawnRadiusSquared = (double)((range << 4) * (range << 4)); // used in isOutsideRange ++ player.playerNaturallySpawnedEvent = event; ++ } ++ // Paper end - optimize isOutisdeRange + LevelData worlddata = this.level.getLevelData(); + ProfilerFiller gameprofilerfiller = this.level.getProfiler(); + +@@ -928,15 +959,7 @@ public class ServerChunkCache extends ChunkSource { boolean flag2 = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit //Collections.shuffle(list); // Paper - no... just no... @@ -292,7 +330,7 @@ index a66d9d6df1fc0ad68f51ea96d4e1a2d725c73b05..00305a06885b2457615b6bd35bb1a847 Iterator iterator1 = list.iterator(); while (iterator1.hasNext()) { -@@ -944,9 +936,9 @@ public class ServerChunkCache extends ChunkSource { +@@ -944,9 +967,9 @@ public class ServerChunkCache extends ChunkSource { LevelChunk chunk1 = chunkproviderserver_a.chunk; ChunkPos chunkcoordintpair = chunk1.getPos(); diff --git a/patches/server/0433-Use-distance-map-to-optimise-entity-tracker.patch b/patches/server/0433-Use-distance-map-to-optimise-entity-tracker.patch index 638d95c81d..521d1c3385 100644 --- a/patches/server/0433-Use-distance-map-to-optimise-entity-tracker.patch +++ b/patches/server/0433-Use-distance-map-to-optimise-entity-tracker.patch @@ -332,18 +332,10 @@ index 95fcf31b0ea68312f6c3475c1b4a01ca2b269536..9d4dc7d8d8b6633a3e88a8fc43d3d798 this.id = Entity.ENTITY_COUNTER.incrementAndGet(); this.passengers = ImmutableList.of(); diff --git a/src/main/java/org/spigotmc/TrackingRange.java b/src/main/java/org/spigotmc/TrackingRange.java -index 55ce69b5fe097841d00ef5c241459dce9bb0d4db..daaf057380a55e6841831f56657cafb5ac97fb27 100644 +index 55ce69b5fe097841d00ef5c241459dce9bb0d4db..e5bcbfe175a697e04886d04543e1278b7e83a184 100644 --- a/src/main/java/org/spigotmc/TrackingRange.java +++ b/src/main/java/org/spigotmc/TrackingRange.java -@@ -6,6 +6,7 @@ import net.minecraft.world.entity.ExperienceOrb; - import net.minecraft.world.entity.decoration.ItemFrame; - import net.minecraft.world.entity.decoration.Painting; - import net.minecraft.world.entity.item.ItemEntity; -+import net.minecraft.world.entity.monster.Ghast; - - public class TrackingRange - { -@@ -24,6 +25,7 @@ public class TrackingRange +@@ -24,6 +24,7 @@ public class TrackingRange { return defaultRange; } @@ -351,7 +343,7 @@ index 55ce69b5fe097841d00ef5c241459dce9bb0d4db..daaf057380a55e6841831f56657cafb5 SpigotWorldConfig config = entity.level.spigotConfig; if ( entity instanceof ServerPlayer ) { -@@ -47,8 +49,48 @@ public class TrackingRange +@@ -47,8 +48,48 @@ public class TrackingRange return config.miscTrackingRange; } else { diff --git a/patches/server/0588-Skip-distance-map-update-when-spawning-disabled.patch b/patches/server/0588-Skip-distance-map-update-when-spawning-disabled.patch index 93b41705aa..ac94ef25b7 100644 --- a/patches/server/0588-Skip-distance-map-update-when-spawning-disabled.patch +++ b/patches/server/0588-Skip-distance-map-update-when-spawning-disabled.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Skip distance map update when spawning disabled. diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 93b8c5c21a6a6c2475f4589014852a5178dfc13f..6f4c2d4eb5f42cd661ec6dd6c354060811e59dad 100644 +index ca3ccf2631587a896f6b909d63889708e6f72f27..930291a0844acbd0491e641008727223b0010a60 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -926,7 +926,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -957,7 +957,7 @@ public class ServerChunkCache extends ChunkSource { int l = this.distanceManager.getNaturalSpawnChunkCount(); // Paper start - per player mob spawning NaturalSpawner.SpawnState spawnercreature_d; // moved down diff --git a/patches/server/0761-Consolidate-flush-calls-for-entity-tracker-packets.patch b/patches/server/0761-Consolidate-flush-calls-for-entity-tracker-packets.patch index 211dd4d791..e819c08d79 100644 --- a/patches/server/0761-Consolidate-flush-calls-for-entity-tracker-packets.patch +++ b/patches/server/0761-Consolidate-flush-calls-for-entity-tracker-packets.patch @@ -22,10 +22,10 @@ With this change I could get all 200 on at 0ms ping. So in general this patch should reduce Netty I/O thread load. diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 7e9a5499bec4eb33c25f610465c6bbfb4ccd18df..6efac4257ea167b73e68b491d050b777f0f71b35 100644 +index 204fc634fdbcff8ff9f4b570c50a76401dcc8bd6..573a7fc1543f4dbdbc6d83d1dc123ab952840c88 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -1000,7 +1000,24 @@ public class ServerChunkCache extends ChunkSource { +@@ -1031,7 +1031,24 @@ public class ServerChunkCache extends ChunkSource { }); gameprofilerfiller.pop(); gameprofilerfiller.pop(); diff --git a/patches/server/0771-Optimise-nearby-player-lookups.patch b/patches/server/0771-Optimise-nearby-player-lookups.patch index d828f86bed..56b8242457 100644 --- a/patches/server/0771-Optimise-nearby-player-lookups.patch +++ b/patches/server/0771-Optimise-nearby-player-lookups.patch @@ -26,7 +26,7 @@ index 4e3d4195db3660edd2b9ee850b774be91455fb84..4e3d14ed8a9651a327c8a5fbb53e69e6 // Paper end - optimise isOutsideOfRange diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 1a2687056c3264b74d992a554ab610ea744192c5..aa2671323c776a943d2e0c8a89d872933779703f 100644 +index 1a2687056c3264b74d992a554ab610ea744192c5..e7bc9621a4cb81ac4661eaa86162fbad7d4e018b 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -157,6 +157,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -59,12 +59,9 @@ index 1a2687056c3264b74d992a554ab610ea744192c5..aa2671323c776a943d2e0c8a89d87293 } void updateMaps(ServerPlayer player) { -@@ -262,8 +271,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider - - trackMap.update(player, chunkX, chunkZ, Math.min(trackRange, this.getEffectiveViewDistance())); +@@ -264,6 +273,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } -- // Paper end - use distance map to optimise entity tracker -+ // Paper end - use distance map to optimise entity trackerD + // Paper end - use distance map to optimise entity tracker this.playerChunkTickRangeMap.update(player, chunkX, chunkZ, DistanceManager.MOB_SPAWN_RANGE); // Paper - optimise PlayerChunkMap#isOutsideRange + this.playerGeneralAreaMap.update(player, chunkX, chunkZ, GENERAL_AREA_MAP_SQUARE_RADIUS); // Paper - optimise checkDespawn }