Вопрос Как определять самостоятельное движение игрока?

Версия Minecraft
1.16.X

Artur001

Пользователь
Сообщения
13
Всем привет!

Недавно начал писать античит. Появилась проблема (пишу проверку на ходьбу с открытым инвентарём) - игрок может кликать по инвентарю во время "остановки" перед открытием инвентаря. И это считается за нарушение.
Как определять движение игрока "самостоятельное", например когда игрок передвигается по координатам САМ, а не от каких нибудь ударов, взрывов, течений и т.д.
Буду признателен, если кто знает!
 
Советую почитать про пакеты и как их слушать. Тебе нужно читать пакеты PacketType.Play.Client.POSITION, PacketType.Play.Client.LOOK, PacketType.Play.Client.POSITION_LOOK. Написал в стиле ProtocolLib потому что рекомендую его для таких целей. Вот пример кода:
Java:
    @Override
    public void onEnable() {
        ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();

        protocolManager.addPacketListener(new PacketAdapter(this, PacketType.Play.Client.POSITION, PacketType.Play.Client.LOOK, PacketType.Play.Client.POSITION_LOOK) {
            @Override
            public void onPacketReceiving(PacketEvent event) {
                if (event.getPlayer() == null || !event.getPlayer().isOnline()) {
                    return;
                }

                Player player = event.getPlayer();
                UUID playerId = player.getUniqueId();

            }
        });
    }
 
Советую почитать про пакеты и как их слушать. Тебе нужно читать пакеты PacketType.Play.Client.POSITION, PacketType.Play.Client.LOOK, PacketType.Play.Client.POSITION_LOOK. Написал в стиле ProtocolLib потому что рекомендую его для таких целей. Вот пример кода:
Java:
    @Override
    public void onEnable() {
        ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();

        protocolManager.addPacketListener(new PacketAdapter(this, PacketType.Play.Client.POSITION, PacketType.Play.Client.LOOK, PacketType.Play.Client.POSITION_LOOK) {
            @Override
            public void onPacketReceiving(PacketEvent event) {
                if (event.getPlayer() == null || !event.getPlayer().isOnline()) {
                    return;
                }

                Player player = event.getPlayer();
                UUID playerId = player.getUniqueId();

            }
        });
    }
я пишу на PacketEvents, а как я знаю, два API одновременно нельзя использовать в одном проекте. PacketType.Play.Client.POSITION определяет вообще впринципе движение игрока, но мне нужно именно самостоятельное
 
PacketType.Play.Client.POSITION это пакет который отправляется игроком, тоесть его собственное нажатие WASD.
PacketType.Play.Server.POSITION это пакет который отправляет сервер игроку в ходе например взрыва динамита
 
Назад
Сверху Снизу