1. Высота чанка - 256
2. Перебор 65536 (16x16x256) блоков при установке каждой пОнели неплохо нагрузит сервер.
Согласен. Хотя перебор идет только при установке именно конкретного блока (конечно же, можно сделать не один, а набор блоков и лимитов). Ну, в общем, я попробовал на тестовом - вроде мгновенно считает. Не будут же они пытаться ставить эти блоки ежесекундно? Ну, возможно, в начале чуток переберут, а потом, "обжегшись" десяток раз, уже не будут постоянно пытаться поставить много блоков. И "нагрузка" будет достигать некоего пика лишь тогда, когда новички будут "учиться" местным особенностям.
Тем не менее, я не спорю. Потому ранее спросил у аудитории, нет ли более изящного способа подсчитать количество определенных блоков в чанке.
Разгрузить процесс можно, если слушать еще и ломание блоков. То есть, при достижении лимита блоков чанк вносить в некий список забаненных и в дальнейшем просто проверять, не входит ли чанк в этот список. А уже из этого списка убирать чанк тогда, когда сломан один лимитированный блок и в чанке их стало меньше максимума. Однако, спорный вопрос: что сильнее нагрузит сервер - дополнительный "слушатель" на ломание блоков или все-таки перебор всего чанка каждый раз, когда установлен блок определенного типа.
P.S. И, кстати, у меня в коде высота чанка равна 128. Цифру я взял, руководствуясь этим:
http://jd.bukkit.org/rb/doxygen/d6/d90/interfaceorg_1_1bukkit_1_1Chunk.html
И, кстати, зря я так поступил.
🙂 Проверил, изменил.
Что ж, это натолкнуло меня на мысль, что в настройках неплохо бы указывать пределы отслеживания. Кому придет в голову ставить блоки выше 200, например? Ну и нефиг тогда проверять, правильно?
Надо сказать, что автор наверняка неточно выразил свою мысль и на самом деле речь не о чанке, а о некотором объеме. В таком случае можно проверять не чанк, а просто некий куб пространства вокруг блока, с заданным "радиусом".