java AWT mousePress()和keyPress()在Minecraft Forge中并不像我期望的那样工作
我尝试使用awt。Robot以编程方式创建鼠标和按键事件。问题在于关键事件处理不当或未得到处理。 没有错误消息。代码如下:
package com.ClCH38.CC_Macro.TDI;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
public class Tdi {
Robot robot;
Tdi tdi;
public Tdi() {
try {
robot = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
}
public void directInputKey() {
try {
robot.keyPress(KeyEvent.VK_1); // Choose slot 1. Work fine
Thread.sleep(50);
robot.keyRelease(KeyEvent.VK_1);// Needed to release key
Thread.sleep(50);
robot.keyPress(KeyEvent.VK_2); // Choose slot 2.@
The item is put in hand, but slot 1 is seems always selected
Thread.sleep(50);
robot.keyRelease(KeyEvent.VK_2);// Needed to release key
Thread.sleep(50);
robot.keyPress(KeyEvent.VK_1); // Choose slot 1 Don’t change anything
Thread.sleep(50);
robot.keyRelease(KeyEvent.VK_1);// Needed to release key
Thread.sleep(50);
robot.keyPress(KeyEvent.VK_S); // Move player back Don’t work
Thread.sleep(50);
robot.keyRelease(KeyEvent.VK_S);// Needed to release key
Thread.sleep(50);
robot.mousePress(MouseEvent.BUTTON3_DOWN_MASK);// Place block
Thread.sleep(50);
robot.mouseRelease(MouseEvent.BUTTON3_DOWN_MASK); // mouse button 3 is for AWT mouse right button
Thread.sleep(50);
robot.mousePress(MouseEvent.BUTTON3_DOWN_MASK);// Don’t work
Thread.sleep(50);
robot.mouseRelease(MouseEvent.BUTTON3_DOWN_MASK);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
我在MacOS10.10.9和Java8上工作
# 1 楼答案
Forge不会实时处理按键和鼠标事件
游戏以每秒20次的“滴答声”运行。两者之间的所有交互都保存在缓冲区中
从
org.lwjgl.input.Mouse;
检索鼠标事件例如,我在鼠标上使用的是:
所以你要看到的是如何将自定义项添加到鼠标缓冲区
关于如何处理键盘事件,我建议你看看minecrafts GuiChat。爪哇
在锻造厂。eclipse中的jar(如果使用eclipse)
查看他们从哪里读取输入,并将您的bufferend输入添加到那里
另外,不要使用线程!只要把你的活动放在售票口就行了