[英]Minecraft Plugin scheduleSyncDelayedTask Error
我有一个问题,并且是制作Minecraft插件和编写代码的新手。
我试图在执行第二个命令之前制作一个等待大约15秒的插件,但是当我尝试做的时候我现在的代码有一个错误(插件,新的Runnable()。我做了一些研究,大多数人都说是因为我的Main课程中没有这个。问题是我不想在我的Main中。所以我想知道我必须做些什么来使这个工作。
代码如下。 提前感谢您提供的任何帮助。 〜石
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (sender instanceof Player){
//checks to see if player sent command
Player player = (Player) sender;
if (args.length >= 1) {
//too many arguments message
player.sendMessage(Utils.chat("&4There were too many arguments, I could not complete that command"));
}
if (player.hasPermission("reloadc.use")) {
//reloads server, sends message, and stores variable value
Bukkit.broadcastMessage(Utils.chat("&6Server will be reloaded in 15 seconds by &5" + player.getDisplayName()));
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
public void run() {
Bukkit.broadcastMessage(Utils.chat("&6This works"));
}
}, 20L);
Bukkit.broadcastMessage(Utils.chat("&6IT WORKED!!!!!"));
}
else if (!player.hasPermission("reloadc.use")) {
player.sendMessage(Utils.chat("&4You do not have permission to reload the server"));
player.sendMessage(Utils.chat("&5If you belive this is a mistake please contact an admin"));
}
}
return true;
}
}
给我带来问题的代码就在这里(插件一词)
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
public void run() {
Bukkit.broadcastMessage(Utils.chat("&6This works"));
}
}, 20L);
这里有3张图片,上面有它给我的错误。 我没有做的唯一改变是getServer()。 因为它给了我更多错误,并且至少从我能说的内容中没有改变任何东西。
好吧所以我已经完成了更改,一切都说它可以正常工作,但现在当我运行我设置的命令时它会做它应该做的一切,除非等待15秒。 它一个接一个地执行文本,告诉我它将在15秒内重新加载,然后同时它告诉我它有效。 我现在似乎没有什么不对,只是说它运行正常,我的等待时间是300L,这是服务器滴答。 那应该等于15。
完整代码的图片如下。
响应您的更新/编辑:
您的错误发生是因为您使用plugin
对您的代码没有任何意义。 你需要在使用它之前将它声明为一个变量,或者假设你在插件的一个类中编写了所有代码,然后你就可以轻松地用this
替换plugin
,就像Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
。
如果它在另一个类中,那么声明变量需要从另一个类传入它或从主插件类调用它。 以下将向您展示如何将其传递给您的侦听器类。
在你的主插件类中你需要这样做,注意我们如何将this
添加到调用命令类的函数new CommandClass(this)
注意你的类将具有与CommandClass
不同的名称:
public class Main extends JavaPlugin{
@Override
public void onEnable(){
new CommandClass(this);
}
}
然后在命令类中,我们修改它以接收变量public CommandClass(Main plugin)
:
public class CommandClass implements CommandExecutor{
private Main plugin;
public CommandClass(Main plugin){
this.plugin = plugin;
}
}
现在你的onCommand方法将起作用,因为你在类中引用了plugin
:
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
@Override
public void run() {
Bukkit.broadcastMessage(Utils.chat("&6This works"));
}
}, 300L);
}
原始答案编辑了一些,以包括对您的屏幕截图的一些回复:
我可以看到四个问题:
plugin
。 @Override
注释,但它对于可运行的任务非常重要。 getServer().getScheduler()
而不是Bukkit.getScheduler()
,以防万一你的代码有些奇怪,你已经设法启动了多个服务器实例。 以下是修复了1和3的代码的更新版本:
Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
@Override
public void run() {
Bukkit.broadcastMessage(Utils.chat("&6This works"));
}
}, 300L);
以下是代码的更新版本,其中包含以下建议4:
getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
@Override
public void run() {
Bukkit.broadcastMessage(Utils.chat("&6This works"));
}
}, 300L);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.