diff --git a/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/report/ReportAnnouncer.java b/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/report/ReportAnnouncer.java index 5cdefba66..37a943e2c 100644 --- a/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/report/ReportAnnouncer.java +++ b/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/report/ReportAnnouncer.java @@ -75,7 +75,7 @@ public void broadcast(ModelUpdate message) { if(localServer._id().equals(message.document().server_id()) || (config.crossServer() && config.families().contains(message.document().family()))) { - final List formatted = reportFormatter.format(message.document(), true, false); + final List formatted = reportFormatter.format(message.document(), true, false, false); adminChannel.viewers() .filter(viewer -> viewer.hasPermission(ReportPermissions.RECEIVE)) .forEach(viewer -> { diff --git a/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/report/ReportCommands.java b/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/report/ReportCommands.java index 520ee3bb1..58004201d 100644 --- a/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/report/ReportCommands.java +++ b/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/report/ReportCommands.java @@ -20,6 +20,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerQuitEvent; import tc.oc.api.bukkit.users.BukkitUserStore; +import tc.oc.api.bukkit.users.OnlinePlayers; import tc.oc.api.docs.Report; import tc.oc.api.docs.Server; import tc.oc.minecraft.scheduler.SyncExecutor; @@ -55,6 +56,7 @@ public class ReportCommands implements Commands, Listener { private final BukkitUserStore userStore; private final Audiences audiences; private final IdentityProvider identities; + private final OnlinePlayers onlinePlayers; private final Map senderLastReport = new WeakHashMap<>(); @@ -67,7 +69,8 @@ public class ReportCommands implements Commands, Listener { Server localServer, BukkitUserStore userStore, Audiences audiences, - IdentityProvider identities) { + IdentityProvider identities, + OnlinePlayers onlinePlayers) { this.reportFormatter = reportFormatter; this.reportService = reportService; this.reportCreator = reportCreator; @@ -78,6 +81,7 @@ public class ReportCommands implements Commands, Listener { this.userStore = userStore; this.audiences = audiences; this.identities = identities; + this.onlinePlayers = onlinePlayers; } @EventHandler @@ -91,6 +95,10 @@ private void assertEnabled() throws CommandException { } } + private void displayReports(Audience audience, Report report, boolean showServer, boolean showTime, boolean displayOffline) { + audience.sendMessages(reportFormatter.format(report, showServer, showTime, displayOffline)); + } + @Command( aliases = { "report" }, usage = " ", @@ -145,7 +153,7 @@ public void report(final CommandContext args, final CommandSender sender) throws @Command( aliases = { "reports", "reps" }, usage = "[-a] [-p page] [player]", - flags = "ap:", + flags = "aop:", desc = "List recent reports on this server, or all servers, optionally filtering by player.", min = 0, max = 1 @@ -159,6 +167,7 @@ public void reports(final CommandContext args, final CommandSender sender) throw CommandFutureCallback.onSuccess(sender, args, userResult -> { final int page = args.getFlagInteger('p', 1); final boolean crossServer = args.hasFlag('a'); + final boolean showOffline = args.hasFlag('o'); ReportSearchRequest request = ReportSearchRequest.create(page, PER_PAGE); request = crossServer ? request.forFamilies(reportConfiguration.families()) @@ -183,8 +192,8 @@ public void reports(final CommandContext args, final CommandSender sender) throw final Audience audience = audiences.get(sender); audience.sendMessage(new HeaderComponent(title)); for(Report report : reportResult.documents()) { - if(report.reported() != null) { - audience.sendMessages(reportFormatter.format(report, crossServer, true)); + if(report.reported() != null && onlinePlayers.find(report.reported()).isOnline()) { + displayReports(audience, report, crossServer, true, showOffline); } } }) diff --git a/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/report/ReportFormatter.java b/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/report/ReportFormatter.java index eef3993f6..ca3b7cf65 100644 --- a/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/report/ReportFormatter.java +++ b/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/report/ReportFormatter.java @@ -1,12 +1,14 @@ package tc.oc.commons.bukkit.report; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import javax.inject.Inject; import com.google.common.collect.ImmutableList; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.BaseComponent; +import tc.oc.api.bukkit.users.OnlinePlayers; import tc.oc.api.docs.Report; import tc.oc.api.servers.ServerStore; import tc.oc.commons.bukkit.chat.NameStyle; @@ -22,13 +24,15 @@ public class ReportFormatter { private final IdentityProvider identityProvider; private final ServerStore servers; + private final OnlinePlayers onlinePlayers; - @Inject ReportFormatter(IdentityProvider identityProvider, ServerStore servers) { + @Inject ReportFormatter(IdentityProvider identityProvider, ServerStore servers, OnlinePlayers onlinePlayers) { this.identityProvider = identityProvider; this.servers = servers; + this.onlinePlayers = onlinePlayers; } - public List format(Report report, boolean showServer, boolean showTime) { + public List format(Report report, boolean showServer, boolean showTime, boolean displayOffline) { final List parts = new ArrayList<>(); parts.add(new Component(