Compare commits

..

3 Commits

5 changed files with 66 additions and 12 deletions

61
bot.py
View File

@ -2,28 +2,41 @@ if __name__ == '__main__':
print('Run main.py instead.') print('Run main.py instead.')
exit(1) exit(1)
import os
import time import time
import importlib
USERNAME = '' USERNAME = os.environ['USERNAME']
PASSWORD = '' PASSWORD = os.environ['PASSWORD']
SERVER = '' SERVER = os.environ['SERVER']
import monkey_patch # must be before any possible pyCraft imports
from custom.managers import DataManager, ChunksManager, ChatManager from custom.managers import DataManager, ChunksManager, ChatManager
import monkey_patch
from minecraft import authentication from minecraft import authentication
from minecraft.exceptions import YggdrasilError from minecraft.exceptions import YggdrasilError
from minecraft.networking.connection import Connection from minecraft.networking.connection import Connection
from minecraft.networking.packets import Packet, clientbound, serverbound 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): def bot(global_state):
g = global_state g = global_state
if 'mcdata' not in g: if 'mcdata' not in g:
g.mcdata = DataManager('./mcdata') g.mcdata = DataManager('./mcdata')
if 'connection' not in g: if not g.connection:
auth_token = authentication.AuthenticationToken() auth_token = authentication.AuthenticationToken()
try: try:
auth_token.authenticate(USERNAME, PASSWORD) auth_token.authenticate(USERNAME, PASSWORD)
@ -48,4 +61,38 @@ def bot(global_state):
g.connection.connect() g.connection.connect()
time.sleep(1) 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.')

View File

@ -28,8 +28,8 @@ class ChunkDataPacket(Packet):
self.data = file_object.read(size) self.data = file_object.read(size)
size_entities = VarInt.read(file_object) size_entities = VarInt.read(file_object)
self.entities = [] self.entities = []
#for i in range(size_entities): for i in range(size_entities):
# self.entities.append(Nbt.read(file_object)) self.entities.append(Nbt.read(file_object))
self.decode_chunk_data() self.decode_chunk_data()

View File

@ -12,6 +12,7 @@ from watchdog.events import PatternMatchingEventHandler
import bot import bot
global_state = Bunch() global_state = Bunch()
g = global_state g = global_state
g.connection = False
@app.route('/') @app.route('/')
def hello_world(): def hello_world():
@ -24,10 +25,10 @@ reload_timeout = time.time()
def main(): def main():
def reload_bot(event): def reload_bot(event):
global reload_timeout global reload_timeout
if time.time() - reload_timeout > 5.0: if time.time() - reload_timeout > 2.0:
reload_timeout = time.time() reload_timeout = time.time()
print('Reloading...') print('Reloading...')
importlib.reload(bot) g.running = False
event_handler = PatternMatchingEventHandler(patterns=['*.py'], ignore_patterns=['./main.py']) event_handler = PatternMatchingEventHandler(patterns=['*.py'], ignore_patterns=['./main.py'])
event_handler.on_any_event = reload_bot event_handler.on_any_event = reload_bot
@ -38,7 +39,9 @@ def main():
try: try:
while True: while True:
g.running = True
bot.bot(global_state) bot.bot(global_state)
importlib.reload(bot)
except KeyboardInterrupt: except KeyboardInterrupt:
observer.stop() observer.stop()
observer.join() observer.join()
@ -46,4 +49,5 @@ def main():
if __name__ == '__main__': if __name__ == '__main__':
threading.Thread(target=app.run).start() threading.Thread(target=app.run).start()
time.sleep(1)
main() main()

View File

@ -3,7 +3,7 @@ from custom.networking.packets.clientbound.play import chunk_data, block_change_
def get_packets(old_get_packets): def get_packets(old_get_packets):
def wrapper(func, context): def wrapper(func, context):
print('Monkey-patched.') print('Monkey-patch worked.')
packets = func(context) packets = func(context)
# add any custom packets here # add any custom packets here

3
packet_handlers.py Normal file
View File

@ -0,0 +1,3 @@
def handle_block_change(p, g):
print('block change:')
print(p)