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

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

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

  1. Автор темы
    0xLairon1

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

    Баллы:
    76
    Имя в Minecraft:
    0xLairon1
    Мне нужно проверить при ивенте ломания блока сгенерирован ли он миром или его проставил игрок? Вопрос стоит именно про средства Bukkit. Так как понятное дело можно костыльно кешировать установку блока и забивать этим ОЗУ.
     
  2. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Ну, по большей части никак. Разве что генерировать нетронутую копию мира (или иметь таковую заранее) и сравнивать блоки.
     
  3. Автор темы
    0xLairon1

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

    Баллы:
    76
    Имя в Minecraft:
    0xLairon1
    Плохо, придется кеши делать хотябы темповые(
     
  4. Zuif

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

    Баллы:
    76
    если на сервере есть CoreProtect то можно юзать его
     
  5. Sturm_PT

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

    Баллы:
    76
    > разработка плагинов
    > "средства Bukkit"
    > CoreProtect
    Понял.
     
  6. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    У CoreProtect есть апи.

    Просто ставится плагин и затем при необходимости программно проверяется наличие взаимодействий с блоком.
    Единственное - решение "из коробки" не очень оптимальное, поэтому при большом кол-ве взаимодействий метод их получения начинает вызываться крайне долго. Я для решения проблемы я написал вот такой класс: https://pastebin.com/xENR3VYP
     
    Последнее редактирование: 17 окт 2022
  7. Lemar98

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

    Баллы:
    76
    Есть еще костыльный вариант, может подойти в зависимости от контекста задачи.
    Если игрок ставит блок, вешаешь на него метку. Затем проверяешь наличие таковой у блока где тебе там нужно: есть - блок поставил игрок, нет - мир
     
  8. Автор темы
    0xLairon1

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

    Баллы:
    76
    Имя в Minecraft:
    0xLairon1
    Да действительно, можно использовать CoreProtect, но одна проблема, мне нужно делать действие именно в момент ломания блока, тоесть отменять его или не отменять, а ждать пока там CP загрузит данные из БД не очень
     
  9. Автор темы
    0xLairon1

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

    Баллы:
    76
    Имя в Minecraft:
    0xLairon1
    Разве у блока есть контейнер для этого? Вроде только у предметов и сущностей он есть
     
  10. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    У чанков есть контейнер, можно его использовать при желании.

    Тот код, что я скинул, работает достаточно быстро. Хотя, конечно, это не самый идеальный вариант.
    В теории можно отменять разрушение блока в любом случае, и уже асинхронно выполнять проверку, после чего уже при необходимости удалять блок и спаунить земле его дроп
     
  11. Lemar98

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

    Баллы:
    76
    Да, извиняюсь, контейнеров оно не имеет.
    Тогда варианта два:
    1) хранить локацию и овнера каждого блока у себя в бд
    2) как и писали выше, использовать сторонние апишки, например, coreprotect.
    Или можно через nbtapi вешать на блоки нбтшки. Правда, я с этим практически не работал, поэтому не могу гарантировать надежность и работоспособность такого варианта, но он имеет место быть
     
  12. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    MetaData есть, можно её
     
  13. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Сбрасывается при рестарте.
     
  14. Lemar98

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

    Баллы:
    76
    +1
     

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