#include "../GakumasLocalify/GakumasLocalify/Plugin.h" #include "../GakumasLocalify/GakumasLocalify/config/Config.hpp" #include "../GakumasLocalify/GakumasLocalify/Log.h" #include "../il2cpp_dump/il2cppTypes.hpp" #include "IOSHookInstaller.h" #include #include #include #include #include // JavaVM* g_javaVM = nullptr; // jclass g_gakumasHookMainClass = nullptr; // jmethodID showToastMethodId = nullptr; std::filesystem::path gakumasLocalPath; namespace { std::string ReadWholeFile(const std::filesystem::path& path) { std::ifstream in(path); if (!in.is_open()) { return ""; } std::ostringstream ss; ss << in.rdbuf(); return ss.str(); } } // namespace extern "C" void InitHook(void* unityFramework, void* unityBaseAddress, const char* unityFrameworkPath, const char* configJsonStr, const char* localizationBaseDir) { GakumasLocal::Log::InfoFmt("Init hook localizationBaseDir: %s", localizationBaseDir); GakumasLocal::Log::InfoFmt("Init hook configJsonStr: %s", configJsonStr); const std::string configJson = (configJsonStr && configJsonStr[0] != '\0') ? configJsonStr : "{}"; GakumasLocal::Config::LoadConfig(configJson); GakumasLocal::Log::Info("Config loaded"); const std::string baseDir = (localizationBaseDir && localizationBaseDir[0] != '\0') ? localizationBaseDir : ""; gakumasLocalPath = baseDir; auto installer = std::make_unique(unityFramework); installer->localizationFilesDir = baseDir; if (unityFrameworkPath && unityFrameworkPath[0] != '\0') { installer->m_il2cppLibraryPath = unityFrameworkPath; } GakumasLocal::Plugin::GetInstance().SetHookInstaller(std::move(installer)); Il2cppJson::Init(reinterpret_cast(unityBaseAddress)); GakumasLocal::Plugin::GetInstance().InstallHook(/*std::move(installer)*/); }