繁体   English   中英

Minecraft插件scheduleSyncDelayedTask错误

[英]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()。 因为它给了我更多错误,并且至少从我能说的内容中没有改变任何东西。

1 [[ 图1:Eclipse给我的错误的屏幕截图 ] 2 [ 图2:Eclipse给我的错误的屏幕截图(插件用红色加下划线) ] 图3:当我尝试执行reloadc命令时,来自我服务器的CMD的屏幕截图

好吧所以我已经完成了更改,一切都说它可以正常工作,但现在当我运行我设置的命令时它会做它应该做的一切,除非等待15秒。 它一个接一个地执行文本,告诉我它将在15秒内重新加载,然后同时它告诉我它有效。 我现在似乎没有什么不对,只是说它运行正常,我的等待时间是300L,这是服务器滴答。 那应该等于15。

完整代码的图片如下。

我的主要课程 我的Reload C类的图像,里面有等待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);
}

原始答案编辑了一些,以包括对您的屏幕截图的一些回复:

我可以看到四个问题:

  1. 您的错误发生是因为您没有引用您的实际插件,只是输入了plugin
  2. 请注意,延迟是服务器滴答,因此20L只会延迟1秒。 如果你想延迟15秒,那么使用300L。
  3. 您没有使用@Override注释,但它对于可运行的任务非常重要。
  4. 您可以使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM