diff --git a/patches/api/0013-Add-Timings-Events.patch b/patches/api/0013-Add-Timings-Events.patch index 18ac6f4..f9e0755 100644 --- a/patches/api/0013-Add-Timings-Events.patch +++ b/patches/api/0013-Add-Timings-Events.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add Timings Events diff --git a/src/main/java/co/aikar/timings/TimingsCommand.java b/src/main/java/co/aikar/timings/TimingsCommand.java -index 3132dc98d26c54c5e46162e53aaed195d7335c8d..58c99863043b16996f52479a503deb3bba83434c 100644 +index 3132dc98d26c54c5e46162e53aaed195d7335c8d..b9b41e54a70f8f81e600fc435fc6c184e310bf09 100644 --- a/src/main/java/co/aikar/timings/TimingsCommand.java +++ b/src/main/java/co/aikar/timings/TimingsCommand.java @@ -59,12 +59,14 @@ public class TimingsCommand extends BukkitCommand { @@ -15,14 +15,14 @@ index 3132dc98d26c54c5e46162e53aaed195d7335c8d..58c99863043b16996f52479a503deb3b - Timings.setTimingsEnabled(true); - sender.sendMessage(text("Enabled Timings & Reset")); + if (new co.aikar.timings.event.TimingsModifyEvent(sender, co.aikar.timings.event.TimingsModifyEvent.Action.ENABLE).callEvent()) { -+ Timings.setTimingsEnabled(true); ++ Timings.setTimingsEnabled(true, sender); + } return true; } else if ("off".equalsIgnoreCase(arg)) { - Timings.setTimingsEnabled(false); - sender.sendMessage(text("Disabled Timings")); + if (new co.aikar.timings.event.TimingsModifyEvent(sender, co.aikar.timings.event.TimingsModifyEvent.Action.DISABLE).callEvent()) { -+ Timings.setTimingsEnabled(false); ++ Timings.setTimingsEnabled(false, sender); + } return true; } @@ -57,41 +57,10 @@ index 3132dc98d26c54c5e46162e53aaed195d7335c8d..58c99863043b16996f52479a503deb3b } } else if ( "paste".equalsIgnoreCase(arg) || -@@ -97,7 +101,9 @@ public class TimingsCommand extends BukkitCommand { - "merged".equalsIgnoreCase(arg) || - "separate".equalsIgnoreCase(arg) - ) { -- Timings.generateReport(sender); -+ TimingsReportListener listener = new TimingsReportListener(new ArrayList<>()); -+ listener.setOnDone(() -> new co.aikar.timings.event.TimingsGenerateReportEvent(sender, listener.getTimingsURL())); -+ Timings.generateReport(listener); - } else { - sender.sendMessage(text("Usage: " + this.usageMessage, NamedTextColor.RED)); - } diff --git a/src/main/java/co/aikar/timings/TimingsReportListener.java b/src/main/java/co/aikar/timings/TimingsReportListener.java index 34f4c02c3bdbe571a7efb1f8c61d8924b0c81268..e00b5149b10310b3b2bf7c9fcab1bce3d0b5c50e 100644 --- a/src/main/java/co/aikar/timings/TimingsReportListener.java +++ b/src/main/java/co/aikar/timings/TimingsReportListener.java -@@ -15,7 +15,7 @@ import java.util.List; - @SuppressWarnings("WeakerAccess") - public class TimingsReportListener implements net.kyori.adventure.audience.ForwardingAudience, MessageCommandSender { - private final List senders; -- private final Runnable onDone; -+ private Runnable onDone; - private String timingsURL; - - public TimingsReportListener(@NotNull CommandSender senders) { -@@ -35,6 +35,10 @@ public class TimingsReportListener implements net.kyori.adventure.audience.Forwa - this.onDone = onDone; - } - -+ public void setOnDone(Runnable onDone) { -+ this.onDone = onDone; -+ } -+ - @Nullable - public String getTimingsURL() { - return timingsURL; @@ -58,7 +62,9 @@ public class TimingsReportListener implements net.kyori.adventure.audience.Forwa @Override @@ -116,12 +85,13 @@ index 34f4c02c3bdbe571a7efb1f8c61d8924b0c81268..e00b5149b10310b3b2bf7c9fcab1bce3 public void addConsoleIfNeeded() { diff --git a/src/main/java/co/aikar/timings/event/TimingsEvent.java b/src/main/java/co/aikar/timings/event/TimingsEvent.java new file mode 100644 -index 0000000000000000000000000000000000000000..b25dc51f73a0c323dc1872c28c6d6bb7a103de57 +index 0000000000000000000000000000000000000000..2abce3d7a89b2dd1657870d86772ef5bc4623235 --- /dev/null +++ b/src/main/java/co/aikar/timings/event/TimingsEvent.java -@@ -0,0 +1,32 @@ +@@ -0,0 +1,34 @@ +package co.aikar.timings.event; + ++import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; @@ -135,6 +105,7 @@ index 0000000000000000000000000000000000000000..b25dc51f73a0c323dc1872c28c6d6bb7 + private static final HandlerList handlers = new HandlerList(); + + public TimingsEvent(Set audience) { ++ super(!Bukkit.isPrimaryThread()); + this.audience = audience; + } + @@ -262,3 +233,41 @@ index 0000000000000000000000000000000000000000..1fe9bbedf23fdf7b02de02f5d184d8d9 + } + +} +diff --git a/src/main/java/co/aikar/timings/Timings.java b/src/main/java/co/aikar/timings/Timings.java +index dd72a34eaa4bedd9ea0b92eaa79091b00eb4dd09..90f8f7a0996cf1a6f6b3e9eef0243b2d629a1214 100644 +--- a/src/main/java/co/aikar/timings/Timings.java ++++ b/src/main/java/co/aikar/timings/Timings.java +@@ -23,6 +23,8 @@ + */ + package co.aikar.timings; + ++import co.aikar.timings.event.TimingsModifyEvent; ++import co.aikar.timings.event.TimingsModifyEvent.Action; + import com.google.common.base.Preconditions; + import com.google.common.collect.EvictingQueue; + import com.google.common.collect.Lists; +@@ -135,7 +137,24 @@ public final class Timings { + * @param enabled Should timings be reported + */ + public static void setTimingsEnabled(boolean enabled) { ++ setTimingsEnabled(enabled, null); ++ } ++ ++ /** ++ *

Sets whether or not the Spigot Timings system should be enabled

++ * ++ * Calls a {@link TimingsModifyEvent}, if cancelled the timings will not be reset ++ * ++ * @param enabled Should timings be reported ++ * @param sender The sender asking to reset ++ */ ++ public static void setTimingsEnabled(boolean enabled, CommandSender sender) { + timingsEnabled = enabled; ++ if (sender != null) { ++ if (!new co.aikar.timings.event.TimingsModifyEvent(sender, Action.RESET).callEvent()) { ++ return; ++ } ++ } + reset(); + } + diff --git a/patches/server/0018-Add-Timings-Events.patch b/patches/server/0018-Add-Timings-Events.patch new file mode 100644 index 0000000..821912b --- /dev/null +++ b/patches/server/0018-Add-Timings-Events.patch @@ -0,0 +1,19 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Blast-MC +Date: Wed, 20 Jul 2022 05:26:25 -0400 +Subject: [PATCH] Add Timings Events + + +diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java +index 06bff37e4c1fddd3be6343049a66787c63fb420c..b6567f558cd25698208a06513c241646e0b28341 100644 +--- a/src/main/java/co/aikar/timings/TimingsExport.java ++++ b/src/main/java/co/aikar/timings/TimingsExport.java +@@ -349,6 +349,8 @@ public class TimingsExport extends Thread { + timingsURL = con.getHeaderField("Location"); + listeners.sendMessage(text("View Timings Report: ", NamedTextColor.GREEN).append(text(timingsURL).clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, timingsURL)))); + ++ new co.aikar.timings.event.TimingsGenerateReportEvent(this.listeners, timingsURL).callEvent(); ++ + if (response != null && !response.isEmpty()) { + Bukkit.getLogger().log(Level.INFO, "Timing Response: " + response); + }