0

標準のMinecraftサーバーに接続するためのPythonベースのMinecraftクライアント/ボットを作成するプロジェクトを開始しました。py-mine-clientというライブラリを使用してパケット処理を実行しています。ライブラリを使用してパケットを受信する際に問題が発生しました - どの関数を呼び出すべきか、または受信したデータにアクセスできる場所がわかりません。主な問題は、ハンドシェイク応答を受信する方法を理解することです。client.recievePacket 関数でアクセスできると思っていましたが、機能していないようです。

これが私のコードです:

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())

プロトコルの仕組みに関する情報が記載された wiki は次のとおりです:
http://wiki.vg/Protocol

4

1 に答える 1

0

ライブラリのソース コードListenerを見ると、すべてのパケットを別のスレッドで自動的に収集するクラスがあります。このreceive_packetメソッドは、ユーザーによって呼び出されるべきではありません (新しい着信データを報告するためにリスナーによって使用されます)。すべてのパケットは、client.packetsアクセスできる配列に追加されます。残念ながら、ライブラリはスレッドセーフではないようで (おそらくグローバル ロックに依存しています)、ソケット関連のバグが多数あるようです。

ライブラリは非常に単純に見えるので、単に書き直してみるのもよいでしょう。

于 2012-07-04T14:57:28.130 に答える