Пофиксить лаги

Snowmaze

Участник
Пользователь
Баллы
36
Мой плагин очень прилично нагружает сервер и я хотел вывести в отдельный поток всё, чтобы не было в основном и получил ошибку Asynchronous entity add. Как можно решить проблему?
Код:
LivingEntity mob =  (LivingEntity) p.getWorld().spawnEntity(loc, randomMob);
 
Мой плагин очень прилично нагружает сервер и я хотел вывести в отдельный поток всё, чтобы не было в основном и получил ошибку Asynchronous entity add. Как можно решить проблему?
Код:
LivingEntity mob =  (LivingEntity) p.getWorld().spawnEntity(loc, randomMob);
В спиготе работает один поток — главный. На геймпедии написано на этот счет.

Работать с другими потоками можно:
 
Вообще, это значит, что нерационально ты ресурсы используешь, кажется мне))
PHP:
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);
        }
    }

}

PHP:
new DropItemsTask(player).runTask(GameActions.plugin);
(хотел еще в прошлом посте написать, но пытался прикрепить эту вонючую цитату, ведь теперь кнопки просто процитировать нет)
 
Последнее редактирование:
Вообще, это значит, что нерационально ты ресурсы используешь, кажется мне))

(хотел еще в прошлом посте написать, но пытался прикрепить эту вонючую цитату, ведь теперь кнопки просто процитировать нет)
проблемка в этом коде в том, что runTask() запускает задачу и главный поток дальше идёт по коду. Если я запихну весь тот код в runTask() то всё равно лагать будет. Мне нужно просто получить создать моба и получить его, а потом асинхронно уже с ним работать,а так как runTask() не задерживает главный поток оно дальше идёт по коду, пока этот таск объекта ещё не достал
 
А что если из-за моего плагина весь серв подлагивает?
Сначала разберись в том, что эти лаги создает.
Тайминги и spark в помощь.
Работать асинхронно с Bukkit API крайне нежелательно.
 
Сначала разберись в том, что эти лаги создает.
Тайминги и spark в помощь.
Работать асинхронно с Bukkit API крайне нежелательно.
Я смотрел, что создаёт лаги в таймингах и поэтому задал этот вопрос
 
Сначала разберись в том, что эти лаги создает.
Тайминги и spark в помощь.
Работать асинхронно с Bukkit API крайне нежелательно.
Просто оно обходит циклом всех игроков и смотрит броню каждого игрока, а потом генит рандомные координаты относительно игрока и спавнит там моба в зависимости от брони игрока
 
Ну все, рип ин пис. Вообще да, надо было уточнить, что у BukkitScheduler может выполнять асинхронно..)

Читай этот пост с спигота от md_5.
 
Просто оно обходит циклом всех игроков и смотрит броню каждого игрока, а потом генит рандомные координаты относительно игрока и спавнит там моба в зависимости от брони игрока
Скорее всего лаги к тому, что ты спавнишь энтити в рандомных координатах, там идет либо загрузка либо генерация чанков, что создает лаги. Сделай прегенерацию мира в нужной области, куда будешь спавнить энтити. WorldBorder в помощь.
 
Ну все, рип ин пис. Вообще да, надо было уточнить, что у BukkitScheduler может выполнять асинхронно..)

Читай этот пост с спигота от md_5.
проблемка в этом коде в том, что runTask() запускает задачу и главный поток дальше идёт по коду. Если я запихну весь тот код в runTask() то всё равно лагать будет. Мне нужно просто получить создать моба и получить его, а потом асинхронно уже с ним работать,а так как runTask() не задерживает главный поток оно дальше идёт по коду, пока этот таск объекта ещё не достал
Криво написал, но всё же
 
Криво написал, но всё же
В чем проблема? Как понял я: нужно создать экземпляр моба, асинхронно добавить в мир, также асинхронно продолжить работу.

Почему нельзя создавать экземпляр тоже асинхронно — непонятно, но ок. У CraftWorld есть метод createEntity(Location, Class<? extends org.bukkit.entity.Entity>), остальное просто в runTaskAsynchronously.

(Не уверен, что оно не прогрузит чанки)
 
Назад
Верх