PaperMC/paper-server/patches/sources/net/minecraft/stats/ServerStatsCounter.java.patch
The456gamer a24a58dfab Fix spigot's Forced-Stats
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
2023-08-28 01:32:39 +01:00

58 lines
2.6 KiB
Diff

--- a/net/minecraft/stats/ServerStatsCounter.java
+++ b/net/minecraft/stats/ServerStatsCounter.java
@@ -1,3 +1,4 @@
+// mc-dev import
package net.minecraft.stats;
import com.google.common.collect.Maps;
@@ -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<ResourceLocation, Integer> entry : org.spigotmc.SpigotConfig.forcedStats.entrySet() )
+ {
+ Stat<ResourceLocation> 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 ioexception) {
@@ -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 +174,12 @@
}
private <T> Optional<Stat<T>> getStat(StatType<T> type, String id) {
- Optional optional = Optional.ofNullable(ResourceLocation.tryParse(id));
- Registry iregistry = type.getRegistry();
+ // CraftBukkit - decompile error start
+ Optional<ResourceLocation> optional = Optional.ofNullable(ResourceLocation.tryParse(id));
+ Registry<T> iregistry = type.getRegistry();
- Objects.requireNonNull(iregistry);
- optional = optional.flatMap(iregistry::getOptional);
- Objects.requireNonNull(type);
- return optional.map(type::get);
+ return optional.flatMap(iregistry::getOptional).map(type::get);
+ // CraftBukkit - decompile error end
}
private static CompoundTag fromJson(JsonObject json) {