Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем kvqplay, 5 янв 2015.

  1. Автор темы
    kvqplay

    kvqplay Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    kvq_play
    Как определить на каком блоке стоит игрок если он находиться на краю блока ?
     
  2. Хостинг MineCraft
    <
  3. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    А никак. Игрок может одновременно стоять на 4х блоках.
    Размеры тушки игрока в радиусе примерно 0.3F.
     
  4. Автор темы
    kvqplay

    kvqplay Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    kvq_play
    Это возможно , тем более мне не обязательно нужен точный блок , хотя бы примерно.
     
  5. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Ну вот и бери 4 блока в радиусе тушки игрока и выбирай какой ты считаешь нужным.
     
  6. UniWest

    UniWest Активный участник Пользователь

    Баллы:
    66
    Skype:
    CrazyLee1337
    Имя в Minecraft:
    Reflect1on
    Код:
    p.getLocation.getBlockX();
    p.getLocation.getBlockY();
    p.getLocation.getBlockZ();
    Вроде как-то так. Вам останется только соединить каждую координату в одну, например, при помощи int. Но поскольку стоит на краю то вместо int лучше float.
     
  7. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Эээ, что?
     
  8. UniWest

    UniWest Активный участник Пользователь

    Баллы:
    66
    Skype:
    CrazyLee1337
    Имя в Minecraft:
    Reflect1on
    Ну как? Мы получаем X Y Z блока, для десятичного вида используем float. Если я написал бред, поправьте меня.
     
    Последнее редактирование: 6 янв 2015
  9. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Вы дали правильные методы, но сказали сущий бред. С помощью методов getBlockX и тд можно без лишних расчётов получить блок, на котором игрок стоит.
     
  10. Автор темы
    kvqplay

    kvqplay Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    kvq_play

    Меня интересует блок под игроком который мешает ему упасть . Этим p.getLocation.getBlockX(); p.getLocation.getBlockY(); p.getLocation.getBlockZ(); , если сдвинусь на 1 блок вниз и в случае когда игрок находиться с краю блока получу блок воздуха .
     
    Последнее редактирование: 6 янв 2015
  11. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Ну тогда как сказали выше, все 4 блока в радиусе проверять.
     
  12. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Стоит проверить 9 координат блоков:
    • варьируя x:
      • x - 1
      • x
      • x + 1
    • и z:
      • z - 1
      • z
      • z + 1
    Координату y, думаю, понятно какую взять. Девять, а не 4, имхо, т.к. угол блока, на каком стоит игрок, может быть не 1, а 4 разных. Тут, а общем, есть простор для оптимизаций =)
     
  13. CraftCoder

    CraftCoder Старожил Пользователь

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Можно и 4, если определить в какую сторону отклонены координаты игрока.
     
  14. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Ребят, не знаю чего вы паритесь - всегда делал через getLocation().add(0,-1,0).getBlock() и работало все как часы...
     
  15. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Встань на край блока шифтом и узнай много нового.
     
  16. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Тогда..
    Если мы стали на край блока шифтом - это значит что под нами нон-солид блок.
    Вокруг любого блока может быть максимум 8 блоков при этом другие non-solid варианты нас не устраивают.
    Находим все твердые блоки вокруг getLocation().add(0,-1,0) и находим дистанцию до найменьшего
     
  17. Автор темы
    kvqplay

    kvqplay Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    kvq_play
    Попытался найти несколько блоков вокруг игрока , столкнулся с проблемой что если я пытаюсь сдвинутся на несколько блоков в минус то
    Код:
            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);
     
  18. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Location.add - добавляет к локации координаты и возвращает её же саму, а тебе нужно делать .clone() — отдельную переменную, и работать с ней: loc0.clone().add(...).
    Код:
            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.
     
  19. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Потому что add изменяет текущую локацию и возвращает её же. Перед add используйте clone.[DOUBLEPOST=1420636237,1420636206][/DOUBLEPOST]
    Ай, опоздал.
     
  20. Автор темы
    kvqplay

    kvqplay Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    kvq_play
    Благодарю
     
  21. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    А диагональки?
    [​IMG]
    В таком случае (Если без диагоналей) - можно не костылять с локейшнами а использовать getRelativeBlock
     

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