1
mirror of https://github.com/CarmJos/EasyPlugin.git synced 2024-09-19 19:25:45 +00:00

feat(main): 在主类添加 supplySync、supplyAsync 操作方法。

This commit is contained in:
Carm Jos 2022-11-27 21:09:40 +08:00
parent 98d9854d6f
commit 7c72d910d9

View File

@ -22,6 +22,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.function.Supplier;
public abstract class EasyPlugin extends JavaPlugin {
@ -145,6 +146,30 @@ public abstract class EasyPlugin extends JavaPlugin {
if (isDebugging()) print("&8[DEBUG] &r", messages);
}
/**
* 在主线程执行操作并支持获取其结果
*
* @param <T> 结果类型
* @return CompletableFuture
*/
public @NotNull <T> CompletableFuture<T> supplySync(@NotNull Supplier<T> action) {
CompletableFuture<T> future = new CompletableFuture<>();
getScheduler().run(() -> future.complete(action.get()));
return future;
}
/**
* 在异步线程中执行一个操作并获取操作的结果
*
* @param <T> 事件类型
* @return CompletableFuture
*/
public @NotNull <T> CompletableFuture<T> supplyAsync(@NotNull Supplier<T> action) {
CompletableFuture<T> future = new CompletableFuture<>();
getScheduler().runAsync(() -> future.complete(action.get()));
return future;
}
/**
* 在主线程唤起一个事件并支持获取事件的结果
*
@ -153,12 +178,10 @@ public abstract class EasyPlugin extends JavaPlugin {
* @return CompletableFuture
*/
public @NotNull <T extends Event> CompletableFuture<T> callSync(T event) {
CompletableFuture<T> future = new CompletableFuture<>();
getScheduler().run(() -> {
return supplySync(() -> {
Bukkit.getPluginManager().callEvent(event);
future.complete(event);
return event;
});
return future;
}
/**
@ -169,12 +192,10 @@ public abstract class EasyPlugin extends JavaPlugin {
* @return CompletableFuture
*/
public @NotNull <T extends Event> CompletableFuture<T> callAsync(T event) {
CompletableFuture<T> future = new CompletableFuture<>();
getScheduler().runAsync(() -> {
return supplyAsync(() -> {
Bukkit.getPluginManager().callEvent(event);
future.complete(event);
return event;
});
return future;
}
protected void setMessageProvider(@NotNull EasyPluginMessageProvider provider) {