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

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

Discussion in 'Разработка плагинов для новичков' started by kvqplay, Jan 5, 2015.

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

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

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

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

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

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

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

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

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

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

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

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

    Trophy Points:
    173
    Skype:
    shkurovs
    Эээ, что?
     
  8. UniWest

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

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

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

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

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

    Trophy Points:
    66
    Имя в Minecraft:
    kvq_play

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Trophy Points:
    66
    Имя в Minecraft:
    kvq_play
    Попытался найти несколько блоков вокруг игрока , столкнулся с проблемой что если я пытаюсь сдвинутся на несколько блоков в минус то
    Code:
            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
    Code:
            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 Старожил Пользователь

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

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

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

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

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

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

Share This Page