ProtocolLib icon indicating copy to clipboard operation
ProtocolLib copied to clipboard

Input Handling in 1.21.2+

Open Ste3et opened this issue 1 year ago • 5 comments

  • [ x] This feature is not currently present in a development build

Is your feature request related to a problem? Please describe. The PacketType.Play.Client.STEER_VEHICLE works internal with net.minecraft.world.entity.player.Input and the set/get methode inside PacketContainer is mising and there isn't a data type present.

Describe the solution you'd like Please add an function to get the Player Input and work with an Wrapped Object

Error Log from 1.21.3 Error Log

1.21.3 Internal Code from ServerboundPlayerInputPacket Screenshot 2024-11-05 164354 1.21.1 Internal Code from ServerboundPlayerInputPacket Screenshot 2024-11-05 164510

Ste3et avatar Nov 05 '24 15:11 Ste3et

Try something like this:

            PacketContainer packet = event.getPacket();
            InternalStructure input = packet.getStructures().read(0);
            boolean forward = input.getBooleans().read(0);
            boolean backward = input.getBooleans().read(1);
            boolean left = input.getBooleans().read(2);
            boolean right = input.getBooleans().read(3);
            boolean space = input.getBooleans().read(4);
            boolean shift = input.getBooleans().read(5);

Brokkonaut avatar Nov 15 '24 07:11 Brokkonaut

Yep, that works. Is the package still sent multiple times when i keep like W pressed?

Lorenzo0111 avatar Nov 15 '24 16:11 Lorenzo0111

Try something like this:

            PacketContainer packet = event.getPacket();
            InternalStructure input = packet.getStructures().read(0);
            boolean forward = input.getBooleans().read(0);
            boolean backward = input.getBooleans().read(1);
            boolean left = input.getBooleans().read(2);
            boolean right = input.getBooleans().read(3);
            boolean space = input.getBooleans().read(4);
            boolean shift = input.getBooleans().read(5);

Thank you @Brokkonaut i forget about it, atm i have so much trouble with my shool that i make simultaneously as my fulltime job

Ste3et avatar Nov 16 '24 19:11 Ste3et

Hello everyone !

Thank you very much for what you said, it helped me a lot. However, I have a problem, I cannot cancel the output of my player when he presses the sneak key.

To give context, the player is on a sheep that is moving on its own and I want to cancel the dismount.

Could you help me?

Thanks again for your help <3

Old code (1.20.6):

class MPackets {

    static void disablePL() {
        ProtocolLibrary.getProtocolManager().removePacketListeners(GMoutrun.getPlugin());
    }

    static void packetListeners() {
        ProtocolLibrary.getProtocolManager().addPacketListener(
                new PacketAdapter(GMoutrun.getPlugin(), PacketType.Play.Client.STEER_VEHICLE) {
                    @Override
                    public void onPacketReceiving(PacketEvent event) {
                        var packet = event.getPacket();
                        var sheepController = SheepController.get(event.getPlayer());
                        if(sheepController==null) return;
                        event.setCancelled(true);
                        packet.getModifier().writeDefaults();
                        sheepController.setSideway(packet.getFloat().read(0));
                    }
                });
    }
}

New code for 1.21.3 :

class MPackets {

    static void disablePL() {
        ProtocolLibrary.getProtocolManager().removePacketListeners(GMoutrun.getPlugin());
    }

    static void packetListeners() {
        ProtocolLibrary.getProtocolManager().addPacketListener(
                new PacketAdapter(GMoutrun.getPlugin(), PacketType.Play.Client.STEER_VEHICLE) {
                    @Override
                    public void onPacketReceiving(PacketEvent event) {
                        PacketContainer packet = event.getPacket();
                        var sheepController = SheepController.get(event.getPlayer());
                        if(sheepController == null) return;
                        event.setCancelled(true);
                        InternalStructure input = packet.getStructures().read(0);
                        boolean left = input.getBooleans().read(2);
                        boolean right = input.getBooleans().read(3);
                        boolean space = input.getBooleans().read(4);
                        boolean shift = input.getBooleans().read(5);

                        float sideway = 0;
                        if (left) sideway++;
                        if (right) sideway--;

                        input.getBooleans().write(5, false);
                        packet.getModifier().writeDefaults();
                        sheepController.setSideway(sideway);
                    }
                });
    }
}

TheCalypso avatar Jan 06 '25 18:01 TheCalypso

update: I use EntityDismountEvent for cancel this event.

TheCalypso avatar Jan 08 '25 14:01 TheCalypso