2012-07-04 3 views
0

Я начал проект, чтобы написать клиент/бот minecraft на основе python для подключения к стандартному серверу minecraft. Я использую библиотеку под названием py-mine-client для выполнения обработки пакетов. У меня возникли проблемы с получением пакетов с использованием библиотеки - я не знаю, какие функции вызывать/где можно получить доступ к полученным данным. Основная проблема заключается в том, как получить ответ от рукопожатия. Я думал, что могу получить доступ к нему с помощью функции client.recievePacket, но он, похоже, не работает.

Вот мой код:Python Class + Путаница пакетов

import sys 
import string 
from client import * 

def main(): 
    client = Client("192.168.1.15") 
    client.connect() 
    client.handshake("MyUsername") 
    handshake = string16("\x02") 
    client.recieve_packet(handshake) 
    client.login_request("MyUsername") 
    client.listener.stop() 

if __name__ == "__main__": 
    sys.exit(main()) 

Вот вика с информацией о том, как работает протокол:
http://wiki.vg/Protocol

ответ

0

Глядя на библиотеке source code, они имеют Listener класс для сбора всех пакетов в отдельный поток автоматически. Метод receive_packet не должен вызываться пользователем (он используется слушателем для отправки новых входящих данных). Все пакеты добавляются к массиву client.packets, к которому вы можете получить доступ. К сожалению, библиотека, похоже, не потокобезопасна (вероятно, полагается на глобальную блокировку), и у них, похоже, много ошибок сокета.

Поскольку библиотека кажется очень простой, вы можете просто переписать ее.