diff --git a/paper-server/patches/sources/net/minecraft/stats/ServerStatsCounter.java.patch b/paper-server/patches/sources/net/minecraft/stats/ServerStatsCounter.java.patch index 88534eabcc..f82072300e 100644 --- a/paper-server/patches/sources/net/minecraft/stats/ServerStatsCounter.java.patch +++ b/paper-server/patches/sources/net/minecraft/stats/ServerStatsCounter.java.patch @@ -5,21 +5,22 @@ package net.minecraft.stats; import com.google.common.collect.Maps; -@@ -47,6 +48,13 @@ - public ServerStatsCounter(MinecraftServer server, File file) { - this.server = server; - this.file = file; +@@ -57,9 +58,22 @@ + } + } + ++ // Paper start - Moved after stat fetching for player state file ++ // Moves the loading after vanilla loading, so it overrides the values. ++ // Disables saving any forced stats, so it stays at the same value (without enabling disableStatSaving) ++ // Fixes stat initialization to not cause a NullPointerException + // Spigot start + for ( Map.Entry entry : org.spigotmc.SpigotConfig.forcedStats.entrySet() ) + { -+ Stat wrapper = Stats.CUSTOM.get( entry.getKey() ); ++ Stat wrapper = Stats.CUSTOM.get(java.util.Objects.requireNonNull(BuiltInRegistries.CUSTOM_STAT.getValue(entry.getKey()))); // Paper - ensured by SpigotConfig#stats + this.stats.put( wrapper, entry.getValue().intValue() ); + } + // Spigot end - if (file.isFile()) { - try { - this.parseLocal(server.getFixerUpper(), FileUtils.readFileToString(file)); -@@ -60,6 +68,7 @@ ++ // Paper end - Moved after stat fetching for player state file } public void save() { @@ -27,15 +28,16 @@ try { FileUtils.writeStringToFile(this.file, this.toJson()); } catch (IOException ioexception) { -@@ -70,6 +79,7 @@ +@@ -70,6 +84,8 @@ @Override public void setValue(Player player, Stat stat, int value) { + if ( org.spigotmc.SpigotConfig.disableStatSaving ) return; // Spigot ++ if (stat.getType() == Stats.CUSTOM && stat.getValue() instanceof final ResourceLocation resourceLocation && org.spigotmc.SpigotConfig.forcedStats.get(resourceLocation) != null) return; // Paper - disable saving forced stats super.setValue(player, stat, value); this.dirty.add(stat); } -@@ -158,13 +168,12 @@ +@@ -158,13 +174,12 @@ } private Optional> getStat(StatType type, String id) {