diff --git a/Core/src/main/java/dev/mrshawn/deathmessages/utils/Assets.java b/Core/src/main/java/dev/mrshawn/deathmessages/utils/Assets.java index 0acd0933..734253e2 100644 --- a/Core/src/main/java/dev/mrshawn/deathmessages/utils/Assets.java +++ b/Core/src/main/java/dev/mrshawn/deathmessages/utils/Assets.java @@ -612,23 +612,34 @@ public static TextComponent getProjectile(boolean gang, PlayerManager pm, Living msg = ComponentUtil.sortHoverEvents(msg, rawEvents); if (msg.contains("%weapon%") && pm.getLastDamage().equals(EntityDamageEvent.DamageCause.PROJECTILE)) { - ItemStack i = mob.getEquipment().getItemInMainHand(); - Component displayName; - if (i.getItemMeta() == null || !i.getItemMeta().hasDisplayName() || i.getItemMeta().getDisplayName().isEmpty()) { - if (Settings.getInstance().getConfig().getBoolean(Config.DISABLE_WEAPON_KILL_WITH_NO_CUSTOM_NAME_ENABLED.getPath())) { - if (!Settings.getInstance().getConfig().getString(Config.DISABLE_WEAPON_KILL_WITH_NO_CUSTOM_NAME_SOURCE_PROJECTILE_DEFAULT_TO.getPath()) - .equals(projectileDamage)) { - return getProjectile(gang, pm, mob, Settings.getInstance().getConfig().getString(Config.DISABLE_WEAPON_KILL_WITH_NO_CUSTOM_NAME_SOURCE_PROJECTILE_DEFAULT_TO.getPath())); + Component weaponHover; + + if (!projectileDamage.equals("Projectile-ShulkerBullet")) { + ItemStack i = mob.getEquipment().getItemInMainHand(); + Component displayName; + if (i.getItemMeta() == null || !i.getItemMeta().hasDisplayName() || i.getItemMeta().getDisplayName().isEmpty()) { + if (Settings.getInstance().getConfig().getBoolean(Config.DISABLE_WEAPON_KILL_WITH_NO_CUSTOM_NAME_ENABLED.getPath())) { + if (!Settings.getInstance().getConfig().getString(Config.DISABLE_WEAPON_KILL_WITH_NO_CUSTOM_NAME_SOURCE_PROJECTILE_DEFAULT_TO.getPath()) + .equals(projectileDamage)) { + return getProjectile(gang, pm, mob, Settings.getInstance().getConfig().getString(Config.DISABLE_WEAPON_KILL_WITH_NO_CUSTOM_NAME_SOURCE_PROJECTILE_DEFAULT_TO.getPath())); + } } + displayName = getI18nName(i, pm.getPlayer()); + } else { + displayName = ComponentUtil.getItemStackDisplayName(i); } - displayName = getI18nName(i, pm.getPlayer()); + + weaponHover = ComponentUtil.buildItemHover(pm.getPlayer(), i, displayName); } else { - displayName = ComponentUtil.getItemStackDisplayName(i); + Entity projectile = pm.getLastProjectileEntity(); + Component projectileName = projectile.getCustomName() != null + ? Component.text(projectile.getCustomName()) // TODO: Get display name using Paper api + : getI18nName(projectile, pm.getPlayer()); + + weaponHover = projectileName; } TextComponent deathMessage = Util.convertFromLegacy(msg); - Component weaponHover = ComponentUtil.buildItemHover(pm.getPlayer(), i, displayName); - base.append(deathMessage.replaceText(TextReplacementConfig.builder().matchLiteral("%weapon%").replacement(weaponHover).build())); } else { TextComponent deathMessage = Util.convertFromLegacy(msg); @@ -1030,13 +1041,27 @@ private static Component getI18nName(ItemStack i, Player p) { return i18nName; } - private static Component getI18nName(LivingEntity mob) { - // Dreeam - TODO + /* + Use MiniMessage feature to send translatable component to player. + Thus, able to display entity name for players based on player's client locale. + */ + private static Component getI18nName(Entity mob, Player p) { Component i18nName; + if (Settings.getInstance().getConfig().getBoolean(Config.DISPLAY_I18N_MOB_NAME.getPath()) && !DeathMessages.discordSRVEnabled) { - i18nName = Component.empty(); + if (Util.isNewerAndEqual(12, 0)) { + // Entity: entity.minecraft.example + String rawTranslatable = ""; + i18nName = MiniMessage.miniMessage().deserialize(rawTranslatable); + } else if (DeathMessages.getInstance().langUtilsEnabled && !(mob instanceof ShulkerBullet)) { // <= 1.12.2 no ShulkerBullet lang key + i18nName = Component.text(LanguageHelper.getEntityName(mob, p.getLocale())); + } else { + String name = capitalize(mob.getType().name()); + i18nName = Component.text(name); + } } else { - i18nName = Component.empty(); + String name = capitalize(mob.getType().name()); + i18nName = Component.text(name); } return i18nName; diff --git a/Core/src/main/java/dev/mrshawn/deathmessages/utils/ComponentUtil.java b/Core/src/main/java/dev/mrshawn/deathmessages/utils/ComponentUtil.java index 6a931a53..c7f976c1 100644 --- a/Core/src/main/java/dev/mrshawn/deathmessages/utils/ComponentUtil.java +++ b/Core/src/main/java/dev/mrshawn/deathmessages/utils/ComponentUtil.java @@ -95,6 +95,20 @@ public static Component buildItemHover(Player player, ItemStack i, Component dis return displayName.hoverEvent(showItem); } + // TODO: Check whether needed + /* + public static Component buildEntityHover(Entity entity, Component name) { + HoverEvent showEntity; + String iNamespace = XEntityType.of(entity).get().name().toLowerCase(); + + showEntity = entity.getCustomName() != null + ? HoverEvent.showEntity(Key.key(iNamespace), entity.getUniqueId(), name) + : HoverEvent.showEntity(Key.key(iNamespace), entity.getUniqueId()); + + return name.hoverEvent(showEntity); + } + */ + /* Process and build hover events from raw events list Only for playerDeath: pm, e, Only for EntityDeath: p, e, hasOwner