提问者:小点点

如何使用Python控制Minecraft中的鼠标?


通常这需要移动鼠标,但是我尝试过的模拟python3库的每一个鼠标移动都不会在游戏中移动玩家的头。每个图书馆也做不同的事情。

例如,在脚本完成后手动移动鼠标之前,pyautogui不会执行任何操作。这样做会将玩家的视图猛拉到程序应该将其移动到的位置,然后继续跟随当前的鼠标移动。这两个鼠标命令都会发生。

import pyautogui

pyautogui.moveTo(500, 500)
pyautogui.moveRel(100, 100)  

pynput库与pyautogui具有相同的奇怪结果:

from pynput.mouse import Controller

mouse = Controller()

mouse.position = (100, 200)
mouse.move(200, -100)

Quartz根本不做任何事情:

import Quartz

class Mouse():
    down = [Quartz.kCGEventLeftMouseDown, Quartz.kCGEventRightMouseDown, Quartz.kCGEventOtherMouseDown]
    up = [Quartz.kCGEventLeftMouseUp, Quartz.kCGEventRightMouseUp, Quartz.kCGEventOtherMouseUp]
    [LEFT, RIGHT, OTHER] = [0, 1, 2]

    def click_pos(self, x, y, button=LEFT):
        self.move(x, y)
        self.click(button)

    def to_relative(self, x, y):
        curr_pos = Quartz.CGEventGetLocation( Quartz.CGEventCreate(None) )
        x += curr_pos.x;
        y += curr_pos.y;


mouse = Mouse()
mouse.to_relative(200, 200)

python鼠标库已经过时了:错误表明它只能在Darwin上运行(我在macOS High Sierra上)。由于Github页面上的描述,我很难过地了解到这一点。它说“所有mice设备上的全局事件挂钩(捕获事件而不考虑焦点)”。然后我想,不知何故,Minecraft自己在吸收所有的模拟鼠标动作。无论如何,我没有为这个游戏使用正确的界面,我需要一些可以绕过Minecraft有趣的鼠标控制来获得我想要的移动。

我甚至试着在pyautogui中使用鼠标键(mac的鼠标移动辅助功能,可以让你只用键来控制鼠标)。

import pyautogui # with mouse keys on
import time
# mouse keys is an accessibility feature on mac that controls the mouse with the keyboard

print("[ALERT]: Make sure mouse keys is on! (press option 5 times if shortcut is enabled)")

pyautogui.keyDown('8')  # up in mouse keys
time.sleep(5)
pyautogui.keyUp('8')

我对最后一个不起作用并不感到特别惊讶,但是我想我已经没有办法尝试绕过任何让《我的世界》不接受我的蟒蛇鼠标输入的东西了。在这一点上,我很确定我给计算机的输入类型一定有一些区别。Minecraft作为一个程序并不像其他程序那样使用鼠标,Python鼠标也不像其他资源那样控制鼠标,所以存在断开。

我在macOS High Sierra上以全屏和窗口模式运行Minecraft,尽我所能让它正常运行。我将在PyCharm中启动测试脚本(Python3.6),将窗口(或窗口焦点)更改为Minecraft(在程序中有足够的延迟时间),然后见证发生了什么。鼠标点击、键盘按下,甚至包括命令键和转义键的热键都可以在Minecraft和pyautogui中正常工作,所以我一点也不担心这些。实际上,鼠标的移动并没有起到任何作用。

首先,这里问这个问题合适吗?还有什么可以尝试的吗,或者我错过了一些关键的东西,可以让我的鼠标输入得到正确的响应?


共3个答案

匿名用户

我正在尝试做同样的事情,我让我的在Minecraft(Java版)中移动视图。

对我来说,使用pynput和相关的鼠标命令是有效的。它还需要在Minecraft设置中关闭“原始输入”。[Esc-

import pynput
mouse = pynput.mouse.Controller()
mouse.move(10, 10)

此外,如果有人想要的话,这里是鼠标平稳移动的开始:

def move_smooth(xm, ym, t):
    for i in range(t):
        if i < t/2:
            h = i
        else:
            h = t - i
        mouse.move(h*xm, h*ym)
        time.sleep(1/60)

move_smooth(2, 2, 40)

现在,试着让键盘工作: P

匿名用户

我的处境与你相似。我也找不到在诸如minecraft之类的游戏中注册鼠标移动的方法。

但是,我了解到,您可以使用Java和内置的robot库来实现所需的鼠标移动。我不知道您是否已开始使用python,但如果没有,则值得一看。

匿名用户

尝试以管理员身份运行python,并在窗口模式下运行游戏。那么Pyautogui应该可以工作了。