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

Помогите Телепортация пакетами без отставания от игрока. (ProtocolLib)

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

  1. Автор темы
    Абсик

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

    Баллы:
    66
    Имя в Minecraft:
    Abcik
    Всем привет! Очень прошу вашей помощи в решении моего вопроса.
    И так: мне нужно сделать так, чтобы арморстенд телепортировался одновременно с игроком, чтобы не было никаких задержек, как это происходит при телепорте используя PlayerMoveEvent или что-то типа.
    В общем, я знаю, что придется использовать protocolSupport, и на данный момент у меня есть вот такой код.
    Код:
            protocolManager.addPacketListener(new PacketAdapter(this, PacketType.Play.Server.REL_ENTITY_MOVE) {
                public void onPacketSending(PacketEvent e) {
                    
                    
                    Bukkit.broadcastMessage("Пакет отправился игроку: " + e.getPlayer().getName());
                }
            });

    Что делать дальше я не знаю, так как не особо хорошо умею работать с пакетами.

    Кто до сих пор не понял- вот тут хорошо видно, что хитбокс игрока опережает арморстенд при движении, а нужно чтобы пакеты движения отправлялись одновременно.
    [​IMG]
     
  2. Mr Hosting
  3. Dymeth

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

    Баллы:
    76
    Имя в Minecraft:
    Dymeth
    Я думаю, задержка в 1 тик не из-за PlayerMoveEvent, а из-за метода teleport, который по логике добавляет пакет передвижения стенда в очередь, которая отправится на следующий тик.
    Поэтому для начала попробуй в мув эвенте формировать пакеты передвижения стендов. И если не поможет - уже только тогда берись за слушатель пакетов.
    Для удобства работы с протоколлибом рекомендую PacketWrapper.
    По поводу стендов есть два варианта - спаунить их баккитом или создавать фейковые энтити самостоятельно пакетами.
    Первый вариант попроще, но будет рассинхрон позиции стедов на сервере и на клиенте, что не очень хорошо - багов словишь.
    Второй вариант посложнее - придется разбираться ещё и с мета-данными энтити, но с точки зрения багов и серверных ресурсов всё будет чуток получше.
    Хочу предупредить, что для перемещения стендов стоит использовать пакеты перемещения, а не пакеты телепортации.
    А вот при телепортации игрока уже пакеты телепортации стендов. В ядре есть какой-то радиус, при котором вместо первого используется второй. 8 блоков, что ли...
     
  4. alexandrage

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

    Баллы:
    173
    Чушь. Просто нужно посадить стенд на голову игрока. Тогда для игрока это будет совершенно прозрачно.
    player.getPassengers().add(stend);
     
    Последнее редактирование: 9 фев 2019
  5. AbstractCoder

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

    Баллы:
    46
    Имя в Minecraft:
    AbstractCoder
    Крутой дебаг :good:
     

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