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

问题描述 投票:3回答:4

总而言之,我正在尝试以编程方式-从外部控制Minecraft播放器的方向。

没有API,没有Java Mod到游戏环境

通常,这需要鼠标的移动,但是我尝试过的模拟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)

石英根本不做任何事情:

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页上的说明,我对此感到很难过。它表示“所有鼠标设备上的全局事件钩子(捕获事件,而与焦点无关)”。然后我以为,《我的世界》以某种方式独自吸收了所有模拟的鼠标移动。无论哪种方式,我都没有为此游戏使用正确的界面,并且我需要一些可以绕过Minecraft有趣的鼠标控件来获得所需动作的东西。

我什至尝试使用mouse keys(mac的鼠标移动辅助功能,使您仅用键即可控制鼠标)以及pyautogui。

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鼠标输入的方法。在这一点上,我很确定在我提供给计算机的输入类型上必须有一些区别。作为一个程序,Minecraft不像其他程序那样使用鼠标,而python鼠标不像其他来源那样控制鼠标,因此存在断开连接的情况。

我正在全屏和窗口模式下运行Minecraft的macOS High Sierra上,尽我所能使它正常运行。我将在PyCharm中启动测试脚本(python 3.6),将窗口(或窗口焦点)更改为Minecraft(在程序中具有足够的延迟时间),然后见证发生了什么。在带有pyautogui的Minecraft中,鼠标单击,键盘按键乃至涉及命令和转义键的热键都可以正常工作,因此我完全不用担心这些。实际上,只是鼠标移动没有任何作用。

首先,这是问这个问题的正确地方吗?还有什么可以尝试的,或者我缺少重要的东西,可以让我的鼠标输入正确响应吗?

python macos mouse minecraft pyautogui
4个回答
1
投票

我的处境与您相似。我也找不到一种方法来注册我的游戏(例如,《我的世界》)中的鼠标移动。

但是,我了解到您可以使用Java和内置的机器人库来实现所需的鼠标移动。我不知道您是否在python上设置,但如果不设置,则值得一试。


1
投票

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

对我有用的是将pynput与相对的鼠标命令一起使用。还需要在Minecraft设置中关闭“原始输入”。 [Esc->选项...->控件...->鼠标设置...->原始输入:OFF]

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


0
投票

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


0
投票

我设法使其与鼠标库一起使用。我没有使用mouse.move(x,y,absolute,duration),而是使用了mouse._os_mouse.move_to(x,y)mouse._os_mouse.move_relative(x,y)。请注意,如果要获得平滑效果,则必须使用time.sleep(s)之类的方法自己实现。

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