0

我正在为我的 IT 课程做一个小型的 minecraft 实施项目。我正在实施允许更多功能等的“经典扩展协议”

我的不是问题,只是一个问题,我将如何检查数据包的填充字节?(需要确定播放器是从标准客户端连接还是从扩展客户端连接)。干杯。

4

1 回答 1

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 );
        }

您设置要发送的字节的确切位置,例如地图。正如本页所述,它具有字节的位置,您所要做的就是设置它们。您将 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;
于 2013-11-01T12:41:46.860 回答