From c8edaf1aa4c93d3fc593846842b103ab472c7dfc Mon Sep 17 00:00:00 2001 From: nostalgic853 Date: Thu, 20 Oct 2022 23:57:33 +0800 Subject: [PATCH] Optimized Spigot event bus --- .../api/0001-Optimize-Spigot-event-bus.patch | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 patches/api/0001-Optimize-Spigot-event-bus.patch diff --git a/patches/api/0001-Optimize-Spigot-event-bus.patch b/patches/api/0001-Optimize-Spigot-event-bus.patch new file mode 100644 index 0000000..5b76376 --- /dev/null +++ b/patches/api/0001-Optimize-Spigot-event-bus.patch @@ -0,0 +1,47 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Bjarne Koll +Date: Thu, 9 Dec 2021 01:53:30 +0100 +Subject: [PATCH] Optimize Spigot event bus + +Original code by lynxplay, licensed under GNU General Public License v3.0 +You can find the original code on https://github.com/lynxplay/ktp + +diff --git a/src/main/java/org/bukkit/plugin/RegisteredListener.java b/src/main/java/org/bukkit/plugin/RegisteredListener.java +index 419aec56b0e3fa8bcec2ea7f340caa3456b57d00..8530d926931a54ed1300c40cd1e0908b2d9b594d 100644 +--- a/src/main/java/org/bukkit/plugin/RegisteredListener.java ++++ b/src/main/java/org/bukkit/plugin/RegisteredListener.java +@@ -62,8 +62,10 @@ public class RegisteredListener { + * @throws EventException If an event handler throws an exception. + */ + public void callEvent(@NotNull final Event event) throws EventException { +- if (event instanceof Cancellable) { +- if (((Cancellable) event).isCancelled() && isIgnoringCancelled()) { ++ // KTP start - optimize spigot event bus ++ if (isIgnoringCancelled()) { ++ if (event instanceof Cancellable cancellable && cancellable.isCancelled()) { ++ // KTP end - optimize spigot event bus + return; + } + } +diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java +index 6bb115923767c4bd65b18e67eeff5408f2894ab0..b0e11ed48e06abd585bd9dded52945562a8c6830 100644 +--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java ++++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java +@@ -660,11 +660,15 @@ public final class SimplePluginManager implements PluginManager { + @Override + public void callEvent(@NotNull Event event) { + // Paper - replace callEvent by merging to below method +- if (event.isAsynchronous() && server.isPrimaryThread()) { ++ // KTP start - optimize spigot event bus ++ final boolean isAsync = event.isAsynchronous(); ++ final boolean isPrimary = server.isPrimaryThread(); // Cache to prevent multiple thread object comparisons. ++ if (isAsync && isPrimary) { + throw new IllegalStateException(event.getEventName() + " may only be triggered asynchronously."); +- } else if (!event.isAsynchronous() && !server.isPrimaryThread() && !server.isStopping() ) { ++ } else if (!isAsync && !isPrimary && !server.isStopping() ) { + throw new IllegalStateException(event.getEventName() + " may only be triggered synchronously."); + } ++ // KTP end - optimize spigot event bus + + HandlerList handlers = event.getHandlers(); + RegisteredListener[] listeners = handlers.getRegisteredListeners();