From f4727eb09b2557dae05697de8dfaf3b338e7d068 Mon Sep 17 00:00:00 2001 From: wed150 Date: Sat, 20 Jun 2026 20:56:56 +0800 Subject: [PATCH] fix: fix resource lang --- manifest.json | 3 + src/DeathMessage.cpp | 29 +++++- src/Entry.cpp | 7 +- src/Global.h | 6 +- src/Language.h | 219 ++++++++++++++++++++++--------------------- xmake.lua | 3 +- 6 files changed, 150 insertions(+), 117 deletions(-) diff --git a/manifest.json b/manifest.json index 439dae2..f61c8b3 100644 --- a/manifest.json +++ b/manifest.json @@ -8,6 +8,9 @@ "dependencies": [ { "name": "GMLIB" + }, + { + "name": "ModAPI" } ] } \ No newline at end of file diff --git a/src/DeathMessage.cpp b/src/DeathMessage.cpp index addb139..0ddbcf8 100644 --- a/src/DeathMessage.cpp +++ b/src/DeathMessage.cpp @@ -12,7 +12,8 @@ #include "mc/world/actor/ActorDamageByChildActorSource.h" #include "ll/api/service/Bedrock.h" #include "mc/world/level/Level.h" - +#include "mc/world/actor/monster/EnderCrystal.h" +#include "mc/world/actor/ActorHurtResult.h" #include "mc/world/actor/Actor.h" phmap::flat_hash_map mFallHeightMap; @@ -176,7 +177,7 @@ DeathMessageResult makeDeathMessage( } auto weaponname = killer->getCarriedItem().getCustomName(); if (!weaponname.empty()) { - weaponname = "[" + weaponname + "§r]"; + weaponname = "[§b§o" + weaponname + "§r]"; res.second.push_back(weaponname); } else { ll::utils::string_utils::replaceAll(res.first, ".item", ""); @@ -327,6 +328,30 @@ DeathMessageResult translateDeathMessage(DeathMessageResult origin, std::string return makeDeathMessage((int)damageCause, origin, name, killer, weaponName, isEscaping); } +LL_AUTO_TYPE_INSTANCE_HOOK( + CryatslHurtHook, + HookPriority::Normal, + EnderCrystal, + &EnderCrystal::$_hurt, + ::ActorHurtResult, + ActorDamageSource const& a1, + float a2, + bool a3, + bool a4 +) { + auto res = origin(a1, a2, a3, a4); + isCrystal = true; + auto& executor = ll::thread::ThreadPoolExecutor::getDefault(); + auto callback = executor.executeAfter( + [] { + isCrystal = false; + }, + ll::chrono::game::ticks(1) + ); + return res; +} + + LL_AUTO_TYPE_INSTANCE_HOOK( DeathMessageHook1, HookPriority::Lowest, diff --git a/src/Entry.cpp b/src/Entry.cpp index b54b96b..f5bba7b 100644 --- a/src/Entry.cpp +++ b/src/Entry.cpp @@ -45,8 +45,8 @@ bool Entry::load() { } bool Entry::enable() { - /* RegisterDamageDefinition(); - ListenEvents();*/ + RegisterDamageDefinition(); + /* ListenEvents();*/ return true; } @@ -72,9 +72,10 @@ void Entry::loadI18n() { } void Entry::loadResourcePack() { - auto resource = gmlib::i18n::ResourceI18n(getSelf().getModDir() / u8"resource", MOD_NAME, 0, 8, 0); + auto resource = gmlib::i18n::ResourceI18n{getSelf().getModDir() / u8"lang", MOD_NAME, 0, 8, 0}; resource.addLanguage("en_US", en_US); resource.addLanguage("zh_CN", zh_CN); + resource.loadAllLanguages(); } } // namespace DeathMessages diff --git a/src/Global.h b/src/Global.h index 55c481c..8e296f6 100644 --- a/src/Global.h +++ b/src/Global.h @@ -7,7 +7,9 @@ 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 = {}); + extern void RegisterDamageDefinition(); -extern void ListenEvents();*/ \ No newline at end of file +/* + *extern std::string tr(std::string const& key, std::vector const& data = {}); + *extern void ListenEvents();*/ \ No newline at end of file diff --git a/src/Language.h b/src/Language.h index 33c4632..2b77685 100644 --- a/src/Language.h +++ b/src/Language.h @@ -253,113 +253,114 @@ multiplayer.player.left=%s left the game )"; std::string zh_CN = R"( -death.attack.anvil=%1$s被坠落的铁砧压扁了 -death.attack.anvil.player=%1$sz在与%2$s战斗时被坠落的铁砧压扁了 -death.attack.anvil.item=%1$s在与持有%3$s的%2$s战斗时被坠落的铁砧压扁了 -death.attack.arrow=%1$s被%2$s射杀 -death.attack.arrow.item=%1$s被%2$s用%3$s射杀 -death.attack.bullet=%1$s被%2$s狙击了 -death.attack.cactus=%1$s被戳死了 -death.attack.cactus.player=%1$s在试图逃离%2$s时撞上了仙人掌 -death.attack.cactus.item=%1$s在试图逃离持有%3$s的%2$s时撞上了仙人掌 -death.attack.drown=%1$s淹死了 -death.attack.drown.player=%1$s在试图逃离%2$s时淹死了 -death.attack.drown.item=%1$s在试图逃离持有%3$s的%2$s时淹死了 -death.attack.explosion=%1$s爆炸了 -death.attack.explosion.player=%1$s被%2$s炸死了 -death.attack.explosion.item=%1$s被%2$s使用%3$s炸死了 -death.attack.badRespawnPoint.message=%1$s被[刻意的游戏设计]杀死了 -death.attack.fall=%1$s落地过猛 -death.attack.fall.player=%1$s在试图逃离%2$s时落地过猛 -death.attack.fall.item=%1$s在试图逃离持有%3$s的%2$s时落地过猛 -death.attack.fallingBlock=%1$s被坠落的方块压扁了 -death.attack.fallingBlock.player=%1$sz在与%2$s战斗时被坠落的方块压扁了 -death.attack.fallingBlock.item=%1$s在与持有%3$s的%2$s战斗时被坠落的方块压扁了 -death.attack.fireball=%1$s被%2$s用火球烧死了 -death.attack.fireball.item=%1$s被%2$s用%3$s发射的火球烧死了 -death.attack.fireworks=%1$s随着一声巨响消失了 -death.attack.fireworks.player=%1$s在与%2$s战斗时随着一声巨响消失了 -death.attack.fireworks.item=%1$s随着%2$s用%3$s发射的烟花发出的巨响消失了 -death.attack.flyIntoWall=%1$s感受到了动能 -death.attack.flyIntoWall.player=%1$s在试图逃离%2$s时感受到了动能 -death.attack.flyIntoWall.item=%1$s在试图逃离持有%3$s的%2$s时感受到了动能 -death.attack.generic=%1$s死了 -death.attack.generic.player=%1$s死于%2$s -death.attack.indirectMagic=%1$s被%2$s使用的魔法杀死了 -death.attack.indirectMagic.item=%1$s被%2$s用%3$s杀死了 -death.attack.inFire=%1$s浴火焚身 -death.attack.inFire.player=%1$s在与%2$s战斗时不慎走入了火中 -death.attack.inFire.item=%1$s在与持有%3$s的%2$s战斗时不慎走入了火中 -death.attack.inWall=%1$s在墙里窒息而亡 -death.attack.inWall.player=%1$s在与%2$s战斗时在墙里窒息而亡 -death.attack.inWall.item=%1$s在与持有%3$s的%2$s战斗时在墙里窒息而亡 -death.attack.lava=%1$s试图在熔岩里游泳 -death.attack.lava.player=%1$s在试图逃离%2$s时试图在熔岩里游泳 -death.attack.lava.item=%1$s在试图逃离持有%3$s的%2$s时试图在熔岩里游泳 -death.attack.lightningBolt=%1$s被闪电击中 -death.attack.lightningBolt.player=%1$s在与%2$s战斗时被闪电击中 -death.attack.lightningBolt.item=%1$s在与持有%3$s的%2$s战斗时被闪电击中 -death.attack.magic=%1$s被魔法杀死了 -death.attack.hotFloor=%1$s发现地板是熔岩做的 -death.attack.hotFloor.player=%1$s因%2$s而步入危险之地 -death.attack.hotFloor.item=%1$s因持有%3$s的%2$s而步入危险之地 -death.attack.mob=%1$s被%2$s杀死了 -death.attack.mob.item=%1$s被%2$s用%3$s杀死了 -death.attack.sting=%1$s被%2$s蛰死了 -death.attack.sting.item=%1$s被%2$s用%3$s蛰死了 -death.attack.onFire=%1$s被烧死了 -death.attack.onFire.player=%1$s在与%2$s战斗时被烤的酥脆 -death.attack.onFire.item=%1$s在与持有%3$s的%2$s战斗时被烤的酥脆 -death.attack.outOfWorld=%1$s掉出了这个世界 -death.attack.outOfWorld.player=%1$s与%2$s不共戴天 -death.attack.outOfWorld.item=%1$s与持有%3$s的%2$s不共戴天 -death.attack.player=%1$s被%2$s杀死了 -death.attack.player.item=%1$s被%2$s用%3$s杀死了 -death.attack.spit=%1$s被%2$s的口水淹死了 -death.attack.starve=%1$s饿死了 -death.attack.starve.player=%1$s在与%2$s战斗时饿死了 -death.attack.starve.item=%1$s在与持有%3$s的%2$s战斗时饿死了 -death.attack.sweetBerry=%1$s被甜浆果丛刺死了 -death.attack.sweetBerry.player=%1$s在试图逃离%2$s时被甜浆果丛刺死了 -death.attack.sweetBerry.item=%1$s在试图逃离持有%3$s的%2$s时被甜浆果丛刺死了 -death.attack.thorns=%1$s在试图伤害%2$s时被杀 -death.attack.thorns.item=%1$s在试图伤害%2$s时被%3$s杀死 -death.attack.thrown=%1$s被%2$s给砸死了 -death.attack.thrown.item=%1$s被%2$s用%3$s给砸死了 -death.attack.trident=%1$s被%2$s刺穿了 -death.attack.trident.item=%1$s被%2$s使用%3$s刺穿了 -death.attack.wither=%1$s凋零了 -death.attack.wither.player=%1$s在与%2$s战斗时凋零了 -death.attack.wither.item=%1$s在与持有%3$s的%2$s战斗时凋零了 -death.attack.freeze=%1$s被冻死了 -death.attack.freeze.player=%1$s被%2$s冻死了 -death.attack.freeze.item=%1$s被持有%3$s的%2$s冻死了 -death.attack.sonicBoom=%1$s被一道音波尖啸抹除了 -death.attack.sonicBoom.player=%1$s在试图逃离%2$s时被一道音波尖啸抹除了 -death.attack.stalactite=%1$s被坠落的钟乳石刺穿了 -death.attack.stalactite.player=%1$s在与%2$s战斗时被坠落的钟乳石刺穿了 -death.attack.stalactite.item=%1$s在与持有%3$s的%2$s战斗时被坠落的钟乳石刺穿了 -death.attack.stalagmite=%1$s被石笋刺穿了 -death.attack.stalagmite.player=%1$s在与%2$s战斗时被石笋刺穿了 -death.attack.stalagmite.item=%1$s在与持有%3$s的%2$s战斗时被石笋刺穿了 -death.attack.witherSkull=%1$s被%2$s发射的头颅射杀 -death.attack.witherSkull.item=%1$s被%2$s用%3$s发射的头颅射杀 -death.attack.even_more_magic=%1$s被不为人知的魔法杀死了 -death.attack.genericKill=%1$s被杀死了 -death.attack.genericKill.player=%1$s在与%2$s战斗时被杀死了 -death.attack.genericKill.item=%1$s在与持有%3$s的%2$s战斗时被杀死了 -death.attack.dragonBreath=%1$s被龙息烤熟了 -death.attack.dragonBreath.player=%1$s被%2$s的龙息烤熟了 -death.attack.dryout=%1$s因脱水而死 -death.attack.dryout.player=%1$s在试图逃离%2$s时因脱水而死 -death.attack.outsideBorder=%1$s脱离了这个世界 -death.attack.outsideBorder.player=%1$s在与%2$s战斗时脱离了这个世界 -death.fell.accident.generic=%1$s从高处摔了下来 -death.fell.assist=%1$s因为%2$s注定要摔死 -death.fell.assist.item=%1$s因为%2$s使用了%3$s注定要摔死 -death.fell.finish=%1$s摔伤得太重并被%2$s完结了生命 -death.fell.finish.item=%1$s摔伤得太重并被%2$s用%3$s完结了生命 -death.fell.killer=%1$s注定要摔死 +death.attack.anvil=%1$s 被坠落的铁砧压扁了 +death.attack.anvil.player=%1$s 在与 %2$s 战斗时被坠落的铁砧压扁了 +death.attack.anvil.item=%1$s 在与持有 %3$s 的 %2$s 战斗时被坠落的铁砧压扁了 +death.attack.arrow=%1$s被 %2$s 射杀 +death.attack.arrow.item=%1$s 被 %2$s 用 %3$s 射杀 +death.attack.bullet=%1$s被 %2$s 狙击了 +death.attack.cactus=%1$s 被戳死了 +death.attack.cactus.player=%1$s 在试图逃离 %2$s 时撞上了仙人掌 +death.attack.cactus.item=%1$s 在试图逃离持有 %3$s 的 %2$s 时撞上了仙人掌 +death.attack.drown=%1$s 淹死了 +death.attack.drown.player=%1$s 在试图逃离 %2$s 时淹死了 +death.attack.drown.item=%1$s 在试图逃离持有 %3$s 的 %2$s 时淹死了 +death.attack.explosion=%1$s 爆炸了 +death.attack.explosion.player=%1$s 被 %2$s 炸死了 +death.attack.explosion.item=%1$s 被 %2$s 使用 %3$s 炸死了 +death.attack.badRespawnPoint.message= %1$s 被 [刻意的游戏设计] 杀死了 +death.attack.fall=%1$s 落地过猛 +death.attack.fall.player=%1$s 在试图逃离 %2$s 时落地过猛 +death.attack.fall.item=%1$s 在试图逃离持有 %3$s 的 %2$s 时落地过猛 +death.attack.fallingBlock=%1$s 被坠落的方块压扁了 +death.attack.fallingBlock.player=%1$sz 在与 %2$s 战斗时被坠落的方块压扁了 +death.attack.fallingBlock.item=%1$s 在与持有 %3$s 的 %2$s 战斗时被坠落的方块压扁了 +death.attack.fireball=%1$s被 %2$s 用火球烧死了 +death.attack.fireball.item=%1$s被 %2$s 用 %3$s 发射的火球烧死了 +death.attack.fireworks=%1$s 随着一声巨响消失了 +death.attack.fireworks.player=%1$s 在与 %2$s 战斗时随着一声巨响消失了 +death.attack.fireworks.item=%1$s 随着 %2$s 用 %3$s 发射的烟花发出的巨响消失了 +death.attack.flyIntoWall=%1$s 感受到了动能 +death.attack.flyIntoWall.player=%1$s 在试图逃离 %2$s 时感受到了动能 +death.attack.flyIntoWall.item=%1$s 在试图逃离持有 %3$s 的 %2$s 时感受到了动能 +death.attack.generic=%1$s 死了 +death.attack.generic.player=%1$s 死于 %2$s +death.attack.indirectMagic=%1$s 被 %2$s 使用的魔法杀死了 +death.attack.indirectMagic.item=%1$s 被 %2$s 用 %3$s 杀死了 +death.attack.inFire=%1$s 浴火焚身 +death.attack.inFire.player=%1$s 在与 %2$s 战斗时不慎走入了火中 +death.attack.inFire.item=%1$s 在与持有 %3$s 的 %2$s 战斗时不慎走入了火中 +death.attack.inWall=%1$s 在墙里窒息而亡 +death.attack.inWall.player=%1$s 在与 %2$s 战斗时在墙里窒息而亡 +death.attack.inWall.item=%1$s 在与持有 %3$s 的 %2$s 战斗时在墙里窒息而亡 +death.attack.lava=%1$s 试图在熔岩里游泳 +death.attack.lava.player=%1$s 在试图逃离 %2$s 时试图在熔岩里游泳 +death.attack.lava.item=%1$s 在试图逃离持有 %3$s 的 %2$s 时试图在熔岩里游泳 +death.attack.lightningBolt=%1$s 被闪电击中 +death.attack.lightningBolt.player=%1$s 在与 %2$s 战斗时被闪电击中 +death.attack.lightningBolt.item=%1$s 在与持有 %3$s 的 %2$s 战斗时被闪电击中 +death.attack.magic=%1$s 被魔法杀死了 +death.attack.hotFloor=%1$s 发现地板是熔岩做的 +death.attack.hotFloor.player=%1$s 因 %2$s 而步入危险之地 +death.attack.hotFloor.item=%1$s 因持有 %3$s 的 %2$s 而步入危险之地 +death.attack.mob=%1$s 被 %2$s 杀死了 +death.attack.mob.item=%1$s 被 %2$s 用 %3$s 杀死了 +death.attack.sting=%1$s 被 %2$s 蛰死了 +death.attack.sting.item=%1$s 被 %2$s 用 %3$s 蛰死了 +death.attack.onFire=%1$s 被烧死了 +death.attack.onFire.player=%1$s 在与 %2$s 战斗时被烤的酥脆 +death.attack.onFire.item=%1$s 在与持有 %3$s 的 %2$s 战斗时被烤的酥脆 +death.attack.outOfWorld=%1$s 掉出了这个世界 +death.attack.outOfWorld.player=%1$s 与 %2$s 不共戴天 +death.attack.outOfWorld.item=%1$s 与持有 %3$s 的 %2$s 不共戴天 +death.attack.player=%1$s 被 %2$s 杀死了 +death.attack.player.item=%1$s 被 %2$s 用 %3$s 杀死了 +death.attack.spit=%1$s 被 %2$s 的口水淹死了 +death.attack.starve=%1$s 饿死了 +death.attack.starve.player=%1$s 在与 %2$s 战斗时饿死了 +death.attack.starve.item=%1$s 在与持有 %3$s 的 %2$s 战斗时饿死了 +death.attack.sweetBerry=%1$s 被甜浆果丛刺死了 +death.attack.sweetBerry.player=%1$s 在试图逃离 %2$s 时被甜浆果丛刺死了 +death.attack.sweetBerry.item=%1$s 在试图逃离持有 %3$s 的 %2$s 时被甜浆果丛刺死了 +death.attack.thorns=%1$s 在试图伤害 %2$s 时被杀 +death.attack.thorns.item=%1$s 在试图伤害 %2$s 时被 %3$s 杀死 +death.attack.thrown=%1$s 被 %2$s 给砸死了 +death.attack.thrown.item=%1$s 被 %2$s 用 %3$s 给砸死了 +death.attack.trident=%1$s 被 %2$s 刺穿了 +death.attack.trident.item=%1$s 被 %2$s 使用 %3$s 刺穿了 +death.attack.wither=%1$s 凋零了 +death.attack.wither.player=%1$s 在与 %2$s 战斗时凋零了 +death.attack.wither.item=%1$s 在与持有 %3$s 的 %2$s 战斗时凋零了 +death.attack.freeze=%1$s 被冻死了 +death.attack.freeze.player=%1$s 被 %2$s 冻死了 +death.attack.freeze.item=%1$s 被持有 %3$s 的 %2$s 冻死了 +death.attack.sonicBoom=%1$s 被一道音波尖啸抹除了 +death.attack.sonicBoom.player=%1$s 在试图逃离 %2$s 时被一道音波尖啸抹除了 +death.attack.stalactite=%1$s 被坠落的钟乳石刺穿了 +death.attack.stalactite.player=%1$s 在与 %2$s 战斗时被坠落的钟乳石刺穿了 +death.attack.stalactite.item=%1$s 在与持有 %3$s 的 %2$s 战斗时被坠落的钟乳石刺穿了 +death.attack.stalagmite=%1$s 被石笋刺穿了 +death.attack.stalagmite.player=%1$s 在与 %2$s 战斗时被石笋刺穿了 +death.attack.stalagmite.item=%1$s 在与持有 %3$s 的 %2$s 战斗时被石笋刺穿了 +death.attack.witherSkull=%1$s 被 %2$s 发射的头颅射杀 +death.attack.witherSkull.item=%1$s 被 %2$s 用 %3$s 发射的头颅射杀 +death.attack.even_more_magic=%1$s 被不为人知的魔法杀死了 +death.attack.genericKill=%1$s 被杀死了 +death.attack.genericKill.player=%1$s 在与 %2$s 战斗时被杀死了 +death.attack.genericKill.item=%1$s 在与持有 %3$s 的 %2$s 战斗时被杀死了 +death.attack.dragonBreath=%1$s 被龙息烤熟了 +death.attack.dragonBreath.player=%1$s 被 %2$s 的龙息烤熟了 +death.attack.dryout=%1$s 因脱水而死 +death.attack.dryout.player=%1$s 在试图逃离 %2$s 时因脱水而死 +death.attack.outsideBorder=%1$s 脱离了这个世界 +death.attack.outsideBorder.player=%1$s 在与 %2$s 战斗时脱离了这个世界 +death.fell.accident.generic=%1$s 从高处摔了下来 +death.fell.assist=%1$s 因为 %2$s 注定要摔死 +death.fell.assist.item=%1$s 因为 %2$s 使用了 %3$s 注定要摔死 +death.fell.finish=%1$s 摔伤得太重并被 %2$s 完结了生命 +death.fell.finish.item=%1$s 摔伤得太重并被 %2$s 用 %3$s 完结了生命 +death.fell.killer=%1$s 注定要摔死 + entity.area_effect_cloud.name=区域效果云 entity.armor_stand.name=盔甲架 entity.arrow.name=箭 @@ -500,6 +501,6 @@ 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退出了游戏 +multiplayer.player.joined=%s 加入了游戏 +multiplayer.player.left=%s 退出了游戏 )"; \ No newline at end of file diff --git a/xmake.lua b/xmake.lua index 9fd647e..3b11627 100644 --- a/xmake.lua +++ b/xmake.lua @@ -10,13 +10,14 @@ end add_requires("levilamina 26.10.5",{configs = {target_type = "server"}}) add_requires("levibuildscript") add_requires("gmlib 26.10.0") +add_requires("modapi 26.10.0") target("DeathMessages") -- Change this to your mod name. add_rules("@levibuildscript/linkrule") add_rules("@levibuildscript/modpacker") add_cxflags( "/EHa", "/utf-8", "/W4", "/w44265", "/w44289", "/w44296", "/w45263", "/w44738", "/w45204") add_defines("NOMINMAX", "UNICODE") - add_packages("levilamina","gmlib") + add_packages("levilamina","gmlib","modapi") set_exceptions("none") -- To avoid conflicts with /EHa. set_kind("shared") set_languages("c++23")