Java swing fake mouse in Runelite for plugin

问题描述 投票:0回答:2

嘿,我一直在互联网上搜索为 Runelite 制作一个插件作为 Oldschool Runescape 的客户端。我想制作一个插件,我可以在其中与一些怪物战斗,基本上它是一个机器人。我知道还有其他客户端可以更轻松地编写机器人脚本。

我的问题是如何制作一个“假”鼠标,将 MouseEvent 触发到屏幕上的特定位置,并在插件中实现它。我已经看到我可以创建一个新的 MouseEvent 并传递 X 和 Y 值,但我还需要为此传递一个源。源需要是一个组件。我试过使用这个 snippet 但是“这个”在插件中不起作用,因为我猜它不是一个组件。

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

ps:我找到了这个video。我想创建类似的东西,这就是我的意思是“假”鼠标。窗户上的十字架。

这是我现在的代码:

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);
    }
}

java api swing plugins client
2个回答
3
投票

看到没有其他人回来,我会尝试为您指明正确的方向,即使我也不确定图书馆或如何在不劫持鼠标的情况下做到这一点。除了机器人还有其他方法,例如预定的执行程序,但它仍然会劫持您的鼠标。有很多免费的 repos 使用 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,以了解人们是如何做事的,这就是我熟悉 API 及其用法的方式!


0
投票

你的 mouseEvent 组件是错误的。 'this' 应替换为 client.getCanvas()。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.