Skip to content

Commit d4b4f50

Browse files
authored
Fix async handler scheduler support for folia (#2531)
1 parent a7aa31a commit d4b4f50

File tree

7 files changed

+34
-88
lines changed

7 files changed

+34
-88
lines changed

src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import java.util.concurrent.atomic.AtomicBoolean;
2525
import java.util.concurrent.atomic.AtomicInteger;
2626

27+
import org.bukkit.plugin.Plugin;
28+
2729
import com.comphenix.protocol.ProtocolLibrary;
2830
import com.comphenix.protocol.error.Report;
2931
import com.comphenix.protocol.error.ReportType;
@@ -38,8 +40,6 @@
3840
import com.google.common.base.Function;
3941
import com.google.common.base.Joiner;
4042

41-
import org.bukkit.plugin.Plugin;
42-
4343
/**
4444
* Represents a handler for an asynchronous event.
4545
* <p>
@@ -328,7 +328,7 @@ public synchronized void start(Function<AsyncRunnable, Void> executor) {
328328
}
329329

330330
private void scheduleAsync(Runnable runnable) {
331-
listener.getPlugin().getServer().getScheduler().runTaskAsynchronously(listener.getPlugin(), runnable);
331+
filterManager.getScheduler().runTaskAsync(runnable);
332332
}
333333

334334
/**

src/main/java/com/comphenix/protocol/scheduler/DefaultScheduler.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,10 @@ public Task scheduleSyncDelayedTask(Runnable task, long delay) {
2929
int taskId = scheduler.scheduleSyncDelayedTask(plugin, task, delay);
3030
return taskId >= 0 ? new DefaultTask(scheduler, taskId) : null;
3131
}
32+
33+
@Override
34+
public Task runTaskAsync(Runnable task) {
35+
int taskId = scheduler.runTaskAsynchronously(plugin, task).getTaskId();
36+
return taskId >= 0 ? new DefaultTask(scheduler, taskId) : null;
37+
}
3238
}

src/main/java/com/comphenix/protocol/scheduler/DefaultTask.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.comphenix.protocol.scheduler;
22

33
import org.bukkit.scheduler.BukkitScheduler;
4-
import org.bukkit.scheduler.BukkitTask;
54

65
public class DefaultTask implements Task {
76
private final int taskId;

src/main/java/com/comphenix/protocol/scheduler/FoliaScheduler.java

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,43 +9,58 @@
99
import java.util.function.Consumer;
1010

1111
public class FoliaScheduler implements ProtocolScheduler {
12-
private final Object foliaScheduler;
12+
private final Object foliaRegionScheduler;
1313
private final MethodAccessor runAtFixedRate;
1414
private final MethodAccessor runDelayed;
1515
private final MethodAccessor execute;
1616
private final MethodAccessor cancel;
17+
18+
private final Object foliaAsyncScheduler;
19+
private final MethodAccessor executeAsync;
20+
1721
private final Plugin plugin;
1822

1923
public FoliaScheduler(Plugin plugin) {
2024
this.plugin = plugin;
2125

2226
MethodAccessor getScheduler = Accessors.getMethodAccessor(Bukkit.getServer().getClass(), "getGlobalRegionScheduler");
23-
this.foliaScheduler = getScheduler.invoke(Bukkit.getServer());
27+
this.foliaRegionScheduler = getScheduler.invoke(Bukkit.getServer());
2428

25-
this.runAtFixedRate = Accessors.getMethodAccessor(foliaScheduler.getClass(), "runAtFixedRate", Plugin.class,
29+
this.runAtFixedRate = Accessors.getMethodAccessor(foliaRegionScheduler.getClass(), "runAtFixedRate", Plugin.class,
2630
Consumer.class, long.class, long.class);
27-
this.execute = Accessors.getMethodAccessor(foliaScheduler.getClass(), "run", Plugin.class, Consumer.class);
28-
this.runDelayed = Accessors.getMethodAccessor(foliaScheduler.getClass(), "runDelayed", Plugin.class, Consumer.class, long.class);
31+
this.execute = Accessors.getMethodAccessor(foliaRegionScheduler.getClass(), "run", Plugin.class, Consumer.class);
32+
this.runDelayed = Accessors.getMethodAccessor(foliaRegionScheduler.getClass(), "runDelayed", Plugin.class, Consumer.class, long.class);
33+
34+
MethodAccessor getAsyncScheduler = Accessors.getMethodAccessor(Bukkit.getServer().getClass(), "getAsyncScheduler");
35+
foliaAsyncScheduler = getAsyncScheduler.invoke(Bukkit.getServer());
36+
37+
this.executeAsync = Accessors.getMethodAccessor(foliaAsyncScheduler.getClass(), "runNow", Plugin.class, Consumer.class);
2938

3039
Class<?> taskClass = MinecraftReflection.getLibraryClass("io.papermc.paper.threadedregions.scheduler.ScheduledTask");
3140
this.cancel = Accessors.getMethodAccessor(taskClass, "cancel");
3241
}
3342

3443
@Override
3544
public Task scheduleSyncRepeatingTask(Runnable task, long delay, long period) {
36-
Object taskHandle = runAtFixedRate.invoke(foliaScheduler, plugin, (Consumer<Object>)(t -> task.run()), delay, period);
45+
Object taskHandle = runAtFixedRate.invoke(foliaRegionScheduler, plugin, (Consumer<Object>)(t -> task.run()), delay, period);
3746
return new FoliaTask(cancel, taskHandle);
3847
}
3948

4049
@Override
4150
public Task runTask(Runnable task) {
42-
Object taskHandle = execute.invoke(foliaScheduler, plugin, (Consumer<Object>)(t -> task.run()));
51+
Object taskHandle = execute.invoke(foliaRegionScheduler, plugin, (Consumer<Object>)(t -> task.run()));
4352
return new FoliaTask(cancel, taskHandle);
4453
}
4554

4655
@Override
4756
public Task scheduleSyncDelayedTask(Runnable task, long delay) {
48-
Object taskHandle = runDelayed.invoke(foliaScheduler, plugin, (Consumer<Object>)(t -> task.run()), delay);
57+
Object taskHandle = runDelayed.invoke(foliaRegionScheduler, plugin, (Consumer<Object>)(t -> task.run()), delay);
4958
return new FoliaTask(cancel, taskHandle);
5059
}
60+
61+
@Override
62+
public Task runTaskAsync(Runnable task) {
63+
Object taskHandle = executeAsync.invoke(foliaAsyncScheduler, plugin, (Consumer<Object>)(t -> task.run()));
64+
return new FoliaTask(cancel, taskHandle);
65+
}
5166
}
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
package com.comphenix.protocol.scheduler;
22

3-
import com.comphenix.protocol.ProtocolLib;
4-
import org.bukkit.plugin.Plugin;
5-
63
public interface ProtocolScheduler {
74
Task scheduleSyncRepeatingTask(Runnable task, long delay, long period);
85

96
Task runTask(Runnable task);
107

118
Task scheduleSyncDelayedTask(Runnable task, long delay);
9+
10+
Task runTaskAsync(Runnable task);
1211
}

src/main/java/com/comphenix/protocol/updater/SpigotUpdater.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.comphenix.protocol.ProtocolLibrary;
2020
import com.comphenix.protocol.error.Report;
2121
import com.comphenix.protocol.utility.Closer;
22-
import com.comphenix.protocol.utility.SchedulerUtil;
2322
import org.bukkit.plugin.Plugin;
2423

2524
import java.io.BufferedReader;

src/main/java/com/comphenix/protocol/utility/SchedulerUtil.java

Lines changed: 0 additions & 72 deletions
This file was deleted.

0 commit comments

Comments
 (0)