Как управлять мышью в Minecraft с помощью Python? - PullRequest
0 голосов
/ 06 июня 2018

В общем, я пытаюсь программно - и внешне - контролировать ориентацию игрока Minecraft.

Нет API, нет Java-модов для игровой среды

Обычно для этого требуется движениемыши, но каждое движение мыши, имитирующее библиотеку 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 mouse устарела: ошибка показала, что она будет работать только на Darwin (я на macOS High Sierra).Мне было грустно узнавать об этом из-за описания на странице Github .Там написано «Глобальное событие на всех устройствах мыши (захватывает события независимо от фокуса)» .Затем я подумал, что Minecraft каким-то образом поглощает все симулированные движения мыши самостоятельно.В любом случае, я не использую правильный интерфейс для этой игры, и мне нужно что-то, что может обойти интересные элементы управления мышью Minecraft, чтобы получить движение, которое я хочу.

Я даже пытался использовать клавиши мыши (функция доступа 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-mouse.На данный момент, я почти уверен, что должно быть какое-то различие в виде ввода, который я даю компьютеру.Minecraft, как программа, не использует мышь, как другие программы, а мыши Python не управляют мышью, как другие источники, поэтому происходит отключение.

Я нахожусь на моем MacOS High Sierra работаетMinecraft как в полноэкранном, так и в оконном режиме, стараясь изо всех сил, чтобы это работало правильно.Я запусту тестовый скрипт (python 3.6) в PyCharm, поменяю окна (или фокус окна) на Minecraft (с достаточным временем задержки в программе), а затем стану свидетелем того, что происходит.Щелчки мышью, нажатия клавиш и даже горячие клавиши, включающие клавиши Command и Escape, прекрасно работают в Minecraft с pyautogui, так что я не беспокоюсь об этом вообще.Буквально только движение мыши ничего не делает.

Прежде всего, это правильное место, чтобы задать этот вопрос?Есть ли что-то еще, чтобы попробовать, или есть что-то важное, что я упускаю, что позволило бы правильно реагировать на мой ввод мыши?

Ответы [ 3 ]

0 голосов
/ 02 августа 2018

Я нахожусь с вами в подобной ситуации.Я также не смог найти способ регистрировать движения мыши в таких играх, как minecraft.

Однако я узнал, что вы можете использовать Java и встроенную библиотеку роботов для достижения желаемого движения мыши.Я не знаю, установлен ли ты на python, но если нет, стоит проверить.

0 голосов
/ 05 февраля 2019

Мне удалось заставить его работать с библиотекой мыши.Вместо использования mouse.move(x,y,absolute,duration) я использовал mouse._os_mouse.move_to(x,y) и mouse._os_mouse.move_relative(x,y).Примите во внимание, что если вы хотите получить плавный эффект, вам придется реализовать его самостоятельно, используя что-то вроде time.sleep(s).

0 голосов
/ 21 июня 2018

Попробуйте запустить python от имени администратора и запустить игру в оконном режиме.Pyautogui должен работать тогда.

...