Input Handling in 1.21.2+
- [ 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
1.21.1 Internal Code from ServerboundPlayerInputPacket
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);
Yep, that works. Is the package still sent multiple times when i keep like W pressed?
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
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);
}
});
}
}
update: I use EntityDismountEvent for cancel this event.