Счетчик Гейгера

Версия Minecraft
1.7.10
54
0
Здравствуйте форумчане, подскажите как реализовать:
Когда например подходишь к определенному блоку (15 блоков от него) и у тебя в руках итем, то включается звук (щелчок как от Гейгера) loudclick.ogg.
 
5,018
47
783
чекаешь коорды блока и коорды игрока. Если в радиусе есть такой блок, то запускаешь звуковой эвент. Ну типо как то так. Я звуки не делал никогда, поэтому могу только предположить
 
4,045
63
645
Я бы в тик эвенте игрока проверял наличие подобных блоков в радиусе... И лучше это делать не каждый тик, а раз в секунду, например.
С другой стороны, если это у тебя тайл, то можно проверять через него по списку игроков выяснять, кто из них находится в радиусе.


Если что, то 20 тиков это 1 секунда. Здесь был @Ivasik :p
 
4,045
63
645
Liahim написал(а):
Я бы в тик эвенте игрока проверял наличие подобных блоков в радиусе... И лучше это делать не каждый тик, а раз в секунду, например.
С другой стороны, если это у тебя тайл, то можно проверять через него по списку игроков выяснять, кто из них находится в радиусе.


Если что, то 20 тиков это 1 секунда. Здесь был @Ivasik :p



Шо ж ты, Ivasik, делаешь-то?
 
5,018
47
783
2,505
81
397
Код:
// Нужно откуда-то достать игрока. Если будешь искать на клиенте, то можно так
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
// Берем коробку вокруг игрока радиусом в 15 блоков.
AxisAlignedBB aabb = player.boundingBox.expand(15, 15, 15);

// Блок, который ищем
Block block = Blocks.cactus;
for (int x = (int) aabb.minX; x < aabb.maxX; ++x) {
    for (int y = (int) aabb.minY; y < aabb.maxY; ++y) {
        for (int z = (int) aabb.minZ; z < aabb.maxZ; ++z) {
            if (player.worldObj.getBlock(x, y, z) == block) {
                // Нашли блок!
                player.addChatComponentMessage(new ChatComponentText("Cactus!!"));
            }
        }
    }
}

// Если твой блок имеет тайл, то лучше так. Но это спорно.
// Если на карте будет загружено тайлов больше, чем ~ 30*30*30, то лучше использовать первый метод.
// Ищем блок сундука (у него есть тайл)
block = Blocks.chest;
for (TileEntity tile : (List<TileEntity>) player.worldObj.loadedTileEntityList) {
    if (tile.blockType == block &&
        aabb.isVecInside(Vec3.createVectorHelper(tile.xCoord, tile.yCoord, tile.zCoord))) {
        // Нашли!!
        player.addChatComponentMessage(new ChatComponentText("Chest!!"));
    }
}
 
769
1
42
Dahaka написал(а):
Код:
// Нужно откуда-то достать игрока. Если будешь искать на клиенте, то можно так
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
// Берем коробку вокруг игрока радиусом в 15 блоков.
AxisAlignedBB aabb = player.boundingBox.expand(15, 15, 15);

// Блок, который ищем
Block block = Blocks.cactus;
for (int x = (int) aabb.minX; x < aabb.maxX; ++x) {
    for (int y = (int) aabb.minY; y < aabb.maxY; ++y) {
        for (int z = (int) aabb.minZ; z < aabb.maxZ; ++z) {
            if (player.worldObj.getBlock(x, y, z) == block) {
                // Нашли блок!
                player.addChatComponentMessage(new ChatComponentText("Cactus!!"));
            }
        }
    }
}

// Если твой блок имеет тайл, то лучше так. Но это спорно.
// Если на карте будет загружено тайлов больше, чем ~ 30*30*30, то лучше использовать первый метод.
// Ищем блок сундука (у него есть тайл)
block = Blocks.chest;
for (TileEntity tile : (List<TileEntity>) player.worldObj.loadedTileEntityList) {
    if (tile.blockType == block &&
        aabb.isVecInside(Vec3.createVectorHelper(tile.xCoord, tile.yCoord, tile.zCoord))) {
        // Нашли!!
        player.addChatComponentMessage(new ChatComponentText("Chest!!"));
    }
}
Пригодится
 
5,018
47
783
Dahaka написал(а):
Код:
// Нужно откуда-то достать игрока. Если будешь искать на клиенте, то можно так
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
// Берем коробку вокруг игрока радиусом в 15 блоков.
AxisAlignedBB aabb = player.boundingBox.expand(15, 15, 15);

// Блок, который ищем
Block block = Blocks.cactus;
for (int x = (int) aabb.minX; x < aabb.maxX; ++x) {
    for (int y = (int) aabb.minY; y < aabb.maxY; ++y) {
        for (int z = (int) aabb.minZ; z < aabb.maxZ; ++z) {
            if (player.worldObj.getBlock(x, y, z) == block) {
                // Нашли блок!
                player.addChatComponentMessage(new ChatComponentText("Cactus!!"));
            }
        }
    }
}

// Если твой блок имеет тайл, то лучше так. Но это спорно.
// Если на карте будет загружено тайлов больше, чем ~ 30*30*30, то лучше использовать первый метод.
// Ищем блок сундука (у него есть тайл)
block = Blocks.chest;
for (TileEntity tile : (List<TileEntity>) player.worldObj.loadedTileEntityList) {
    if (tile.blockType == block &&
        aabb.isVecInside(Vec3.createVectorHelper(tile.xCoord, tile.yCoord, tile.zCoord))) {
        // Нашли!!
        player.addChatComponentMessage(new ChatComponentText("Chest!!"));
    }
}

Спасибо, украл
 

Icosider

Kotliner
Администратор
3,603
99
664
Liahim написал(а):
Liahim написал(а):
Я бы в тик эвенте игрока проверял наличие подобных блоков в радиусе... И лучше это делать не каждый тик, а раз в секунду, например.
С другой стороны, если это у тебя тайл, то можно проверять через него по списку игроков выяснять, кто из них находится в радиусе.


Если что, то 20 тиков это 1 секунда. Здесь был @Ivasik :p



Шо ж ты, Ivasik, делаешь-то?



Эт не я, ты сам написал XD Я не одмен, я не умею писать в комменты, и баны давать.
 
3,005
192
592
Ivasik написал(а):
Эт не я, ты сам написал XD Я не одмен, я не умею писать в комменты, и баны давать.

unknown.png

Так не палишься в "Последнее редактирование" ...


/\ Он палит контору /\
 
Сверху