From 5bca67d884bab2bfad41751391591ab2e6aadbf0 Mon Sep 17 00:00:00 2001 From: EpsilonZunsat <2748716171@qq.com> Date: Tue, 25 Mar 2025 19:40:55 +0800 Subject: [PATCH] feat: add UnloadActorClean --- src/Config.h | 5 +++++ src/Features/Cleaner.cpp | 3 +++ src/Features/Cleaner.h | 6 ++++++ src/Features/UnloadActorClean.cpp | 19 +++++++++++++++++++ src/Mod.cpp | 1 + 5 files changed, 34 insertions(+) create mode 100644 src/Features/UnloadActorClean.cpp diff --git a/src/Config.h b/src/Config.h index 5507bd8..a7abf3d 100644 --- a/src/Config.h +++ b/src/Config.h @@ -91,5 +91,10 @@ struct Config { int CheckDelay = 30; int Percentage = 50; } VoteClean; + + struct Unload_Actor_Clean { + bool Enabled = false; + std::vector CleanList = {"minecraft:iron_golem", "minecraft:zombie_pigman"}; + } UnloadActorClean; }; } // namespace Cleaner \ No newline at end of file diff --git a/src/Features/Cleaner.cpp b/src/Features/Cleaner.cpp index 2b4782d..e23caf6 100644 --- a/src/Features/Cleaner.cpp +++ b/src/Features/Cleaner.cpp @@ -4,6 +4,9 @@ namespace Cleaner { void loadCleaner() { auto& config = Cleaner::Entry::getInstance().getConfig(); + if(config.UnloadActorClean.Enabled){ + UnloadActorClean::cleanUnloadActor(); + } if (config.ScheduleClean.Enabled) { Cleaner::AutoCleanTask(config.ScheduleClean.CleanInterval); } diff --git a/src/Features/Cleaner.h b/src/Features/Cleaner.h index ea13f4d..a8f52ee 100644 --- a/src/Features/Cleaner.h +++ b/src/Features/Cleaner.h @@ -26,4 +26,10 @@ namespace VoteClean { extern void voteCommandExecute(Player* pl); +} + +namespace UnloadActorClean { + +extern void cleanUnloadActor(); + } \ No newline at end of file diff --git a/src/Features/UnloadActorClean.cpp b/src/Features/UnloadActorClean.cpp new file mode 100644 index 0000000..267a78b --- /dev/null +++ b/src/Features/UnloadActorClean.cpp @@ -0,0 +1,19 @@ +#include "Cleaner.h" +#include "Global.h" +#include "gmlib/mc/world/actor/UnloadedActor.h" + +namespace UnloadActorClean { +void cleanUnloadActor() { + auto& config = Cleaner::Entry::getInstance().getConfig(); + gmlib::world::actor::UnloadedActor::foreachUnloadedActor( + [config](gmlib::world::actor::UnloadedActor& actor) -> bool { + for (auto& actorname : config.UnloadActorClean.CleanList) { + if (actor.getTypeName() == actorname) { + actor.remove(); + } + } + return true; + } + ); +} +} // namespace UnloadActorClean \ No newline at end of file diff --git a/src/Mod.cpp b/src/Mod.cpp index 44e97ba..f4fb2a2 100644 --- a/src/Mod.cpp +++ b/src/Mod.cpp @@ -15,6 +15,7 @@ bool Entry::load() { return true; } bool Entry::enable() { mConfig.emplace(); ll::config::loadConfig(*mConfig, getSelf().getConfigDir() / "config.json"); + saveConfig(); gmlib::locale::I18nAPI::updateOrCreateLanguageFile(getSelf().getLangDir(), "en_US", en_US); gmlib::locale::I18nAPI::updateOrCreateLanguageFile(getSelf().getLangDir(), "zh_CN", zh_CN);