mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-22 16:39:22 +00:00
MikuServer: Use MikuServer instead of Hearse
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
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 8eb8a788dc3dbc0d5ac24089a57c730089fd8dbe..b4c6a3d57ea21aa9ebc05f6aaf6a1b750b04545c 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 ba869354adc59db2fc547c481c1ed4d5d0af23b7..d7064142c0aafbe17af263c4ecad6f1e879bb9d7 100644
|
||||
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
||||
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
||||
@@ -648,6 +648,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.
|
||||
*
|
||||
@@ -666,6 +668,17 @@ 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();
|
||||
|
||||
@@ -687,7 +700,7 @@ public final class SimplePluginManager implements PluginManager {
|
||||
plugin.getDescription().getAuthors(),
|
||||
plugin.getDescription().getFullName(),
|
||||
ex.getMessage()
|
||||
- ));
|
||||
+ ));
|
||||
}
|
||||
} catch (Throwable ex) {
|
||||
gg.pufferfish.pufferfish.sentry.SentryContext.setEventContext(event, registration); // Pufferfish
|
||||
Reference in New Issue
Block a user