Получить дамаг в радиусе от блока

Версия Minecraft
1.12.2
3,005
192
592
Мне нужно в радиусе 10 от блока получить дамаг.
Если кто-то кого-то дамажит - блок должен "знать" и как-то реагировать.
К примеру, если игрока убили в радиусе 2 от блока - дропнуть бедрок.
 
7,099
324
1,510
Где хочешь, например, в статик-переменной в блоке. Всд - просто способ сохранять и загружать при сохранении и загрузке мира
 
7,099
324
1,510
Область поиска уменьшается, до некоторого предела кол-ва установленных блоков. В случае с ААББ нужно только найти первое пересечение сущности с областью. Т.е. если у тебя лист длиной n, то сложность алгоритма будет O(n), если чекаешь все блоки в радиусе сложность будет O(radius^3). Нетрудно догадаться, что графики роста сложности при росте кол-ва блоков выглядят так:
1536765134412.png

Т.е. эффективней всего будет до пересечения юзать лист, а после(когда его размер привысит radius^3) юзать чек по радиусу
 

Icosider

Kotliner
Администратор
3,603
99
664
@Doc, я решил данную проблему так:
Java:
    private boolean hasPlayerInRadius(TileEntity tile) {
        int chunkX = tile.xCoord >> 4;
        int chunkY = tile.yCoord >> 4;
        int chunkZ = tile.zCoord >> 4;

        int minX = chunkX - 3;
        int minY = chunkY - 3;
        int minZ = chunkZ - 3;
        int maxX = chunkX + 3;
        int maxY = chunkY + 3;
        int maxZ = chunkZ + 3;

        int locX, locY, locZ;

        for (EntityPlayer player : (List<EntityPlayer>) worldObj.playerEntities) {
            locX = player.chunkCoordX;
            locY = player.chunkCoordY;
            locZ = player.chunkCoordZ;

            if (minX <= locX && locX <= maxX && minY <= locY && locY <= maxY && minZ <= locZ && locZ <= maxZ)
                return true;
        }
        return false;
    }
Правда для поиска игрока, но работает быстро, быстрее чем получать по AABB
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Ну ему тогда однозначно делать тайлом надо и аля как в маяке, а не блок искать.
Каким образом ты проверишь в блоке, что в радиусе от него кому-то дали по башке? Никак. Это надо делать только в ивенте.
 
Сверху