diff --git a/custom/managers/__init__.py b/custom/managers/__init__.py index 1f9d175..b7e64e5 100644 --- a/custom/managers/__init__.py +++ b/custom/managers/__init__.py @@ -1,2 +1,3 @@ from .data import DataManager from .chunks import ChunksManager +from .chat import ChatManager diff --git a/custom/managers/chat.py b/custom/managers/chat.py new file mode 100644 index 0000000..9fd65d5 --- /dev/null +++ b/custom/managers/chat.py @@ -0,0 +1,36 @@ +import json + +from minecraft.networking.packets import clientbound, serverbound + +class ChatManager: + + def __init__(self): + return + + def translate_chat(self, data): + if isinstance(data, str): + return data + elif 'extra' in data: + return "".join([self.translate_chat(x) for x in data['extra']]) + elif 'text' in data: + return data['text'] + else: + return "?" + + def print_chat(self, chat_packet): + # TODO: Replace with handler + try: + print("[%s] %s"%(chat_packet.field_string('position'), self.translate_chat(json.loads(chat_packet.json_data)))) + except Exception as ex: + print("Exception %r on message (%s): %s" % (ex, chat_packet.field_string('position'), chat_packet.json_data)) + + def register(self, connection): + connection.register_packet_listener(self.print_chat, clientbound.play.ChatMessagePacket) + + def send(self, connection, text): + if not text: + # Prevents connection bug when sending empty chat message + return + packet = serverbound.play.ChatPacket() + packet.message = text + connection.write_packet(packet) diff --git a/main.py b/main.py index 9c5eef9..81aa0b5 100644 --- a/main.py +++ b/main.py @@ -5,7 +5,7 @@ USERNAME = '' PASSWORD = '' SERVER = '' -from custom.managers import DataManager, ChunksManager +from custom.managers import DataManager, ChunksManager, ChatManager from minecraft import authentication from minecraft.exceptions import YggdrasilError @@ -35,16 +35,12 @@ def main(): connection.register_packet_listener( handle_join_game, clientbound.play.JoinGamePacket) - def print_chat(chat_packet): - print("Message (%s): %s" % ( - chat_packet.field_string('position'), chat_packet.json_data)) - - connection.register_packet_listener( - print_chat, clientbound.play.ChatMessagePacket) - chunks = ChunksManager(mcdata) chunks.register(connection) + chat = ChatManager() + chat.register(connection) + connection.connect() print('connected')