Помогите Ближайший блок такого-то типа

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

lamovski

Участник
Баллы
31
Имя в Minecraft
lamovski
Собсна, вопрос в заголовке: как найти ближайший к Entity блок определённого типа (в моём случае - Chest)?
Не, можно кнчн поставить к каждому такому блоку по асту, но хотелось бы что-то попроще
 
Последнее редактирование:
Перебором всех блоков в нужном радиусе через for-loop.
https://www.baeldung.com/java-loops
Код:
// Здесь проверка по кубоиду
Block startBlock = ... // центр
int radius = 10;

for (int dx = -radius; dx <= radius; dx++) {
    for (int dy = -radius; dy <= radius; dy++) {
        for (int dz = -radius; dz <= radius; dz++) {
            Block block = startBlock.getRelative(dx, dy, dz);
            // Проверка нужный ли блок и действия
        }
    }
}

Оптимальнее это брать ближайшие чанки, в них брать TileEntity (ибо сундуки, воронки и т.п. это как раз они), из них фильтровать которые находятся в нужном радиусе. Еще оптимальнее это делать снепшоты чанков и в них уже перебирать блоки в асинхроне, либо использовать FAWE API.
 
Последнее редактирование:
Ну давай порассуждаем.
можно кнчн поставить к каждому такому блоку по асту
Как это вообще работает? Я про getNearbyEntities().
Идём в исходники метода и видим, что там происходит самый обычный перебор всех энтити в мире по определённым условиям - в первую очередь по радусу (который конвертируется в BoundingBox).
По аналогии можно создать список необходимых блоков. Ничего не мешает держать в памяти список необходимых блоков с их координатами, а потом просто просто проверять их по необходимым условиям.
Ещё оптимальнее будет хранить блоки почанково, чтобы не перебирать весь мир сразу, а только нужные куски.
Подскажу, что в ядре уже есть все эти списки. С сундуками ещё проще, потому что они относятся к TileEntity - для них вообще отдельный список вместе с печками, воронками и другими тикающими энтити.
Правда не знаю, реально ли вытаскивать эти списки без использования НМС.
Если решишь создавать списки самостоятельно - не забывай актуализировать их при всех необходимых действиях: удаление/установка блока, применение физики, возможно сет через WE и так далее
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх