请帮助解决问题。由于某种原因,调度程序不起作用,我对这个问题进行了多少摆弄,我仍然无法解决它。我有一个单独的命令负责运行脚本,该脚本负责在玩家的位置放置一个块。我调用命令,调度程序中的命令在至少 20 秒后根本不起作用。我不明白是什么原因,我刚开始研究插件开发的整个主题)))
编码:
package me.bodka.meteorfalling.commands;
import me.bodka.meteorfalling.Main;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public class AdminCMD extends JavaPlugin implements CommandExecutor {
public AdminCMD(Main plugin){
plugin.getCommand("StartMeteorFalling").setExecutor(this);
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)){
System.out.println("Только игрок может исполнять эту команду!");
return true;
}
Player player = (Player) sender;
if(player.isOp()){
int x = player.getLocation().getBlockX(), y = player.getLocation().getBlockY(), z = player.getLocation().getBlockZ();
Location loc = new Location(player.getWorld(), x, y, z);
Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(this, new Runnable() {
@Override
public void run() {
loc.getBlock().setType(Material.DIAMOND_BLOCK);
}
}, 20L);
System.out.println("Шедулер пройден!");
}
else{
System.out.println("Только админ может использовать эту команду!");
return true;
}
return false;
}
}
最有可能的问题是您正试图以异步方式改变世界。为您的任务使用该方法
runTaskLater
。如果问题未解决 - 提供日志以更轻松地处理您的问题。