Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Блок на котором стоит игрок

kvqplay

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
kvq_play
Как определить на каком блоке стоит игрок если он находиться на краю блока ?
 
А никак. Игрок может одновременно стоять на 4х блоках.
Размеры тушки игрока в радиусе примерно 0.3F.
 
А никак. Игрок может одновременно стоять на 4х блоках.
Размеры тушки игрока в радиусе примерно 0.3F.
Это возможно , тем более мне не обязательно нужен точный блок , хотя бы примерно.
 
JavaScript:
p.getLocation.getBlockX();
p.getLocation.getBlockY();
p.getLocation.getBlockZ();
Вроде как-то так. Вам останется только соединить каждую координату в одну, например, при помощи int. Но поскольку стоит на краю то вместо int лучше float.
 
JavaScript:
p.getLocation.getBlockX();
p.getLocation.getBlockY();
p.getLocation.getBlockZ();
Вроде как-то так. Вам останется только соединить каждую координату в одну, например, при помощи int. Но поскольку стоит на краю то вместо int лучше float.
Эээ, что?
 
Ну как? Мы получаем X Y Z блока, для десятичного вида используем float. Если я написал бред, поправьте меня.
Вы дали правильные методы, но сказали сущий бред. С помощью методов getBlockX и тд можно без лишних расчётов получить блок, на котором игрок стоит.
 
Вы дали правильные методы, но сказали сущий бред. С помощью методов getBlockX и тд можно без лишних расчётов получить блок, на котором игрок стоит.

JavaScript:
p.getLocation.getBlockX();
p.getLocation.getBlockY();
p.getLocation.getBlockZ();
Вроде как-то так. Вам останется только соединить каждую координату в одну, например, при помощи int. Но поскольку стоит на краю то вместо int лучше float.


Меня интересует блок под игроком который мешает ему упасть . Этим p.getLocation.getBlockX(); p.getLocation.getBlockY(); p.getLocation.getBlockZ(); , если сдвинусь на 1 блок вниз и в случае когда игрок находиться с краю блока получу блок воздуха .
 
Последнее редактирование:
Меня интересует блок под игроком который мешает ему упасть . Этим p.getLocation.getBlockX(); p.getLocation.getBlockY(); p.getLocation.getBlockZ(); , если сдвинусь на 1 блок вниз и в случае когда игрок находиться с краю блока получу блок воздуха .
Ну тогда как сказали выше, все 4 блока в радиусе проверять.
 
Стоит проверить 9 координат блоков:
  • варьируя x:
    • x - 1
    • x
    • x + 1
  • и z:
    • z - 1
    • z
    • z + 1
Координату y, думаю, понятно какую взять. Девять, а не 4, имхо, т.к. угол блока, на каком стоит игрок, может быть не 1, а 4 разных. Тут, а общем, есть простор для оптимизаций =)
 
Стоит проверить 9 координат блоков:
  • варьируя x:
    • x - 1
    • x
    • x + 1
  • и z:
    • z - 1
    • z
    • z + 1
Координату y, думаю, понятно какую взять. Девять, а не 4, имхо, т.к. угол блока, на каком стоит игрок, может быть не 1, а 4 разных. Тут, а общем, есть простор для оптимизаций =)
Можно и 4, если определить в какую сторону отклонены координаты игрока.
 
Ребят, не знаю чего вы паритесь - всегда делал через getLocation().add(0,-1,0).getBlock() и работало все как часы...
 
Встань на край блока шифтом и узнай много нового.
Тогда..
Если мы стали на край блока шифтом - это значит что под нами нон-солид блок.
Вокруг любого блока может быть максимум 8 блоков при этом другие non-solid варианты нас не устраивают.
Находим все твердые блоки вокруг getLocation().add(0,-1,0) и находим дистанцию до найменьшего
 
Тогда..
Если мы стали на край блока шифтом - это значит что под нами нон-солид блок.
Вокруг любого блока может быть максимум 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();
loc0 и loc2 в итоге равны ?? Что я делаю не так ?

Пробовал еще так , но тогда все координаты равны 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(...).
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();
Прошу прощения если в коде косяки, пишу без IDE.
 
Попытался найти несколько блоков вокруг игрока , столкнулся с проблемой что если я пытаюсь сдвинутся на несколько блоков в минус то
Код:
        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 и loc2 в итоге равны ?? Что я делаю не так ?

Пробовал еще так , но тогда все координаты равны 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);
Потому что add изменяет текущую локацию и возвращает её же. Перед add используйте clone.
Location.add - добавляет к локации координаты и возвращает её же саму, а тебе нужно делать .clone() — отдельную переменную, и работать с ней: loc0.clone().add(...).
Ай, опоздал.
 
Location.add - добавляет к локации координаты и возвращает её же саму, а тебе нужно делать .clone() — отдельную переменную, и работать с ней: loc0.clone().add(...).
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();
Прошу прощения если в коде косяки, пишу без IDE.
Потому что add изменяет текущую локацию и возвращает её же. Перед add используйте clone.

Ай, опоздал.

Благодарю
 
Location.add - добавляет к локации координаты и возвращает её же саму, а тебе нужно делать .clone() — отдельную переменную, и работать с ней: loc0.clone().add(...).
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();
Прошу прощения если в коде косяки, пишу без IDE.
А диагональки?
c4044c9919.jpg

В таком случае (Если без диагоналей) - можно не костылять с локейшнами а использовать getRelativeBlock
 

Поделиться этой страницей

Назад
Верх