95 lines
3.0 KiB
Python
95 lines
3.0 KiB
Python
import subprocess
|
|
import time
|
|
import pyautogui
|
|
from PIL import Image
|
|
|
|
def right_click(x, y):
|
|
move_mouse(x, y)
|
|
print("Performing right click.")
|
|
subprocess.run(['xdotool', 'click', '3']) # Right-click
|
|
|
|
def drag_slider(start_x, start_y, end_x, end_y):
|
|
print("Dragging slider.")
|
|
move_mouse(start_x, start_y)
|
|
subprocess.run(['xdotool', 'mousedown', '1']) # Left mouse button down
|
|
move_mouse(end_x, end_y)
|
|
subprocess.run(['xdotool', 'mouseup', '1']) # Left mouse button up
|
|
|
|
def click(x, y):
|
|
move_mouse(x, y)
|
|
print("Performing left click.")
|
|
subprocess.run(['xdotool', 'click', '1']) # Left-click
|
|
|
|
def shift_click(x, y):
|
|
print("Performing shift click.")
|
|
move_mouse(x, y)
|
|
subprocess.run(['xdotool', 'keydown', 'shift', 'click', '1', 'keyup', 'shift']) # Shift-click
|
|
|
|
def move_mouse(x, y):
|
|
subprocess.run(['xdotool', 'mousemove', str(x), str(y)])
|
|
|
|
def find_color_in_image(target_color, image):
|
|
width, height = image.size
|
|
for x in range(width):
|
|
for y in range(height):
|
|
if image.getpixel((x, y))[:3] == target_color:
|
|
return x, y
|
|
return None, None
|
|
|
|
# finding minecraft window and exit menu screen
|
|
def focus_minecraft_window():
|
|
print("Focusing Minecraft window...")
|
|
subprocess.run(['xdotool', 'search', '--name', 'Minecraft*1.20.2 - Multiplayer (3rd-party-Server)', 'windowactivate', '--sync'])
|
|
time.sleep(2)
|
|
print("Pressing Esc...")
|
|
subprocess.run(['xdotool', 'key', 'Escape'])
|
|
time.sleep(2)
|
|
|
|
# starting trade with trader and going down in the trade list
|
|
def trade_actions():
|
|
right_click(2725, 1203)
|
|
time.sleep(3)
|
|
drag_slider(2600, 1399, 2600, 1408)
|
|
time.sleep(3)
|
|
|
|
# Attempt to find the color
|
|
print("Taking a screenshot for color search...")
|
|
screenshot = pyautogui.screenshot()
|
|
target_color = (222, 227, 114) # The color to search for
|
|
found_x, found_y = find_color_in_image(target_color, screenshot)
|
|
|
|
# Click twice, using found coordinates or fallback if not found
|
|
for _ in range(2):
|
|
if found_x is not None and found_y is not None:
|
|
print(f"Color found at ({found_x}, {found_y}). Clicking at this position.")
|
|
click(found_x, found_y)
|
|
else:
|
|
print("Color not found on the screen. Using fallback coordinates.")
|
|
click(2535, 1421)
|
|
time.sleep(3)
|
|
|
|
# Buy all XP with shift click - done twice
|
|
for _ in range(2):
|
|
click(found_x, found_y)
|
|
shift_click(2994, 1105)
|
|
time.sleep(3)
|
|
|
|
# Exit trader
|
|
print("Pressing 'Esc' key.")
|
|
subprocess.run(['xdotool', 'key', 'Escape'])
|
|
time.sleep(3)
|
|
|
|
# Move to the next trader
|
|
print("Holding 'D' key for a step.")
|
|
subprocess.run(['xdotool', 'keydown', 'd'])
|
|
time.sleep(0.45) # Hold 'D' for 0.45 seconds
|
|
subprocess.run(['xdotool', 'keyup', 'd'])
|
|
time.sleep(3)
|
|
|
|
|
|
# Initial setup
|
|
focus_minecraft_window()
|
|
|
|
# Perform trading actions in a loop
|
|
for _ in range(40): # Number of trades to perform
|
|
trade_actions() |