From 64112b76cc9f36d75d082d54da09ae6f1eeeed8c Mon Sep 17 00:00:00 2001 From: Tsubasa6848 <116721335+Tsubasa6848@users.noreply.github.com> Date: Mon, 22 Jan 2024 21:03:31 +0800 Subject: [PATCH] feat: add language --- SDK-GMLIB | 2 +- src/Cleaner.cpp | 78 ++++++++++++++++++++--------------------- src/Global.h | 12 ++++--- src/RegisterCommand.cpp | 30 ++++++++-------- 4 files changed, 60 insertions(+), 62 deletions(-) diff --git a/SDK-GMLIB b/SDK-GMLIB index 193e7eb..5e26804 160000 --- a/SDK-GMLIB +++ b/SDK-GMLIB @@ -1 +1 @@ -Subproject commit 193e7eb7102366a387efb5325b42ba1b622570a2 +Subproject commit 5e26804285534251daffdcb31ac5b4f3c58fddb7 diff --git a/src/Cleaner.cpp b/src/Cleaner.cpp index f001004..39be652 100644 --- a/src/Cleaner.cpp +++ b/src/Cleaner.cpp @@ -5,15 +5,15 @@ #include #include -GMLIB_JsonConfig* Config = nullptr; -GMLIB_JsonLanguage* Language = nullptr; +GMLIB::Files::JsonConfig* Config = nullptr; +nlohmann::json Language; using namespace ll::schedule; using namespace ll::chrono_literals; int item_despawn_time = 3000; -//ServerTimeAsyncScheduler scheduler; -bool auto_clean_triggerred = false; +// ServerTimeAsyncScheduler scheduler; +bool auto_clean_triggerred = false; namespace Cleaner { @@ -133,47 +133,39 @@ int CountEntities() { void CleanTask(int time, int announce_time) { auto time_1 = std::chrono::seconds::duration(time); auto time_2 = std::chrono::seconds::duration(time - announce_time); - logger.info(Language->translate("cleaner.output.count1", {S(time_1.count())})); - //scheduler.add(time_2, [announce_time] { - logger.info(Language->translate("cleaner.output.count2", {S(announce_time)})); + logger.info(tr("cleaner.output.count1", {S(time_1.count())})); + // scheduler.add(time_2, [announce_time] { + logger.info(tr("cleaner.output.count2", {S(announce_time)})); //}); - //scheduler.add(time_1, [] { - auto count = ExecuteClean(); - logger.info(Language->translate("cleaner.output.finish", {S(count)})); - auto_clean_triggerred = false; + // scheduler.add(time_1, [] { + auto count = ExecuteClean(); + logger.info(tr("cleaner.output.finish", {S(count)})); + auto_clean_triggerred = false; //}); } void AutoCleanTask(int seconds) { - auto time = std::chrono::seconds::duration(seconds); - //mAutoCleanTask = scheduler.add(time, [] { - CleanTask(Config->getValue({"Basic", "Notice1"}, 20), Config->getValue({"Basic", "Notice2"}, 15)); + auto time = std::chrono::seconds::duration(seconds); + // mAutoCleanTask = scheduler.add(time, [] { + CleanTask(Config->getValue({"Basic", "Notice1"}, 20), Config->getValue({"Basic", "Notice2"}, 15)); //}); } void CheckCleanTask(int max_entities, float min_tps) { - //mCheckCleanTask = scheduler.add(10s, [max_entities, min_tps] { - auto count = CountEntities(); - if (auto_clean_triggerred == false) { - if (count >= max_entities) { - auto_clean_triggerred = true; - logger.warn(Language->translate("cleaner.output.triggerAutoCleanCount", {S(count)})); - CleanTask( - Config->getValue({"Basic", "Notice1"}, 20), - Config->getValue({"Basic", "Notice2"}, 15) - ); - } else if (GMLIB_Level::getLevel()->getServerAverageTps() <= min_tps) { - auto_clean_triggerred = true; - logger.warn(Language->translate( - "cleaner.output.triggerAutoCleanCount", - {S(GMLIB_Level::getLevel()->getServerAverageTps())} - )); - CleanTask( - Config->getValue({"Basic", "Notice1"}, 20), - Config->getValue({"Basic", "Notice2"}, 15) - ); - } + // mCheckCleanTask = scheduler.add(10s, [max_entities, min_tps] { + auto count = CountEntities(); + if (auto_clean_triggerred == false) { + if (count >= max_entities) { + auto_clean_triggerred = true; + logger.warn(tr("cleaner.output.triggerAutoCleanCount", {S(count)})); + CleanTask(Config->getValue({"Basic", "Notice1"}, 20), Config->getValue({"Basic", "Notice2"}, 15)); + } else if (GMLIB_Level::getLevel()->getServerAverageTps() <= min_tps) { + auto_clean_triggerred = true; + logger.warn(tr("cleaner.output.triggerAutoCleanCount", {S(GMLIB_Level::getLevel()->getServerAverageTps())}) + ); + CleanTask(Config->getValue({"Basic", "Notice1"}, 20), Config->getValue({"Basic", "Notice2"}, 15)); } + } //}); } @@ -216,10 +208,13 @@ void reloadCleaner() { } void loadConfig() { - Config = new GMLIB_JsonConfig("./plugins/Cleaner/config/config.json", defaultConfig); + Config = new GMLIB::Files::JsonConfig("./plugins/Cleaner/config/config.json", defaultConfig); Config->initConfig(); - Language = new GMLIB_JsonLanguage("./plugins/Cleaner/config/language.json", defaultLanguage); - Language->initConfig(); + if (!std::filesystem::exists("./plugins/Cleaner/config/language.json")) { + GMLIB::Files::JsonLanguage::writeFile("./plugins/Cleaner/config/language.json", nlohmann::json::parse(defaultLanguage)); + } + GMLIB::Files::JsonLanguage::updateFile("./plugins/Cleaner/config/language.json", defaultLanguage); + Language = GMLIB::Files::JsonLanguage::readFromFile("./plugins/Cleaner/config/language.json"); } void loadCleaner() { @@ -242,7 +237,10 @@ void unloadCleaner() { mCheckCleanTask->cancel(); // UnregisterCommands(); delete Config; - delete Language; } -} // namespace Cleaner \ No newline at end of file +} // namespace Cleaner + +std::string tr(std::string key, std::vector data) { + return GMLIB::Files::JsonLanguage::translate(Language, key, data); +} \ No newline at end of file diff --git a/src/Global.h b/src/Global.h index 2b581ce..86a4cb6 100644 --- a/src/Global.h +++ b/src/Global.h @@ -2,18 +2,17 @@ #include "Config.h" #include "Plugin.h" #include "include_all.h" -#include -#include #include #include +#include +#include #define S(x) std::to_string(x) extern ll::Logger logger; extern void RegisterCommands(); extern void UnregisterCommands(); -extern GMLIB_JsonConfig* Config; -extern GMLIB_JsonLanguage* Language; +extern GMLIB::Files::JsonConfig* Config; extern int item_despawn_time; @@ -21,10 +20,13 @@ namespace Cleaner { static std::shared_ptr> mAutoCleanTask; static std::shared_ptr> mCheckCleanTask; + extern void loadConfig(); extern void loadCleaner(); extern void unloadCleaner(); extern void reloadCleaner(); extern void CleanTask(int time, int announce_time); -} // namespace Cleaner \ No newline at end of file +} // namespace Cleaner + +extern std::string tr(std::string key, std::vector data = {}); diff --git a/src/RegisterCommand.cpp b/src/RegisterCommand.cpp index c2dd782..2021018 100644 --- a/src/RegisterCommand.cpp +++ b/src/RegisterCommand.cpp @@ -18,7 +18,7 @@ void RegCleanerCommand(CommandRegistry& registry) { auto command = DynamicCommand::createCommand( registry, Config->getValue({"Basic", "Command"}, "cleaner"), - Language->translate("cleaner.command.cleaner"), + tr("cleaner.command.cleaner"), CommandPermissionLevel::GameDirectors ); command->setEnum("Despawn", {"despawn"}); @@ -40,37 +40,35 @@ void RegCleanerCommand(CommandRegistry& registry) { if (result["despawn"].isSet && result["target"].isSet) { auto ens = result["target"].get>(); if (ens.size() == 0) { - return output.error(Language->translate("cleaner.command.error.noTarget")); + return output.error(tr("cleaner.command.error.noTarget")); } for (auto en : ens) { en->despawn(); } - return output.success(Language->translate("cleaner.command.despawnSuccess", {S(ens.size())})); + return output.success(tr("cleaner.command.despawnSuccess", {S(ens.size())})); } else if (result["action"].isSet) { auto act = result["action"].get(); if (act == "tps") { - return output.success(Language->translate( - "cleaner.command.tps.output", - {S(GMLIB_Level::getLevel()->getServerCurrentTps()), - S(GMLIB_Level::getLevel()->getServerAverageTps())} - )); - } else if (act == "mspt") { return output.success( - Language->translate("cleaner.command.mspt.output", {S(GMLIB_Level::getLevel()->getServerMspt())}) + tr("cleaner.command.tps.output", + {S(GMLIB_Level::getLevel()->getServerCurrentTps()), + S(GMLIB_Level::getLevel()->getServerAverageTps())}) ); + } else if (act == "mspt") { + return output.success(tr("cleaner.command.mspt.output", {S(GMLIB_Level::getLevel()->getServerMspt())})); } else if (act == "clean") { Cleaner::CleanTask( Config->getValue({"Basic", "Notice1"}, 20), Config->getValue({"Basic", "Notice2"}, 15) ); - return output.success(Language->translate("cleaner.output.opClean")); + return output.success(tr("cleaner.output.opClean")); } else if (act == "reload") { Cleaner::reloadCleaner(); - return output.success(Language->translate("cleaner.output.reload")); + return output.success(tr("cleaner.output.reload")); } } else if (result["despawntime"].isSet && result["ticks"].isSet) { item_despawn_time = result["ticks"].get(); - return output.success(Language->translate("cleaner.command.despawntime", {S(item_despawn_time)})); + return output.success(tr("cleaner.command.despawntime", {S(item_despawn_time)})); } }); DynamicCommand::setup(registry, std::move(command)); @@ -78,12 +76,12 @@ void RegCleanerCommand(CommandRegistry& registry) { void RegisterCommands() { auto registry = ll::service::bedrock::getCommandRegistry(); - // RegCleanerCommand(registry); + RegCleanerCommand(registry); // RegVoteCommand(registry); } void UnregisterCommands() { - // auto registry = ll::service::bedrock::getCommandRegistry(); - // registry->unregisterCommand(Config->getValue({"Basic", "Command"}, "cleaner")); + auto registry = ll::service::bedrock::getCommandRegistry(); + registry->unregisterCommand(Config->getValue({"Basic", "Command"}, "cleaner")); // registry->unregisterCommand("voteclean"); } \ No newline at end of file