From b98d33af4049cd60c758d4bc4fa08b7742cd312f Mon Sep 17 00:00:00 2001 From: lars Date: Tue, 23 Dec 2025 18:56:30 +0100 Subject: [PATCH] added report reminder on admin join --- .../CraftAttackReportRepository.java | 4 +++ .../api/repositories/ReportRepository.java | 23 +++++++++++---- .../metaGameplay/report/Report.java | 28 +++++++++++++++++-- .../ReportCreatedListener.java | 3 +- .../report/listeners/ReportJoinListener.java | 14 ++++++++++ 5 files changed, 63 insertions(+), 9 deletions(-) rename common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/{ => listeners}/ReportCreatedListener.java (91%) create mode 100644 common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/listeners/ReportJoinListener.java diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/CraftAttackReportRepository.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/CraftAttackReportRepository.java index 232f4c7..43811f6 100644 --- a/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/CraftAttackReportRepository.java +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/CraftAttackReportRepository.java @@ -23,4 +23,8 @@ public class CraftAttackReportRepository extends ReportRepository { ReportUrl.class ); } + + public ReqResp queryAllReports() { + return this.get("reports", AllReports.class); + } } diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/ReportRepository.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/ReportRepository.java index 0e3fec5..0007fd9 100644 --- a/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/ReportRepository.java +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/ReportRepository.java @@ -21,6 +21,11 @@ public abstract class ReportRepository extends HttpRepository { public record ReportUrl(@NotNull String url) { } + public enum Status { + open, + closed, + } + public record PlayerReports( List from_self, List to_self @@ -31,11 +36,17 @@ public abstract class ReportRepository extends HttpRepository { @Nullable Long created, @Nullable Status status, @NotNull String url - ) { - public enum Status { - open, - closed, - } - } + ) { } + } + + public record AllReports(List reports) { + public record Report( + @NotNull UUID reporter, + @Nullable UUID reported, + @NotNull String reason, + @Nullable Long created, + @Nullable Status status, + @NotNull String url + ) { } } } diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/Report.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/Report.java index 5a2098b..ff1e0e1 100644 --- a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/Report.java +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/Report.java @@ -1,6 +1,8 @@ package eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.report; import eu.mhsl.craftattack.spawn.common.api.repositories.ReportRepository; +import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.report.listeners.ReportCreatedListener; +import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.report.listeners.ReportJoinListener; import eu.mhsl.craftattack.spawn.core.Main; import eu.mhsl.craftattack.spawn.core.api.client.ReqResp; import eu.mhsl.craftattack.spawn.common.api.repositories.CraftAttackReportRepository; @@ -133,7 +135,7 @@ public class Report extends Appliance { } Function, List> filterClosed = reports -> reports.stream() - .filter(report -> Objects.equals(report.status(), ReportRepository.PlayerReports.Report.Status.closed)) + .filter(report -> Objects.equals(report.status(), ReportRepository.Status.closed)) .toList(); List reportsToOthers = filterClosed.apply(userReports.data().from_self()).reversed(); @@ -179,10 +181,32 @@ public class Report extends Appliance { issuer.sendMessage(component.build()); } + public void sendReportsInfo(Player player) { + ReqResp allReportsResponse = this.queryRepository(CraftAttackReportRepository.class).queryAllReports(); + + if(allReportsResponse.status() != 200) { + Main.logger().warning("Failed to request Reports: " + allReportsResponse.status()); + return; + } + + List allOpenReports = allReportsResponse.data().reports().stream() + .filter(report -> report.status() == ReportRepository.Status.open) + .toList(); + + if(allOpenReports.isEmpty()) return; + + player.sendMessage( + Component.text("Hey, es gibt noch ", NamedTextColor.GOLD) + .append(Component.text(allOpenReports.size(), NamedTextColor.RED)) + .append(Component.text(" unbearbeitete Reports!", NamedTextColor.GOLD)) + ); + } + @Override protected @NotNull List listeners() { return List.of( - new ReportCreatedListener() + new ReportCreatedListener(), + new ReportJoinListener() ); } diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/ReportCreatedListener.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/listeners/ReportCreatedListener.java similarity index 91% rename from common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/ReportCreatedListener.java rename to common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/listeners/ReportCreatedListener.java index 8a6c988..9aba1b8 100644 --- a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/ReportCreatedListener.java +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/listeners/ReportCreatedListener.java @@ -1,5 +1,6 @@ -package eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.report; +package eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.report.listeners; +import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.report.Report; import eu.mhsl.craftattack.spawn.core.appliance.ApplianceListener; import eu.mhsl.craftattack.spawn.core.event.ReportCreatedEvent; import net.kyori.adventure.text.Component; diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/listeners/ReportJoinListener.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/listeners/ReportJoinListener.java new file mode 100644 index 0000000..1cd9036 --- /dev/null +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/listeners/ReportJoinListener.java @@ -0,0 +1,14 @@ +package eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.report.listeners; + +import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.report.Report; +import eu.mhsl.craftattack.spawn.core.appliance.ApplianceListener; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; + +public class ReportJoinListener extends ApplianceListener { + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + if(!event.getPlayer().hasPermission("admin")) return; + this.getAppliance().sendReportsInfo(event.getPlayer()); + } +}