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