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

Как происходит подбор предмета?

Тема в разделе "Разработка плагинов для новичков", создана пользователем Ission, 6 фев 2019.

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

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

    Баллы:
    173
    Skype:
    lokivava
    Уважаемые, в силу своей лени и нежелания продолжать копать исходники ядра без какого-либо осмысления, прошу откликнуться тех, кто знает.
    Суть в заголовке. Как происходит подбор предмета на уровне общения клиент<->сервер, какие пакеты отправляют, как определяют и т.п. Интересует серверная сторона, в качестве клиента ванильный клиент.


    Сервер каждый тик движения проверяет на сущности игрока все сущности в радиусе 1-го блока от игрока, расширяя его BoundBox до соответствующих размеров. Далее у каждой сущности вызывается метод взаимодействия с сущностью типа человек (EntityHuman). У предметов, стрел, сфер опыта (может что-то ещё) в этом методе вызывается обработчик подбора, который отправляет на клиент пакет PacketPlayOutCollect. Далее предмет обрабатывает своё докладывание в инвентарь игрока.
     
    Последнее редактирование: 7 фев 2019
  2. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
  3. Автор темы
    Ission

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

    Баллы:
    173
    Skype:
    lokivava
    Это, конечно, здорово, но что делает сервер перед этим пакетом? В моём случае этот пакет не отправляется.
     
  4. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Ты вроде бы в посте уже описал, что делает сервер перед этим, не? Или что тебя интересует
     
  5. Автор темы
    Ission

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

    Баллы:
    173
    Skype:
    lokivava
    Да вот ищу, никак понять не могу. Мне нужна вся цепочка, но, как оказывается, не всё так очевидно и просто. Как я понимаю, сервер не делает это каждый тик движения. В общем чем дальше ковыряюсь, тем безумнее это всё кажется. А вопрос задал на тот случай, если тут найдётся кто-нибудь, кто в этом уже разбирался. Всё таки я не считаю себя гениальным мыслителем, чтобы придумывать что-то поистине уникальное.
     
  6. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Ну так в дебаггер зайди, брейк поинт нацепи на инстаниирование пакета и увидешь весь стактрейс
     
  7. Автор темы
    Ission

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

    Баллы:
    173
    Skype:
    lokivava
    Ага. Он не инстанцируется. Вообще не создаётся. Ещё идеи?
     
  8. Автор темы
    Ission

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

    Баллы:
    173
    Skype:
    lokivava
    Всё, я допёр в причинах проблемы. Она была, в общем, не с этим связана и то, что написано вверху -- действительно именно так всё и работает, дальше просто предмет собирается в инвентарь, вызывая соответствующие методы.
    Моя проблема была в том, что NetworkManager завязан не только в PlayerConnection, но ещё много где. Я, сделав обёртку на него, оборвал несколько других связей с различными объектами, как результат началось UB (если в java это так называется).
     
    Последнее редактирование: 7 фев 2019

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