Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Глобальное потемпление в майнкрафт

Метки:
Теги Теги
#global #minecraft #plugin #warm
Ну, если брать определенную небольшую локация неподалеку от онлайн игроков и если сервер имеет нормальные характеристики, то нет

Хотя и игроков может быть много, но вроде это как-то в асинхроне можно провернуть
В реализации такого есть значимый недостаток. Если изменять чанк (даже если изменить один блок в чанке) асинхронно, например с помощью FasyAsyncWorldEdit или AsyncWorldEdit, все игроки находящиеся в изменяемом чанке станут невидимыми для других игроков. Это проблема клиента и самый простой способ исправить это вызвать перезагрузку мира для игроков, т.е. они увидят экран загрузки. Самым правильным решением данной задачи было разбивать высушивание блоков следующим образом. В отдельном потоке за тик собрать N'ое кол-во блоков и на следующий синхронный тик разбить собранные блоки на очередь, делая replace синхронно, пока очередь не останется пустой. Но это все равно не малая нагрузка для сервера, которую можно уменьшить если не применять физику к блокам, в прочем этого все равно будет недостаточно для онлайна свыше 30.

UPD. Более того, в новых версиях FAWE реализация EditSession ведет себя очень (ОЧЕНЬ) не предсказуемо. В каких-то моментах в одну сессию лучше запихнуть как можно больше изменений. В каких-то моментах лучше разбить множество изменений на несколько EditSession. В любом случае - реализовать можно с помощью реактора, описывая логику publisher'ов с таймаутами и параллельной итерацией очереди. Только вот кодеров которым знакомо понятие реактивное программирование в майне не много и привлечь их без бюджета у тебя не получится.

У меня у самого сейчас проект на паузе, который позволяет работать с блоками не из главного потока. Когда разберусь с основной работой и доделаю реализацию ThreadSafeBlockPlacer, оставлю репозиторий, если конечно не забуду.
 
"Глобальное потемпление в майнкрафт" — прекрасный пример творческого подхода к апокалипсису. И потемнение, и потепление одновременно :thumbsup:
 
В реализации такого есть значимый недостаток. Если изменять чанк (даже если изменить один блок в чанке) асинхронно, например с помощью FasyAsyncWorldEdit или AsyncWorldEdit, все игроки находящиеся в изменяемом чанке станут невидимыми для других игроков. Это проблема клиента и самый простой способ исправить это вызвать перезагрузку мира для игроков, т.е. они увидят экран загрузки. Самым правильным решением данной задачи было разбивать высушивание блоков следующим образом. В отдельном потоке за тик собрать N'ое кол-во блоков и на следующий синхронный тик разбить собранные блоки на очередь, делая replace синхронно, пока очередь не останется пустой. Но это все равно не малая нагрузка для сервера, которую можно уменьшить если не применять физику к блокам, в прочем этого все равно будет недостаточно для онлайна свыше 30.

UPD. Более того, в новых версиях FAWE реализация EditSession ведет себя очень (ОЧЕНЬ) не предсказуемо. В каких-то моментах в одну сессию лучше запихнуть как можно больше изменений. В каких-то моментах лучше разбить множество изменений на несколько EditSession. В любом случае - реализовать можно с помощью реактора, описывая логику publisher'ов с таймаутами и параллельной итерацией очереди. Только вот кодеров которым знакомо понятие реактивное программирование в майне не много и привлечь их без бюджета у тебя не получится.

У меня у самого сейчас проект на паузе, который позволяет работать с блоками не из главного потока. Когда разберусь с основной работой и доделаю реализацию ThreadSafeBlockPlacer, оставлю репозиторий, если конечно не забуду.
Почему асинхронная установка блока на сервере приводит к проблемам на клиенте? Тики на сервере и на клиенте не синхронизированы и никак не влияют друг на друга.
Или при такой операции сервер отправляет некорректные данные?
 
Почему асинхронная установка блока на сервере приводит к проблемам на клиенте? Тики на сервере и на клиенте не синхронизированы и никак не влияют друг на друга.
Или при такой операции сервер отправляет некорректные данные?
Проблемы скорее у Fawe. Не изучал почему так происходит, однако проблема была актуальна для 1.12.2 и актуальна до сих пор. Предыдущие версии не тестировал.
 

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

Назад
Верх