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

Помогите Как сделать чтобы хитбоксы были связаны между собой?

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

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

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

    Баллы:
    76
    Мне нужно чтобы 3-4 энтити при передвижении моба (при телепорте игроком, при толкании из стороны в сторону) передвигались вместе с ним, как это сделано например с никнеймом. При том способ садить их друг на друга плохая идея, потому что при телепорте игроком, они могут друг с друга встать. Можно ли как-то это реализовать? По факту это должен быть энтити с несколькими хитбоксами.
     
  2. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Хитбоксы то client-side, их объединить нельзя.
    Во всяком случае, ты можешь отслеживать эти телепорты и садить обратно.
    Надписи над никами делают очень хитро, при отправке пакета перемещения игрока другим игрокам, отправляется ещё и перемещение стенда, поэтому для других игроков выглядит, будто надписи статичные с игроком. Можно, наверное, таким способом делать то, что ты хочешь.
     
  3. NoLogic

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

    Баллы:
    66
    Если ты на новых версиях, то можешь расширить хитбокс энтити с помощью Interaction.
     
  4. Автор темы
    VladNotch

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

    Баллы:
    76
    Можно по подробнее пожалуйста?
     
  5. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Ого, это когда такую штуку добавили? Весьма полезный функционал
     
  6. NoLogic

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

    Баллы:
    66
    1.19.4 вроде бы.

    В общем, Interaction — это такая энтитя, у которой регулируется размер. С помощью нехитрого шаманства и ковыряния можно закрепить её на любой энтите и «расширить» хитбокс. Это можно было сделать и раньше с помощью обычных невидимых арморстендов, но с Interaction это делать, в теории, гораздо удобнее. Вообще, советую почитать про дисплеи (item display, block display, text display). Тема новая, но многообещающая.
     
  7. Автор темы
    VladNotch

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

    Баллы:
    76
    Мне даже интересно, с помощью какого нехитрого шаманства и ковыряния можно ее закрепить к любому энтити? Если его нужно садить через passanger, то есть ли в этом смысл?
     
  8. NoLogic

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

    Баллы:
    66
    Ну да, а как ещё. Мы ж под баккит костыли пишем.
     
  9. Автор темы
    VladNotch

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

    Баллы:
    76
    А можно сделать чтобы он мог сидеть на одном энтити, но при этом имел какое-то отклонение? То есть не сидел именно на голове, а где-нибудь справа от него.
     
  10. NoLogic

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

    Баллы:
    66
    Извини, не знаю. Погуглил про оффсеты пассажиров и немного про плагины, где можно кататься на эндер-драконе, но готового решения не нашёл. Истина где-то рядом.
     
  11. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Так оффсеты пассажиров по идее захардкожены на клиенте. Или я ошибаюсь?
     
  12. Автор темы
    VladNotch

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

    Баллы:
    76
    Это значит придется прибегнуть к NMS?
     
  13. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Хитбоксы на клиенте, то никакими пакетами их не изменить. В протоколе не нашёл упоминаний hitbox'ов или boundingbox'ов.
    Но выше ещё шла речь про сущность Interaction, которую добавили в 1.19.4. Вот ей уже можно менять размеры даже средствами апи: https://jd.papermc.io/paper/1.19/org/bukkit/entity/Interaction.html
     
  14. Автор темы
    VladNotch

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

    Баллы:
    76
    Другой вопрос, имеют ли они такой же функционал, как у арморстенда? Да и мне не размеры нужны, а все таки именно оффсет, чтобы делать смещение головы.
     
  15. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Ну если оффсеты, то простых путей тут нет. Либо моды, либо шейдеры. Ваниль сейчас поддерживает шейдеры, однако там не bukkit api, да и вообще не java. Стоит ли оно того...

    Если не завязываться на механику посадки сущностей друг на друга, то можно перемещать одну сущность за другой без задержки - фактически просто телепортировать. Но на уровне апи будет задержка в 1 тик. Если нужно совсем без задержки, то можно действительно пакетами.

    Расскажи, какая конечная задача, возможно предложим ещё какое-то решение
     
  16. Автор темы
    VladNotch

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

    Баллы:
    76
    Есть n-ое количество арморстендов, которые должны всегда следовать за одним неподвижным слизнем. При том, этого слизня можно будет толкать или, сломав под ним блоки, уронить. Также при необходимости телепортировать через minecraft:tp. Все эти арморстенды должны быть привязаны к этому слизню, чтобы они всегда следовали за ним, и у каждого арморстенда должно быть определенное отклонение, указанное в конфигурации.

    До последнего откладывал эту идею, думал что найдется вариант легче и более адекватнее. Но кажется, мне и в правду придется его пересмотреть.
     
  17. Автор темы
    VladNotch

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

    Баллы:
    76
    Другой вопрос, насколько это будет вызывать лаги? Таких энтити может быть очень много, штук 200-400
     
  18. NoLogic

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

    Баллы:
    66
    Ну. Тебе так или иначе придётся прибегнуть к использованию NMS (а чего тут страшного, кстати, когда есть ремаппер и возможность кодить под чистый код, а не обфускат?), ведь апи для таких целей отсутствует. Но мы всё равно в выигрыше, ведь у Interaction не статический хитбокс и клиент всегда знает размер хитбокса конкретного Interaction. Думаю, там налажено общение через пакет обновления метадаты (или что-то типа того, это вообще дебри игры). Решение точно есть, но его надо придумать. Как Interaction будет вести себя при отрицательных значениях ширины и высоты хитбокса? Можно ли изменить координаты пассажира через рефлексию, обойдя все методы и проверки баккита? Как именно сервер определяет, что энтити является пассажиром и что нужно менять её локацию, когда основная энтитя двигается? Нестандартные проблемы требуют нестандартных решений. Можно только пожелать удачи.
     
  19. NoLogic

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

    Баллы:
    66
    Если все вычисления и симуляции выкинуть в другой тред и не дёргать функцию телепортации по 20 раз за тик, то, думаю, всё будет работать нормально.

    Добавлю, что по-хорошему эти твои энтити не должны тикаться (т. е. никаких проверок коллизий, гравитации, ИИ и т. п.), но я не знаю, можно ли реализовать это плагином. В бумажке точно есть функция отключения тика для арморстэндов (armor-stand-ticks), можешь глянуть её реализацию.
     
    Последнее редактирование: 13 июл 2023
  20. Автор темы
    VladNotch

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

    Баллы:
    76
    А есть ли какой-нибудь альтернативный способ, например проверять любое перемещение главного хитбокса, и вызывать уже этот метод телепортации?
     

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