4
1
mirror of https://e.coding.net/circlecloud/MiaoChat.git synced 2025-09-10 11:27:05 +00:00

feat: 更新混淆 添加URL打开支持

Signed-off-by: 502647092 <admin@yumc.pw>
This commit is contained in:
2016-09-10 17:41:48 +08:00
parent 115e45c389
commit 3561b1809d
12 changed files with 738 additions and 155 deletions

View File

@ -29,14 +29,14 @@ public class MiaoChat extends JavaPlugin implements CommandExecutor {
@Cmd(permission = "MiaoChat.toggle")
@Help("关闭聊天功能")
public void off(final CommandArgument e) {
ChatListener.offList.remove(e.getSender().getName());
ChatListener.offList.add(e.getSender().getName());
Log.toSender(e.getSender(), "§c聊天功能已关闭!");
}
@Cmd(permission = "MiaoChat.toggle")
@Help("开启聊天功能")
public void on(final CommandArgument e) {
ChatListener.offList.add(e.getSender().getName());
ChatListener.offList.remove(e.getSender().getName());
Log.toSender(e.getSender(), "§a聊天功能已开启!");
}

View File

@ -2,5 +2,6 @@ package pw.yumc.MiaoChat.config;
public enum CLICKTYPE {
COMMAND,
SUGGEST;
SUGGEST,
OPENURL;
}

View File

@ -37,10 +37,19 @@ public class ChatMessagePart extends InjectConfigurationSection {
}
if (command != null && !command.isEmpty()) {
final String tc = f(p, command);
if (type == CLICKTYPE.SUGGEST) {
tr.suggest(tc);
} else if (type == CLICKTYPE.COMMAND) {
switch (type) {
case COMMAND:
tr.command(tc);
break;
case OPENURL:
tr.openurl(tc);
break;
case SUGGEST:
tr.suggest(tc);
break;
default:
break;
}
}
return tr;

View File

@ -22,7 +22,7 @@ public class ChatRule extends InjectConfigurationSection {
private Integer range;
@Default("false")
private Boolean item;
@Default("&6[%s&6]&r")
@Default("&6[&b%s&6]&r")
private String itemformat;
private transient ChatConfig formats;

View File

@ -42,17 +42,26 @@ public class ChatListener implements Listener {
new SubscribeTask(true, true);
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onChat(final AsyncPlayerChatEvent e) {
final Player p = e.getPlayer();
final ChatRule cr = plugin.getConfigExt().getChatRule(e.getPlayer());
if (cr == null) {
return;
}
final ChatConfig cc = cr.getFormats();
e.setCancelled(true);
final String msg = e.getMessage();
final Tellraw tr = Tellraw.create();
handleChat(p, tr, cr, e);
}
private void handleChat(final Player p, final Tellraw tr, final ChatRule cr, final AsyncPlayerChatEvent e) {
handleFormat(p, tr, cr);
handleTellraw(p, tr, cr, e.getMessage());
handleSend(p, tr, cr);
}
private void handleFormat(final Player p, final Tellraw tr, final ChatRule cr) {
final ChatConfig cc = cr.getFormats();
for (final ChatMessagePart cmp : cc.getPrefixs()) {
cmp.then(tr, p);
}
@ -60,29 +69,9 @@ public class ChatListener implements Listener {
for (final ChatMessagePart cmp : cc.getSuffixs()) {
cmp.then(tr, p);
}
final String message = ChatColor.translateAlternateColorCodes('&', msg);
if (!message.isEmpty() && cr.isItem()) {
if (!handlerTellraw(p, tr, message, cr.getItemformat())) {
Log.toSender(p, "§c不允许展示相同的物品!");
return;
}
}
final int range = cr.getRange();
Collection<? extends Entity> plist = Collections.emptyList();
if (range != 0) {
plist = p.getNearbyEntities(range, range, range);
} else {
plist = C.Player.getOnlinePlayers();
}
for (final Entity ne : plist) {
if (ne instanceof Player && !offList.contains(ne.getName())) {
tr.send(ne);
}
}
Bukkit.getConsoleSender().sendMessage(tr.toOldMessageFormat());
}
private LinkedList<String> handlerMessage(final LinkedList<String> il, String message) {
private LinkedList<String> handleMessage(final LinkedList<String> il, String message) {
final LinkedList<String> mlist = new LinkedList<>();
if (!il.isEmpty()) {
for (final String k : il) {
@ -98,7 +87,7 @@ public class ChatListener implements Listener {
return mlist;
}
private LinkedList<String> handlerPattern(final String message) {
private LinkedList<String> handlePattern(final String message) {
final Matcher m = ITEM_PATTERN.matcher(message);
final Set<String> temp = new HashSet<>();
final LinkedList<String> ilist = new LinkedList<>();
@ -115,12 +104,35 @@ public class ChatListener implements Listener {
return ilist;
}
private boolean handlerTellraw(final Player player, final Tellraw tr, final String message, final String itemformat) {
final LinkedList<String> il = handlerPattern(message);
if (il == null) {
return false;
private void handleSend(final Player p, final Tellraw tr, final ChatRule cr) {
final int range = cr.getRange();
Collection<? extends Entity> plist = Collections.emptyList();
if (range != 0) {
plist = p.getNearbyEntities(range, range, range);
} else {
plist = C.Player.getOnlinePlayers();
}
final LinkedList<String> ml = handlerMessage(il, message);
for (final Entity ne : plist) {
if (ne instanceof Player && !offList.contains(ne.getName())) {
tr.send(ne);
}
}
Bukkit.getConsoleSender().sendMessage(tr.toOldMessageFormat());
}
private void handleTellraw(final Player player, final Tellraw tr, final ChatRule cr, String message) {
if (message.isEmpty() || !cr.isItem()) {
return;
}
if (player.hasPermission("MiaoChat.color")) {
message = ChatColor.translateAlternateColorCodes('&', message);
}
final LinkedList<String> il = handlePattern(message);
if (il == null) {
Log.toSender(player, "§c不允许展示相同的物品!");
return;
}
final LinkedList<String> ml = handleMessage(il, message);
while (!ml.isEmpty()) {
final String mm = ml.removeFirst();
if (il.contains(mm)) {
@ -132,14 +144,12 @@ public class ChatListener implements Listener {
is = player.getInventory().getItem(k - '0' - 1);
}
if (is != null && is.getType() != Material.AIR) {
tr.then(String.format(ChatColor.translateAlternateColorCodes('&', itemformat),
is.hasItemMeta() && is.getItemMeta().hasDisplayName() ? is.getItemMeta().getDisplayName() : is.getType().name()));
tr.then(String.format(ChatColor.translateAlternateColorCodes('&', cr.getItemformat()), is.hasItemMeta() && is.getItemMeta().hasDisplayName() ? is.getItemMeta().getDisplayName() : is.getType().name()));
tr.item(is);
}
} else {
tr.then(mm);
}
}
return true;
}
}

View File

@ -17,11 +17,12 @@ Format:
- '&c点击即可TP我!'
#点击操作
click:
#操作类型: [COMMAND,SUGGEST]
#操作类型: [COMMAND,SUGGEST,OPENURL]
#COMMAND代表执行命令
#SUGGEST代表命令补全
#OPENURL代表打开网址
type: 'COMMAND'
#命令 支持PAPI
#命令或网址 支持PAPI
command: '/tpa %player_name%'
# 可以添加多个
# 2:

View File

@ -15,11 +15,12 @@ Format:
- '&c点击即可TP我!'
#点击操作
click:
#操作类型: [COMMAND,SUGGEST]
#操作类型: [COMMAND,SUGGEST,OPENURL]
#COMMAND代表执行命令
#SUGGEST代表命令补全
#OPENURL代表打开网址
type: 'COMMAND'
#命令 支持PAPI
#命令或网址 支持PAPI
command: '/tpa %player_name%'
# 可以添加多个
# 2:

View File

@ -13,18 +13,21 @@ commands:
- mct
- mchat
usage: §b使用/${project.artifactId} help 查看帮助!
permission: ${project.artifactId}.reload
permission: ${project.artifactId}.default
permission-message: §c你没有 <permission> 的权限来执行此命令!
permissions:
${project.artifactId}.default:
description: 默认格式权限!
default: true
${project.artifactId}.admin:
description: 管理员格式权限!
default: op
${project.artifactId}.toggle:
description: 开启关闭聊天!
default: true
${project.artifactId}.color:
description: 彩字聊天权限!
default: true
${project.artifactId}.admin:
description: 管理员格式权限!
default: op
${project.artifactId}.reload:
description: 重新载入插件!
default: op