丶米饭
本帖最后由 丶米饭 于 2022-8-17 21:23 编辑

很久之前我写过这么个旧版帖子

我想修改内容但是发现太久没人回复被锁帖了.不能编辑了

我又不想误导新人那么写插件,所以新开一贴分享下最新的写法


如下

  1. // 创建异步操作
  2. new BukkitRunnable() {
  3.     @Override
  4.     public void run() {
  5.        // 这里从数据异步加载数据组装Inventory出来
  6.        Inventory inventory = OpenGui.getInstance().createGui(player);
  7.        //  这里直接使用调度器同步打开这个gui即可
  8.        Bukkit.getScheduler().runTask(PlayerTitle.getInstance(), () -> player.openInventory(inventory));
  9.      }
  10. }.runTaskAsynchronously(PlayerTitle.getInstance());
复制代码






来自群组: Server CT

喵咪楠栀
感谢看了很有帮助

伊吹伊吹伊吹
临江仙还在开吗 群号多少 我之前退了

美年达呀
感谢分享,受益匪浅

随便小小林
如果有傻子,那一定是我

XYZ_2022
感谢米饭大佬的分享!

teddyxlandlee
旧帖子:异步的异步的异步的异步的……每日用不到.JPG

小张up
其实我一直很好奇一件事,我看到不少开源项目的写法是
new BukkitRunnable()
但同时也有很多人喜欢直接Bukkit.getScheduler()
这两个有什么区别?或者有什么不一样吗?

丶米饭
小张up 发表于 2023-1-1 18:28
其实我一直很好奇一件事,我看到不少开源项目的写法是
new BukkitRunnable()
但同时也有很多人喜欢直接Bukk ...

没太大区别,看个人喜好

一行代码能搞定的我用Bukkit.getScheduler() 看着简洁

有很多逻辑的,会有大段代码的 我用 new BukkitRunnable() 包起来更清晰

2000000
本帖最后由 2000000 于 2023-1-9 17:24 编辑
小张up 发表于 2023-1-1 18:28
其实我一直很好奇一件事,我看到不少开源项目的写法是
new BukkitRunnable()
但同时也有很多人喜欢直接Bukk ...
当您想继承 BukkitRunnable 并在除 run 方法之外的其他地方使用它提供的实例方法时,这很方便,而不是使用 BukkitScheduler 实现 Consumer<BukkitTask>

但是,如果您要传递 lambda,使用 BukkitScheduler 在语法上更简洁,速度可以忽略不计。这是因为 lambda 编译了 invokedynamic,它比 invokeinterface 或 invokevirtual 稍微快一点。

https://www.spigotmc.org/wiki/scheduler-programming/
BukkitRunnable 提供了更多的实例方法 (如 cancel,即停止这个计划任务) ,这会非常方便,BukkitScheduler 语法上更加简洁

第一页 上一页 下一页 最后一页