java - bukkit 可运行的 IllegalStateException
问题描述
伙计们,我正在制作一个 spigot 1.8 插件。它在 1.16 上工作,但在 1.8 中它抛出了这个:
[10:00:59 ERROR]: Could not pass event InventoryClickEvent to Knockback_PVP v1.0.0
.....
org.bukkit.event.EventException
Caused by: java.lang.IllegalStateException: Already scheduled as 1201
at org.bukkit.scheduler.BukkitRunnable.checkState(BukkitRunnable.java:141) ~[spigot-1.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-c3c767f-33d5de3]
at org.bukkit.scheduler.BukkitRunnable.runTask(BukkitRunnable.java:31) ~[spigot-1.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-c3c767f-33d5de3]
...
这是我的代码的一部分:
BukkitRunnable runnable = new BukkitRunnable() {
@Override
public void run() {
if (plugin.RegenTasks.containsKey(getTaskId()) == false) return;
Player p = plugin.RegenTasks.get(getTaskId());
p.getInventory().setItem(3, new ItemStack(Material.DIAMOND));
plugin.RegenTasks.remove(getTaskId());
return;
}
};
runnable.runTaskLater(plugin, 2*20*30);
plugin.RegenTasks.put(runnable.getTaskId(),p);
当玩家死亡时在其他地方:
if (plugin.RegenTasks.containsValue(p)){
for (int i: plugin.RegenTasks.keySet()) {
if (plugin.RegenTasks.get(i) == p) {
plugin.RegenTasks.remove(i);
try
{plugin.getServer().getScheduler().cancelTask(i);}
finally {break;}
}
}
}
有什么办法解决吗?
解决方案
您只能安排一次 BukkitRunnable。你的错误信息也告诉你。
已经预定为1201
看一下Javadoc:
IllegalStateException - 如果这已经安排好了
所以要么只调用一次runnable,要么安排你的任务,例如:
推荐阅读
- elixir - 在更改集属性进入数据库之前对其进行转换
- javascript - 动态日期封锁 jquery datepicker
- android - Ionic cordova compile for android 在 minSdkVersion 上给出的错误小于声明的版本
- bash - 将字符串变量值插入到 ksh 中另一个字符串变量值的中间
- r - 在 R 中计算时间
- android - BottomAppBar 被推离屏幕
- node.js - 转到端点时收到有关 $pushAll 的错误,但没有在任何地方使用它
- python - 连接不同变量的交叉表
- r - 如何在 R 中生成未来残差?
- bash - curl PUT 使用 auth token header 到 mesosphere 失败,没有 eval