我正在为我的IT课程开发一个小型的Minecraft实施项目。我正在实施'经典扩展协议',它允许更多功能e.t.c。
我的不是问题,只是一个问题,我该如何检查数据包的填充字节? (需要确定播放器是从标准客户端还是从扩展客户端连接)。欢呼声。
答案 0 :(得分:0)
您可以使用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 );
}
您可以设置要发送的字节的确切位置,例如地图。 正如它在this页面上所描述的那样,它具有字节的位置,您所要做的就是设置它们。你将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;