mirror of
https://github.com/BX-Team/DivineMC.git
synced 2025-12-23 00:39:16 +00:00
fix multithreaded tracker
This commit is contained in:
@@ -5,7 +5,7 @@ Subject: [PATCH] Delete timings
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
|
diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
|
||||||
index 14949b9b0a14e4b6f38bf04a6246f181db2a7b3f..534510a94694d013fc11f6985088c6cf14dbb695 100644
|
index e989053b703fddfbffc3e4ed9381594aaaa0df41..d7398b1ecf2660c29fb7d106b48fe02d3736603e 100644
|
||||||
--- a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
|
--- a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
|
||||||
+++ b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
|
+++ b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
|
||||||
@@ -1,6 +1,5 @@
|
@@ -1,6 +1,5 @@
|
||||||
@@ -15,7 +15,7 @@ index 14949b9b0a14e4b6f38bf04a6246f181db2a7b3f..534510a94694d013fc11f6985088c6cf
|
|||||||
import com.destroystokyo.paper.event.server.ServerExceptionEvent;
|
import com.destroystokyo.paper.event.server.ServerExceptionEvent;
|
||||||
import com.destroystokyo.paper.exception.ServerEventException;
|
import com.destroystokyo.paper.exception.ServerEventException;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
@@ -102,7 +101,6 @@ class PaperEventManager {
|
@@ -96,7 +95,6 @@ class PaperEventManager {
|
||||||
throw new IllegalPluginAccessException("Plugin attempted to register " + event + " while not enabled");
|
throw new IllegalPluginAccessException("Plugin attempted to register " + event + " while not enabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ index 14949b9b0a14e4b6f38bf04a6246f181db2a7b3f..534510a94694d013fc11f6985088c6cf
|
|||||||
this.getEventListeners(event).register(new RegisteredListener(listener, executor, priority, plugin, ignoreCancelled));
|
this.getEventListeners(event).register(new RegisteredListener(listener, executor, priority, plugin, ignoreCancelled));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,7 +187,7 @@ class PaperEventManager {
|
@@ -183,7 +181,7 @@ class PaperEventManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@ index 097500a59336db1bbfffcd1aa4cff7a8586e46ec..69341cb3b11409e41b9ff756b11d9bd1
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||||
index c3c6e23b4da16025d0f6472290183732f5eb9880..652acceb96843e8242a0989518dec5c65fbcf953 100644
|
index 037ca6ea2edb3c4ff9bf9f7856360cd2c19b7628..d38061eb738a17368e08750c9297894778b27c84 100644
|
||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||||
@@ -1048,10 +1048,8 @@ public final class CraftServer implements Server {
|
@@ -1048,10 +1048,8 @@ public final class CraftServer implements Server {
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com>
|
||||||
|
Date: Sat, 1 Mar 2025 23:06:52 +0300
|
||||||
|
Subject: [PATCH] Multithreaded Tracker
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
|
||||||
|
index d7398b1ecf2660c29fb7d106b48fe02d3736603e..a9ec83b5bcb329bf3d2f3fb0e502685a37f9dcbc 100644
|
||||||
|
--- a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
|
||||||
|
+++ b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
|
||||||
|
@@ -42,6 +42,12 @@ class PaperEventManager {
|
||||||
|
if (event.isAsynchronous() && this.server.isPrimaryThread()) {
|
||||||
|
throw new IllegalStateException(event.getEventName() + " may only be triggered asynchronously.");
|
||||||
|
} else if (!event.isAsynchronous() && !this.server.isPrimaryThread() && !this.server.isStopping()) {
|
||||||
|
+ // DivineMC start - Multithreaded Tracker
|
||||||
|
+ if (org.bxteam.divinemc.DivineConfig.multithreadedEnabled) {
|
||||||
|
+ net.minecraft.server.MinecraftServer.getServer().scheduleOnMain(event::callEvent);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ // DivineMC end - Multithreaded Tracker
|
||||||
|
throw new IllegalStateException(event.getEventName() + " may only be triggered synchronously.");
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||||||
|
index 69c44017e7ca2861200c83a16fa9dacaa822d505..2690de512d0d8be1ae31879c113255742b9af4c1 100644
|
||||||
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||||||
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||||||
|
@@ -1970,6 +1970,26 @@ public class CraftEventFactory {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean handleBlockFormEvent(Level world, BlockPos pos, net.minecraft.world.level.block.state.BlockState block, int flag, @Nullable Entity entity) {
|
||||||
|
+ // DivineMC start - Multithreaded Tracker
|
||||||
|
+ if (org.bxteam.divinemc.DivineConfig.multithreadedEnabled && Thread.currentThread() instanceof org.bxteam.divinemc.entity.tracking.MultithreadedTracker.MultithreadedTrackerThread) {
|
||||||
|
+ java.util.concurrent.CompletableFuture<Boolean> future = new java.util.concurrent.CompletableFuture<>();
|
||||||
|
+ net.minecraft.server.MinecraftServer.getServer().scheduleOnMain(() -> {
|
||||||
|
+ CraftBlockState blockState = CraftBlockStates.getBlockState(world, pos, flag);
|
||||||
|
+ blockState.setData(block);
|
||||||
|
+
|
||||||
|
+ BlockFormEvent event = (entity == null) ? new BlockFormEvent(blockState.getBlock(), blockState) : new EntityBlockFormEvent(entity.getBukkitEntity(), blockState.getBlock(), blockState);
|
||||||
|
+ world.getCraftServer().getPluginManager().callEvent(event);
|
||||||
|
+
|
||||||
|
+ if (!event.isCancelled()) {
|
||||||
|
+ blockState.update(true);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ future.complete(!event.isCancelled());
|
||||||
|
+ });
|
||||||
|
+
|
||||||
|
+ return future.join();
|
||||||
|
+ }
|
||||||
|
+ // DivineMC end - Multithreaded Tracker
|
||||||
|
CraftBlockState blockState = CraftBlockStates.getBlockState(world, pos, flag);
|
||||||
|
blockState.setData(block);
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
--- a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
|
--- a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
|
||||||
+++ b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
|
+++ b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java
|
||||||
@@ -36,14 +_,21 @@
|
@@ -36,14 +_,15 @@
|
||||||
|
|
||||||
// SimplePluginManager
|
// SimplePluginManager
|
||||||
public void callEvent(@NotNull Event event) {
|
public void callEvent(@NotNull Event event) {
|
||||||
@@ -11,12 +11,6 @@
|
|||||||
if (event.isAsynchronous() && this.server.isPrimaryThread()) {
|
if (event.isAsynchronous() && this.server.isPrimaryThread()) {
|
||||||
throw new IllegalStateException(event.getEventName() + " may only be triggered asynchronously.");
|
throw new IllegalStateException(event.getEventName() + " may only be triggered asynchronously.");
|
||||||
} else if (!event.isAsynchronous() && !this.server.isPrimaryThread() && !this.server.isStopping()) {
|
} else if (!event.isAsynchronous() && !this.server.isPrimaryThread() && !this.server.isStopping()) {
|
||||||
+ // DivineMC start - Multithreaded tracker
|
|
||||||
+ if (org.bxteam.divinemc.DivineConfig.multithreadedEnabled) {
|
|
||||||
+ net.minecraft.server.MinecraftServer.getServer().scheduleOnMain(event::callEvent);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ // DivineMC end - Multithreaded tracker
|
|
||||||
throw new IllegalStateException(event.getEventName() + " may only be triggered synchronously.");
|
throw new IllegalStateException(event.getEventName() + " may only be triggered synchronously.");
|
||||||
}
|
}
|
||||||
-
|
-
|
||||||
|
|||||||
Reference in New Issue
Block a user