From f18647a2c6e8a515636e9ec073e7699faba4296c Mon Sep 17 00:00:00 2001 From: 502647092 Date: Tue, 28 Mar 2017 10:02:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=80=9A=E8=BF=87=E5=86=85=E7=BD=AE?= =?UTF-8?q?=E7=9A=84=E5=88=97=E8=A1=A8=E5=85=BC=E5=AE=B9=E6=9B=B4=E5=A4=9A?= =?UTF-8?q?=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 502647092 --- pom.xml | 40 ++++++++-------- src/main/java/pw/yumc/MiaoChat/MiaoChat.java | 46 ++++++++++--------- .../java/pw/yumc/MiaoChat/MiaoChatBungee.java | 26 +++++------ .../pw/yumc/MiaoChat/config/ChatConfig.java | 20 ++------ .../pw/yumc/MiaoChat/config/ChatRule.java | 4 +- .../yumc/MiaoChat/listeners/ChatListener.java | 37 +++++++-------- 6 files changed, 80 insertions(+), 93 deletions(-) diff --git a/pom.xml b/pom.xml index 64dea57..51e7fb5 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 pw.yumc MiaoChat - 1.7.1 + 1.8 ${project.name} @@ -16,28 +16,28 @@ org.apache.maven.plugins maven-shade-plugin - 2.3 - - false - true - - - pw.yumc:YumCore - - - - - pw.yumc.YumCore - ${project.groupId}.${project.artifactId} - - - + 2.4.3 package shade + + false + true + + + pw.yumc:YumCore + + + + + pw.yumc.YumCore + ${project.groupId}.${project.artifactId} + + + @@ -72,8 +72,8 @@ DEV UTF-8 - 1.7 - 1.7 + 1.8 + 1.8 @@ -93,7 +93,7 @@ pw.yumc YumCore jar - 1.6 + 1.7 \ No newline at end of file diff --git a/src/main/java/pw/yumc/MiaoChat/MiaoChat.java b/src/main/java/pw/yumc/MiaoChat/MiaoChat.java index 9c1bd78..3c51916 100644 --- a/src/main/java/pw/yumc/MiaoChat/MiaoChat.java +++ b/src/main/java/pw/yumc/MiaoChat/MiaoChat.java @@ -43,17 +43,17 @@ public class MiaoChat extends JavaPlugin implements Executor, PluginMessageListe return cfg; } - @Cmd(permission = "MiaoChat.toggle") + @Cmd(permission = "MiaoChat.toggle", executor = Cmd.Executor.PLAYER) @Help("关闭聊天功能") - public void off(CommandSender sender) { - ChatListener.offList.add(sender.getName()); + public void off(Player sender) { + ChatListener.offList.add(sender); Log.sender(sender, "§c聊天功能已关闭!"); } - @Cmd(permission = "MiaoChat.toggle") + @Cmd(permission = "MiaoChat.toggle", executor = Cmd.Executor.PLAYER) @Help("开启聊天功能") - public void on(CommandSender sender) { - ChatListener.offList.remove(sender.getName()); + public void on(Player sender) { + ChatListener.offList.remove(sender); Log.sender(sender, "§a聊天功能已开启!"); } @@ -61,6 +61,12 @@ public class MiaoChat extends JavaPlugin implements Executor, PluginMessageListe public void onEnable() { new ChatListener(); new CommandSub("MiaoChat", this); + enableBungeeCord(); + hookPlaceholderAPI(); + L10N.getName(new ItemStack(Material.AIR)); + } + + private void enableBungeeCord() { if (getChatConfig().isBungeeCord()) { Log.i("已开启 BungeeCord 模式!"); Bukkit.getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this); @@ -71,6 +77,9 @@ public class MiaoChat extends JavaPlugin implements Executor, PluginMessageListe Bukkit.getMessenger().registerIncomingPluginChannel(this, MiaoMessage.NORMALCHANNEL, this); Bukkit.getMessenger().registerOutgoingPluginChannel(this, MiaoMessage.NORMALCHANNEL); } + } + + private void hookPlaceholderAPI() { PlaceholderAPI.registerPlaceholderHook("mct", new PlaceholderHook() { @Override public String onPlaceholderRequest(Player player, String s) { @@ -83,7 +92,6 @@ public class MiaoChat extends JavaPlugin implements Executor, PluginMessageListe return "未知的参数"; } }); - L10N.getName(new ItemStack(Material.AIR)); } @Override @@ -112,15 +120,12 @@ public class MiaoChat extends JavaPlugin implements Executor, PluginMessageListe @EventHandler public void onJoin(final PlayerJoinEvent e) { - Bukkit.getScheduler().runTaskLater(this, new Runnable() { - @Override - public void run() { - Player p = e.getPlayer(); - if (p.isOnline()) { - ByteArrayDataOutput out = ByteStreams.newDataOutput(); - out.writeUTF("GetServer"); - p.sendPluginMessage(MiaoChat.this, "BungeeCord", out.toByteArray()); - } + Bukkit.getScheduler().runTaskLater(this, () -> { + Player p = e.getPlayer(); + if (p.isOnline()) { + ByteArrayDataOutput out = ByteStreams.newDataOutput(); + out.writeUTF("GetServer"); + p.sendPluginMessage(MiaoChat.this, "BungeeCord", out.toByteArray()); } }, 10); } @@ -139,12 +144,9 @@ public class MiaoChat extends JavaPlugin implements Executor, PluginMessageListe ServerName = input.readUTF(); Log.d("获取服务器名称: " + ServerName); PlayerJoinEvent.getHandlerList().unregister((Listener) this); - Bukkit.getScheduler().runTaskLater(this, new Runnable() { - @Override - public void run() { - Bukkit.getMessenger().unregisterIncomingPluginChannel(MiaoChat.this, "BungeeCord"); - Bukkit.getMessenger().unregisterOutgoingPluginChannel(MiaoChat.this, "BungeeCord"); - } + Bukkit.getScheduler().runTaskLater(this, () -> { + Bukkit.getMessenger().unregisterIncomingPluginChannel(MiaoChat.this, "BungeeCord"); + Bukkit.getMessenger().unregisterOutgoingPluginChannel(MiaoChat.this, "BungeeCord"); }, 20); } } diff --git a/src/main/java/pw/yumc/MiaoChat/MiaoChatBungee.java b/src/main/java/pw/yumc/MiaoChat/MiaoChatBungee.java index 6b3222d..02b80ec 100644 --- a/src/main/java/pw/yumc/MiaoChat/MiaoChatBungee.java +++ b/src/main/java/pw/yumc/MiaoChat/MiaoChatBungee.java @@ -1,7 +1,11 @@ package pw.yumc.MiaoChat; import java.net.InetSocketAddress; -import java.util.*; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.config.ServerInfo; @@ -22,11 +26,11 @@ public class MiaoChatBungee extends Plugin implements Listener { public void handle(final PluginMessageEvent event) { if (event.getTag().equals(MiaoMessage.CHANNEL) || event.getTag().equals(MiaoMessage.NORMALCHANNEL)) { InetSocketAddress origin = event.getSender().getAddress(); - for (ServerInfo server : groups.get(origin)) { + groups.get(origin).forEach(server -> { if (!server.getAddress().equals(origin) && server.getPlayers().size() > 0) { server.sendData(event.getTag(), event.getData()); } - } + }); } } @@ -42,24 +46,20 @@ public class MiaoChatBungee extends Plugin implements Listener { Set unused = new HashSet<>(); Configuration groupSel = config.getSection("Groups"); Collection groupname = groupSel.getKeys(); - for (String gname : groupname) { + groupname.forEach(gname -> { Set servers = new HashSet<>(groupSel.getStringList(gname)); Set sers = new HashSet<>(); - for (String sname : servers) { - sers.add(temp.get(sname)); - } + servers.forEach(sname -> sers.add(temp.get(sname))); sers.remove(null); - for (String sname : servers) { + servers.forEach(sname -> { ServerInfo isadd = temp.get(sname); if (isadd != null) { unused.remove(isadd); groups.put(isadd.getAddress(), sers); } - } - } - for (ServerInfo unser : unused) { - groups.put(unser.getAddress(), unused); - } + }); + }); + unused.forEach(unser -> groups.put(unser.getAddress(), unused)); } @Override diff --git a/src/main/java/pw/yumc/MiaoChat/config/ChatConfig.java b/src/main/java/pw/yumc/MiaoChat/config/ChatConfig.java index 4e73d6b..7a945f3 100644 --- a/src/main/java/pw/yumc/MiaoChat/config/ChatConfig.java +++ b/src/main/java/pw/yumc/MiaoChat/config/ChatConfig.java @@ -1,6 +1,5 @@ package pw.yumc.MiaoChat.config; -import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedList; @@ -20,7 +19,6 @@ import pw.yumc.YumCore.config.FileConfig; public class ChatConfig { private static String F = "Formats"; private Map formats; - private RuleComparator rulecomp; private LinkedList rules; private FileConfig config; private FileConfig format; @@ -31,7 +29,6 @@ public class ChatConfig { config = P.getConfig(); BungeeCord = config.getBoolean("BungeeCord"); format = new FileConfig("format.yml"); - rulecomp = new RuleComparator(); formats = new HashMap<>(); rules = new LinkedList<>(); load(); @@ -64,18 +61,18 @@ public class ChatConfig { public void load() { servername = config.getMessage("Server"); formats.clear(); - for (String name : format.getKeys(false)) { + format.getKeys(false).forEach(name -> { formats.put(name, new ChatMessagePart(format.getConfigurationSection(name))); Log.d("载入聊天格式: %s", name); - } + }); rules.clear(); if (config.isSet(F)) { - for (String rule : config.getConfigurationSection(F).getKeys(false)) { + config.getConfigurationSection(F).getKeys(false).forEach(rule -> { rules.add(new ChatRule(rule, config.getConfigurationSection(F + "." + rule))); Log.d("载入聊天规则: %s => \"%s\"", rule, rules.getLast().getFormat()); - } + }); } - Collections.sort(rules, rulecomp); + rules.sort(Comparator.comparing(ChatRule::getIndex)); } public String getServername() { @@ -86,11 +83,4 @@ public class ChatConfig { format.reload(); load(); } - - private class RuleComparator implements Comparator { - @Override - public int compare(ChatRule o1, ChatRule o2) { - return o1.getIndex().compareTo(o2.getIndex()); - } - } } diff --git a/src/main/java/pw/yumc/MiaoChat/config/ChatRule.java b/src/main/java/pw/yumc/MiaoChat/config/ChatRule.java index 15a394a..c18a420 100644 --- a/src/main/java/pw/yumc/MiaoChat/config/ChatRule.java +++ b/src/main/java/pw/yumc/MiaoChat/config/ChatRule.java @@ -95,7 +95,7 @@ public class ChatRule extends InjectConfigurationSection { public Tellraw create(Player p) { Tellraw tr = Tellraw.create(); - for (String format : formats) { + formats.forEach(format -> { ChatMessagePart cmp = plugin.getChatConfig().getFormats().get(format); if (cmp != null) { // Log.d("解析格式: %s", format); @@ -104,7 +104,7 @@ public class ChatRule extends InjectConfigurationSection { // Log.d("追加文本: %s", format); tr.then(PlaceholderAPI.setPlaceholders(p, format)); } - } + }); return tr; } diff --git a/src/main/java/pw/yumc/MiaoChat/listeners/ChatListener.java b/src/main/java/pw/yumc/MiaoChat/listeners/ChatListener.java index 3cfe297..b0bc1d9 100644 --- a/src/main/java/pw/yumc/MiaoChat/listeners/ChatListener.java +++ b/src/main/java/pw/yumc/MiaoChat/listeners/ChatListener.java @@ -1,13 +1,15 @@ package pw.yumc.MiaoChat.listeners; -import java.util.*; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.Queue; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; -import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -21,14 +23,13 @@ import pw.yumc.MiaoChat.config.ChatConfig; import pw.yumc.MiaoChat.config.ChatRule; import pw.yumc.YumCore.bukkit.Log; import pw.yumc.YumCore.bukkit.P; -import pw.yumc.YumCore.bukkit.compatible.C; import pw.yumc.YumCore.global.L10N; import pw.yumc.YumCore.statistic.Statistics; import pw.yumc.YumCore.tellraw.Tellraw; import pw.yumc.YumCore.update.SubscribeTask; public class ChatListener implements Listener { - public static Set offList = new HashSet<>(); + public static Set offList = new HashSet<>(); private static Pattern ITEM_PATTERN = Pattern.compile("%([i1-9]?)"); private final Queue queue = new LinkedList<>(); @@ -50,13 +51,12 @@ public class ChatListener implements Listener { // Log.d("玩家: %s 未发现可用ChatRule!", p.getName()); return; } - e.setCancelled(true); - handleChat(p, cr, e.getMessage()); + handleChat(p, e.getRecipients(), cr, e.getMessage()); } - private void handleChat(Player p, ChatRule cr, String message) { + private void handleChat(Player p, Set receive, ChatRule cr, String message) { // Log.d("玩家: %s 使用 %s 规则 解析 %s", p.getName(), cr.getName(), message); - handleSend(p, handleTellraw(p, cr.create(p), cr, message), cr.getRange()); + handleSend(p, receive, handleTellraw(p, cr.create(p), cr, message), cr.getRange()); } private LinkedList handleMessage(LinkedList il, String message) { @@ -100,19 +100,16 @@ public class ChatListener implements Listener { return ilist; } - private void handleSend(Player p, Tellraw tr, int range) { - List plist = new ArrayList<>(); + private void handleSend(Player p, Set receive, Tellraw tr, int range) { + Set plist = new HashSet<>(); if (range != 0) { - for (Entity ent : p.getNearbyEntities(range, range, range)) { - if (ent instanceof Player) { - plist.add((Player) ent); - } - } + p.getNearbyEntities(range, range, range).stream().filter(entity -> entity instanceof Player).forEach(entity -> plist.add((Player) entity)); plist.add(p); } else { - plist.addAll(C.Player.getOnlinePlayers()); + plist.addAll(receive); if (cc.isBungeeCord()) { byte[] mm = MiaoMessage.encode(tr.toJsonString()); + // 数据流等于NULL代表数据超长 if (mm == null) { p.sendPluginMessage(P.instance, MiaoMessage.NORMALCHANNEL, MiaoMessage.encode(tr.toOldMessageFormat())); } else { @@ -120,11 +117,9 @@ public class ChatListener implements Listener { } } } - for (Player player : plist) { - if (!offList.contains(player.getName())) { - tr.send(player); - } - } + receive.clear(); + plist.removeAll(offList); + plist.forEach(tr::send); Bukkit.getConsoleSender().sendMessage(tr.toOldMessageFormat()); }