颅内开灯
本帖最后由 颅内开灯 于 2021-7-24 16:49 编辑

比如让sender.sendMessage(GameMasterReset.tilie + "你无权限使用该指令");延迟5秒后在提示
尝试用异步延迟感觉过于麻烦
public class Delay {
    public Delay(){}
    public static void Timeer(Player player, String s1, String s2, int i){
        Map<Integer,String> map = new HashMap<Integer,String>();
        Timer timer = new Timer();
        int time = i*20;
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                player.sendTitle(s1,s2,0,100,20);
            }
        },time);
    }
}

ARSpark
new BukkitRunnable 和 runTaskLaterAsynchronously 可以稍微简化该过程
(Bukkit 这里的编码模式有点像 JS 的 setTimeout)

(当然我也在等更好的方案

Pistol_Pangan
Bukkit自带一个计划任务接口,写一个匿名内部类即可


final String content = "你要发送的内容";
final LivingEntity user = (LivingEntity)sender;
BukkitTask task = new BukkitRunnable() {
    @Override
    public void run() {
        user.sendMessage(content);
    }
}.runTaskLater(this,20);
注意,上述runTaskLater中的第一个参数是需要继承JavaPlugin类的对象,也就是你插件入口类的this,第二个参数的单位tick,不是秒


这就是四季
Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, ()->{
  //code

}, time);
直接调用岂不是更香

Sky_God_
想吃油条 发表于 2021-7-25 01:05
Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, ()->{
  //code

这个方式 我一直在用,确实这个好用一些。

w1141118354
new BukkitRunnable 和 runTaskLaterAsynchronously 可以稍微简化该过程 (Bukkit 这里的编码模式有点像 JS 的 setTimeout)