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