world.getBlockState нужна помощь.

Версия Minecraft
1.8.2
API
Forge
Когда я ипользую код
Java:
int get = 0;
int getBlock;
if(world.getBlockState(BlockPosition).getBlock() == Blocks.stone || world.getBlockState(BlockPosition).getBlock() == Blocks.stone){
}
выдает две ошибки "не удается разрешить символ мир" что я делаю не так?
 
Последнее редактирование:
60
6
31
1. Интересная проверка, Blocks.stone или Blocks.stone. ?)
2. BlockPosition, ты передаешь в метод как обычное имя класса чтоль? Тебе в твой метод, нужно передать объект и после оперировать с ним...


Example Code:
@Override
public boolean bindTo(EntityPlayer player, ItemStack wand, BlockPos pos, EnumFacing side) {
  if(player.world.getBlockState(pos).getBlock() != ModBlocks.lightRelay)
    return false;
    
  bindPos = pos;
  return true;
}
 
Java:
@SubscribeEvent
public void onKeyInput(InputEvent.KeyInputEvent event) {
     EntityPlayer player = Minecraft.getMinecraft().thePlayer;

        if(MyOpenMods.keyBindings.isPressed()) {
            System.out.println("Player = " + player.posX);
            System.out.println("Player = " + player.posY);
            System.out.println("Player = " + player.posZ);
            BlockPos BlockPositions = new BlockPos(player.posX, player.posY, player.posZ);

            if(world.getBlockState(BlockPositions).getBlock() == Blocks.stone || world.getBlockState(BlockPositions).getBlock() == Blocks.obsidian){
            }
        }
    }

Пытаюсь определить данные знака, и прямо сейчас находится ли игрок в местоположении. Это в keyInputEvent(сейчас), потому что мне нужно отследить нажатие клавиши.
 
Вот мой код для KeyInputHandler

Java:
public class KeysInputHandlers {
    @SubscribeEvent
    public void onKeyInput(TickEvent.ClientTickEvent event) {
        EntityPlayer player = Minecraft.getMinecraft().thePlayer;

        if(MyOpenMods.keyBindings.isPressed()) {
            BlockPos BlockPositions = new BlockPos(player.posX, player.posY, player.posZ);

            if(world.getBlockState(BlockPositions).getBlock() == Blocks.stone || world.getBlockState(BlockPositions).getBlock() == Blocks.obsidian){

            }
        }
    }
}
Зачем использовать ClientTickEvent? это же работает чаще (каждый тик).
Нужно сделать World world = Minecraft.getMinecraft().theWorld;?
 
Зачем использовать ClientTickEvent? это же работает чаще (каждый тик).
KeyInputEvent запускается каждый тик для всех произошедших вводов клавиш. Не только твои.
Если тебе нужна непрерывная проверка, выбирай это.

*Однако нужно проверить event.phase, иначе код будет выполняться дважды за тик.
Нужно сделать World world = Minecraft.getMinecraft().theWorld;?
Например, да.
 
1. Интересная проверка, Blocks.stone или Blocks.stone. ?)
2. BlockPosition, ты передаешь в метод как обычное имя класса чтоль? Тебе в твой метод, нужно передать объект и после оперировать с ним...
Подскажи, мне нужно использовать ClientTickEvent и проверку на нахождения игрока. BlockPosition не очень понял
 
60
6
31
Ну с ClientTickEvent, как тебе описал @PlayerLeftClick выше. С BlockPosition, я бы изменил тебе название объекта, начиная с маленькой буквы, чтобы не путаться, объект это или сам класс... Исходя из этого how to name objects / variables java. И насчёт BlockPos, тебе также ответили выше...
Передавать в качестве параметра или получать его от объекта

Судя из твоей логики, у тебя там получается, что будет создаваться каждый раз новый объект, при нажатие клавиши... Это неприемлемо для памяти.
 
Судя из твоей логики, у тебя там получается, что будет создаваться каждый раз новый объект, при нажатие клавиши... Это неприемлемо для памяти.
Все зависит от того, где и как нужно, чтобы он был передан в метод для использования. И да ты наверное просто не так понял я не про нажатия клавиш писал а про экземпляр "world".
 
60
6
31
Тебя я правильно понял). Своим сообщением, там я комментировал этот код

Java:
public class KeysInputHandlers {
    @SubscribeEvent
    public void onKeyInput(TickEvent.ClientTickEvent event) {
        EntityPlayer player = Minecraft.getMinecraft().thePlayer;

        if(MyOpenMods.keyBindings.isPressed()) {
            BlockPos BlockPositions = new BlockPos(player.posX, player.posY, player.posZ);

            if(world.getBlockState(BlockPositions).getBlock() == Blocks.stone || world.getBlockState(BlockPositions).getBlock() == Blocks.obsidian){

            }
        }
    }
}
 
@PlayerLeftClick,
Java:
public class KeyInputHandler {
    @SubscribeEvent
    public void onKeyInput(InputEvent.KeyInputEvent event) {
        EntityPlayer player = Minecraft.getMinecraft().thePlayer;

        if(MyOpenMods.keyBindings.isPressed())
            System.out.println("ping");
            System.out.println(player.posX);

    }

}
У меня есть keyInputHander, он срабатывает при каждом нажатии клавиши. Я получаю сообщение в своей консоли (я использую Intellij IDEA).
[12:56:48] [Client thread/INFO]: [com.mymod.mods.KeyInputHandler:eek:nKeyInput:18]: ping
1234.313234183542
1284.313234183542
Почему любая другая комбинация клавиш, которую я нажимаю (перемещение - пробел и т.д) выдает изменяющиеся позицию.
 
Последнее редактирование:
Сверху