Условие в тикхэндлере

Доброго времени суток. Вылез такой вопрос, как сделать воспроизведение звука, если предмет лежит в инвентаре в определенном слоте и в радиусе от игрока находится какой то блок?
Как проверить инвентарь я знаю, но не знаю как сделать проверку в тикхэндлере на блок в радиусе и воспроизведение звука.
 

tox1cozZ

aka Agravaine
8,456
598
2,893
Код:
for(int x = -4; x <= 4; x++){
    for(int y = -4; y <= 4; y++){
        for(int z = -4; z <= 4; z++){
                if(player.worldObj.getBlock(player.posX + x, player.posY + y, player.posZ + z) == Blocks.tnt){
                     player.playSoundAtEntity("sound", 1.0F, 1.0F);
                 }
        }    
    }
}
 
Спасибо большое!
[merge_posts_bbcode]Добавлено: 08.05.2015 15:14:52[/merge_posts_bbcode]

Ам, опять туплю и не могу все вставить правильно.
Ругается на getBlock, playSoundAtEntity, с выводом The method getBlock(int, int, int) in the type World is not applicable for the arguments (double, double, double)
А на playSoundAtEntity предлагает заменить на playSound.
Код:
if(props.inventory[4] != null && props.inventory[4].getItem() == LDItems.item_crowbar)
      {
          for(int x = -4; x <= 4; x++){
                for(int y = -4; y <= 4; y++){
                    for(int z = -4; z <= 4; z++){
                            if(player.worldObj.getBlock(player.posX + x, player.posY + y, player.posZ + z) == Blocks.tnt){
                                 player.playSoundAtEntity("sound", 1.0F, 1.0F);
                             }
                    }    
                }
            }
      }
 
В таком виде вывод в консоль даже не происходит. Ошибок нет.
Код:
if(props.inventory[4] != null && props.inventory[4].getItem() == LDItems.item_crowbar)
      {
          //double x = player.posX;
          //double y = player.posY;
          //double z = player.posZ;
          for(int x = -4; x <= 4; x++){
                for(int y = -4; y <= 4; y++){
                    for(int z = -4; z <= 4; z++){
                            if(player.worldObj.getBlock(x, y, z) == LDBlocks.block_particles1){
                                 player.playSound("mob.zombie.say", 1.0F, 1.0F);
                                 System.out.print("WORK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                             }
                    }    
                }
            }
      }
Полный метод
Код:
private void tickEnd(EntityPlayer player) {
      if(!player.capabilities.isCreativeMode) {
         this.dropItems(player);
         this.thrist(player);
         this.temperature(player);
         this.radiation(player);
      }

      if(pickUpItem > 0.0F) {
         pickUpItem -= 0.05F;
      } else {
         pickUpItem = 0.0F;
      }

      LDPlayerHandler props = LDPlayerHandler.getServerPlayer(player);
      if(player.inventory.inventoryChanged || props.currentItem != player.inventory.currentItem) {
         props.inventory[33] = player.inventory.mainInventory[33];
         props.inventory[34] = player.inventory.mainInventory[34];
         props.inventory[35] = player.inventory.mainInventory[35];
         props.inventory[0] = player.inventory.mainInventory[0];
         props.inventory[1] = player.inventory.mainInventory[1];
         props.inventory[2] = player.inventory.mainInventory[2];
         props.currentItem = player.inventory.currentItem;
         if(FMLCommonHandler.instance().getSide().isServer()) {
            if(FMLCommonHandler.instance().getMinecraftServerInstance().getCurrentPlayerCount() > 1) {
               LDEngine.packet_handler.sendPacketToAll((new LDSyncInventory(player.getCommandSenderName(), props, player.inventory.currentItem)).generatePacket());
            } else if(!player.worldObj.isRemote) {
               LDEngine.packet_handler.sendTo((new LDSyncInventory(player.getCommandSenderName(), props, player.inventory.currentItem)).generatePacket(), (EntityPlayerMP)player);
            }
         } else if(!player.worldObj.isRemote) {
            LDEngine.packet_handler.sendTo((new LDSyncInventory(player.getCommandSenderName(), props, player.inventory.currentItem)).generatePacket(), (EntityPlayerMP)player);
         }
      }

      if(props.inventory[33] != null && props.inventory[33].getItem() == LDItems.nvg) {
         player.addPotionEffect(new PotionEffect(Potion.nightVision.getId(), 100, 5));
      }
      
      if(props.inventory[33] != null && props.inventory[33].getItem() == LDItems.respirator)
      {
          player.removePotionEffect(Potion.digSlowdown.getId());
          props.resetRadiation();
      }
      
      if(props.inventory[4] != null && props.inventory[4].getItem() == LDItems.item_crowbar)
      {
          //double x = player.posX;
          //double y = player.posY;
          //double z = player.posZ;
          for(int x = -4; x <= 4; x++){
                for(int y = -4; y <= 4; y++){
                    for(int z = -4; z <= 4; z++){
                            if(player.worldObj.getBlock(x, y, z) == LDBlocks.block_particles1){
                                 player.playSound("mob.zombie.say", 1.0F, 1.0F);
                                 System.out.print("WORK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                             }
                    }    
                }
            }
      }

   }
 

timaxa007

Модератор
5,831
409
672
Ты хоть понимаешь, что координаты у тебя не от игрока идут?
Код:
for(int x = (int)player.posX - 4; x <= (int)player.posX + 4; x++){
for(int y = (int)player.posY - 4; y <= (int)player.posY + 4; y++){
for(int z = (int)player.posZ - 4; z <= (int)player.posZ + 4; z++){
Как-то так.
 
Проблему решил. Теперь вопрос как проиграть свой звук?
Лежит по пути assets/lastdays/sound. Вызываю таким образом:
player.worldObj.playSoundAtEntity(player, "lastdays.sounds.activityDetector1", 1.0F, 1.0F);
player.worldObj.playSoundAtEntity(player, "activityDetector1", 1.0F, 1.0F);
Оба в формате ogg. Ни так ни так не работает. 
[16:23:02] [Client thread/WARN]: Unable to play unknown soundEvent: minecraft:lastdays.sounds.activityDetector1
[16:23:02] [Client thread/WARN]: Unable to play unknown soundEvent: minecraft:activityDetector1
 
в джсон добавил. Сейчас проверю.
[merge_posts_bbcode]Добавлено: 08.05.2015 19:36:41[/merge_posts_bbcode]

[16:31:37] [Client thread/WARN]: Unable to play unknown soundEvent: lastdays:activityDetector1
В конечном итоге все равно жопка.
Отрезок и джсона:
Код:
{
     "activityDetector": 
    {
        "category" : "player",
        "sounds" : [ "lastdays:activityDetector1", "lastdays:activityDetector2", "lastdays:activityDetector3" ]  
    },
}
 
Пытаюсь воспроизводить звук, когда игрок подходит к блоку.
 
7,099
324
1,510
Он про то, что это в целом, вроде.
 
Проблему со звуком уже решил.
[merge_posts_bbcode]Добавлено: 09.05.2015 17:39:55[/merge_posts_bbcode]

Тему можно закрывать.
 
Сверху