From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: MrPowerGamerBR Date: Sun, 22 Oct 2023 12:27:26 -0300 Subject: [PATCH] Only check thundering once per world instead for every chunk For some reason the isThundering check is consuming ~3% of CPU time when profiled so, instead of checking the thunder every chunk, we can cache the result and reuse on the same chunk tick diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java index c02ffd419236980cd063741612e99d739d97ec94..daa5948cc7b86a719a313ea595f135cd00b6a3cc 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -599,6 +599,7 @@ public class ServerChunkCache extends ChunkSource { } // Paper end - optimise chunk tick iteration + this.level.isCurrentlyThundering = this.level.isThundering_old(); // SparklyPaper - Only check thundering once per world instead for every chunk int chunksTicked = 0; // Paper // Paper start - optimise chunk tick iteration io.papermc.paper.util.player.NearbyPlayers nearbyPlayers = this.chunkMap.getNearbyPlayers(); // Paper - optimise chunk tick iteration diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java index 9388dd9b34bb8148ce8b5f7e24122fa4bd1bafa8..0210226d2185803a18c0020d7985c1fccb798953 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -184,6 +184,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { private int tileTickPosition; public final Map explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Move from Map in BlockRedstoneTorch to here + public boolean isCurrentlyThundering; // SparklyPaper - Only check if the world is currently thundering once instead for every chunk // Paper start - fix and optimise world upgrading // copied from below @@ -1614,7 +1615,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { this.rainLevel = f1; } + // SparklyPaper start - Only check thundering once per world instead for every chunk public boolean isThundering() { + return isCurrentlyThundering; + } + public boolean isThundering_old() { + // SparklyPaper end return this.dimensionType().hasSkyLight() && !this.dimensionType().hasCeiling() ? (double) this.getThunderLevel(1.0F) > 0.9D : false; }