当前位置: 首页 > 知识库问答 >
问题:

Minecraft插件scheduleSyncDelayedTask错误

诸葛彦
2023-03-14

我有一个问题,在制作Minecraft插件和编写代码方面是新手。

我试图制作一个插件,在执行第二个命令之前等待大约15秒,但是我现在的html" target="_blank">代码在我尝试做的时候有一个错误(插件,新的Runnable()。我做了一些研究,大多数人说这是因为我的主类中没有这个。问题是我不想让它在我的主类中。所以我想知道我必须做什么来使这个工作。

代码如下。提前感谢您能提供的任何帮助。~石头

@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。

共有1个答案

华子航
2023-03-14

响应您的更新/编辑:

发生错误是因为您使用插件对代码没有任何意义。在使用in there之前,您需要将其声明为一个变量,或者假设您在一个类中为插件编写了所有代码,那么您可以轻松地将plugin替换为this,就像bukkit.getscheduler().scheduleSyncDelayedTask(this,new Runnable(){

如果它在另一个类中,那么要声明变量,您需要从另一个类传递它,或者从您的主插件类调用它。下面将向您展示如何将其传递给侦听器类。

public class Main extends JavaPlugin{
  @Override
  public void onEnable(){
    new CommandClass(this);
  }
}

然后在命令类中,我们修改它以接收变量public CommandClass(主插件):

public class CommandClass implements CommandExecutor{
  private Main plugin;

  public CommandClass(Main plugin){
    this.plugin = plugin;
  }
}

现在您的onCommand方法可以工作了,因为您的类中有对插件的引用:

@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);
}

原始答案编辑了一点,包括对你截图的一些回应:

    null
        Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
            @Override
            public void run() {
                Bukkit.broadcastMessage(Utils.chat("&6This works"));
            }
        }, 300L);
        getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
            @Override
            public void run() {
                Bukkit.broadcastMessage(Utils.chat("&6This works"));
            }
        }, 300L);
 类似资料:
  • Illuminatiiiiii发布的服务器命令:/fakeop[21:33:10 ERROR]:null org.bukkit.command.commandexception:未处理的异常在org.bukkit.command.plugincommand.execute(plugincommand.java:46)~[spigot-1.10.2.jar:git-spigot-5391d73-00

  • 我试图使一个混合modeauth(我自己的版本的身份验证插件),但有一个问题-在与明星的行,我得到以下错误: 这是我的代码:

  • 我已经做了一个消失插件,但我有麻烦使它,所以服务器管理员可以看到的人,当他们在消失。我想这样做,如果他们得到允许,他们可以看到人们消失。

  • 为什么它不起作用?它阻塞每个命令。我希望它阻止除config中的命令外的所有命令

  • 我最近想创建一个插件,它可以运行从服务器到播放器的跟踪路由。我在java方面遇到了一些困难,因为我的服务器主机不允许我访问minecraft部分以外的其他文件,所以我不能正确设置我需要的库。 我想创建一个Rest API,它将在我拥有所有权限的VPS上,但我不确定我们是否可以从本地IP以外的另一个IP运行traceroute,我需要从minecraft服务器运行它到播放器。 我目前使用的trace

  • 遵循YouTube教程,但当我运行插件时,Minecraft根本没有注册它。该插件旨在返回“嗨!”当这出戏开始/你好或/你好时。当我把插件放在我的服务器上时,什么都没有,甚至没有在/plugins中注册 代码: Main.java: 你好,司令部。爪哇: plugin.yml: YT教程:https://www.youtube.com/watch?v=XaU8JKQW0Ao 任何帮助都将不胜感激。