gpt4 book ai didi

java - Minecraft 插件 scheduleSyncDelayedTask 错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:22:36 25 4
gpt4 key购买 nike

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

我正在尝试制作一个在执行第二个命令之前等待大约 15 秒的插件,但是当我尝试执行时我现在拥有的代码有一个错误(插件,new 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 [ Image 1: Screenshot of error Eclipse gave me ] 2[ Image 2: Screenshot of error Eclipse gave me (plugin is underlined in red) ] Image 3: Screenshot of the CMD from my server when I tried to excecute my reloadc command

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

下面是完整代码的图片。

My Main Class Image of my Reload C class with the wait 15 seconds method inside.

最佳答案

响应您的更新/编辑:

您的错误发生是因为您使用 plugin 对您的代码没有任何意义。您需要在使用之前将其声明为变量,或者假设您为插件在一个类中编写了所有代码,那么您可以轻松地将 plugin 替换为 this像这样 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);

关于java - Minecraft 插件 scheduleSyncDelayedTask 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51867044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com