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

Проверка на возможность установки блока

Discussion in 'Разработка плагинов для новичков' started by Lignium, Mar 17, 2017.

Thread Status:
Not open for further replies.
  1. Автор темы
    Lignium

    Lignium Участник Пользователь

    Trophy Points:
    31
    Имя в Minecraft:
    Lignium
    Здравствуйте! Как проверить, можно ли блок поставить над другим блоком? Например, факел на горшке поставить нельзя, он дропется.
     
    Last edited: Mar 17, 2017
  2. Хостинг MineCraft
    <
  3. Stamorey

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

    Trophy Points:
    66
    Имя в Minecraft:
    Stamorey
    Поподробнее, для чего тебе это надо, если в ядре уже есть эта проверка.
    И насколько мне известно, блоки вообще не ставятся.
    Если факелом нажать пкм на ступеньки например - ничего не произойдет
     
  4. TheZefirrkka

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

    Trophy Points:
    76
    Skype:
    RomaMamkinHasker1337
    Имя в Minecraft:
    TheZefirrkka
    Никак, только костыли.
     
  5. Dymeth

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

    Trophy Points:
    76
    Это скорее всего на клиенте проверяется, а не на сервере
     
  6. TheZefirrkka

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

    Trophy Points:
    76
    Skype:
    RomaMamkinHasker1337
    Имя в Minecraft:
    TheZefirrkka
    +
     
  7. Stamorey

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

    Trophy Points:
    66
    Имя в Minecraft:
    Stamorey
    всетаки какая-то проверка на сервере есть, если через set поставить например кнопку в воздухе или на блок, на который обычным кликом она не ставится, после пкм или лкм по ней, и она дропнется (тоесть то что и описал автор, только ставить не рукой и дропается только после клика)
     
  8. Dymeth

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

    Trophy Points:
    76
    А, ну да, логично
     
  9. Stamorey

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

    Trophy Points:
    66
    Имя в Minecraft:
    Stamorey
    вот один из них)

    cord* - координаты точки в трехмерном пространстве, тип - float/double
    AxisAlignedBB - кубоид , в примере задается двумя парами координат XYZ

    World xWorld = player.getWorld();
    WorldServer Wser =((CraftWorld)xWorld).getHandle();
    AxisAlignedBB bb= AxisAlignedBB.a(cordX, cordY, cordZ, cordX, cordY, cordZ);
    List mega = Wser.a(bb);
    if(!mega.isEmpty()){
    p.sendMessage("Лист не пустой, в данной точке есть какой-то блок!");
    }[
    /SPOILER]
    Вместо cord* подставить координаты плоскости за проверяемым блоком, паралельно одной из граней.
     
  10. Blc_Dragon

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

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon
    чел, это проверка на наличие физической части блока в некоем объеме пространства, но это никак не проверка возможности установки блока.
     
  11. Stamorey

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

    Trophy Points:
    66
    Имя в Minecraft:
    Stamorey
    это проверка на кубоид, который прорисовывается когда смотришь на блок[DOUBLEPOST=1490251360,1490251224][/DOUBLEPOST]Все равно автор так и не ответил для чего это ему. И почему именно над блоком
     
  12. Blc_Dragon

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

    Trophy Points:
    76
    Имя в Minecraft:
    Blc_Dragon
    ну и как ты с помощью своей проверки узнаешь, получится ли поставить факел над ступенькой. или кактус рядом с блоком?
     
  13. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Проорал в голос, зачем проверять то, чего и так нельзя?
     
  14. Автор темы
    Lignium

    Lignium Участник Пользователь

    Trophy Points:
    31
    Имя в Minecraft:
    Lignium
    В моём плагине при разрушении земли, одно из действий - это размещение цветочного горшка вместо этой земли. Этот горшок особым образом регистрируется в плагине... Если он сам по себе дропнется, при конфликте с нижним блоком, программа не обработает это, в итоге выливаются производные баги, типа горшка нет, а указатель Block остался во множестве блоков.
     
  15. XjCyan1de

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

    Trophy Points:
    76
    Имя в Minecraft:
    XjCyan1de
    В чем проблема проверять наличие блока под горшком?
     
  16. Dymeth

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

    Trophy Points:
    76
    В множестве несовместимых комбинаций:
    горшок - воздух, факел - ступеньки, кактус - вода
     
  17. Автор темы
    Lignium

    Lignium Участник Пользователь

    Trophy Points:
    31
    Имя в Minecraft:
    Lignium
    В общем я решил эту проблему (не идеально, но решил). Для проверки блока использовал метод Material.isOccluding(). Как я понял, он проверяет является блок (его материал) целостным, то есть становится ли блок частью геометрии мира, когда невидимые грани блоков удаляются. Например, если поставить тропу (дорожка) поверх блока земли и посмотреть внутренности этой конструкции с помощью режима наблюдателя, можно заметить, что невидимая сторона блока земли не удалена, так как тропа не является "occluding". А вот если тропу заменить другим целостным блоком, той же землей, верхняя поверхность нижнего блока исчезнет, как и нижняя верхнего блока.
    Получается горшок не будет конфликтовать с этим классом блоков.[DOUBLEPOST=1497966584,1497966463][/DOUBLEPOST]Возможно я ошибаюсь, исправьте кто знает :)
     
Thread Status:
Not open for further replies.

Share This Page