Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем ql_Nik_lp, 30 июл 2013.

Статус темы:
Закрыта.
  1. Автор темы
    ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в 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)
    Погуглив я нашел вот такую информацию:
    [​IMG]
    Вопрос - как быть?
    У меня ощущение что ответ на самом деле прост, но я все же его не вижу :C
    Заранее благодарю
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    [​IMG]

    Если у кого будет подобная проблема - в личку.
     
    Den_Abr нравится это.
  4. Автор темы
    ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Можно и отписаться :)
    Проблему решил так:
    Создал отдельный 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);
     
    DPOH-VAR и fromgate нравится это.
Статус темы:
Закрыта.

Поделиться этой страницей