@Override
 public ArrowKeyEvent decode(GamePacket packet) {
   GamePacketReader reader = new GamePacketReader(packet);
   int roll = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
   int yaw = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
   return new ArrowKeyEvent(roll, yaw);
 }
 @Override
 public SecondItemActionMessage decode(GamePacket packet) {
   GamePacketReader reader = new GamePacketReader(packet);
   int slot = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
   int id = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
   int interfaceId = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
   return new SecondItemActionMessage(interfaceId, id, slot);
 }
 @Override
 public ThirdObjectActionMessage decode(GamePacket packet) {
   GamePacketReader reader = new GamePacketReader(packet);
   int y = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
   int id = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
   int x = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD);
   return new ThirdObjectActionMessage(id, new Position(x, y));
 }
 @Override
 public FocusUpdateEvent decode(GamePacket packet) {
   GamePacketReader decoder = new GamePacketReader(packet);
   return new FocusUpdateEvent(decoder.getUnsigned(DataType.BYTE) == 1);
 }
 @Override
 public FifthPlayerActionEvent decode(GamePacket packet) {
   GamePacketReader reader = new GamePacketReader(packet);
   int index = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
   return new FifthPlayerActionEvent(index);
 }
 @Override
 public ThirdPlayerActionMessage decode(GamePacket packet) {
   GamePacketReader reader = new GamePacketReader(packet);
   int index = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
   return new ThirdPlayerActionMessage(index);
 }