Java摆动假鼠标在Runelite插件



Hey,我一直在互联网上搜索,想让Runelite的插件成为Oldschool Runescape的客户端。我想做一个插件,在那里我可以对抗一些怪物,基本上是一个机器人。我知道还有其他客户端可以更容易地编写机器人脚本。

我的问题是如何制作一个";假的";鼠标,将MouseEvent激发到屏幕上的特定位置,并在插件中实现。我已经看到,我可以创建一个新的MouseEvent并传递X和Y值,但我也需要为此传递一个源。源必须是一个组件。我试着使用这个片段,但是";这个";在插件中不起作用,因为我想它不是一个组件。

我知道我可以使用java.awt中的Robot类来创建鼠标移动等,但这会劫持我在电脑上的鼠标。此外,这是出于教育目的。我只是真的很想知道如何创建一个机器人,总是被创建一个的想法所困扰。

ps:我找到这个视频了。我想创造一些类似的东西,这就是;假的";我是说老鼠。窗户上的十字架。

这是我现在的代码:

package net.runelite.client.plugins.clicktest;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.event.MouseEvent;

@Slf4j
@PluginDescriptor(
name = "ClickTestPlugin",
description = "Plugin for testing MouseEvents in Runelite"
)
public class clicktest extends Plugin {
@Inject
public Client client;

@Inject
public MouseEvent mouseEvent;
public clicktest() {
mouseEvent = new MouseEvent(this, MouseEvent.MOUSE_CLICKED,
System.currentTimeMillis(), 0, 10, 10, 1, false);
}
}

由于没有其他人回来,我会努力为您指明正确的方向,尽管我也不确定是否有库或方法可以在不劫持鼠标的情况下做到这一点。除了机器人,还有其他方法,比如预定的执行器,但它仍然会劫持你的鼠标。有很多免费转发使用runelite的API来制作机器人并与游戏互动,让你不必担心点击特定坐标。使用这些作为参考将帮助你达到你想去的地方!

有些有不同的方法,我见过一些不会劫持你的鼠标。然而,这些都不是开源的(至少从我的发现来看(。我将在这里粘贴一些例子。就像我一开始所说的,我对如何创建一个可以覆盖你的鼠标移动并独立于你的鼠标点击的机器人程序不是很有信心,但这里有一些其他机器人程序的例子。

下面显示的第一个插件使用这种方法,例如:

executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(this::simLeftClick, delay, TimeUnit.MILLISECONDS);

AutoPrayFlick-https://github.com/Ganom/ExternalPlugins/blob/master/AutoPrayFlick/src/main/java/net/runelite/client/plugins/externals/autoprayflick/AutoPrayFlickPlugin.java

ItemDropper-https://github.com/Failed4life/ExternalPlugins/blob/master/ItemDropper/src/main/java/net/runelite/client/plugins/externals/itemdropper/ItemDropper.java

OneClick-此项仅使用API,不需要任何鼠标模拟!https://github.com/Ganom/ExternalPlugins/blob/master/OneClick/src/main/java/net/runelite/client/plugins/externals/oneclick/OneClickPlugin.java

如果使用机器人或类似的东西,考虑检测可能是明智的,使用这样的东西将有助于使你的动作人性化

https://github.com/JoonasVali/NaturalMouseMotion

p.S我建议看看github所有的开源repos,以了解人们是如何做事情的,这就是我熟悉API及其用法的方式!

您的mouseEvent组件错误。'this应该替换为client.getCanvas((.

mouseEvent = new MouseEvent(client.getCanvas(), MouseEvent.MOUSE_CLICKED,
System.currentTimeMillis(), 0, 10, 10, 1, false);

这就是让虚拟鼠标点击工作的全部内容。

通常,当您需要模拟点击时,您会使用Windows API之类的方法,但RuneLite是RuneScape的第三方客户端,RuneScappe是一个Java应用程序。游戏窗口只是一个画布,RuneLite是一个开源软件,它在客户端类getCanvas((中公开了这个画布。

游戏自动化很简单,只需将事件发送到此画布即可,例如:

public void sendMoveEvent(int x, int y) {
Point point = new Point(x, y);
SwingUtilities.convertPointToScreen(point, canvas);
canvas.dispatchEvent(new MouseEvent(canvas, MouseEvent.MOUSE_MOVED, System.currentTimeMillis(), 0, x, y, point.x, point.y, 0, false, 0));
}

您可以找到更多关于在线调度事件的信息,但是,鉴于预期用途,我建议您使用RuneLite API设置插件。在插件中,您可以注册MouseListener。记录事件的数据,你可以研究,而不是模拟,事件应该是什么样子。

最新更新