252 lines
9.8 KiB
Diff
252 lines
9.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Blast-MC <cjblanton2@gmail.com>
|
|
Date: Mon, 18 Jul 2022 20:15:42 -0400
|
|
Subject: [PATCH] Add Timings Events
|
|
|
|
|
|
diff --git a/src/main/java/co/aikar/timings/Timings.java b/src/main/java/co/aikar/timings/Timings.java
|
|
index e81d0bc309de877ed2b5da6122f55c162e9b5f10..d4d65c301df8f6b9945d636b5f0e623a8289a8bc 100644
|
|
--- a/src/main/java/co/aikar/timings/Timings.java
|
|
+++ b/src/main/java/co/aikar/timings/Timings.java
|
|
@@ -145,8 +145,27 @@ public final class Timings {
|
|
* @param enabled Should timings be reported
|
|
*/
|
|
public static void setTimingsEnabled(boolean enabled) {
|
|
+ // Parchment start
|
|
+ setTimingsEnabled(enabled, null);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * <p>Sets whether or not the Spigot Timings system should be enabled</p>
|
|
+ *
|
|
+ * Calls a {@link co.aikar.timings.event.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;
|
|
warnAboutDeprecationOnEnable();
|
|
+ if (sender != null) {
|
|
+ if (!new co.aikar.timings.event.TimingsModifyEvent(sender, co.aikar.timings.event.TimingsModifyEvent.Action.RESET).callEvent()) {
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
+ // Parchment end
|
|
reset();
|
|
}
|
|
|
|
diff --git a/src/main/java/co/aikar/timings/TimingsCommand.java b/src/main/java/co/aikar/timings/TimingsCommand.java
|
|
index 95d87c9dbf2b237787294dfbe7fed87a36e6dedf..d8e0b7fba75c68495f30419258ddf88f1237df07 100644
|
|
--- a/src/main/java/co/aikar/timings/TimingsCommand.java
|
|
+++ b/src/main/java/co/aikar/timings/TimingsCommand.java
|
|
@@ -65,10 +65,12 @@ public class TimingsCommand extends BukkitCommand {
|
|
}
|
|
final String arg = args[0];
|
|
if ("on".equalsIgnoreCase(arg)) {
|
|
- Timings.setTimingsEnabled(true);
|
|
+ if (!new co.aikar.timings.event.TimingsModifyEvent(sender, co.aikar.timings.event.TimingsModifyEvent.Action.ENABLE).callEvent()) return true; // Parchment
|
|
+ Timings.setTimingsEnabled(true, sender);
|
|
sender.sendMessage(text("Enabled Timings & Reset"));
|
|
return true;
|
|
} else if ("off".equalsIgnoreCase(arg)) {
|
|
+ if (!new co.aikar.timings.event.TimingsModifyEvent(sender, co.aikar.timings.event.TimingsModifyEvent.Action.DISABLE).callEvent()) return true; // Parchment
|
|
Timings.setTimingsEnabled(false);
|
|
sender.sendMessage(text("Disabled Timings"));
|
|
return true;
|
|
@@ -81,15 +83,18 @@ public class TimingsCommand extends BukkitCommand {
|
|
|
|
long now = System.currentTimeMillis();
|
|
if ("verbon".equalsIgnoreCase(arg)) {
|
|
+ if (!new co.aikar.timings.event.TimingsModifyEvent(sender, co.aikar.timings.event.TimingsModifyEvent.Action.VERBOSE_ON).callEvent()) return true; // Parchment
|
|
Timings.setVerboseTimingsEnabled(true);
|
|
sender.sendMessage(text("Enabled Verbose Timings"));
|
|
return true;
|
|
} else if ("verboff".equalsIgnoreCase(arg)) {
|
|
+ if (!new co.aikar.timings.event.TimingsModifyEvent(sender, co.aikar.timings.event.TimingsModifyEvent.Action.VERBOSE_OFF).callEvent()) return true; // Parchment
|
|
Timings.setVerboseTimingsEnabled(false);
|
|
sender.sendMessage(text("Disabled Verbose Timings"));
|
|
return true;
|
|
} else if ("reset".equalsIgnoreCase(arg)) {
|
|
if (now - lastResetAttempt < 30000) {
|
|
+ if (!new co.aikar.timings.event.TimingsModifyEvent(sender, co.aikar.timings.event.TimingsModifyEvent.Action.RESET).callEvent()) return true; // Parchment
|
|
TimingsManager.reset();
|
|
sender.sendMessage(text("Timings reset. Please wait 5-10 minutes before using /timings report.", NamedTextColor.RED));
|
|
} else {
|
|
diff --git a/src/main/java/co/aikar/timings/TimingsReportListener.java b/src/main/java/co/aikar/timings/TimingsReportListener.java
|
|
index df066d6f8d55afbc0c1897c486d638657a5f8df9..e80b33ecf12815356356bea0e0ecd4da75a5a416 100644
|
|
--- a/src/main/java/co/aikar/timings/TimingsReportListener.java
|
|
+++ b/src/main/java/co/aikar/timings/TimingsReportListener.java
|
|
@@ -62,6 +62,7 @@ public class TimingsReportListener implements net.kyori.adventure.audience.Forwa
|
|
|
|
@Override
|
|
public void sendMessage(final @NotNull net.kyori.adventure.identity.Identity source, final @NotNull net.kyori.adventure.text.Component message, final @NotNull net.kyori.adventure.audience.MessageType type) {
|
|
+ if (!new co.aikar.timings.event.TimingsMessageEvent(this.senders, message).callEvent()) return; // Parchment
|
|
net.kyori.adventure.audience.ForwardingAudience.super.sendMessage(source, message, type);
|
|
}
|
|
|
|
@@ -73,6 +74,7 @@ public class TimingsReportListener implements net.kyori.adventure.audience.Forwa
|
|
|
|
@Override
|
|
public void sendMessage(@NotNull String message) {
|
|
+ if (!new co.aikar.timings.event.TimingsMessageEvent(this.senders, net.kyori.adventure.text.Component.text(message)).callEvent()) return; // Parchment
|
|
senders.forEach((sender) -> sender.sendMessage(message));
|
|
}
|
|
|
|
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..9ad67d72e6173d1629f862ca9fd13475950709f0
|
|
--- /dev/null
|
|
+++ b/src/main/java/co/aikar/timings/event/TimingsEvent.java
|
|
@@ -0,0 +1,36 @@
|
|
+package co.aikar.timings.event;
|
|
+
|
|
+import org.bukkit.Bukkit;
|
|
+import org.bukkit.command.CommandSender;
|
|
+import org.bukkit.event.Event;
|
|
+import org.bukkit.event.HandlerList;
|
|
+import org.jetbrains.annotations.NotNull;
|
|
+
|
|
+import java.util.Collection;
|
|
+import java.util.HashSet;
|
|
+import java.util.Set;
|
|
+
|
|
+public abstract class TimingsEvent extends Event {
|
|
+
|
|
+ private final @NotNull Set<CommandSender> audience;
|
|
+ private static final HandlerList handlers = new HandlerList();
|
|
+
|
|
+ public TimingsEvent(@NotNull Collection<CommandSender> audience) {
|
|
+ super(!Bukkit.isPrimaryThread());
|
|
+ this.audience = new HashSet<>(audience);
|
|
+ }
|
|
+
|
|
+ public @NotNull Set<CommandSender> getAudience() {
|
|
+ return this.audience;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public @NotNull HandlerList getHandlers() {
|
|
+ return handlers;
|
|
+ }
|
|
+
|
|
+ public static @NotNull HandlerList getHandlerList() {
|
|
+ return handlers;
|
|
+ }
|
|
+
|
|
+}
|
|
diff --git a/src/main/java/co/aikar/timings/event/TimingsGenerateReportEvent.java b/src/main/java/co/aikar/timings/event/TimingsGenerateReportEvent.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..33152129508c526031eee68f2ae797563d97be0c
|
|
--- /dev/null
|
|
+++ b/src/main/java/co/aikar/timings/event/TimingsGenerateReportEvent.java
|
|
@@ -0,0 +1,20 @@
|
|
+package co.aikar.timings.event;
|
|
+
|
|
+import org.bukkit.command.CommandSender;
|
|
+import org.jetbrains.annotations.NotNull;
|
|
+
|
|
+import java.util.Collections;
|
|
+
|
|
+public class TimingsGenerateReportEvent extends TimingsEvent {
|
|
+
|
|
+ private final @NotNull String paste;
|
|
+
|
|
+ public TimingsGenerateReportEvent(@NotNull CommandSender sender, @NotNull String paste) {
|
|
+ super(Collections.singleton(sender));
|
|
+ this.paste = paste;
|
|
+ }
|
|
+
|
|
+ public @NotNull String getPaste() {
|
|
+ return this.paste;
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/co/aikar/timings/event/TimingsMessageEvent.java b/src/main/java/co/aikar/timings/event/TimingsMessageEvent.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..626f25e164c6b23481c5a976a6e184e739104305
|
|
--- /dev/null
|
|
+++ b/src/main/java/co/aikar/timings/event/TimingsMessageEvent.java
|
|
@@ -0,0 +1,35 @@
|
|
+package co.aikar.timings.event;
|
|
+
|
|
+import net.kyori.adventure.text.Component;
|
|
+import org.bukkit.command.CommandSender;
|
|
+import org.bukkit.event.Cancellable;
|
|
+import org.jetbrains.annotations.NotNull;
|
|
+
|
|
+import java.util.Collection;
|
|
+import java.util.HashSet;
|
|
+import java.util.List;
|
|
+
|
|
+public class TimingsMessageEvent extends TimingsEvent implements Cancellable {
|
|
+
|
|
+ public @NotNull Component message;
|
|
+ private boolean cancelled;
|
|
+
|
|
+ public TimingsMessageEvent(@NotNull Collection<CommandSender> senders, @NotNull Component message) {
|
|
+ super(new HashSet<>(senders));
|
|
+ this.message = message;
|
|
+ }
|
|
+
|
|
+ public @NotNull Component getMessage() {
|
|
+ return this.message;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isCancelled() {
|
|
+ return cancelled;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setCancelled(boolean cancel) {
|
|
+ this.cancelled = cancel;
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/co/aikar/timings/event/TimingsModifyEvent.java b/src/main/java/co/aikar/timings/event/TimingsModifyEvent.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..3faf845716d5d3adf360949f28a5e12aa7e20aa6
|
|
--- /dev/null
|
|
+++ b/src/main/java/co/aikar/timings/event/TimingsModifyEvent.java
|
|
@@ -0,0 +1,41 @@
|
|
+package co.aikar.timings.event;
|
|
+
|
|
+import org.bukkit.command.CommandSender;
|
|
+import org.bukkit.event.Cancellable;
|
|
+import org.jetbrains.annotations.NotNull;
|
|
+
|
|
+import java.util.Collections;
|
|
+
|
|
+public class TimingsModifyEvent extends TimingsEvent implements Cancellable {
|
|
+
|
|
+ private final @NotNull Action action;
|
|
+ private boolean cancelled = false;
|
|
+
|
|
+ public TimingsModifyEvent(@NotNull CommandSender sender, @NotNull Action action) {
|
|
+ super(Collections.singleton(sender));
|
|
+ this.action = action;
|
|
+ }
|
|
+
|
|
+ public @NotNull Action getAction() {
|
|
+ return this.action;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isCancelled() {
|
|
+ return this.cancelled;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setCancelled(boolean cancel) {
|
|
+ this.cancelled = cancel;
|
|
+ }
|
|
+
|
|
+ public enum Action {
|
|
+ ENABLE,
|
|
+ DISABLE,
|
|
+ RESET,
|
|
+ VERBOSE_ON,
|
|
+ VERBOSE_OFF
|
|
+ }
|
|
+
|
|
+}
|