int cProtocol132::ParseLocaleViewDistance(void) { HANDLE_PACKET_READ(ReadBEUTF16String16, AString, Locale); HANDLE_PACKET_READ(ReadChar, char, ViewDistance); HANDLE_PACKET_READ(ReadChar, char, ChatFlags); HANDLE_PACKET_READ(ReadChar, char, ClientDifficulty); m_Client->SetLocale(Locale); // TODO: m_Client->HandleViewDistance(ViewDistance); // TODO: m_Client->HandleChatFlags(ChatFlags); // Ignoring client difficulty return PARSE_OK; }
int cProtocol132::ParseClientStatuses(void) { HANDLE_PACKET_READ(ReadByte, Byte, Status); if ((Status & 1) == 0) { m_Client->HandleLogin(39, m_Username); } else { m_Client->HandleRespawn(); } return PARSE_OK; }
int cProtocol125::ParseLogin(void) { HANDLE_PACKET_READ(ReadBEInt, int, ProtocolVersion); HANDLE_PACKET_READ(ReadBEUTF16String16, AString, Username); HANDLE_PACKET_READ(ReadBEUTF16String16, AString, LevelType); HANDLE_PACKET_READ(ReadBEInt, int, ServerMode); HANDLE_PACKET_READ(ReadBEInt, int, Dimension); HANDLE_PACKET_READ(ReadChar, char, Difficulty); HANDLE_PACKET_READ(ReadByte, Byte, WorldHeight); HANDLE_PACKET_READ(ReadByte, Byte, MaxPlayers); if (ProtocolVersion < 29) { m_Client->Kick("Your client is outdated!"); return PARSE_OK; } else if (ProtocolVersion > 29) { m_Client->Kick("Your client version is higher than the server!"); return PARSE_OK; } if (m_Username.compare(Username) != 0) { LOGWARNING("Login Username (\"%s\") does not match Handshake username (\"%s\") for client @ \"%s\", kicking", Username.c_str(), m_Username.c_str(), m_Client->GetIPString().c_str() ); m_Client->Kick("Hacked client"); // Don't tell them why we don't want them return PARSE_OK; } m_Client->HandleLogin(ProtocolVersion, Username); return PARSE_OK; }
int cProtocol125::ParsePluginMessage(void) { HANDLE_PACKET_READ(ReadBEUTF16String16, AString, ChannelName); HANDLE_PACKET_READ(ReadBEShort, short, Length); AString Data; if (!m_ReceivedData.ReadString(Data, (size_t)Length)) { m_ReceivedData.CheckValid(); return PARSE_INCOMPLETE; } m_ReceivedData.CheckValid(); // TODO: Process the data LOGD("Received %d bytes of plugin data on channel \"%s\".", Length, ChannelName.c_str()); return PARSE_OK; }
int cProtocol125::ParseBlockPlace(void) { HANDLE_PACKET_READ(ReadBEInt, int, PosX); HANDLE_PACKET_READ(ReadByte, Byte, PosY); HANDLE_PACKET_READ(ReadBEInt, int, PosZ); HANDLE_PACKET_READ(ReadChar, char, BlockFace); cItem HeldItem; int res = ParseItem(HeldItem); if (res < 0) { return res; } // 1.2.5 didn't have any cursor position, so use 8, 8, 8, so that halfslabs and stairs work correctly and the special value is recognizable. m_Client->HandleRightClick(PosX, PosY, PosZ, static_cast<eBlockFace>(BlockFace), 8, 8, 8, HeldItem); return PARSE_OK; }
int cProtocol132::ParseBlockPlace(void) { HANDLE_PACKET_READ(ReadBEInt, int, PosX); HANDLE_PACKET_READ(ReadByte, Byte, PosY); HANDLE_PACKET_READ(ReadBEInt, int, PosZ); HANDLE_PACKET_READ(ReadChar, char, BlockFace); cItem HeldItem; int res = ParseItem(HeldItem); if (res < 0) { return res; } HANDLE_PACKET_READ(ReadChar, char, CursorX); HANDLE_PACKET_READ(ReadChar, char, CursorY); HANDLE_PACKET_READ(ReadChar, char, CursorZ); m_Client->HandleRightClick(PosX, PosY, PosZ, static_cast<eBlockFace>(BlockFace), CursorX, CursorY, CursorZ, HeldItem); return PARSE_OK; }
int cProtocol125::ParseHandshake(void) { HANDLE_PACKET_READ(ReadBEUTF16String16, AString, Username); AStringVector UserData = StringSplit(Username, ";"); // "FakeTruth;localhost:25565" if (UserData.empty()) { m_Client->Kick("Did not receive username"); return PARSE_OK; } m_Username = UserData[0]; LOGD("HANDSHAKE %s", Username.c_str()); if (!m_Client->HandleHandshake( m_Username )) { return PARSE_OK; // Player is not allowed into the server } SendHandshake(cRoot::Get()->GetServer()->GetServerID()); LOGD("User \"%s\" was sent a handshake response", m_Username.c_str()); return PARSE_OK; }
int cProtocol132::ParseTabCompletion(void) { HANDLE_PACKET_READ(ReadBEUTF16String16, AString, Text); m_Client->HandleTabCompletion(Text); return PARSE_OK; }
int cProtocol125::ParseDisconnect(void) { HANDLE_PACKET_READ(ReadBEUTF16String16, AString, Reason); m_Client->HandleDisconnect(Reason); return PARSE_OK; }
int cProtocol125::ParseChat(void) { HANDLE_PACKET_READ(ReadBEUTF16String16, AString, Message); m_Client->HandleChat(Message); return PARSE_OK; }