From a3a3c103fbdd919583fbd9ce4d675c123808820e Mon Sep 17 00:00:00 2001 From: zimuya4153 Date: Mon, 14 Apr 2025 22:44:24 +0800 Subject: [PATCH] feat: adapt gmlib 1.0.0 --- README.md | 7 +++++++ manifest.json | 5 ++++- src/Features/Clean.cpp | 4 ++-- src/Features/CleanTask.cpp | 4 ++-- src/Features/Events.cpp | 14 +++++++------- src/Features/Helper.cpp | 4 ++-- src/Features/UnloadActorClean.cpp | 4 ++-- src/Mod.cpp | 16 ++++++++++------ src/RegisterCommand.cpp | 6 +++--- tooth.json | 18 +++++++++++------- xmake.lua | 16 +++++++--------- 11 files changed, 57 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 5866098..f04148c 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,13 @@ "Cooldown": 120, // 投票冷却时间 单位:秒 "CheckDelay": 30, // 投票时长 单位:秒 "Percentage": 50 // 投票百分比(大于此值则清理) + }, + "UnloadActorClean": { // 离线实体清理 + "Enabled": false, // 是否启用 + "CleanList": [ // 清理实体列表 + "minecraft:iron_golem", // 铁傀儡 + "minecraft:zombie_pigman" // 僵尸猪灵 + ] } } ``` diff --git a/manifest.json b/manifest.json index 1335a9a..86ff7c0 100644 --- a/manifest.json +++ b/manifest.json @@ -2,12 +2,15 @@ "name": "${modName}", "entry": "${modFile}", "type": "native", - "version": "0.13.4", + "version": "0.13.5", "author": "GroupMountain", "description": "Clean Entities", "dependencies": [ { "name": "GMLIB" + }, + { + "name": "iListenAttentively" } ] } diff --git a/src/Features/Clean.cpp b/src/Features/Clean.cpp index 2494241..f5a31d0 100644 --- a/src/Features/Clean.cpp +++ b/src/Features/Clean.cpp @@ -18,7 +18,7 @@ bool isMatch(std::string& A, std::string& B) { bool isTrust(Actor* ac) { return SynchedActorDataAccess::getActorFlag(ac->getEntityContext(), ::ActorFlags::Trusting); } -bool shouldIgnore(gmlib::world::actor::GMActor* ac) { +bool shouldIgnore(gmlib::GMActor* ac) { if (ac->hasCategory(::ActorCategory::Mob) || ac->hasCategory(::ActorCategory::Item)) { if (ac->isTame() || isTrust(ac) || ac->getNameTag() != "" || ac->hasTag("cleaner:ignore")) { return true; @@ -30,7 +30,7 @@ bool shouldIgnore(gmlib::world::actor::GMActor* ac) { bool ShouldClean(Actor* actor) { // Players auto& config = Cleaner::Entry::getInstance().getConfig(); - auto en = (gmlib::world::actor::GMActor*)actor; + auto en = (gmlib::GMActor*)actor; if (en->isPlayer() || shouldIgnore(en)) { return false; } diff --git a/src/Features/CleanTask.cpp b/src/Features/CleanTask.cpp index 1ae4354..b19e8a8 100644 --- a/src/Features/CleanTask.cpp +++ b/src/Features/CleanTask.cpp @@ -109,9 +109,9 @@ void CleanTaskTPS(float min_tps) { co_await 10s; if (*mCleanTaskTPS == false) co_return; if (auto_clean_triggerred == false) { - if (gmlib::world::GMLevel::getInstance()->getServerAverageTps() <= min_tps) { + if (gmlib::GMLevel::getInstance()->getServerAverageTps() <= min_tps) { auto_clean_triggerred = true; - auto mspt = S(gmlib::world::GMLevel::getInstance()->getServerAverageTps()); + auto mspt = S(gmlib::GMLevel::getInstance()->getServerAverageTps()); if (config.Basic.ConsoleLog) { ll::io::LoggerRegistry::getInstance().getOrCreate("Cleaner")->warn( tr("cleaner.output.triggerAutoCleanTps", {mspt}) diff --git a/src/Features/Events.cpp b/src/Features/Events.cpp index c278441..2c34e68 100644 --- a/src/Features/Events.cpp +++ b/src/Features/Events.cpp @@ -1,7 +1,7 @@ #include "Cleaner.h" namespace Cleaner { -void setShouldIgnore(gmlib::world::actor::GMActor* ac) { ac->addTag("cleaner:ignore"); } +void setShouldIgnore(gmlib::GMActor* ac) { ac->addTag("cleaner:ignore"); } void ListenEvents() { auto& eventBus = ll::event::EventBus::getInstance(); @@ -10,28 +10,28 @@ void ListenEvents() { eventBus.emplaceListener([&config](ila::mc::SpawnItemActorAfterEvent& event) { auto& item = event.itemActor(); if (event.spawner()) { - auto pl = (gmlib::world::actor::GMPlayer*)event.spawner(); + auto pl = (gmlib::GMPlayer*)event.spawner(); if (pl->isPlayer() && !pl->isAlive()) { // Death Drop - auto ac = (gmlib::world::actor::GMActor*)&item; + auto ac = (gmlib::GMActor*)&item; setShouldIgnore(ac); return; } } if (config.ItemDespawn.Enabled) { - item->lifeTime() = config.ItemDespawn.DespawnTime; + item.lifeTime() = config.ItemDespawn.DespawnTime; auto list = config.ItemDespawn.WhiteList; - auto type = item->item().getTypeName(); + auto type = item.item().getTypeName(); for (auto& key : list) { if (isMatch(type, key)) { return; } } - item->lifeTime() = config.ItemDespawn.DespawnTime; + item.lifeTime() = config.ItemDespawn.DespawnTime; } }); // MobTakeItemEvent eventBus.emplaceListener([](ila::mc::ActorPickupItemAfterEvent& event) { - auto mob = (gmlib::world::actor::GMActor*)&event.self(); + auto mob = (gmlib::GMActor*)&event.self(); setShouldIgnore(mob); }); } diff --git a/src/Features/Helper.cpp b/src/Features/Helper.cpp index 5b2c4ba..f9719f0 100644 --- a/src/Features/Helper.cpp +++ b/src/Features/Helper.cpp @@ -3,11 +3,11 @@ namespace Helper { void broadcastMessage(std::string_view msg) { - gmlib::world::GMLevel::getInstance()->broadcast(tr("cleaner.info.prefix") + std::string(msg)); + gmlib::GMLevel::getInstance()->broadcast(tr("cleaner.info.prefix") + std::string(msg)); } void broadcastToast(std::string_view msg) { - gmlib::world::GMLevel::getInstance()->broadcastToast(tr("cleaner.info.prefix"), msg); + gmlib::GMLevel::getInstance()->broadcastToast(tr("cleaner.info.prefix"), msg); } } // namespace Helper \ No newline at end of file diff --git a/src/Features/UnloadActorClean.cpp b/src/Features/UnloadActorClean.cpp index 267a78b..895a486 100644 --- a/src/Features/UnloadActorClean.cpp +++ b/src/Features/UnloadActorClean.cpp @@ -5,8 +5,8 @@ namespace UnloadActorClean { void cleanUnloadActor() { auto& config = Cleaner::Entry::getInstance().getConfig(); - gmlib::world::actor::UnloadedActor::foreachUnloadedActor( - [config](gmlib::world::actor::UnloadedActor& actor) -> bool { + gmlib::UnloadedActor::foreachUnloadedActor( + [config](gmlib::UnloadedActor& actor) -> bool { for (auto& actorname : config.UnloadActorClean.CleanList) { if (actor.getTypeName() == actorname) { actor.remove(); diff --git a/src/Mod.cpp b/src/Mod.cpp index f4fb2a2..25e9e24 100644 --- a/src/Mod.cpp +++ b/src/Mod.cpp @@ -2,6 +2,7 @@ #include "Features/Cleaner.h" #include "Global.h" #include "Language.h" +#include "ll/api/utils/ErrorUtils.h" namespace Cleaner { @@ -14,12 +15,15 @@ bool Entry::load() { return true; } bool Entry::enable() { mConfig.emplace(); - ll::config::loadConfig(*mConfig, getSelf().getConfigDir() / "config.json"); - + try { + ll::config::loadConfig(*mConfig, getSelf().getConfigDir() / "config.json"); + } catch (...) { + ll::error_utils::printCurrentException(getSelf().getLogger()); + } saveConfig(); - gmlib::locale::I18nAPI::updateOrCreateLanguageFile(getSelf().getLangDir(), "en_US", en_US); - gmlib::locale::I18nAPI::updateOrCreateLanguageFile(getSelf().getLangDir(), "zh_CN", zh_CN); - gmlib::locale::I18nAPI::loadLanguagesFromDirectory(getSelf().getLangDir()); + gmlib::I18nAPI::updateOrCreateLanguageFile(getSelf().getLangDir(), "en_US", en_US); + gmlib::I18nAPI::updateOrCreateLanguageFile(getSelf().getLangDir(), "zh_CN", zh_CN); + gmlib::I18nAPI::loadLanguagesFromDirectory(getSelf().getLangDir()); Cleaner::ListenEvents(); RegisterCommands(); Cleaner::loadCleaner(); @@ -44,5 +48,5 @@ void Entry::saveConfig() { ll::config::saveConfig(*mConfig, getSelf().getConfigD LL_REGISTER_MOD(Cleaner::Entry, Cleaner::Entry::getInstance()); std::string tr(std::string const& key, std::vector const& params) { - return gmlib::locale::I18nAPI::get(key, params); + return gmlib::I18nAPI::get(key, params); } diff --git a/src/RegisterCommand.cpp b/src/RegisterCommand.cpp index 1bc5aec..5586c15 100644 --- a/src/RegisterCommand.cpp +++ b/src/RegisterCommand.cpp @@ -46,13 +46,13 @@ void RegCleanerCommand() { case CleanerParam::Action::tps: { return output.success( tr("cleaner.command.tps.output", - {S(gmlib::world::GMLevel::getInstance()->getServerCurrentTps()), - S(gmlib::world::GMLevel::getInstance()->getServerAverageTps())}) + {S(gmlib::GMLevel::getInstance()->getServerCurrentTps()), + S(gmlib::GMLevel::getInstance()->getServerAverageTps())}) ); } case CleanerParam::Action::mspt: { return output.success( - tr("cleaner.command.mspt.output", {S(gmlib::world::GMLevel::getInstance()->getServerMspt())}) + tr("cleaner.command.mspt.output", {S(gmlib::GMLevel::getInstance()->getServerMspt())}) ); } case CleanerParam::Action::reload: { diff --git a/tooth.json b/tooth.json index 2087103..3302750 100644 --- a/tooth.json +++ b/tooth.json @@ -2,11 +2,15 @@ "format_version": 3, "format_uuid": "289f771f-2c9a-4d73-9f3f-8492495a924d", "tooth": "github.com/GroupMountain/Cleaner", - "version": "0.13.4", + "version": "0.13.5", "info": { "name": "Cleaner", "description": "A Powerful Entities Cleaning up Mod for BDS", - "tags": ["levilamina", "cleaner", "gmlib"], + "tags": [ + "levilamina", + "cleaner", + "gmlib" + ], "avatar_url": "" }, "variants": [ @@ -14,20 +18,20 @@ "label": "", "platform": "win-x64", "dependencies": { - "github.com/GroupMountain/GMLIB": ">= 1.0.0", - "github.com/MiracleForest/iListenAttentively-Release": ">= 0.4.0" + "github.com/GroupMountain/GMLIB": ">=1.0.0", + "github.com/MiracleForest/iListenAttentively-Release": ">=0.4.1" }, "assets": [ { "type": "zip", "urls": [ - "https://github.com/GroupMountain/Cleaner/releases/download/v0.13.4/Cleaner-windows-x64.zip" + "https://github.com/GroupMountain/Cleaner/releases/download/v0.13.5/Cleaner-windows-x64.zip" ], "placements": [ { "type": "dir", "src": "Cleaner/", - "dest": "mods/Cleaner" + "dest": "plugins/Cleaner" } ] } @@ -46,4 +50,4 @@ } } ] -} +} \ No newline at end of file diff --git a/xmake.lua b/xmake.lua index d415a20..302bc6b 100644 --- a/xmake.lua +++ b/xmake.lua @@ -9,10 +9,10 @@ if not has_config("vs_runtime") then end -- Option 1: Use the latest version of LeviLamina released on GitHub. -add_requires("levilamina") -add_requires("levibuildscript") -add_requires("gmlib") -add_requires("ilistenattentively") +add_requires("levilamina 1.1.1") +add_requires("levibuildscript 0.3.0") +add_requires("gmlib 1.0.0") +add_requires("ilistenattentively 0.4.1") target("Cleaner") -- Change this to your mod name. add_cxflags( @@ -32,15 +32,13 @@ target("Cleaner") -- Change this to your mod name. ) add_defines( "NOMINMAX", - "UNICODE", - "_HAS_CXX17", - "_HAS_CXX20", - "_HAS_CXX23" + "UNICODE", + "_HAS_CXX23=1" ) add_rules("@levibuildscript/linkrule") set_exceptions("none") set_kind("shared") - set_languages("cxx23") + set_languages("cxx20") after_build(function (target) local mod_packer = import("scripts.after_build")