- Баллы
- 66
- Имя в Minecraft
- kvq_play
Как определить на каком блоке стоит игрок если он находиться на краю блока ?
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Это возможно , тем более мне не обязательно нужен точный блок , хотя бы примерно.А никак. Игрок может одновременно стоять на 4х блоках.
Размеры тушки игрока в радиусе примерно 0.3F.
Ну вот и бери 4 блока в радиусе тушки игрока и выбирай какой ты считаешь нужным.Это возможно , тем более мне не обязательно нужен точный блок .
p.getLocation.getBlockX();
p.getLocation.getBlockY();
p.getLocation.getBlockZ();
Эээ, что?Вроде как-то так. Вам останется только соединить каждую координату в одну, например, при помощи int. Но поскольку стоит на краю то вместо int лучше float.JavaScript:p.getLocation.getBlockX(); p.getLocation.getBlockY(); p.getLocation.getBlockZ();
Ну как? Мы получаем X Y Z блока, для десятичного вида используем float. Если я написал бред, поправьте меня.Эээ, что?
Вы дали правильные методы, но сказали сущий бред. С помощью методов getBlockX и тд можно без лишних расчётов получить блок, на котором игрок стоит.Ну как? Мы получаем X Y Z блока, для десятичного вида используем float. Если я написал бред, поправьте меня.
Вы дали правильные методы, но сказали сущий бред. С помощью методов getBlockX и тд можно без лишних расчётов получить блок, на котором игрок стоит.
Вроде как-то так. Вам останется только соединить каждую координату в одну, например, при помощи int. Но поскольку стоит на краю то вместо int лучше float.JavaScript:p.getLocation.getBlockX(); p.getLocation.getBlockY(); p.getLocation.getBlockZ();
Ну тогда как сказали выше, все 4 блока в радиусе проверять.Меня интересует блок под игроком который мешает ему упасть . Этим p.getLocation.getBlockX(); p.getLocation.getBlockY(); p.getLocation.getBlockZ(); , если сдвинусь на 1 блок вниз и в случае когда игрок находиться с краю блока получу блок воздуха .
Можно и 4, если определить в какую сторону отклонены координаты игрока.Стоит проверить 9 координат блоков:
Координату y, думаю, понятно какую взять. Девять, а не 4, имхо, т.к. угол блока, на каком стоит игрок, может быть не 1, а 4 разных. Тут, а общем, есть простор для оптимизаций =)
- варьируя x:
- x - 1
- x
- x + 1
- и z:
- z - 1
- z
- z + 1
Встань на край блока шифтом и узнай много нового.Ребят, не знаю чего вы паритесь - всегда делал через getLocation().add(0,-1,0).getBlock() и работало все как часы...
Тогда..Встань на край блока шифтом и узнай много нового.
Попытался найти несколько блоков вокруг игрока , столкнулся с проблемой что если я пытаюсь сдвинутся на несколько блоков в минус тоТогда..
Если мы стали на край блока шифтом - это значит что под нами нон-солид блок.
Вокруг любого блока может быть максимум 8 блоков при этом другие non-solid варианты нас не устраивают.
Находим все твердые блоки вокруг getLocation().add(0,-1,0) и находим дистанцию до найменьшего
int y = 0;
Location loc0 = p.getLocation().getBlock().getLocation().add(0, -1, 0);
Location loc1 = loc0.add(1, y, 1).getBlock().getLocation();
Location loc2 = loc0.add(-1, y, -1).getBlock().getLocation();
int y = 0;
Location loc0 = p.getLocation().getBlock().getLocation().add(0, -1, 0);
Location loc1 = loc0.add(1, y, 1);
Location loc2 = loc0.add(-1, y, -1);
Location loc0 = p.getLocation().clone().add(0, -1, 0);
Location loc1 = loc0.clone().add(1, 0, 1);
Location loc2 = loc0.clone().add(1, 0, -1);
Location loc3 = loc0.clone().add(-1, 0, 1);
Location loc4 = loc0.clone().add(-1, 0, -1);
Block block1 = loc1.getBlock();
Block block2 = loc2.getBlock();
Block block3 = loc3.getBlock();
Block block4 = loc4.getBlock();
Потому что add изменяет текущую локацию и возвращает её же. Перед add используйте clone.Попытался найти несколько блоков вокруг игрока , столкнулся с проблемой что если я пытаюсь сдвинутся на несколько блоков в минус то
loc0 и loc2 в итоге равны ?? Что я делаю не так ?Код:int y = 0; Location loc0 = p.getLocation().getBlock().getLocation().add(0, -1, 0); Location loc1 = loc0.add(1, y, 1).getBlock().getLocation(); Location loc2 = loc0.add(-1, y, -1).getBlock().getLocation();
Пробовал еще так , но тогда все координаты равны loc0
Код:int y = 0; Location loc0 = p.getLocation().getBlock().getLocation().add(0, -1, 0); Location loc1 = loc0.add(1, y, 1); Location loc2 = loc0.add(-1, y, -1);
Ай, опоздал.Location.add - добавляет к локации координаты и возвращает её же саму, а тебе нужно делать .clone() — отдельную переменную, и работать с ней: loc0.clone().add(...).
Location.add - добавляет к локации координаты и возвращает её же саму, а тебе нужно делать .clone() — отдельную переменную, и работать с ней: loc0.clone().add(...).
Прошу прощения если в коде косяки, пишу без IDE.Java:Location loc0 = p.getLocation().clone().add(0, -1, 0); Location loc1 = loc0.clone().add(1, 0, 1); Location loc2 = loc0.clone().add(1, 0, -1); Location loc3 = loc0.clone().add(-1, 0, 1); Location loc4 = loc0.clone().add(-1, 0, -1); Block block1 = loc1.getBlock(); Block block2 = loc2.getBlock(); Block block3 = loc3.getBlock(); Block block4 = loc4.getBlock();
Потому что add изменяет текущую локацию и возвращает её же. Перед add используйте clone.
Ай, опоздал.
А диагональки?Location.add - добавляет к локации координаты и возвращает её же саму, а тебе нужно делать .clone() — отдельную переменную, и работать с ней: loc0.clone().add(...).
Прошу прощения если в коде косяки, пишу без IDE.Java:Location loc0 = p.getLocation().clone().add(0, -1, 0); Location loc1 = loc0.clone().add(1, 0, 1); Location loc2 = loc0.clone().add(1, 0, -1); Location loc3 = loc0.clone().add(-1, 0, 1); Location loc4 = loc0.clone().add(-1, 0, -1); Block block1 = loc1.getBlock(); Block block2 = loc2.getBlock(); Block block3 = loc3.getBlock(); Block block4 = loc4.getBlock();