Помогите Эффекты в другом потоке

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

MurlikMurlik

Активный участник
Пользователь
Баллы
96
Доброго времени суток.
Создаю мелкую тему, что бы точнее узнать, правильно ли запускать эффекты в другом потоке? (spawnParticle метод)
Есть например такой код
w.spawnParticle(Particle.TOTEM, toE.clone().add(0, 1, 0), 15);
Выполняется в другом потоке. При выполнении, ни вижу никаких исключений, эффект спавнится.
Эффект не спроста там находится, ибо перед спавном, я всячески вычисляю дорогими методами нужное положение и прочую локацию что бы не тормозить основной поток.
Собственно, безопасно ли так спавнить эффект? (или даже звуки)
 
В целом очень не рекомендуется использовать любые методы Bukkit из асинхронных потоков. Они могут вызвать различные ошибки, краши, дедлоки. Некоторые методы потокобезопасны, но использовать на страх и риск. Партиклы может быть и безопасны, так как по сути отправляются пакеты партиклов без дополнительных вычислений и прогрузки чанков например. А вот было я в асинхронном потоке доставал блоки из непрогруженных чанков, так каким то образом весь цикл чисто фризился на рандомном блоке.
 
Лучше брать и слать пакеты в асинхронном, вот здесь проблем точно не будет.
 
Лучше брать и слать пакеты в асинхронном, вот здесь проблем точно не будет.
Всегда не совсем понимал, считается ли запуск .runTaskAsynchronously((Plugin)this.plugin);
Асинхронном? По сути, сейчас через него запускал партиклы и методы для вычисления. Я не достаю ничего из локаций, только вычисляю их, и спавню партиклы. Будет в таком случае все в порядке?
 
Всегда не совсем понимал, считается ли запуск .runTaskAsynchronously((Plugin)this.plugin);
Асинхронном? По сути, сейчас через него запускал партиклы и методы для вычисления. Я не достаю ничего из локаций, только вычисляю их, и спавню партиклы. Будет в таком случае все в порядке?
Партиклы можно отправлять и асинхронно, никаких проблем в этом нет. Руками формировать пакеты смысла нет - есть методы в апи, которые делают это самостоятельно.
 
Всегда не совсем понимал, считается ли запуск .runTaskAsynchronously((Plugin)this.plugin);
Асинхронном? По сути, сейчас через него запускал партиклы и методы для вычисления. Я не достаю ничего из локаций, только вычисляю их, и спавню партиклы. Будет в таком случае все в порядке?
Ну как видишь там написанно Asynchronously), значит запускается в отдельном потоке. runTask просто, добавляется в список задач и на нужном тике главный поток его стартует.
 
В таком случае вопросов больше нет, тему закрываю 🙂
Всем спасибо за консультацию.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх