1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Как проверить наличие определённого блока в мире?

Тема в разделе "Разработка плагинов для новичков", создана пользователем Ne600, 4 июл 2022.

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

    Ne600 Ньюби Пользователь

    Баллы:
    1
    Необходимо проверить, есть-ли где-то в мире блок (допустим: светокамень).
    Нужно сделать проверку через if...
     
  2. MurlikMurlik

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

    Баллы:
    96
    Block block = Bukkit.getWorld("world").getBlockAt(x, y, z);
    if (block.getType() == Material.GLOWSTONE) {
    //Что то делать
    }
     
  3. Автор темы
    Ne600

    Ne600 Ньюби Пользователь

    Баллы:
    1
    x, y, z - красные (Cannot resolve symbol). Что можно в эти переменные добавить?
     
  4. MurlikMurlik

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

    Баллы:
    96
    Координаты блока
     
  5. Автор темы
    Ne600

    Ne600 Ньюби Пользователь

    Баллы:
    1
    Ну это понятно, но у меня нет определенных координат. Т.е нужно проверить наличие блока не на координатах, а во всем мире
     
  6. Sturm_PT

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

    Баллы:
    76
    Проверить наличие блока в параллелепипеде от x1, y1, z1 до x2, y2, z2

    Код:
    for (int x = x1; x <= x2; x++)
      for (int y = y1;y<=y2;y++)
        for (int z=z1;z<=z2;z++) {
        //сюда код мурлика
        }
    и проверяй нужный тебе кусок мира
     
  7. Автор темы
    Ne600

    Ne600 Ньюби Пользователь

    Баллы:
    1
    Как я понял, предлагается проверять опять-таки определенный кусок мира (определенный координаты). Однако, я не знаю, где именно в мире будет поставлен блок
     
  8. alexandrage

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

    Баллы:
    173
    BlockPlaceEvent
     
  9. Sturm_PT

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

    Баллы:
    76
    Ну, тогда придётся проверять ВЕСЬ мир, т.е. 60кк*60кк*(не помню, сколько теперь высота, раньше была 256)
    Вряд ли тебе надо весь мир, поэтому опиши, что ты хочешь подробнее
     
  10. Автор темы
    Ne600

    Ne600 Ньюби Пользователь

    Баллы:
    1
    У меня есть метод замены блоков в радиусе, он продолжается до определенного радиуса и вызывается при установке определенного блока. Я хочу туда добавить остановку замены блоков, если блока (который вызвал ивент) в мире уже не будет (т.е блок поставили - замена начала происходить... Блок убрали - замена остановилась, а не шла дальше). Надеюсь, вы меня поняли xd
     
  11. Sturm_PT

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

    Баллы:
    76
    1) слушаешь ивент, который тебе скинул александраге. Смотришь тип блока, если то, что надо - п.2
    2) получаешь координаты, считаешь верхние/нижние координаты куба замены, подставляешь в цикл, который я скинул выше

    кодом напишешь сам
     
  12. alexandrage

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

    Баллы:
    173
    BlockPlaceEvent и BlockBreakEvent
     
  13. Автор темы
    Ne600

    Ne600 Ньюби Пользователь

    Баллы:
    1
    А BlockBreakEvent будет работать, если блок (который имеет физику) будет падать на факел? Например, если это блок песка
     
  14. alexandrage

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

    Баллы:
    173
    EntityChangeBlockEvent может отслеживать падающие блоки.
     

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