Помогите Изменение пинга игрока в Tab-List

Leshatopoviy

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
Lyooxa
Всем привет, хотел бы у вас спросить, как можно отловить пакет пинга игрока и подменять его? Допустим в табе у кого-то плохой пинг и у него 1-2 палочки. Это не красиво смотрится и допустим я хочу сделать все палочки
(Это возможно, на 1 сервере уже такое есть)
 
Перехватываешь отправку пакета таблиста, ставишь всем пинг в 0
 
что тебе из выше написанного не понятно? попробуй сам реализовать, по-ходу реализовывания задавай вопросы
ну я крч начал разработку и вопрос у меня во 1) что такое пакеты?
 
ну я крч начал разработку и вопрос у меня во 1) что такое пакеты?
Это какие-то данные, отсылаемые от сервера к клиенту (игроку, играющему на сервере). Ответ взят в bukkit org
 
пакеты это когда покупаешь товар в магазине тебя спрашивают надо пакет говоришь да тебе дают туда складываешь продукты и идёшь домой
 
пакеты это когда покупаешь товар в магазине тебя спрашивают надо пакет говоришь да тебе дают туда складываешь продукты и идёшь домой
А подмена пакета, это когда ты тихо забираешь у кого-то пакет и меняешь содержимое на своё.
 
Недавно делал подобное, только прятал игрока полностью:
ProtocolLib + PacketWrapper (WrapperPlayServerPlayerInfo.java):

PHP:
        Player player; //Твой игрок.
        WrapperPlayServerPlayerInfo wrappingPacket = new WrapperPlayServerPlayerInfo();                           //9999 - уровень пинга.
        List<PlayerInfoData> playerData = Arrays.asList(new PlayerInfoData(WrappedGameProfile.fromPlayer(player), 9999,
                NativeGameMode.fromBukkit(player.getGameMode()),
                WrappedChatComponent.fromText(player.getDisplayName())));
        wrappingPacket.setData(data);
        wrappingPacket.setAction(PlayerInfoAction.UPDATE_LATENCY);
        wrappingPacket.broadcastPacket();

Это пример для одного игрока. В твоем случае лучше обьявить List<PlayerInfoData>, в цикле перебрать всех игроков и засовывать туда по игроку, создавая экземпляры PlayerInfoData (пример выше). Загружаешь потом готовый лист в wrappingPacket через метод setData(...), устанавливаешь экшн wrappingPacket.setAction(PlayerInfoAction.UPDATE_LATENCY) и броадкастишь пакет.
 
Последнее редактирование:
Недавно делал подобное, только прятал игрока полностью:
ProtocolLib + PacketWrapper (WrapperPlayServerPlayerInfo.java):

PHP:
        Player player; //Твой игрок.
        WrapperPlayServerPlayerInfo wrappingPacket = new WrapperPlayServerPlayerInfo();                           //9999 - уровень пинга.
        List<PlayerInfoData> playerData = Arrays.asList(new PlayerInfoData(WrappedGameProfile.fromPlayer(player), 9999,
                NativeGameMode.fromBukkit(player.getGameMode()),
                WrappedChatComponent.fromText(player.getDisplayName())));
        wrappingPacket.setData(data);
        wrappingPacket.setAction(PlayerInfoAction.UPDATE_LATENCY);
        wrappingPacket.broadcastPacket();

Это пример для одного игрока. В твоем случае лучше обьявить List<PlayerInfoData>, в цикле перебрать всех игроков и засовывать туда по игроку, создавая экземпляры PlayerInfoData (пример выше). Загружаешь потом готовый лист в wrappingPacket через метод setData(...), устанавливаешь экшн wrappingPacket.setAction(PlayerInfoAction.UPDATE_LATENCY) и броадкастишь пакет.
Чет дичь. Есть же ивенты. Останется только поправить пинг.
Код:
    public void onPacketSending(PacketEvent event) {
        WrapperPlayServerPlayerInfo packet = new WrapperPlayServerPlayerInfo(event.getPacket());
    }
 
Чет дичь. Есть же ивенты. Останется только поправить пинг.
Код:
    public void onPacketSending(PacketEvent event) {
        WrapperPlayServerPlayerInfo packet = new WrapperPlayServerPlayerInfo(event.getPacket());
    }
Да, так короче. И чтобы поправить пинг, нужно опять же делать коллекцию PlayerInfoData, и пихать туда измененную дату, создавая ее из event.getPlayer(), и после сетать дату.
Все верно? Или есть вариант получше?
 
Да, так короче. И чтобы поправить пинг, нужно опять же делать коллекцию PlayerInfoData, и пихать туда измененную дату, создавая ее из event.getPlayer(), и после сетать дату.
Все верно? Или есть вариант получше?
Можно снять дату с пакета не?
 
Всем привет, хотел бы у вас спросить, как можно отловить пакет пинга игрока и подменять его? Допустим в табе у кого-то плохой пинг и у него 1-2 палочки. Это не красиво смотрится и допустим я хочу сделать все палочки
(Это возможно, на 1 сервере уже такое есть)
В таком случае нахера пинг показывать? Ты совсем поехавший?
 
В таком случае нахера пинг показывать? Ты совсем поехавший?
я в том, чтоб сделать у всех в табе пинг нормаьлный, мне так нужно, ты свой выпендрёж по типу "нахера тебе это" выброси.
 
Недавно делал подобное, только прятал игрока полностью:
ProtocolLib + PacketWrapper (WrapperPlayServerPlayerInfo.java):

PHP:
        Player player; //Твой игрок.
        WrapperPlayServerPlayerInfo wrappingPacket = new WrapperPlayServerPlayerInfo();                           //9999 - уровень пинга.
        List<PlayerInfoData> playerData = Arrays.asList(new PlayerInfoData(WrappedGameProfile.fromPlayer(player), 9999,
                NativeGameMode.fromBukkit(player.getGameMode()),
                WrappedChatComponent.fromText(player.getDisplayName())));
        wrappingPacket.setData(data);
        wrappingPacket.setAction(PlayerInfoAction.UPDATE_LATENCY);
        wrappingPacket.broadcastPacket();

Это пример для одного игрока. В твоем случае лучше обьявить List<PlayerInfoData>, в цикле перебрать всех игроков и засовывать туда по игроку, создавая экземпляры PlayerInfoData (пример выше). Загружаешь потом готовый лист в wrappingPacket через метод setData(...), устанавливаешь экшн wrappingPacket.setAction(PlayerInfoAction.UPDATE_LATENCY) и броадкастишь пакет.
У WrapperPlayServerPlayerInfo нет такого метода. Есть только метод setPing(short) , я сделал, и он выдает мне No field with type int exists in class PacketPlayOutPlayerInfo
 
Назад
Верх