mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-22 00:19:20 +00:00
Use Gale as upstream Update Remove Mojang username check patch Remove Mikuserver patches (temporarily)
64 lines
2.6 KiB
Diff
64 lines
2.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: wangxyper <wangxyper@163.com>
|
|
Date: Sat, 28 Jan 2023 13:05:13 +0800
|
|
Subject: [PATCH] MikuServer: Fix threading issue in event system
|
|
|
|
Original license: MIT
|
|
Original project: https://github.com/MikuMC/MikuServer
|
|
|
|
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
|
|
index 236aa2c1841eef6ca723a809b1632894bebf0b67..3fa5b8740f6c5cbfd55dfc908225301d6d292c0b 100644
|
|
--- a/src/main/java/org/bukkit/Server.java
|
|
+++ b/src/main/java/org/bukkit/Server.java
|
|
@@ -113,6 +113,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
|
|
@NotNull
|
|
public String getBukkitVersion();
|
|
|
|
+ public boolean isCurrentThreadWorker();
|
|
+
|
|
// Paper start - expose game version
|
|
/**
|
|
* Gets the version of game this server implements
|
|
diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
|
index 730394fd53fdaa90133ee399f86e76da8ccc08e6..14d05c364fe11941045e1f24bcc00c0e78d34fe7 100644
|
|
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
|
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
|
@@ -646,6 +646,8 @@ public final class SimplePluginManager implements PluginManager {
|
|
}
|
|
private void fireEvent(Event event) { callEvent(event); } // Paper - support old method incase plugin uses reflection
|
|
|
|
+ private final Object eventLock = new Object();
|
|
+
|
|
/**
|
|
* Calls an event with the given details.
|
|
*
|
|
@@ -672,6 +674,19 @@ public final class SimplePluginManager implements PluginManager {
|
|
}
|
|
// KTP end - optimize spigot event bus
|
|
|
|
+ if (server.isCurrentThreadWorker()) {
|
|
+ synchronized (this.eventLock) {
|
|
+ this.callEventInternal(event);
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ this.callEventInternal(event);
|
|
+ }
|
|
+
|
|
+ private void callEventInternal(Event event) {
|
|
+ HandlerList handlers = event.getHandlers();
|
|
+ RegisteredListener[] listeners = handlers.getRegisteredListeners();
|
|
for (RegisteredListener registration : listeners) {
|
|
if (!registration.getPlugin().isEnabled()) {
|
|
continue;
|
|
@@ -690,7 +705,7 @@ public final class SimplePluginManager implements PluginManager {
|
|
plugin.getDescription().getAuthors(),
|
|
plugin.getDescription().getFullName(),
|
|
ex.getMessage()
|
|
- ));
|
|
+ ));
|
|
}
|
|
} catch (Throwable ex) {
|
|
// Paper start - error reporting
|