响应您的更新/编辑:
你的错误发生是因为你使用plugin
对您的代码没有任何意义。您需要在使用之前将其声明为变量,或者假设您在插件的一个类中编写了所有代码,那么您可以轻松替换plugin
with 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);
}
原始答案进行了一些编辑,以包括对您的屏幕截图的一些响应:
我可以看到四个问题:
- 发生错误是因为您没有引用实际的插件,而只是输入
plugin
.
- 请注意,延迟以服务器时钟为单位,因此 20L 只会有
延迟1秒。如果您想要 15 秒延迟,则使用 300L。
- 你没有使用
@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);