diff --git a/src/main/java/ling/coordinateRecorder/CoordinateRecorder.java b/src/main/java/ling/coordinateRecorder/CoordinateRecorder.java index c760980..b93011a 100644 --- a/src/main/java/ling/coordinateRecorder/CoordinateRecorder.java +++ b/src/main/java/ling/coordinateRecorder/CoordinateRecorder.java @@ -28,6 +28,7 @@ public final class CoordinateRecorder extends JavaPlugin { Bukkit.getPluginManager().registerEvents(new PlayerEventListener(), this); Bukkit.getPluginManager().registerEvents(new InterruptTransmit(), this); Bukkit.getPluginManager().registerEvents(new CheatItemListener(), this); + Bukkit.getPluginManager().registerEvents(new ChatEnhancement(), this); if (authMePlugin != null && authMePlugin.isEnabled()) { getLogger().info("找到AuthMe插件,将使用AuthMe兼容接口"); Bukkit.getPluginManager().registerEvents(new PlayerAuthMeLoginEventListener(), this); diff --git a/src/main/java/ling/coordinateRecorder/Listener/ChatEnhancement.java b/src/main/java/ling/coordinateRecorder/Listener/ChatEnhancement.java new file mode 100644 index 0000000..49b9295 --- /dev/null +++ b/src/main/java/ling/coordinateRecorder/Listener/ChatEnhancement.java @@ -0,0 +1,42 @@ +package ling.coordinateRecorder.Listener; + +import ling.coordinateRecorder.CoordinateRecorder; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.inventory.ItemStack; + +/// 增强聊天信息 +public class ChatEnhancement implements Listener { + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + Player player = event.getPlayer(); + String message = event.getMessage(); + if (!message.contains("[item]")) + return; + + ItemStack mainHandItem = player.getInventory().getItemInMainHand(); + if (mainHandItem.getType() == Material.AIR) + return; + + BaseComponent item = CoordinateRecorder.getItemShowService().addItem(mainHandItem); + + String[] parts = message.split("\\[item\\]", -1); + TextComponent finalMessage = new TextComponent("<" + player.getName() + "> "); + for (int i = 0; i < parts.length; i++) { + finalMessage.addExtra(new TextComponent(parts[i])); + if (i < parts.length - 1) { + finalMessage.addExtra(item); + } + } + + for (Player recipient : event.getRecipients()) { + recipient.spigot().sendMessage(finalMessage); + } + event.setCancelled(true); + } +} diff --git a/src/main/java/ling/coordinateRecorder/Service/ItemShowService.java b/src/main/java/ling/coordinateRecorder/Service/ItemShowService.java index 7f57f2c..7c8ac8c 100644 --- a/src/main/java/ling/coordinateRecorder/Service/ItemShowService.java +++ b/src/main/java/ling/coordinateRecorder/Service/ItemShowService.java @@ -2,10 +2,7 @@ package ling.coordinateRecorder.Service; import ling.coordinateRecorder.CoordinateRecorder; import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.chat.BaseComponent; -import net.md_5.bungee.api.chat.ClickEvent; -import net.md_5.bungee.api.chat.HoverEvent; -import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.chat.*; import net.md_5.bungee.api.chat.hover.content.Text; import org.bukkit.Bukkit; import org.bukkit.command.Command; @@ -54,7 +51,15 @@ public class ItemShowService implements Service { lock(); long index = nextIndex++; hashMap.put(index, new ItemData(item.clone())); - BaseComponent message = new TextComponent("[" + item.getItemMeta().getDisplayName() + "]"); + BaseComponent itemName; + if (!item.getItemMeta().getDisplayName().isEmpty()) { + itemName = new TextComponent(item.getItemMeta().getDisplayName()); + } else { + itemName = new TranslatableComponent("item.minecraft." + item.getType().name().toLowerCase()); + } + BaseComponent message = new TextComponent("["); + message.addExtra(itemName); + message.addExtra("]"); message.setColor(ChatColor.YELLOW); message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("点击查看物品详情"))); message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/show_item_stack " + index));