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

adodvstudios

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Jenka20091
Как подсветить игрока игроку пакетом и потом отменить этот пакет
 
Как подсветить игрока игроку пакетом и потом отменить этот пакет
Пакетом накладываешь на игрока эффект свечения, а информацию отправляешь тому игроку который должен видеть подцветку
 
Пакетом накладываешь на игрока эффект свечения, а информацию отправляешь тому игроку который должен видеть подцветку
Ага не все так просто, любая смена позы скипнет свечение, приседание или еще что то). Тут нужен ивент протоколлиба.
 
Простой путь:
https://www.spigotmc.org/resources/api-glowapi.19422/

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

Сложный путь:
Хранить где-то информацию о том, включена ли твоя подсветка от одного игрока другому.
Слушать пакеты PacketType.Play.Server.ENTITY_METADATA (они же WrapperPlayServerEntityMetadata или PacketPlayOutEntityMetadata). При обработке проверять, включена ли твоя подсветка. Если включена - менять значение, отвечающее за свечение, на true.
Ну, и не забывать отправлять по пакету метадаты самостоятельно при включении/отключении подсветки
Версия 1.12.2 ваш glow api не подойдёт
 
Пакетом накладываешь на игрока эффект свечения, а информацию отправляешь тому игроку который должен видеть подцветку
Почему так сложно написать сразу пакет???
 
Мне нужен только баккит. Без библитек
 
Мне нужен только баккит. Без библитек
Не получится. Пакет то ты отправишь, но стоит игроку сесть или поплыть, загореться в огне и прочие воздейтвия на ентити метадату и ты обосрешься. Потому нужно подписаться на ивент протоколлиба и править метадату там при всех ее изменениях.
 
Почему так сложно написать сразу пакет???
Я выше уже написал название пакета. Но, боюсь, этого будет мало. Там попутно ещё работа с датавотчером и битовой маской. А если совсем без плагинов, то ещё и слушатель/обработчик пакетов свой писать. Работы хватит примерно на всю жизнь.

Мне нужен только баккит. Без библитек
По какой причине?

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

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

Не получится. Пакет то ты отправишь, но стоит игроку сесть или поплыть, загореться в огне и прочие воздейтвия на ентити метадату и ты обосрешься. Потому нужно подписаться на ивент протоколлиба и править метадату там при всех ее изменениях.
Получится. Просто добавить свой обработчик в пайплайн нетти. :cool:
Реально без плагинов получится, как хочет ТС. Правда по своей сути тот же обработчик пакетов + GlowAPI. Да и дай ему Бог сил всё это осилить )
 
Последнее редактирование:
А через Listener никто не думал просто прочитать ивент и если он выполняется выдать эффект свечения?
 
Получится. Просто добавить свой обработчик в пайплайн нетти. :cool:
Реально без плагинов получится, как хочет ТС. Правда по своей сути тот же обработчик пакетов + GlowAPI. Да и дай ему Бог сил всё это осилить )
Получится 100500 таких обрабтчиков, если каждый идиот полезет свой писать. Потому это плохая практика, как и юзанье GlowAPI. И все это говно еще и будет между собой конфликтовать. И так хватает этих протоколхаков, из за которых ивенты протоколлиба не срабатывают.
В любом случае никто не полезет ему это все писать за него.
 
Последнее редактирование:
А через Listener никто не думал просто прочитать ивент и если он выполняется выдать эффект свечения?
Какой эвент? Каким образом выдать?
Вся сложность в том, что ему надо подсветить игрока не для всех, а только для некоторых других игроков.

Получится 100500 таких обрабтчиков, если каждый идиот полезет свой писать. Потому это плохая практика, как и юзанье GlowAPI. И все это говно еще и будет между собой конфликтовать. И так хватает этих протоколхаков, из за которых ивенты протоколлиба не срабатывают.
В любом случае никто не полезет ему это все писать за него.
Ничего там не конфликтует. Да, есть небольшой оверхед, но плохая практика - это писать то, что уже написано и заниматься преждевременными оптимизациями. В данном случае писать имеет смысл только с целью самообучения
 
Какой эвент? Каким образом выдать?
Вся сложность в том, что ему надо подсветить игрока не для всех, а только для некоторых других игроков.


Ничего там не конфликтует. Да, есть небольшой оверхед, но плохая практика - это писать то, что уже написано и заниматься преждевременными оптимизациями. В данном случае писать имеет смысл только с целью самообучения
Я только что понял то что я не правильно вам всё объяснил. Один игрок должен подсветить игрока, но того кого он видит - он не видит. Вобщем подсветку видит один игрок, а не оба
 
Я только что понял то что я не правильно вам всё объяснил. Один игрок должен подсветить игрока, но того кого он видит - он не видит. Вобщем подсветку видит один игрок, а не оба
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("Игрок не загорелся.");
        }
           
    }
 
Назад
Верх