私は、IT コースワークの小さな Minecraft 実装プロジェクトに取り組んでいます。より多くの機能などを可能にする「クラシック拡張プロトコル」を実装しています
私の問題ではなく、単なる質問です。パケットのパディング バイトを確認するにはどうすればよいでしょうか。(プレーヤーが標準クライアントから接続しているか、拡張クライアントから接続しているかを判断する必要があります)。乾杯。
FemtoCraftソースを使用して理解できます。クライアントに送信する ExtAddPlayerName パケットのコーディング例を次に示します。
public static Packet ExtAddPlayerName(short nameid, string name, string ListName, string group, byte perm)
{
Packet packet = new Packet(OpCode.ExtAddPlayerName);
ToNetOrder(nameid, packet.Bytes, 1);
Encoding.ASCII.GetBytes(name.PadRight(64), 0, 64, packet.Bytes, 3);
Encoding.ASCII.GetBytes(ListName.PadRight(64), 0, 64, packet.Bytes, 67);
Encoding.ASCII.GetBytes(group.PadRight(64), 0, 64, packet.Bytes, 131);
packet.Bytes[132] = perm;
return packet;
}
internal static void ToNetOrder( short number, byte[] arr, int offset ) {
arr[offset] = (byte)( ( number & 0xff00 ) >> 8 );
arr[offset + 1] = (byte)( number & 0x00ff );
}
マップのように、送信するバイトの正確な場所を設定します。このページで説明されているように、バイトの場所があり、設定するだけです。byte[] をクライアントに送信すると、新しいパケットを設定することにより、byte[0] がパケットを決定します yourpack = new Packet(PacketName) あなたの byte[0] は、fCraft / femtocraft で自動的にパケット名を取得します。クライアントからのパケットの取得については、OpCode 変数を使用できます。
OpCode opcode = reader.ReadOpCode();
switch( opcode ) {
case OpCode.Message:
if( !ProcessMessagePacket() ) return;
break;