246 lines
9.4 KiB
Diff
246 lines
9.4 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 9812d668ad945aba486fbf6d5bf83c4292cb5d03..16198861748b29c537527151216e79c7c32e7204 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 e801e79fa57c44b2e5d359647c920f88064826f1..012d2281c386d2e5f5a655079c0cbfa4545d6476 100644
|
|
--- a/src/main/java/co/aikar/timings/TimingsCommand.java
|
|
+++ b/src/main/java/co/aikar/timings/TimingsCommand.java
|
|
@@ -63,10 +63,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;
|
|
@@ -79,15 +81,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 3af5b8ea795311582044c712de50d29412024b77..806a1e528aae9a26413b483855130bef78ca72fb 100644
|
|
--- a/src/main/java/co/aikar/timings/TimingsReportListener.java
|
|
+++ b/src/main/java/co/aikar/timings/TimingsReportListener.java
|
|
@@ -59,6 +59,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);
|
|
}
|
|
|
|
@@ -70,6 +71,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..df78c90859999ec18c7b8758e0f1c71281e1abe4
|
|
--- /dev/null
|
|
+++ b/src/main/java/co/aikar/timings/event/TimingsEvent.java
|
|
@@ -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;
|
|
+import org.jetbrains.annotations.NotNull;
|
|
+
|
|
+import java.util.Set;
|
|
+
|
|
+public abstract class TimingsEvent extends Event {
|
|
+
|
|
+ private final Set<CommandSender> audience;
|
|
+ private static final HandlerList handlers = new HandlerList();
|
|
+
|
|
+ public TimingsEvent(Set<CommandSender> audience) {
|
|
+ super(!Bukkit.isPrimaryThread());
|
|
+ this.audience = audience;
|
|
+ }
|
|
+
|
|
+ public Set<CommandSender> getAudience() {
|
|
+ return this.audience;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public @NotNull HandlerList getHandlers() {
|
|
+ return handlers;
|
|
+ }
|
|
+
|
|
+ public static 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..5ed7d1d4972842e93e2a9c2ffa799e6fc9136e63
|
|
--- /dev/null
|
|
+++ b/src/main/java/co/aikar/timings/event/TimingsGenerateReportEvent.java
|
|
@@ -0,0 +1,19 @@
|
|
+package co.aikar.timings.event;
|
|
+
|
|
+import org.bukkit.command.CommandSender;
|
|
+
|
|
+import java.util.Collections;
|
|
+
|
|
+public class TimingsGenerateReportEvent extends TimingsEvent {
|
|
+
|
|
+ private final String paste;
|
|
+
|
|
+ public TimingsGenerateReportEvent(CommandSender sender, String paste) {
|
|
+ super(Collections.singleton(sender));
|
|
+ this.paste = paste;
|
|
+ }
|
|
+
|
|
+ public 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..04ec925cfa9e385e8ad4763b18570b7bf07c4007
|
|
--- /dev/null
|
|
+++ b/src/main/java/co/aikar/timings/event/TimingsMessageEvent.java
|
|
@@ -0,0 +1,33 @@
|
|
+package co.aikar.timings.event;
|
|
+
|
|
+import net.kyori.adventure.text.Component;
|
|
+import org.bukkit.command.CommandSender;
|
|
+import org.bukkit.event.Cancellable;
|
|
+
|
|
+import java.util.HashSet;
|
|
+import java.util.List;
|
|
+
|
|
+public class TimingsMessageEvent extends TimingsEvent implements Cancellable {
|
|
+
|
|
+ public Component message;
|
|
+ private boolean cancelled;
|
|
+
|
|
+ public TimingsMessageEvent(List<CommandSender> senders, Component message) {
|
|
+ super(new HashSet<>(senders));
|
|
+ this.message = message;
|
|
+ }
|
|
+
|
|
+ public 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..1fe9bbedf23fdf7b02de02f5d184d8d956c7056b
|
|
--- /dev/null
|
|
+++ b/src/main/java/co/aikar/timings/event/TimingsModifyEvent.java
|
|
@@ -0,0 +1,40 @@
|
|
+package co.aikar.timings.event;
|
|
+
|
|
+import org.bukkit.command.CommandSender;
|
|
+import org.bukkit.event.Cancellable;
|
|
+
|
|
+import java.util.Collections;
|
|
+
|
|
+public class TimingsModifyEvent extends TimingsEvent implements Cancellable {
|
|
+
|
|
+ private final Action action;
|
|
+ private boolean cancelled = false;
|
|
+
|
|
+ public TimingsModifyEvent(CommandSender sender, Action action) {
|
|
+ super(Collections.singleton(sender));
|
|
+ this.action = action;
|
|
+ }
|
|
+
|
|
+ public 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
|
|
+ }
|
|
+
|
|
+}
|