mirror of
https://e.coding.net/circlecloud/MiaoChat.git
synced 2025-09-10 11:27:05 +00:00
@ -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聊天功能已开启!");
|
||||
}
|
||||
|
||||
|
@ -2,5 +2,6 @@ package pw.yumc.MiaoChat.config;
|
||||
|
||||
public enum CLICKTYPE {
|
||||
COMMAND,
|
||||
SUGGEST;
|
||||
SUGGEST,
|
||||
OPENURL;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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
|
Reference in New Issue
Block a user