diff --git a/src/Config.h b/src/Config.h index e4f1158..6b1992e 100644 --- a/src/Config.h +++ b/src/Config.h @@ -1,6 +1,7 @@ #pragma once #include +namespace DeathMessages { struct Config { int version = 1; @@ -19,4 +20,5 @@ struct Config { bool Enabled = false; std::string Language = "zh_CN"; } ServerSideTranslation; -}; \ No newline at end of file +}; +} // namespace DeathMessages \ No newline at end of file diff --git a/src/DeathMessage.cpp b/src/DeathMessage.cpp index 4f63604..f55d6c0 100644 --- a/src/DeathMessage.cpp +++ b/src/DeathMessage.cpp @@ -1,108 +1,111 @@ #include "Entry.h" +#include "GMLIB/Mod/Addons/CustomDamageCause.h" #include "Global.h" +#include "ll/api/event/player/PlayerConnectEvent.h" +#include "ll/api/event/player/PlayerDisconnectEvent.h" void RegisterDamageDefinition() { - gmlib::mod::damage::DamageCauseRegistry::setCustomDamageCauseEnabled(); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Anvil, "anvil"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::EntityAttack, "mob"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::RamAttack, "mob"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Drowning, "drown"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::FallingBlock, "fallingBlock"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Fire, "inFire"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::FireTick, "onFire"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Fireworks, "fireworks"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::FlyIntoWall, "flyIntoWall"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Freezing, "freeze"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Lava, "lava"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Lightning, "lightningBolt"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Wither, "wither"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Magic, "indirectMagic"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Magma, "hotFloor"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Stalactite, "stalactite"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Stalagmite, "stalagmite"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Starve, "starve"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Suffocation, "inWall"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::SonicBoom, "sonicBoom"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Void, "outOfWorld"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::SelfDestruct, "genericKill"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Projectile, "thrown"); - gmlib::mod::damage::DamageCauseRegistry::setVanillaCauseMessage(ActorDamageCause::Thorns, "thorns"); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::setCustomDamageCauseEnabled(); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Anvil, "anvil"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::EntityAttack, "mob"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::RamAttack, "mob"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Drowning, "drown"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::FallingBlock, "fallingBlock"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Fire, "inFire"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::FireTick, "onFire"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Fireworks, "fireworks"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::FlyIntoWall, "flyIntoWall"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Freezing, "freeze"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Lava, "lava"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Lightning, "lightningBolt"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Wither, "wither"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Magic, "indirectMagic"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Magma, "hotFloor"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Stalactite, "stalactite"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Stalagmite, "stalagmite"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Starve, "starve"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Suffocation, "inWall"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::SonicBoom, "sonicBoom"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Void, "outOfWorld"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::SelfDestruct, "genericKill"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Projectile, "thrown"); + GMLIB::Mod::DamageCause::DamageCause::setVanillaCauseMessage(ActorDamageCause::Thorns, "thorns"); + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::Projectile, "death.attack.fireball.item", "minecraft:small_fireball" ); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::Projectile, "death.attack.trident.item", "minecraft:thrown_trident" ); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::Projectile, "death.attack.spit", "minecraft:llama_spit" ); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::Projectile, "death.attack.bullet", "minecraft:shulker_bullet" ); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::Projectile, "death.attack.arrow.item", "minecraft:arrow" ); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::Projectile, "death.attack.explosion.player", "minecraft:fireball" ); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::Projectile, "death.attack.mob", "minecraft:breeze_wind_charge_projectile" ); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::Magic, "death.attack.magic", "empty" ); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::SonicBoom, "death.attack.sonicBoom", "minecraft:warden" ); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::Thorns, "death.attack.generic", "empty" ); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::EntityExplosion, "death.attack.explosion.player", "all" ); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::EntityExplosion, "minecraft:wither_skull", "death.attack.witherSkull.item" ); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::EntityExplosion, "minecraft:wither_skull_dangerous", "death.attack.witherSkull.item" ); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::EntityAttack, "minecraft:player", "death.attack.player.item" ); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::EntityAttack, "minecraft:bee", "death.attack.sting.item" ); - gmlib::mod::damage::DamageCauseRegistry::registerCustomDeathMessage( + GMLIB::Mod::DamageCause::DamageCause::registerCustomDeathMessage( ActorDamageCause::RamAttack, "minecraft:player", "death.attack.player.item" @@ -110,25 +113,29 @@ void RegisterDamageDefinition() { } void ListenEvents() { - auto& config = DeathMessages::Entry::getInstance()->getConfig(); + auto& config = DeathMessages::Entry::getInstance().getConfig(); auto& eventBus = ll::event::EventBus::getInstance(); if (config.ConsoleLog.JoinMessage) { eventBus.emplaceListener([](ll::event::player::PlayerConnectEvent& ev) { - infoLogger.info(fmt::format(fg(fmt::color::yellow), tr("multiplayer.player.joined", {ev.self().getName()})) + infoLogger->info(fmt::format(fg(fmt::color::yellow), tr("multiplayer.player.joined", {ev.self().getName()})) ); }); } if (config.ConsoleLog.LeftMessage) { - eventBus.emplaceListener([](ll::event::player::PlayerLeaveEvent& ev) { - infoLogger.info(fmt::format(fg(fmt::color::yellow), tr("multiplayer.player.left", {ev.self().getName()}))); - }); + eventBus.emplaceListener( + [](ll::event::player::PlayerDisconnectEvent& ev) { + infoLogger->info( + fmt::format(fg(fmt::color::yellow), tr("multiplayer.player.left", {ev.self().getName()})) + ); + } + ); } if (config.ConsoleLog.DeathMessage) { - eventBus.emplaceListener( - [](gmlib::event::entity::DeathMessageAfterEvent& ev) { + eventBus.emplaceListener( + [](GMLIB::Event::EntityEvent::DeathMessageAfterEvent& ev) { auto msg = ev.getDeathMessage(); auto info = tr(msg.first, msg.second); - deathLogger.info(info); + deathLogger->info(info); ev.getDeathMessage() = {info, msg.second}; } ); diff --git a/src/Entry.cpp b/src/Entry.cpp index bbf8115..8f04364 100644 --- a/src/Entry.cpp +++ b/src/Entry.cpp @@ -2,14 +2,16 @@ #include "Global.h" #include "Language.h" -ll::Logger logger(MOD_NAME); -ll::Logger deathLogger("Death"); -ll::Logger infoLogger("Server"); +ll::io::LoggerRegistry& loggerRegistry = ll::io::LoggerRegistry::getInstance(); +std::shared_ptr logger = loggerRegistry.getOrCreate(MOD_NAME); +std::shared_ptr deathLogger = loggerRegistry.getOrCreate("Death"); +std::shared_ptr infoLogger = loggerRegistry.getOrCreate("Server"); + namespace DeathMessages { -std::unique_ptr& Entry::getInstance() { - static std::unique_ptr instance; +Entry& Entry::getInstance() { + static Entry instance; return instance; } @@ -24,8 +26,10 @@ bool Entry::load() { loadResourcePack(); } if (getConfig().FileLog.Enabled) { - auto& path = getConfig().FileLog.Path; - deathLogger.setFile(path); + auto& path = getConfig().FileLog.Path; + ll::Polymorphic polymorphicFormatter = + ll::makePolymorphic("[{3:.3%F %T.} {2}][{1}] {0}", false); + deathLogger->addSink(std::make_shared(path, polymorphicFormatter)); } return true; } @@ -41,13 +45,13 @@ bool Entry::disable() { return true; } bool Entry::unload() { mConfig.reset(); mI18n.reset(); - getInstance().reset(); + // getInstance().reset(); return true; } Config& Entry::getConfig() { return mConfig.value(); } -std::optional Entry::getI18n() { return mI18n; } +std::optional Entry::getI18n() { return mI18n; } void Entry::loadI18n() { mI18n.emplace(getSelf().getLangDir(), getConfig().ServerSideTranslation.Language); @@ -58,8 +62,8 @@ void Entry::loadI18n() { } void Entry::loadResourcePack() { - gmlib::tools::VanillaFix::setFixI18nEnabled(); - auto resource = gmlib::i18n::ResourceI18n(getSelf().getModDir() / u8"resource", MOD_NAME, 0, 8, 0); + GMLIB::Mod::VanillaFix::setFixI18nEnabled(); + auto resource = GMLIB::Files::ResourceLanguage(getSelf().getModDir() / u8"resource", MOD_NAME, 0, 8, 0); resource.addLanguage("en_US", en_US); resource.addLanguage("zh_CN", zh_CN); } @@ -69,8 +73,8 @@ void Entry::loadResourcePack() { LL_REGISTER_MOD(DeathMessages::Entry, DeathMessages::Entry::getInstance()); std::string tr(std::string const& key, std::vector const& params) { - if (auto i18n = DeathMessages::Entry::getInstance()->getI18n()) { + if (auto i18n = DeathMessages::Entry::getInstance().getI18n()) { return i18n->get(key, params); } - return gmlib::world::I18nAPI::get(key, params); + return ::I18nAPI::get(key, params); } \ No newline at end of file diff --git a/src/Entry.h b/src/Entry.h index 16731c9..2ba2001 100644 --- a/src/Entry.h +++ b/src/Entry.h @@ -7,9 +7,9 @@ namespace DeathMessages { class Entry { public: - static std::unique_ptr& getInstance(); + static Entry& getInstance(); - Entry(ll::mod::NativeMod& self) : mSelf(self) {} + Entry() : mSelf(*ll::mod::NativeMod::current()) {} [[nodiscard]] ll::mod::NativeMod& getSelf() const { return mSelf; } @@ -27,16 +27,16 @@ public: Config& getConfig(); - std::optional getI18n(); + std::optional getI18n(); void loadI18n(); void loadResourcePack(); private: - ll::mod::NativeMod& mSelf; - std::optional mConfig; - std::optional mI18n; + ll::mod::NativeMod& mSelf; + std::optional mConfig; + std::optional mI18n; }; } // namespace DeathMessages diff --git a/src/Global.h b/src/Global.h index 81a336f..4df6d70 100644 --- a/src/Global.h +++ b/src/Global.h @@ -1,11 +1,11 @@ #pragma once -#include +#include #define MOD_NAME "DeathMessages" -extern ll::Logger logger; -extern ll::Logger deathLogger; -extern ll::Logger infoLogger; +extern std::shared_ptr logger; +extern std::shared_ptr deathLogger; +extern std::shared_ptr infoLogger; extern std::string tr(std::string const& key, std::vector const& data = {}); diff --git a/src/Language.h b/src/Language.h index 687ccfb..33c4632 100644 --- a/src/Language.h +++ b/src/Language.h @@ -243,6 +243,11 @@ entity.warden.name=Warden entity.allay.name=Allay entity.camel.name=Camel entity.chest_raft.name=Raft with Chest +entity.bogged.name=Bogged +entity.wind_charge_projectile.name=Wind Charge +entity.breeze_wind_charge_projectile.name=Wind Charge +entity.breeze.name=Breeze +entity.creaking.name=Creaking multiplayer.player.joined=%s joined the game multiplayer.player.left=%s left the game )"; @@ -494,6 +499,7 @@ entity.bogged.name=沼骸 entity.wind_charge_projectile.name=风弹 entity.breeze_wind_charge_projectile.name=风弹 entity.breeze.name=旋风人 +entity.creaking.name=嘎枝 multiplayer.player.joined=%s加入了游戏 multiplayer.player.left=%s退出了游戏 )"; \ No newline at end of file diff --git a/tooth.json b/tooth.json index 8176e88..97824ea 100644 --- a/tooth.json +++ b/tooth.json @@ -13,7 +13,7 @@ }, "asset_url": "https://github.com/GroupMountain/DeathMessages/releases/download/v0.13.1/DeathMessages-windows-x64.zip", "dependencies": { - "github.com/GroupMountain/GMLIB": ">=0.13.8" + "github.com/GroupMountain/GMLIB": ">=0.13.10" }, "files": { "place": [ diff --git a/xmake.lua b/xmake.lua index c950500..841da63 100644 --- a/xmake.lua +++ b/xmake.lua @@ -7,49 +7,15 @@ if not has_config("vs_runtime") then set_runtimes("MD") end --- Option 1: Use the latest version of LeviLamina released on GitHub. -add_requires("levilamina") -add_requires("gmlib") - --- Option 2: Use a specific version of LeviLamina released on GitHub. --- add_requires("levilamina x.x.x") - --- Option 3: Use the latest commit of LeviLamina on GitHub. --- -- Here, "develop" is the branch name. You can change it to any branch name you want. --- add_requires("levilamina develop") --- -- You can also use debug build of LeviLamina. --- -- add_requires("levilamina develop", {debug = true}) --- package("levilamina") --- add_urls("https://github.com/LiteLDev/LeviLamina.git") - --- add_deps("ctre 3.8.1") --- add_deps("entt 3.12.2") --- add_deps("fmt 10.1.1") --- add_deps("gsl 4.0.0") --- add_deps("leveldb 1.23") --- add_deps("magic_enum 0.9.0") --- add_deps("nlohmann_json 3.11.2") --- add_deps("rapidjson 1.1.0") --- add_deps("pcg_cpp 1.0.0") --- add_deps("pfr 2.1.1") --- add_deps("preloader 1.4.0") --- add_deps("symbolprovider 1.1.0") - --- -- You may need to change this to the target BDS version of your choice. --- add_deps("bdslibrary 1.20.50.03") - --- on_install(function (package) --- import("package.tools.xmake").install(package) --- end) +add_requires("levilamina 1.0.0") +add_requires("levibuildscript 0.3.0") +add_requires("gmlib 0.13.10") target("DeathMessages") -- Change this to your mod name. add_cxflags( "/EHa", "/utf-8" ) - add_defines( - "_HAS_CXX23=1" -- To enable C++23 features - ) add_files( "src/**.cpp" ) @@ -60,12 +26,17 @@ target("DeathMessages") -- Change this to your mod name. "levilamina", "gmlib" ) - add_shflags( - "/DELAYLOAD:bedrock_server.dll" -- Magic to import symbols from BDS + add_defines( + "NOMINMAX", + "UNICODE", + "_HAS_CXX17", + "_HAS_CXX20", + "_HAS_CXX23" ) - set_exceptions("none") -- To avoid conflicts with /EHa + add_rules("@levibuildscript/linkrule") + set_exceptions("none") set_kind("shared") - set_languages("cxx23") + set_languages("cxx20") set_symbols("debug") after_build(function (target)