Как узнать кол-во блоков в мире. (Тех что укажешь в функции как minecraft:dirt выведет допустим 100000)

Версия Minecraft
1.16.5
API
Forge
22
1
0
Как узнать кол-во блоков в мире. (Тех что укажешь в функции как minecraft:dirt выведет допустим 100000)
К примеру LOGGER.info(GetBlockCount(MyCustomBlock.get()));
выведет к примеру 5 если в мире их 5.

Forge 1.16.5-36.2.34
 
Как узнать кол-во блоков в мире. (Тех что укажешь в функции как minecraft:dirt выведет допустим 100000)
К примеру LOGGER.info(GetBlockCount(MyCustomBlock.get()));
выведет к примеру 5 если в мире их 5.

Forge 1.16.5-36.2.34
Расчет этого будет не очень долгим, только если обращаться напрямую к битовым массивам, не сопоставляя набор бит <-> Состояние каждый раз, скопировать в стек все что возможно, не мусорить, не использовать полиморфизм итд

Проходишь в цикле по всем чанкам, в каждом чанке проходишь по вертикальной секции, проверяешь палитру - если в ней нет нужного состояния блока - можно скипнуть, создаешь локальную таблицу, в которой хранишь пару Набор-бит=Количество, копируешь в стек указатель на массив бит, в цикле проходишься по нему и заполняешь таблицу, сопоставляешь Набор-бит=Состояние

Если твой блок имеет tile entity - то там проще и быстрее - делай список по тилям в чанке, и проверяй "твой ли он"

Ну или как сказали выше - логировать установку/уничтожение
 
Последнее редактирование:
Либо ловишь установку блока в мир и логгируешь в бд и т.п.
Ну или как сказали выше - логировать установку/уничтожение

У меня уже есть на уничтожение блока. Но я не понял как сделать на установку. Весь инет перерыл и не нашёл BlockPlace эвента. Потому что пишет что BlockPlace эвент не существует. А его новое название я не нашёл.

Он работает.
Код:
@SubscribeEvent
public void onBlockDestroyed(BlockEvent.BreakEvent event) {
Но это пишет не существует PlaceEvent. И в подсказках Intellij Idea тоже нету.
Код:
@SubscribeEvent
public void onBlockPlaced(BlockEvent.PlaceEvent event) {
 
Назад
Сверху