From d9322cbac4da1742b7f94d1a1f3d91859f763283 Mon Sep 17 00:00:00 2001 From: MiaoWoo Date: Sun, 9 Jul 2023 15:21:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20RGB=20=E9=A2=9C?= =?UTF-8?q?=E8=89=B2=E6=94=AF=E6=8C=81=20=E5=85=BC=E5=AE=B9=201.19.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 16 +++++---- .../java/pw/yumc/MiaoChat/MiaoMessage.java | 27 ++++++++++++--- .../yumc/MiaoChat/config/ChatMessagePart.java | 6 ++-- .../pw/yumc/MiaoChat/config/ChatRule.java | 16 ++++----- .../yumc/MiaoChat/listeners/ChatListener.java | 33 ++++++++++++------- src/main/resources/plugin.yml | 3 ++ 6 files changed, 70 insertions(+), 31 deletions(-) diff --git a/pom.xml b/pom.xml index c4f1389..83b3d95 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 MiaoChat - 2.1.2 + 2.2.3 pw.yumc @@ -13,14 +13,18 @@ - §a正式版本 §bv2.1.2 §b兼容 1.18.2 + §a正式版本 §bv2.2.3 §b默认支持RGB色彩 - §622-04-13 §c修复: 部分版本JDK导致启动错误; - §622-04-12 §a增强: 兼容 1.18.2 修复 PAPI 注销报错; - §622-02-25 §a增强: 新增 %a-z 自定义解析 实现神奇功能 兼容 1.18.1#133+; - §621-12-18 §a增强: 全新版本(号) 新增 itemTip 配合龙核 实现神奇功能 + §622-11-23 §a增强: 默认支持RGB色彩; + §622-11-21 §a增强: 兼容 1.19.2(1.19.x部分版本存在BUG); + §622-07-05 §a增强: 兼容 Paper 1.19; + §622-06-17 §a增强: 兼容 1.19 修复 快捷指令错误; + §622-04-13 §c修复: 部分版本JDK导致启动错误 + §622-04-12 §a增强: 兼容 1.18.2 修复 PAPI 注销报错; + §622-02-25 §a增强: 新增 %a-z 自定义解析 实现神奇功能 兼容 1.18.1#133+; + §621-12-18 §a增强: 全新版本(号) 新增 itemTip 配合龙核 实现神奇功能; §621-12-06 §a增强: 兼容 1.18 版本 兼容新版PAPI; §621-06-20 §a增强: 兼容 1.17 版本; §620-10-10 §c修复: 1.16.3聊天包格式调整的问题; diff --git a/src/main/java/pw/yumc/MiaoChat/MiaoMessage.java b/src/main/java/pw/yumc/MiaoChat/MiaoMessage.java index 20d7c7c..5a0e064 100644 --- a/src/main/java/pw/yumc/MiaoChat/MiaoMessage.java +++ b/src/main/java/pw/yumc/MiaoChat/MiaoMessage.java @@ -1,23 +1,27 @@ package pw.yumc.MiaoChat; +import lombok.SneakyThrows; +import org.bukkit.ChatColor; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.StandardCharsets; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; -import lombok.SneakyThrows; - /** * Created on 16-9-8. + * * @author MiaoWoo */ public class MiaoMessage { - public static final String CHANNEL = "MiaoChat:Default".toLowerCase(); public static final String NORMAL_CHANNEL = "MiaoChat:Normal".toLowerCase(); + private static final Pattern RGB_PATTERN = Pattern.compile("#[a-fA-F0-9]{6}"); private static final int MAX_MESSAGE_LENGTH = 32000; private String json; @@ -44,7 +48,7 @@ public class MiaoMessage { public byte[] encode() { ByteArrayOutputStream baos = new ByteArrayOutputStream(); copy(new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8)), new GZIPOutputStream(baos)); - if (baos.size() > MAX_MESSAGE_LENGTH) { return null; } + if (baos.size() > MAX_MESSAGE_LENGTH) {return null;} return baos.toByteArray(); } @@ -58,4 +62,19 @@ public class MiaoMessage { input.close(); output.close(); } + + public static String rgb(String message) { + Matcher matcher = RGB_PATTERN.matcher(message); + while (matcher.find()) { + String hexCode = message.substring(matcher.start(), matcher.end()); + String replaceSharp = hexCode.replace('#', 'x'); + char[] ch = replaceSharp.toCharArray(); + StringBuilder builder = new StringBuilder(""); + for (char c : ch) { + builder.append("&").append(c); + } + message = message.replace(hexCode, builder.toString()); + } + return ChatColor.translateAlternateColorCodes('&', message); + } } \ No newline at end of file diff --git a/src/main/java/pw/yumc/MiaoChat/config/ChatMessagePart.java b/src/main/java/pw/yumc/MiaoChat/config/ChatMessagePart.java index e170f4e..45ff0c9 100644 --- a/src/main/java/pw/yumc/MiaoChat/config/ChatMessagePart.java +++ b/src/main/java/pw/yumc/MiaoChat/config/ChatMessagePart.java @@ -3,12 +3,14 @@ package pw.yumc.MiaoChat.config; import me.clip.placeholderapi.PlaceholderAPI; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; +import pw.yumc.MiaoChat.MiaoMessage; import pw.yumc.YumCore.config.annotation.ConfigNode; import pw.yumc.YumCore.config.annotation.Nullable; import pw.yumc.YumCore.config.inject.InjectConfigurationSection; import pw.yumc.YumCore.tellraw.Tellraw; import java.util.List; +import java.util.stream.Collectors; public class ChatMessagePart extends InjectConfigurationSection { private String text; @@ -53,10 +55,10 @@ public class ChatMessagePart extends InjectConfigurationSection { } private List f(Player player, List text) { - return PlaceholderAPI.setPlaceholders(player, text); + return text.stream().map((line) -> f(player, line)).collect(Collectors.toList()); } private String f(Player player, String text) { - return PlaceholderAPI.setPlaceholders(player, text); + return MiaoMessage.rgb(PlaceholderAPI.setPlaceholders(player, text)); } } diff --git a/src/main/java/pw/yumc/MiaoChat/config/ChatRule.java b/src/main/java/pw/yumc/MiaoChat/config/ChatRule.java index eb5170e..5977fc9 100644 --- a/src/main/java/pw/yumc/MiaoChat/config/ChatRule.java +++ b/src/main/java/pw/yumc/MiaoChat/config/ChatRule.java @@ -1,20 +1,19 @@ package pw.yumc.MiaoChat.config; -import java.util.LinkedList; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - +import me.clip.placeholderapi.PlaceholderAPI; import org.bukkit.ChatColor; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; - -import me.clip.placeholderapi.PlaceholderAPI; import pw.yumc.MiaoChat.MiaoChat; import pw.yumc.YumCore.bukkit.P; import pw.yumc.YumCore.config.annotation.Default; import pw.yumc.YumCore.config.inject.InjectConfigurationSection; import pw.yumc.YumCore.tellraw.Tellraw; +import java.util.LinkedList; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * 聊天规则 * @@ -22,8 +21,9 @@ import pw.yumc.YumCore.tellraw.Tellraw; * @since 2016年9月9日 下午4:59:47 */ public class ChatRule extends InjectConfigurationSection { - private transient static MiaoChat plugin = P.getPlugin(); - private transient static Pattern FORMAT_PATTERN = Pattern.compile("[\\[]([^\\[\\]]+)[]]"); + private final transient static MiaoChat plugin = P.getPlugin(); + private final transient static Pattern FORMAT_PATTERN = Pattern.compile("[\\[]([^\\[\\]]+)[]]"); + private transient String name; @Default("50") private Integer index; diff --git a/src/main/java/pw/yumc/MiaoChat/listeners/ChatListener.java b/src/main/java/pw/yumc/MiaoChat/listeners/ChatListener.java index 6616ee0..d2a0e27 100644 --- a/src/main/java/pw/yumc/MiaoChat/listeners/ChatListener.java +++ b/src/main/java/pw/yumc/MiaoChat/listeners/ChatListener.java @@ -126,6 +126,9 @@ public class ChatListener implements Listener { if (player.hasPermission("MiaoChat.color")) { message = ChatColor.translateAlternateColorCodes('&', message); } + if (player.hasPermission("MiaoChat.rgb")) { + message = MiaoMessage.rgb(message); + } if (!cr.isItem()) { tr.then(message); return tr; @@ -142,19 +145,27 @@ public class ChatListener implements Listener { String mm = ml.removeFirst(); if (il.contains(mm)) { char k = mm.charAt(1); - ItemStack is = k == 'i' ? player.getItemInHand() : player.getInventory().getItem(k - '0' - 1); - if (is != null && is.getType() != Material.AIR) { - // Log.d("处理物品: %s", mm); - tr.then(String.format(ChatColor.translateAlternateColorCodes('&', cr.getItemformat()), L10N.getName(is))); - tr.item(is); + String key = String.valueOf(k); + if (plugin.getChatConfig().getFormats().containsKey(key)) { + if (!player.hasPermission("MiaoChat.format.*") && player.hasPermission("MiaoChat.format." + k)) { + Log.sender(player, "§c你没有使用 " + mm + " 的权限!"); + continue; + } + plugin.getChatConfig().getFormats().get(key).then(tr, player); } else { - String key = String.valueOf(k); - if (plugin.getChatConfig().getFormats().containsKey(key)) { - if (!player.hasPermission("MiaoChat.format.*") && player.hasPermission("MiaoChat.format." + k)) { - Log.sender(player, "§c你没有使用 " + mm + " 的权限!"); - continue; + ItemStack is = null; + if (k == 'i') { + is = player.getItemInHand(); + } else { + int index = k - '0' - 1; + if (index < 10) { + is = player.getInventory().getItem(index); } - plugin.getChatConfig().getFormats().get(key).then(tr, player); + } + if (is != null && is.getType() != Material.AIR) { + // Log.d("处理物品: %s", mm); + tr.then(String.format(ChatColor.translateAlternateColorCodes('&', cr.getItemformat()), L10N.getName(is))); + tr.item(is); } else { tr.then(cr.getLastColor() + mm); } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index b3676da..b563692 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -26,6 +26,9 @@ permissions: ${project.artifactId}.color: description: 彩字聊天权限! default: op + ${project.artifactId}.rgb: + description: RGB聊天权限! + default: op ${project.artifactId}.admin: description: 管理员格式权限! default: op