diff --git a/LiteLoader/Header/MC/DisconnectPacket.hpp b/LiteLoader/Header/MC/DisconnectPacket.hpp index 2399df5..e26b372 100644 --- a/LiteLoader/Header/MC/DisconnectPacket.hpp +++ b/LiteLoader/Header/MC/DisconnectPacket.hpp @@ -11,7 +11,9 @@ class DisconnectPacket : public Packet { #define AFTER_EXTRA - +public: + bool mSkipMessage; + std::string mMessage; #undef AFTER_EXTRA #ifndef DISABLE_CONSTRUCTOR_PREVENTION_DISCONNECTPACKET public: diff --git a/LiteLoader/Header/MC/Minecraft.hpp b/LiteLoader/Header/MC/Minecraft.hpp index 15953a6..6aeb51f 100644 --- a/LiteLoader/Header/MC/Minecraft.hpp +++ b/LiteLoader/Header/MC/Minecraft.hpp @@ -11,7 +11,11 @@ class Minecraft { #define AFTER_EXTRA - +public: + inline NetworkHandler & getNetworkHandler(){ + //lambda_b490644342a3912d59dc52eb79c3a67f_::operator() Line410 + return dAccess(this,24); + }; #undef AFTER_EXTRA #ifndef DISABLE_CONSTRUCTOR_PREVENTION_MINECRAFT public: diff --git a/LiteLoader/Header/MC/NetworkIdentifier.hpp b/LiteLoader/Header/MC/NetworkIdentifier.hpp index 7ee65cb..181c487 100644 --- a/LiteLoader/Header/MC/NetworkIdentifier.hpp +++ b/LiteLoader/Header/MC/NetworkIdentifier.hpp @@ -4,14 +4,29 @@ #include "../Global.h" #define BEFORE_EXTRA +#include "RakNet.hpp" +struct sockaddr_storage +{ + __int16 ss_family; + char __ss_padding[118]; + unsigned __int64 __ss_align; +}; #undef BEFORE_EXTRA class NetworkIdentifier { #define AFTER_EXTRA // Add Member There - char filler[160]; +enum Type{ + RakNet = 0x0, + Address = 0x1, + Address6 = 0x2, + Generic = 0x3, +}; + RakNet::RakNetGUID mGuid; + sockaddr_storage mSock; + NetworkIdentifier::Type mType; public: LIAPI std::string getIP(); diff --git a/LiteLoader/Header/MC/PacketSender.hpp b/LiteLoader/Header/MC/PacketSender.hpp index 12039dd..bf08c2b 100644 --- a/LiteLoader/Header/MC/PacketSender.hpp +++ b/LiteLoader/Header/MC/PacketSender.hpp @@ -10,7 +10,8 @@ class PacketSender { #define AFTER_EXTRA - +__int64 _vptr; +uint8_t mSenderSubId; #undef AFTER_EXTRA #ifndef DISABLE_CONSTRUCTOR_PREVENTION_PACKETSENDER public: diff --git a/LiteLoader/Kernel/EventAPI.cpp b/LiteLoader/Kernel/EventAPI.cpp index 6dd1055..110ac59 100644 --- a/LiteLoader/Kernel/EventAPI.cpp +++ b/LiteLoader/Kernel/EventAPI.cpp @@ -61,6 +61,7 @@ // #include #include #include +#include static_assert(offsetof(InventoryAction, source) == 0x0); static_assert(offsetof(InventoryAction, slot) == 0x0c); @@ -369,18 +370,16 @@ TClasslessInstanceHook(void, "?handle@?$PacketHandlerDispatcherInstance@VPlayerA /////////////////// PlayerChat /////////////////// TInstanceHook(void, "?handle@ServerNetworkHandler@@UEAAXAEBVNetworkIdentifier@@AEBVTextPacket@@@Z", - ServerNetworkHandler, NetworkIdentifier* id, void* text) { + ServerNetworkHandler, NetworkIdentifier* id, TextPacket* text) { IF_LISTENED(PlayerChatEvent) { Event::PlayerChatEvent ev{}; ev.mPlayer = this->getServerPlayer(*id); if (!ev.mPlayer) return; - - ev.mMessage = std::string(*(std::string*)((uintptr_t)text + 80)); - + ev.mMessage = text->mMessage; if (!ev.call()) return; - *(std::string*)((uintptr_t)text + 80) = ev.mMessage; + text->mMessage = ev.mMessage; } IF_LISTENED_END(PlayerChatEvent); return original(this, id, text); diff --git a/LiteLoader/Kernel/MC/PlayerAPI.cpp b/LiteLoader/Kernel/MC/PlayerAPI.cpp index 8c0dc82..d22efce 100644 --- a/LiteLoader/Kernel/MC/PlayerAPI.cpp +++ b/LiteLoader/Kernel/MC/PlayerAPI.cpp @@ -60,11 +60,11 @@ std::string Player::getRealName() { } int Player::getAvgPing() { - return Global->getPeerForUser(*getNetworkIdentifier())->getNetworkStatus().mAveragePing; + return Global->getNetworkHandler().getPeerForUser(*getNetworkIdentifier())->getNetworkStatus().mAveragePing; } int Player::getLastPing() { - return Global->getPeerForUser(*getNetworkIdentifier())->getNetworkStatus().mCurrentPing; + return Global->getNetworkHandler().getPeerForUser(*getNetworkIdentifier())->getNetworkStatus().mCurrentPing; } string Player::getIP() { @@ -162,9 +162,19 @@ string Player::getDeviceTypeName() { } bool Player::kick(const std::string& msg) { - NetworkIdentifier* pNetworkIdentifier = getNetworkIdentifier(); - unsigned char subID = dAccess(this,3520); - Global->disconnectClient(*pNetworkIdentifier, subID, msg, 0); +// NetworkIdentifier* pNetworkIdentifier = getNetworkIdentifier(); +// Global->getServerNetworkHandler()->disconnectClient(*pNetworkIdentifier, 0, msg, 0); + BinaryStream wp; + if(msg.empty()){ + wp.writeBool(1); + } + else{ + wp.writeBool(0); + wp.writeString(msg); + } + auto pkt = MinecraftPackets::createPacket(MinecraftPacketIds::Disconnect); + pkt->read(wp); + this->sendNetworkPacket(*pkt); return true; } @@ -311,15 +321,16 @@ string Player::getXuid() const{ } unsigned char Player::getClientSubId() { - return -1; + //ServerPlayer::sendNetworkPacket 参4 + return dAccess(this,3520); } float Player::getAvgPacketLoss() { - return Global->getPeerForUser(*getNetworkIdentifier())->getNetworkStatus().mAveragePacketLoss; + return Global->getNetworkHandler().getPeerForUser(*getNetworkIdentifier())->getNetworkStatus().mAveragePacketLoss; } float Player::getLastPacketLoss() { - return Global->getPeerForUser(*getNetworkIdentifier())->getNetworkStatus().mCurrentPacketLoss; + return Global->getNetworkHandler().getPeerForUser(*getNetworkIdentifier())->getNetworkStatus().mCurrentPacketLoss; } // string Player::getClientId() { diff --git a/LiteLoader/Kernel/Utils/GlobalService.cpp b/LiteLoader/Kernel/Utils/GlobalService.cpp index 65308a9..cffd5fd 100644 --- a/LiteLoader/Kernel/Utils/GlobalService.cpp +++ b/LiteLoader/Kernel/Utils/GlobalService.cpp @@ -16,11 +16,11 @@ TInstanceHook(void, "?initAsDedicatedServer@Minecraft@@QEAAXXZ", Minecraft) { original(this); } //NetworkHandler -TInstanceHook(void, "??0WorldTemplateInfo@@QEAA@AEBVWorldTemplatePackManifest@@@Z", WorldTemplateInfo, - NetworkHandler* a1) { - Global = a1; - original(this,a1); -} +//TInstanceHook(void, "??0WorldTemplateInfo@@QEAA@AEBVWorldTemplatePackManifest@@@Z", WorldTemplateInfo, +// NetworkHandler* a1) { +// Global = a1; +// original(this,a1); +//} // ServerNetworkHandler TInstanceHook(void, "?allowIncomingConnections@ServerNetworkHandler@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@_N@Z", ServerNetworkHandler, std::string const& a1, bool a2) {