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
This commit is contained in:
The456gamer 2023-08-28 01:32:39 +01:00
parent bf607b1e23
commit a24a58dfab

View file

@ -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<ResourceLocation, Integer> entry : org.spigotmc.SpigotConfig.forcedStats.entrySet() )
+ {
+ Stat<ResourceLocation> wrapper = Stats.CUSTOM.get( entry.getKey() );
+ 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
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 <T> Optional<Stat<T>> getStat(StatType<T> type, String id) {