Помогите Доступ к API из асинхронного потока или IllegalStateException: Asynchronous entity add!

Статус
Закрыто для дальнейших ответов.

ql_Nik_lp

Старожил
Девелопер
Пользователь
Баллы
173
Имя в Minecraft
ql_Nik_lp
Всем доброго времени суток, дорогие друзья!
Пишу свой плагин-гейммод, и поскольку еще приступая знал что придется производить много просчетов и вычислений, а лаги и провисания не допустимы, устроил все так, что грубо говоря вся работа плагина выполняется на отдельном потоке, и все было хорошо, ровно до того момента как я принялся за работу с миром, а именно моей задачей было выбросить предметы из инвентаря игрока, и как результат:
Код:
17:20:45 [SEVERE] java.lang.IllegalStateException: Asynchronous entity add!
17:20:45 [SEVERE]      at net.minecraft.server.v1_6_R2.World.addEntity(World.ja
va:930)
17:20:45 [SEVERE]      at net.minecraft.server.v1_6_R2.World.addEntity(World.ja
va:926)
17:20:45 [SEVERE]      at org.bukkit.craftbukkit.v1_6_R2.CraftWorld.dropItem(Cr
aftWorld.java:302)
17:20:45 [SEVERE]      at org.bukkit.craftbukkit.v1_6_R2.CraftWorld.dropItemNat
urally(CraftWorld.java:316)

Погуглив я нашел вот такую информацию:
3PqB8.png

Вопрос - как быть?
У меня ощущение что ответ на самом деле прост, но я все же его не вижу :C
Заранее благодарю
 
Ну а чего тут не отписаться? Жалко что ли?

Можно и отписаться 🙂
Проблему решил так:
Создал отдельный BukkitTask и все необходимые действия прописал в нем, и просто вызываю его из потока.

Таск:
Код:
public class DropItemsTask extends BukkitRunnable {
 
public Player player;
 
public DropItemsTask(Player player) {
this.player = player;
}
 
public void run() {
for (ItemStack is : player.getInventory().getContents()) {
player.getWorld().dropItemNaturally(player.getLocation(), is);
player.getInventory().remove(is);
}
}
}
Его вызов:
Код:
new DropItemsTask(player).runTask(GameActions.plugin);
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх