From b4ccc3c4c874d1f565c597a4bbf6b0eeb33527bc Mon Sep 17 00:00:00 2001 From: lars Date: Fri, 7 Nov 2025 19:47:32 +0100 Subject: [PATCH 1/3] added statistics appliance in craftattack --- .../tooling/statistics/Statistics.java | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/statistics/Statistics.java diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/statistics/Statistics.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/statistics/Statistics.java new file mode 100644 index 0000000..535feec --- /dev/null +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/statistics/Statistics.java @@ -0,0 +1,51 @@ +package eu.mhsl.craftattack.spawn.craftattack.appliances.tooling.statistics; + +import eu.mhsl.craftattack.spawn.core.Main; +import eu.mhsl.craftattack.spawn.core.api.server.HttpServer; +import eu.mhsl.craftattack.spawn.core.appliance.Appliance; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Statistic; + +import java.util.*; +import java.util.stream.Collectors; + +public class Statistics extends Appliance { + record StatisticsResponse(List playerStatistics) { + record PlayerStatistics(String player, Map values) { + } + } + + record MaterialStatistic(String name, String material) { + } + + record StatisticsRequest(List categories) { + } + + @Override + public void httpApi(HttpServer.ApiBuilder apiBuilder) { + apiBuilder.post( + "getStatistics", + StatisticsRequest.class, + (statistics, request) -> { + Main.instance().getLogger().info("API requested statistics"); + List statisticsList = Arrays.stream(Bukkit.getOfflinePlayers()) + .parallel() + .map(player -> new StatisticsResponse.PlayerStatistics( + player.getUniqueId().toString(), + statistics.categories().stream() + .map(s -> new AbstractMap.SimpleEntry<>(s, s.material().isBlank() + ? player.getStatistic(Statistic.valueOf(s.name)) + : player.getStatistic(Statistic.valueOf(s.name), Material.valueOf(s.material())) + )) + .collect(Collectors.toMap( + Map.Entry::getKey, + Map.Entry::getValue + )) + )) + .toList(); + return new StatisticsResponse(statisticsList); + } + ); + } +} -- 2.30.2 From 62c025004913ee0867618783712a7a2d2ce42dc7 Mon Sep 17 00:00:00 2001 From: lars Date: Fri, 7 Nov 2025 21:27:33 +0100 Subject: [PATCH 2/3] added null value check for material --- .../tooling/statistics/Statistics.java | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/statistics/Statistics.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/statistics/Statistics.java index 535feec..f200af5 100644 --- a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/statistics/Statistics.java +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/statistics/Statistics.java @@ -8,15 +8,14 @@ import org.bukkit.Material; import org.bukkit.Statistic; import java.util.*; -import java.util.stream.Collectors; public class Statistics extends Appliance { record StatisticsResponse(List playerStatistics) { - record PlayerStatistics(String player, Map values) { + record PlayerStatistics(String player, List statistics) { } } - record MaterialStatistic(String name, String material) { + record MaterialStatistic(String name, String material, int value) { } record StatisticsRequest(List categories) { @@ -34,14 +33,14 @@ public class Statistics extends Appliance { .map(player -> new StatisticsResponse.PlayerStatistics( player.getUniqueId().toString(), statistics.categories().stream() - .map(s -> new AbstractMap.SimpleEntry<>(s, s.material().isBlank() - ? player.getStatistic(Statistic.valueOf(s.name)) - : player.getStatistic(Statistic.valueOf(s.name), Material.valueOf(s.material())) - )) - .collect(Collectors.toMap( - Map.Entry::getKey, - Map.Entry::getValue - )) + .map(category -> { + String material = (category.material() == null || category.material().isBlank()) ? null : category.material(); + return new MaterialStatistic(category.name(), material, material == null + ? player.getStatistic(Statistic.valueOf(category.name())) + : player.getStatistic(Statistic.valueOf(category.name()), Material.valueOf(material)) + ); + }) + .toList() )) .toList(); return new StatisticsResponse(statisticsList); -- 2.30.2 From 4a5c24235bb77b0eac52e74eea2870e476363234 Mon Sep 17 00:00:00 2001 From: lars Date: Fri, 7 Nov 2025 21:46:16 +0100 Subject: [PATCH 3/3] added player display name to StatisticsResponse --- .../craftattack/appliances/tooling/statistics/Statistics.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/statistics/Statistics.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/statistics/Statistics.java index f200af5..8055558 100644 --- a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/statistics/Statistics.java +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/statistics/Statistics.java @@ -11,7 +11,7 @@ import java.util.*; public class Statistics extends Appliance { record StatisticsResponse(List playerStatistics) { - record PlayerStatistics(String player, List statistics) { + record PlayerStatistics(String playerName, String playerUuid, List statistics) { } } @@ -31,6 +31,7 @@ public class Statistics extends Appliance { List statisticsList = Arrays.stream(Bukkit.getOfflinePlayers()) .parallel() .map(player -> new StatisticsResponse.PlayerStatistics( + player.getName(), player.getUniqueId().toString(), statistics.categories().stream() .map(category -> { -- 2.30.2