From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: MrPowerGamerBR Date: Wed, 22 Nov 2023 14:40:36 -0300 Subject: [PATCH] Skip dirty stats copy when requesting player stats There's literally only one getDirty call. Because the map was only retrieved once, we don't actually need to create a copy of the map just to iterate it, we can just access it directly and clear it manually after use. diff --git a/src/main/java/net/minecraft/stats/ServerStatsCounter.java b/src/main/java/net/minecraft/stats/ServerStatsCounter.java index fb7342f7a5008a283c3400c6313c637de8210dfa..1f9b3cacb276c144ecbef104e5d598b78dc0c025 100644 --- a/src/main/java/net/minecraft/stats/ServerStatsCounter.java +++ b/src/main/java/net/minecraft/stats/ServerStatsCounter.java @@ -90,12 +90,16 @@ public class ServerStatsCounter extends StatsCounter { this.dirty.add(stat); } + // SparklyPaper start - Skip dirty stats copy when requesting player stats + /* private Set> getDirty() { Set> set = Sets.newHashSet(this.dirty); this.dirty.clear(); return set; } + */ + // SparklyPaper end public void parseLocal(DataFixer dataFixer, String json) { try { @@ -243,7 +247,7 @@ public class ServerStatsCounter extends StatsCounter { public void sendStats(ServerPlayer player) { Object2IntMap> object2intmap = new Object2IntOpenHashMap(); - Iterator iterator = this.getDirty().iterator(); + Iterator iterator = this.dirty.iterator(); // SparklyPaper - Skip dirty stats copy when requesting player stats while (iterator.hasNext()) { Stat statistic = (Stat) iterator.next(); @@ -251,6 +255,8 @@ public class ServerStatsCounter extends StatsCounter { object2intmap.put(statistic, this.getValue(statistic)); } + this.dirty.clear(); // SparklyPaper - Skip dirty stats copy when requesting player stats + player.connection.send(new ClientboundAwardStatsPacket(object2intmap)); } }