--- a/net/minecraft/stats/ServerStatsCounter.java +++ b/net/minecraft/stats/ServerStatsCounter.java @@ -51,9 +_,21 @@ LOGGER.error("Couldn't parse statistics file {}", file, var5); } } + // 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(java.util.Objects.requireNonNull(BuiltInRegistries.CUSTOM_STAT.getValue(entry.getKey()))); // Paper - ensured by SpigotConfig#stats + this.stats.put(wrapper, entry.getValue().intValue()); + } + // Spigot end + // Paper end - Moved after stat fetching for player state file } public void save() { + if (org.spigotmc.SpigotConfig.disableStatSaving) return; // Spigot try { FileUtils.writeStringToFile(this.file, this.toJson()); } catch (IOException var2) { @@ -63,6 +_,8 @@ @Override public void setValue(Player player, Stat stat, int i) { + 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, i); this.dirty.add(stat); }