首页 > 解决方案 > 如何延迟进入这个循环?

问题描述

我试图用循环更新指南针指向的点,但延迟不起作用并且它滞后于服务器。既不TimeUnitThread也不wait()工作。我使用了 spigot 1.14.4。


import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
import org.bukkit.command.CommandSender;
import org.bukkit.Location;
import java.util.concurrent.TimeUnit;

public class Main extends JavaPlugin{
    @Override
    public void onEnable(){
    }
    @Override
    public void onDisable() {   
    }
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        //target <player-name>
        if(args.length>=1) {
            if(Bukkit.getPlayerExact(args[0])!=null) {
                Player target=Bukkit.getPlayer(args[0]);
                Player p=(Player) sender;
                sender.sendMessage(ChatColor.BLUE + "Compass assigned to" + target);
                while(Bukkit.getPlayerExact(args[0])!=null) {
                    Location loc = target.getLocation();
                    p.setCompassTarget(loc);
                    try {
                        TimeUnit.SECONDS.sleep(3);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                }else{
                    sender.sendMessage(ChatColor.BLUE + "Invalid Player");
                }   
            }else{
                sender.sendMessage(ChatColor.BLUE + "Choose a player"); 
        }
    return false;
    }
}

也许有一些特殊的方法可以做到这一点,或者它应该是某种事件还是?

标签: javapluginsminecraft

解决方案


也许您可以围绕它创建一个线程并让它休眠。

Thread thread = new Thread(() -> {

Thread.sleep(1500)
//code

});
thread.start();

推荐阅读