From 951c5e1f7d22d5f9c9821d52c696136d9560e5d3 Mon Sep 17 00:00:00 2001 From: Qiuzhizhe <42761326+quizhizhe@users.noreply.github.com> Date: Thu, 9 Feb 2023 01:43:55 -0800 Subject: [PATCH] Fix Form System --- .../Header/MC/ModalFormRequestPacket.hpp | 4 +++- .../Header/MC/ModalFormResponsePacket.hpp | 4 +++- LiteLoader/Kernel/EventAPI.cpp | 21 +++++++------------ 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/LiteLoader/Header/MC/ModalFormRequestPacket.hpp b/LiteLoader/Header/MC/ModalFormRequestPacket.hpp index a85b0c4..4c4c5f3 100644 --- a/LiteLoader/Header/MC/ModalFormRequestPacket.hpp +++ b/LiteLoader/Header/MC/ModalFormRequestPacket.hpp @@ -11,7 +11,9 @@ class ModalFormRequestPacket : public Packet { #define AFTER_EXTRA - +public: + unsigned int mFormId; + std::string mFormJSON; #undef AFTER_EXTRA #ifndef DISABLE_CONSTRUCTOR_PREVENTION_MODALFORMREQUESTPACKET public: diff --git a/LiteLoader/Header/MC/ModalFormResponsePacket.hpp b/LiteLoader/Header/MC/ModalFormResponsePacket.hpp index 5ab8bff..61b3d72 100644 --- a/LiteLoader/Header/MC/ModalFormResponsePacket.hpp +++ b/LiteLoader/Header/MC/ModalFormResponsePacket.hpp @@ -11,7 +11,9 @@ class ModalFormResponsePacket : public Packet { #define AFTER_EXTRA - +public: + unsigned int mFormId; + std::string mJSONResponse;; #undef AFTER_EXTRA #ifndef DISABLE_CONSTRUCTOR_PREVENTION_MODALFORMRESPONSEPACKET public: diff --git a/LiteLoader/Kernel/EventAPI.cpp b/LiteLoader/Kernel/EventAPI.cpp index b83e466..f22e7b1 100644 --- a/LiteLoader/Kernel/EventAPI.cpp +++ b/LiteLoader/Kernel/EventAPI.cpp @@ -2133,26 +2133,21 @@ TInstanceHook(int, "?startSleepInBed@Player@@UEAA?AW4BedSleepingResult@@AEBVBloc #include "Impl/FormPacketHelper.h" #include <MC/Json.hpp> +#include <MC/ModalFormResponsePacket.hpp> ////////////// FormResponsePacket ////////////// TClasslessInstanceHook(void, "?handle@?$PacketHandlerDispatcherInstance@VModalFormResponsePacket@@$0A@@@UEBAXAEBVNetworkIdentifier@@AEAVNetEventCallback@@AEAV?$shared_ptr@VPacket@@@std@@@Z", - NetworkIdentifier* id, ServerNetworkHandler* handler, void* pPacket) { - Packet* packet = *(Packet**)pPacket; + NetworkIdentifier* id, ServerNetworkHandler* handler, std::shared_ptr<Packet> pPacket) { + Packet* packet = pPacket.get(); + ModalFormResponsePacket* mPacket = (ModalFormResponsePacket*)packet; ServerPlayer* sp = handler->getServerPlayer(*id, 0); if (sp) { string data; - auto formId = dAccess<int>(packet, 48);//未验证 - - if (!dAccess<bool>(packet, 81)) {//未验证 - if (dAccess<bool>(packet, 72)) {//未验证 - auto json = dAccess<Json::Value>(packet, 56);//未验证 - data = json.toStyledString(); - } - } - - if (data.empty()) { + auto formId = mPacket->mFormId; + if(!mPacket->mJSONResponse.empty()) + data = mPacket->mJSONResponse; + else data = "null"; - } if (data.back() == '\n') data.pop_back();