Fix Form System

This commit is contained in:
Qiuzhizhe 2023-02-09 01:43:55 -08:00
parent e31b6bd4e9
commit 951c5e1f7d
3 changed files with 14 additions and 15 deletions

View File

@ -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:

View File

@ -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:

View File

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