@@ -6,8 +6,10 @@ import crypticlib.chat.MsgSender
66import crypticlib.chat.TextProcessor
77import crypticlib.listener.BukkitListener
88import me.clip.placeholderapi.PlaceholderAPI
9+ import net.kyori.adventure.text.Component
10+ import net.kyori.adventure.text.ComponentLike
11+ import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
912import net.md_5.bungee.api.ChatMessageType
10- import net.md_5.bungee.api.chat.*
1113import net.minecraft.network.chat.ComponentContents
1214import net.minecraft.network.chat.IChatBaseComponent
1315import net.minecraft.network.chat.contents.TranslatableContents
@@ -36,6 +38,7 @@ class DeathHandler: Listener {
3638 private var toChatMethod: Method ? = null
3739 private var getComponentContentsMethod: Method ? = null
3840 private var getObjsMethod: Method ? = null
41+ private var legacySerializer = LegacyComponentSerializer .legacy(' &' )
3942
4043 @EventHandler
4144 fun onPlayerDeathReplaceMessage (event : PlayerDeathEvent ) {
@@ -68,15 +71,15 @@ class DeathHandler: Listener {
6871
6972 // 以下对死亡消息进行处理
7073 // 此为消息中要替换的聊天组件
71- val objList: MutableList <BaseComponent > = ArrayList ()
74+ val objList: MutableList <ComponentLike > = ArrayList ()
7275
7376 // 以下处理第一个对象的名字,一般是被杀的玩家
7477 val displayNameFormat: String = DEATH_MESSAGE .config.getString(" player_name_format" , " %player_displayname%" )!!
7578 objList.add(getDeadPlayerComponent(deadPlayer, displayNameFormat))
7679
7780 // 当对象数量大于2等于2时,意味着有击杀者
7881 if (objArrLength >= 2 ) {
79- objList.add(getKillerComponent(deadPlayer, displayNameFormat ))
82+ objList.add(getKillerComponent(deadPlayer))
8083 }
8184
8285 // 当有三个以上对象时,说明有使用的武器
@@ -85,7 +88,7 @@ class DeathHandler: Listener {
8588 }
8689
8790 // 组装成完整的死亡消息组件
88- val deathMsgComponent = TranslatableComponent (TextProcessor .color(message), * objList.toTypedArray())
91+ val deathMsgComponent = Component .translatable (TextProcessor .color(message), * objList.toTypedArray())
8992
9093 // 当为all时直接让其为null,下面判断两种方式都发送
9194 val chatMessageTypeStr = DEATH_MESSAGE .config.getString(" death_message_type" , " chat" )!! .uppercase()
@@ -104,14 +107,20 @@ class DeathHandler: Listener {
104107 if (deadPlayer != onlinePlayer) {
105108 if (DEATH_MESSAGE .isPlayerDeathMsgFilterOn(onlinePlayer)) continue
106109 }
107- if (chatMessageType != null )
108- onlinePlayer.spigot().sendMessage(chatMessageType, deathMsgComponent)
109- else {
110- onlinePlayer.spigot().sendMessage(ChatMessageType .CHAT , deathMsgComponent)
111- onlinePlayer.spigot().sendMessage(ChatMessageType .ACTION_BAR , deathMsgComponent)
110+ when (chatMessageType) {
111+ ChatMessageType .CHAT , ChatMessageType .SYSTEM -> {
112+ onlinePlayer.sendMessage(deathMsgComponent)
113+ }
114+ ChatMessageType .ACTION_BAR -> {
115+ onlinePlayer.sendActionBar(deathMsgComponent)
116+ }
117+ null -> {
118+ onlinePlayer.sendMessage(deathMsgComponent)
119+ onlinePlayer.sendActionBar(deathMsgComponent)
120+ }
112121 }
113122 }
114- Bukkit .getConsoleSender().spigot(). sendMessage(deathMsgComponent)
123+ Bukkit .getConsoleSender().sendMessage(deathMsgComponent)
115124 entityHurtPlayerMap.remove(deadPlayer.uniqueId)
116125 event.deathMessage = null
117126 }
@@ -202,91 +211,59 @@ class DeathHandler: Listener {
202211 }
203212 }
204213
205- private fun getDeadPlayerComponent (deadPlayer : Player , displayNameFormat : String ): BaseComponent {
214+ private fun getDeadPlayerComponent (deadPlayer : Player , displayNameFormat : String ): Component {
206215 var deadPlayerDisplayName =
207216 if (Bukkit .getPluginManager().getPlugin(" PlaceholderAPI" ) != null )
208217 TextProcessor .color(PlaceholderAPI .setPlaceholders(deadPlayer, displayNameFormat))
209218 else
210219 deadPlayer.displayName
211220 deadPlayerDisplayName = TextProcessor .color(deadPlayerDisplayName)
212- val deadPlayerDisplayCompound: BaseComponent = TextComponent ()
213- for (baseComponent in TextComponent .fromLegacyText(deadPlayerDisplayName)) {
214- deadPlayerDisplayCompound.addExtra(baseComponent)
215- }
216-
217- return deadPlayerDisplayCompound
221+ val deserialize = legacySerializer.deserialize(deadPlayerDisplayName)
222+ deserialize.hoverEvent(deadPlayer.asHoverEvent())
223+ return deserialize
218224 }
219225
220- private fun getKillerComponent (deadPlayer : Player , displayNameFormat : String ): BaseComponent {
221- return if (deadPlayer.killer != null ) {
226+ private fun getKillerComponent (deadPlayer : Player ): Component {
227+ val killer = deadPlayer.killer
228+ return if (killer != null ) {
222229 // 当玩家存在击杀者时,返回击杀者的名字
223- var killerDisplayNameStr: String = if (Bukkit .getPluginManager().getPlugin(" PlaceholderAPI" ) != null ) TextProcessor .color(
224- PlaceholderAPI .setPlaceholders(deadPlayer.killer, displayNameFormat)
225- ) else
226- deadPlayer.killer!! .displayName
227- killerDisplayNameStr = TextProcessor .color(killerDisplayNameStr)
228- val killerDisplayCompound: BaseComponent = TextComponent ()
229- for (baseComponent in TextComponent .fromLegacyText(killerDisplayNameStr)) {
230- killerDisplayCompound.addExtra(baseComponent)
231- }
232- killerDisplayCompound
230+ val displayName = killer.displayName()
231+ displayName.hoverEvent(killer.asHoverEvent())
232+ displayName
233233 } else {
234234 // 当不存在击杀者时,尝试获取击杀实体的名字
235235 val lastEntityUuid = entityHurtPlayerMap[deadPlayer.uniqueId]
236236 if (lastEntityUuid == null || Bukkit .getEntity(lastEntityUuid) == null ) {
237237 // 当不存在击杀实体时,说明玩家可能死于方块爆炸
238238 val bedRespawnPoint = DataManager .getMessage(deadPlayer, " bad.respawn.point" )? : " [刻意的游戏设计]"
239- val bedRespawnDisplayCompound: BaseComponent = TextComponent ()
240- for (baseComponent in TextComponent .fromLegacyText(bedRespawnPoint)) {
241- bedRespawnDisplayCompound.addExtra(baseComponent)
242- }
243- bedRespawnDisplayCompound
239+ legacySerializer.deserialize(bedRespawnPoint)
244240 } else {
245241 // 当存在击杀实体时,尝试获取击杀实体
246242 val lastEntity = Bukkit .getEntity(entityHurtPlayerMap[deadPlayer.uniqueId]!! )
247- if (lastEntity!! .customName != null ) {
248- val customNameDisplayCompound: BaseComponent = TextComponent ()
249- for (baseComponent in TextComponent .fromLegacyText(
250- lastEntity.customName
251- )) {
252- customNameDisplayCompound.addExtra(baseComponent)
253- }
254- customNameDisplayCompound
243+ if (lastEntity!! .customName() != null ) {
244+ val customName = lastEntity.customName()!!
245+ customName.hoverEvent(lastEntity.asHoverEvent())
246+ customName
255247 } else {
256- val key = lastEntity.type.translationKey
257- TranslatableComponent (key)
248+ val key = lastEntity.type.translationKey()
249+ val translatable = Component .translatable(key)
250+ translatable.hoverEvent(lastEntity.asHoverEvent())
251+ translatable
258252 }
259253 }
260254 }
261255 }
262256
263- private fun getKillItemComponent (deadPlayer : Player ): BaseComponent {
264- var itemName: String
257+ private fun getKillItemComponent (deadPlayer : Player ): Component {
265258 val handItem: ItemStack = if (deadPlayer.killer != null ) {
266259 deadPlayer.killer!! .inventory.itemInMainHand
267260 } else {
268261 val lastEntity = Bukkit .getEntity(entityHurtPlayerMap[deadPlayer.uniqueId]!! )
269262 (lastEntity as LivingEntity ? )!! .equipment!! .itemInMainHand
270263 }
271- val meta = handItem.itemMeta
272- itemName = if (meta == null ) handItem.type.name else {
273- if (meta.hasDisplayName()) {
274- meta.displayName
275- } else {
276- meta.localizedName
277- }
278- }
279- val itemNameFormat: String = if (handItem.enchantments.isEmpty()) {
280- DEATH_MESSAGE .config.getString(" item_default_format" , " &r[%item_name%&r]" )!!
281- } else {
282- DEATH_MESSAGE .config.getString(" item_enchanted_format" , " &b[%item_name%&b]" )!!
283- }
284- itemName = itemNameFormat.replace(" %item_name%" , itemName)
285- itemName = TextProcessor .color(itemName)
286- val itemDisplayCompound: BaseComponent = TextComponent ()
287- itemDisplayCompound.extra = TextComponent .fromLegacyText(itemName).toMutableList()
288- // itemDisplayCompound.hoverEvent = ItemFactory.item(handItem).toHover(); //TODO 寻找新的物品转HoverEvent方法
289- return itemDisplayCompound
264+ val displayName = handItem.displayName()
265+ displayName.hoverEvent(handItem.asHoverEvent())
266+ return displayName
290267 }
291268
292269 @EventHandler
0 commit comments