You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.7 KiB
98 lines
2.7 KiB
if __name__ == '__main__': |
|
print('Run main.py instead.') |
|
exit(1) |
|
|
|
import os |
|
import time |
|
import importlib |
|
|
|
USERNAME = os.environ['USERNAME'] |
|
PASSWORD = os.environ['PASSWORD'] |
|
SERVER = os.environ['SERVER'] |
|
|
|
import monkey_patch # must be before any possible pyCraft imports |
|
|
|
from custom.managers import DataManager, ChunksManager, ChatManager |
|
|
|
from minecraft import authentication |
|
from minecraft.exceptions import YggdrasilError |
|
from minecraft.networking.connection import Connection |
|
from minecraft.networking.packets import Packet, clientbound, serverbound |
|
|
|
from custom.networking.packets.clientbound.play.block_change_packet import BlockChangePacket |
|
|
|
import packet_handlers |
|
importlib.reload(packet_handlers) |
|
|
|
TICK = 0.05 |
|
last_tick = time.time() |
|
|
|
def tick(): |
|
return |
|
|
|
def bot(global_state): |
|
g = global_state |
|
|
|
if 'mcdata' not in g: |
|
g.mcdata = DataManager('./mcdata') |
|
|
|
if not g.connection: |
|
auth_token = authentication.AuthenticationToken() |
|
try: |
|
auth_token.authenticate(USERNAME, PASSWORD) |
|
except YggdrasilError as e: |
|
print(e) |
|
sys.exit() |
|
print("Logged in as %s..." % auth_token.username) |
|
g.connection = Connection( |
|
SERVER, 25565, auth_token=auth_token) |
|
|
|
def handle_join_game(join_game_packet): |
|
print('Connected.') |
|
|
|
g.connection.register_packet_listener( |
|
handle_join_game, clientbound.play.JoinGamePacket) |
|
|
|
g.chunks = ChunksManager(g.mcdata) |
|
g.chunks.register(g.connection) |
|
|
|
g.chat = ChatManager() |
|
g.chat.register(g.connection) |
|
|
|
g.connection.connect() |
|
|
|
def packet_wrapper(handler): |
|
def wrapper(packet): |
|
print('called') |
|
handler(packet, g) |
|
return wrapper |
|
|
|
h = packet_wrapper(packet_handlers.handle_block_change) |
|
g.connection.register_packet_listener(h, BlockChangePacket) |
|
|
|
try: |
|
#while not player_info.pos: |
|
# time.sleep(TICK) |
|
#print('Player loaded.') |
|
|
|
#x, y, z = pint(player_info.pos) |
|
#while (floor(x/16), floor(y/16), floor(z/16)) not in player_info.chunks.chunks: |
|
# time.sleep(TICK) |
|
#print('Chunks loaded.') |
|
|
|
while g.running: |
|
tick() |
|
|
|
global last_tick |
|
sleep_time = TICK + last_tick - time.time() |
|
if sleep_time < 0: sleep_time = 0 |
|
time.sleep(sleep_time) |
|
last_tick = time.time() |
|
finally: |
|
print('Removing listeners...') |
|
g.connection.packet_listeners = [] |
|
g.connection.early_packet_listeners = [] |
|
g.connection.outgoing_packet_listeners = [] |
|
g.connection.early_outgoing_packet_listeners = [] |
|
|
|
print('Bot module loaded.')
|
|
|