本帖最后由 NernBrot 于 2022-7-29 09:52 编辑
我制作的GroupCommand插件中的延迟机制的源码如下
try {
Thread.sleep(Long.parseLong(<int>));
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
如果把<int>替换成10000 (延迟10秒)
当触发延迟机制的时候服务器就会卡住10秒这个时候玩家输入命令或者是各种行为
服务器处于卡住状态,并不会给予相应
有没有大神可以提供一个更好的语句来解决这个问题
或者是有没有开通一个线程的语法在触发插件的时候专门为这个插件做相应
我制作的GroupCommand插件中的延迟机制的源码如下
try {
Thread.sleep(Long.parseLong(<int>));
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
如果把<int>替换成10000 (延迟10秒)
当触发延迟机制的时候服务器就会卡住10秒这个时候玩家输入命令或者是各种行为
服务器处于卡住状态,并不会给予相应
有没有大神可以提供一个更好的语句来解决这个问题
或者是有没有开通一个线程的语法在触发插件的时候专门为这个插件做相应
https://hub.spigotmc.org/javadoc ... LaterAsynchronously(org.bukkit.plugin.Plugin,java.util.function.Consumer,long)
Bukkit.getScheduler().runTaskLater
本帖最后由 7Feris 于 2022-7-24 12:56 编辑
如前面两位所说,你可以利用Bukkit.gehScheduler().runTaskLater()在指定tick后运行某个任务;也可以通过Bukkit.gehScheduler().runTaskLaterAsynchronously()在指定tick后异步运行某个任务。
但请注意,在异步中有些Bukkit方法无法使用,比如spawnEntity、对entity施加药水效果、以及设置world的天气等,如果你的异步任务涉及到这些内容,你应该在异步中通过Bukkit.gehScheduler().callSyncMethod()来执行任务。
如前面两位所说,你可以利用Bukkit.gehScheduler().runTaskLater()在指定tick后运行某个任务;也可以通过Bukkit.gehScheduler().runTaskLaterAsynchronously()在指定tick后异步运行某个任务。
但请注意,在异步中有些Bukkit方法无法使用,比如spawnEntity、对entity施加药水效果、以及设置world的天气等,如果你的异步任务涉及到这些内容,你应该在异步中通过Bukkit.gehScheduler().callSyncMethod()来执行任务。
你这是吧主线程给暂停了,用bukkit里提供的方法吧
想象:异步处理 快速运算 强大算法
实际:主线程停止 无响应
实际:主线程停止 无响应
你把主线程噶掉了
为什么不多开一个线程呢
为什么不多开一个线程呢