Привет, пишу бота для игры, для этого создаю три потока, один читает лог(туда приходят сообщения которые бот должен обрабатывать), второй обрабатывает сообщение(принимает решение что надо делать) и заносит в очередь, и третий берет из очереди обработанное сообщение, и начинает его выполнение, а попутно в очередь добавляются другие задачи.
В третьем потоке активно использую класс Robot для установления курсора на нужные координаты, и выполняя действия.
public static void dropToStashFromInventory(){
try {
closeAllWindows();//закрывает открытые окна в игре
Robot robot = new Robot();
robot.mouseMove(977, 486); //открывает сундук
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
//x=1316, y=588 1 inventory slot
for (int i = 0;i<12;i++){//тут бежит по всем слотам инвентаря 12х5
robot.mouseMove(1316 + (50 *i), 578);
for (int j = 0; j<5;j++){
robot.mouseMove(1316 + (50 * i), 578 + (50 * j));
robot.keyPress(KeyEvent.VK_CONTROL);//зажимая control и кликая на слот
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
robot.keyRelease(KeyEvent.VK_CONTROL);
}
}
} catch (AWTException e) {
e.printStackTrace();
}
}
Дело в том, что иногда перед тем как перейти к следующей ячейки инвентаря, он не успевает отжать control, и получается что вместо быстрого скидывания в сундук(с control), он берет вещь под курсор, конечно же это ломает логику бота.
Как мне это исправить/какие альтернативы можно использовать?