From 6ee40aa1ce21306fa210ef27665b159461bb1fc8 Mon Sep 17 00:00:00 2001 From: Keir Date: Tue, 17 Nov 2015 15:08:35 +0000 Subject: [PATCH] No longer close reports when the player quits, instead alert the handler and alert again when (and if) the player re-joins if the report is still active. --- .../mineplex/core/report/ReportManager.java | 48 +++++++++++++------ .../mineplex/core/report/ReportPlugin.java | 7 +++ .../mineplex/core/report/ReportResult.java | 3 +- 3 files changed, 42 insertions(+), 16 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/report/ReportManager.java b/Plugins/Mineplex.Core/src/mineplex/core/report/ReportManager.java index 321ffdbbd..bbb32b7f2 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/report/ReportManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/report/ReportManager.java @@ -97,7 +97,7 @@ public class ReportManager { if (reportCloser != null) { // Notify staff that the report was closed. - sendReportNotification( + sendStaffNotification( F.main(getReportPrefix(reportId), String.format("%s closed the report for: %s (%s).", reportCloser.getName(), reason, result.toDisplayMessage() + C.mBody))); @@ -120,7 +120,7 @@ public class ReportManager { report.setHandler(handlerName); _reportRepository.addElement(report); // update existing value in Redis - sendReportNotification(F.main(getReportPrefix(reportId), String.format("%s is handling this report.", handlerName))); + sendStaffNotification(F.main(getReportPrefix(reportId), String.format("%s is handling this report.", handlerName))); Portal.transferPlayer(reportHandler.getName(), report.getServerName()); // Show user details of the report every x seconds @@ -178,11 +178,11 @@ public class ReportManager { message = message.extra("\n" + F.main(getReportPrefix(reportId), "Click to handle this ticket.")) .click(ClickEvent.RUN_COMMAND, "/reporthandle " + reportId); - sendReportNotification(message); + sendStaffNotification(message); } else { - sendReportHandlerNotification(report, message); + sendHandlerNotification(report, message); } } @@ -193,13 +193,23 @@ public class ReportManager { return null; } + public void onPlayerJoin(Player player) + { + if (hasActiveReport(player)) + { + int reportId = getActiveReport(player.getName()); + Report report = getReport(reportId); + sendHandlerNotification(report, F.main(getReportPrefix(reportId), String.format("%s has re-joined the game.", player.getName()))); + } + } + public void onPlayerQuit(Player player) { if (hasActiveReport(player)) { int reportId = getActiveReport(player.getName()); - this.closeReport(reportId, null, "Player Quit", ReportResult.UNDETERMINED); - sendReportNotification(F.main(getReportPrefix(reportId), String.format("%s has left the game.", player.getName()))); + Report report = getReport(reportId); + sendHandlerNotification(report, F.main(getReportPrefix(reportId), String.format("%s has left the game.", player.getName()))); } } @@ -287,7 +297,7 @@ public class ReportManager { * * @param message - the report notification message to send. */ - public void sendReportNotification(JsonMessage message) + public void sendStaffNotification(JsonMessage message) { ReportNotification reportNotification = new ReportNotification(message); reportNotification.publish(); @@ -298,7 +308,7 @@ public class ReportManager { * * @param message - the report notification message to send. */ - public void sendReportNotification(String message) + public void sendStaffNotification(String message) { ReportNotification reportNotification = new ReportNotification(message); reportNotification.publish(); @@ -306,26 +316,35 @@ public class ReportManager { /** * Send to the handler of a {@link Report}, regardless of whether or not the handler is currently on this server instance. + * If there is no handler for a report, it will be sent to all staff instead. * * @param report the report of which a message should be sent ot it's handler * @param jsonMessage the report notification message to send */ - public void sendReportHandlerNotification(Report report, JsonMessage jsonMessage) + public void sendHandlerNotification(Report report, JsonMessage jsonMessage) { - ReportHandlerNotification reportNotification = new ReportHandlerNotification(report, jsonMessage); - reportNotification.publish(); + if (report.getHandler() != null) + { + ReportHandlerNotification reportHandlerNotification = new ReportHandlerNotification(report, jsonMessage); + reportHandlerNotification.publish(); + } + else + { + // If there is no report handler, send it to all staff + sendStaffNotification(jsonMessage); + } } /** * Send to the handler of a {@link Report}, regardless of whether or not the handler is currently on this server instance. + * If there is no handler for a report, it will be sent to all staff instead. * * @param report the report of which a message should be sent ot it's handler * @param message the report notification message to send */ - public void sendReportHandlerNotification(Report report, String message) + public void sendHandlerNotification(Report report, String message) { - ReportHandlerNotification reportNotification = new ReportHandlerNotification(report, message); - reportNotification.publish(); + sendHandlerNotification(report, new JsonMessage(message)); } /** @@ -343,6 +362,7 @@ public class ReportManager { return -1; } + // TODO this and related methods only function on the server where the report was created public boolean hasActiveReport(Player player) { return getActiveReport(player.getName()) != -1; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/report/ReportPlugin.java b/Plugins/Mineplex.Core/src/mineplex/core/report/ReportPlugin.java index 47481b682..ea0d0d54f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/report/ReportPlugin.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/report/ReportPlugin.java @@ -6,6 +6,7 @@ import mineplex.core.report.command.ReportCommand; import mineplex.core.report.command.ReportHandleCommand; import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; @@ -34,6 +35,12 @@ public class ReportPlugin extends MiniPlugin //AddCommand(new ReportDebugCommand(this)); } + @EventHandler + public void onPlayerJoin(PlayerJoinEvent e) + { + _reportManager.onPlayerJoin(e.getPlayer()); + } + @EventHandler public void onPlayerQuit(PlayerQuitEvent e) { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/report/ReportResult.java b/Plugins/Mineplex.Core/src/mineplex/core/report/ReportResult.java index 34af4972f..c5ba5df0c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/report/ReportResult.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/report/ReportResult.java @@ -6,8 +6,7 @@ public enum ReportResult { ACCEPTED(ChatColor.GREEN, "Accept Report (Punish Player)", "Accepted (Player Received Punishment)"), DENIED(ChatColor.YELLOW, "Deny Report", "Denied"), - ABUSIVE(ChatColor.RED, "Mark Abusive Report", "Abusive Report"), - UNDETERMINED(ChatColor.LIGHT_PURPLE, null, "Undetermined"); + ABUSIVE(ChatColor.RED, "Mark Abusive Report", "Abusive Report"); private ChatColor _color; private String _actionMessage;