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

Помогите Как подсветить игрока игроку и потом отменить это

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

Метки:
  1. Автор темы
    adodvstudios

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

    Баллы:
    76
    Имя в Minecraft:
    Jenka20091
    Как подсветить игрока игроку пакетом и потом отменить этот пакет
     
  2. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    Пакетом накладываешь на игрока эффект свечения, а информацию отправляешь тому игроку который должен видеть подцветку
     
  3. alexandrage

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

    Баллы:
    173
    Ага не все так просто, любая смена позы скипнет свечение, приседание или еще что то). Тут нужен ивент протоколлиба.
     
  4. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Простой путь:
    https://www.spigotmc.org/resources/api-glowapi.19422/

    Сложный путь:
    Хранить где-то информацию о том, включена ли твоя подсветка от одного игрока другому.
    Слушать пакеты PacketType.Play.Server.ENTITY_METADATA (они же WrapperPlayServerEntityMetadata или PacketPlayOutEntityMetadata). При обработке проверять, включена ли твоя подсветка. Если включена - менять значение, отвечающее за свечение, на true.
    Ну, и не забывать отправлять по пакету метадаты самостоятельно при включении/отключении подсветки
     
  5. alexandrage

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

    Баллы:
    173
    Ну да ну да, давайте наставим по десять слушателей пакетов, а то сеть игры плохо нагружена :D
     
  6. Автор темы
    adodvstudios

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

    Баллы:
    76
    Имя в Minecraft:
    Jenka20091
    Версия 1.12.2 ваш glow api не подойдёт
     
  7. Автор темы
    adodvstudios

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

    Баллы:
    76
    Имя в Minecraft:
    Jenka20091
    Почему так сложно написать сразу пакет???
     
  8. alexandrage

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

    Баллы:
    173
    Да не сложно, юзай пакет врапер от протоколлиба.
     
  9. Автор темы
    adodvstudios

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

    Баллы:
    76
    Имя в Minecraft:
    Jenka20091
    Мне нужен только баккит. Без библитек
     
  10. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    Потому, что не указана версия сервера в момент отправки сообщения. Учитесь информативно указывать то, что вам нужно.
     
  11. Автор темы
    adodvstudios

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

    Баллы:
    76
    Имя в Minecraft:
    Jenka20091
    Конечно не указана. Да да
     
  12. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    Вы дергайте слова из контекста
     
  13. alexandrage

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

    Баллы:
    173
    Не получится. Пакет то ты отправишь, но стоит игроку сесть или поплыть, загореться в огне и прочие воздейтвия на ентити метадату и ты обосрешься. Потому нужно подписаться на ивент протоколлиба и править метадату там при всех ее изменениях.
     
  14. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Я выше уже написал название пакета. Но, боюсь, этого будет мало. Там попутно ещё работа с датавотчером и битовой маской. А если совсем без плагинов, то ещё и слушатель/обработчик пакетов свой писать. Работы хватит примерно на всю жизнь.

    По какой причине?

    Если включить соображалку и нажать "Version History", то внезапно всё найдётся.

    Время, потраченное на написание собственной библиотеки подобного рода, стоит дороже серверных ресурсов, потраченных на использование ещё одного слушателя пакетов.

    Получится. Просто добавить свой обработчик в пайплайн нетти. :cool:
    Реально без плагинов получится, как хочет ТС. Правда по своей сути тот же обработчик пакетов + GlowAPI. Да и дай ему Бог сил всё это осилить )
     
    Последнее редактирование: 23 июн 2021
  15. SashaBrine

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

    Баллы:
    76
    Имя в Minecraft:
    IJustFortiLive
    А через Listener никто не думал просто прочитать ивент и если он выполняется выдать эффект свечения?
     
  16. alexandrage

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

    Баллы:
    173
    Получится 100500 таких обрабтчиков, если каждый идиот полезет свой писать. Потому это плохая практика, как и юзанье GlowAPI. И все это говно еще и будет между собой конфликтовать. И так хватает этих протоколхаков, из за которых ивенты протоколлиба не срабатывают.
    В любом случае никто не полезет ему это все писать за него.
     
    Последнее редактирование: 23 июн 2021
  17. Абсик

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

    Баллы:
    76
    Имя в Minecraft:
    Abcik
    Предполагаю, что будет моргание
     
  18. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Какой эвент? Каким образом выдать?
    Вся сложность в том, что ему надо подсветить игрока не для всех, а только для некоторых других игроков.

    Ничего там не конфликтует. Да, есть небольшой оверхед, но плохая практика - это писать то, что уже написано и заниматься преждевременными оптимизациями. В данном случае писать имеет смысл только с целью самообучения
     
  19. Автор темы
    adodvstudios

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

    Баллы:
    76
    Имя в Minecraft:
    Jenka20091
    Я только что понял то что я не правильно вам всё объяснил. Один игрок должен подсветить игрока, но того кого он видит - он не видит. Вобщем подсветку видит один игрок, а не оба
     
  20. kungermu

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

    Баллы:
    66
    Имя в Minecraft:
    kungermu
    protocolLib -> WrappedDataWatcher.

    Код:
    public void setGlowing(Player p, Player sendPacket) {
          
            PacketContainer packet = plugin.getProtocolManager().createPacket(PacketType.Play.Server.ENTITY_METADATA);
            packet.getIntegers().write(0, p.getEntityId());
            WrappedDataWatcher watcher = new WrappedDataWatcher();
            Serializer serializer = Registry.get(Byte.class);
            watcher.setEntity(p);
            watcher.setObject(0, serializer, (byte) (0x40));
            packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects());
    
            try {
                plugin.getProtocolManager().sendServerPacket(sendPacket, packet);
            } catch (InvocationTargetException e) {
                getLogger().info("Игрок не загорелся.");
            }
               
        }
     

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