4
1
mirror of https://e.coding.net/circlecloud/MiaoChat.git synced 2024-11-23 14:48:46 +00:00

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

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

View File

@ -1,65 +0,0 @@
IIIIiI
IIiIiI
iiIIiI
Iiiiii
IIIIIi
IiIiII
iiIIIi
iIIIii
iIiiIi
iiiIiI
IiiIii
iIiiiI
iiiIIi
IIiIII
IIIIii
IIIiii
iiiiII
iIIiII
IIiiII
iiIIii
IiiIII
iIiIII
IiIIii
iiIiiI
iIiiII
IiiIiI
iiiIII
IIiIIi
iIiIiI
iiIiii
IiIiii
IiIIiI
IiiIIi
IiIIIi
IIiiIi
iIIiIi
iIIIII
IIIiIi
iiiiiI
iIiIIi
IIIiiI
iiiiIi
iiIiIi
IIiiiI
IiiiII
iIIiii
iIiIii
IiIiiI
IIiIii
IiIIII
IIIIII
iIIIIi
IIIiII
iiiiii
IiiiiI
IiIiIi
iiiIii
iIIIiI
iIIiiI
iIiiii
iiIiII
IIiiii
iiIIII
IiiiIi
llllll

674
obf.dict
View File

@ -1,24 +1,650 @@
if ʻ
try ʼ
for ʽ
int ʾ
new ʿ
true ˆ
null ˈ
this ˉ
else ˊ
void ˋ
enum ˎ
final ˏ
false ˑ
class י
catch ـ
import ٴ
double
public
static
boolean
package
finally
private
protected
゙゙
ᐧᐧ
ᴵᴵ
ʻʻ
ʽʽ
ʼʼ
ʿʿ
ʾʾ
ــ
ˆˆ
ˉˉ
ˈˈ
ˋˋ
ˊˊ
ˏˏ
ˎˎ
ˑˑ
ᵔᵔ
יי
ᵎᵎ
ᵢᵢ
ⁱⁱ
ﹳﹳ
ٴٴ
ﹶﹶ
ʻʼ
ʻʽ
ʻʾ
ʻʿ
ʻˆ
ʻˈ
ʻˉ
ʻˊ
ʻˋ
ʻˎ
ʻˏ
ʻˑ
ʻי
ʻـ
ʻٴ
ʻᐧ
ʻᴵ
ʻᵎ
ʻᵔ
ʻᵢ
ʻⁱ
ʻﹳ
ʻﹶ
ʻ゙
ʼʻ
ʼʽ
ʼʾ
ʼʿ
ʼˆ
ʼˈ
ʼˉ
ʼˊ
ʼˋ
ʼˎ
ʼˏ
ʼˑ
ʼי
ʼـ
ʼٴ
ʼᐧ
ʼᴵ
ʼᵎ
ʼᵔ
ʼᵢ
ʼⁱ
ʼﹳ
ʼﹶ
ʼ゙
ʽʻ
ʽʼ
ʽʾ
ʽʿ
ʽˆ
ʽˈ
ʽˉ
ʽˊ
ʽˋ
ʽˎ
ʽˏ
ʽˑ
ʽי
ʽـ
ʽٴ
ʽᐧ
ʽᴵ
ʽᵎ
ʽᵔ
ʽᵢ
ʽⁱ
ʽﹳ
ʽﹶ
ʽ゙
ʾʻ
ʾʼ
ʾʽ
ʾʿ
ʾˆ
ʾˈ
ʾˉ
ʾˊ
ʾˋ
ʾˎ
ʾˏ
ʾˑ
ʾי
ʾـ
ʾٴ
ʾᐧ
ʾᴵ
ʾᵎ
ʾᵔ
ʾᵢ
ʾⁱ
ʾﹳ
ʾﹶ
ʾ゙
ʿʻ
ʿʼ
ʿʽ
ʿʾ
ʿˆ
ʿˈ
ʿˉ
ʿˊ
ʿˋ
ʿˎ
ʿˏ
ʿˑ
ʿי
ʿـ
ʿٴ
ʿᐧ
ʿᴵ
ʿᵎ
ʿᵔ
ʿᵢ
ʿⁱ
ʿﹳ
ʿﹶ
ʿ゙
ˆʻ
ˆʼ
ˆʽ
ˆʾ
ˆʿ
ˆˈ
ˆˉ
ˆˊ
ˆˋ
ˆˎ
ˆˏ
ˆˑ
ˆי
ˆـ
ˆٴ
ˆᐧ
ˆᴵ
ˆᵎ
ˆᵔ
ˆᵢ
ˆⁱ
ˆﹳ
ˆﹶ
ˆ゙
ˈʻ
ˈʼ
ˈʽ
ˈʾ
ˈʿ
ˈˆ
ˈˉ
ˈˊ
ˈˋ
ˈˎ
ˈˏ
ˈˑ
ˈי
ˈـ
ˈٴ
ˈᐧ
ˈᴵ
ˈᵎ
ˈᵔ
ˈᵢ
ˈⁱ
ˈﹳ
ˈﹶ
ˈ゙
ˉʻ
ˉʼ
ˉʽ
ˉʾ
ˉʿ
ˉˆ
ˉˈ
ˉˊ
ˉˋ
ˉˎ
ˉˏ
ˉˑ
ˉי
ˉـ
ˉٴ
ˉᐧ
ˉᴵ
ˉᵎ
ˉᵔ
ˉᵢ
ˉⁱ
ˉﹳ
ˉﹶ
ˉ゙
ˊʻ
ˊʼ
ˊʽ
ˊʾ
ˊʿ
ˊˆ
ˊˈ
ˊˉ
ˊˋ
ˊˎ
ˊˏ
ˊˑ
ˊי
ˊـ
ˊٴ
ˊᐧ
ˊᴵ
ˊᵎ
ˊᵔ
ˊᵢ
ˊⁱ
ˊﹳ
ˊﹶ
ˊ゙
ˋʻ
ˋʼ
ˋʽ
ˋʾ
ˋʿ
ˋˆ
ˋˈ
ˋˉ
ˋˊ
ˋˎ
ˋˏ
ˋˑ
ˋי
ˋـ
ˋٴ
ˋᐧ
ˋᴵ
ˋᵎ
ˋᵔ
ˋᵢ
ˋⁱ
ˋﹳ
ˋﹶ
ˋ゙
ˎʻ
ˎʼ
ˎʽ
ˎʾ
ˎʿ
ˎˆ
ˎˈ
ˎˉ
ˎˊ
ˎˋ
ˎˏ
ˎˑ
ˎי
ˎـ
ˎٴ
ˎᐧ
ˎᴵ
ˎᵎ
ˎᵔ
ˎᵢ
ˎⁱ
ˎﹳ
ˎﹶ
ˎ゙
ˏʻ
ˏʼ
ˏʽ
ˏʾ
ˏʿ
ˏˆ
ˏˈ
ˏˉ
ˏˊ
ˏˋ
ˏˎ
ˏˑ
ˏי
ˏـ
ˏٴ
ˏᐧ
ˏᴵ
ˏᵎ
ˏᵔ
ˏᵢ
ˏⁱ
ˏﹳ
ˏﹶ
ˏ゙
ˑʻ
ˑʼ
ˑʽ
ˑʾ
ˑʿ
ˑˆ
ˑˈ
ˑˉ
ˑˊ
ˑˋ
ˑˎ
ˑˏ
ˑי
ˑـ
ˑٴ
ˑᐧ
ˑᴵ
ˑᵎ
ˑᵔ
ˑᵢ
ˑⁱ
ˑﹳ
ˑﹶ
ˑ゙
יʻ
יʼ
יʽ
יʾ
יʿ
יˆ
יˈ
יˉ
יˊ
יˋ
יˎ
יˏ
יˑ
יـ
יٴ
יᐧ
יᴵ
יᵎ
יᵔ
יᵢ
יⁱ
יﹳ
יﹶ
י゙
ـʻ
ـʼ
ـʽ
ـʾ
ـʿ
ـˆ
ـˈ
ـˉ
ـˊ
ـˋ
ـˎ
ـˏ
ـˑ
ـי
ـٴ
ـᐧ
ـᴵ
ـᵎ
ـᵔ
ـᵢ
ـⁱ
ـﹳ
ـﹶ
ـ゙
ٴʻ
ٴʼ
ٴʽ
ٴʾ
ٴʿ
ٴˆ
ٴˈ
ٴˉ
ٴˊ
ٴˋ
ٴˎ
ٴˏ
ٴˑ
ٴי
ٴـ
ٴᐧ
ٴᴵ
ٴᵎ
ٴᵔ
ٴᵢ
ٴⁱ
ٴﹳ
ٴﹶ
ٴ゙
ᐧʻ
ᐧʼ
ᐧʽ
ᐧʾ
ᐧʿ
ᐧˆ
ᐧˈ
ᐧˉ
ᐧˊ
ᐧˋ
ᐧˎ
ᐧˏ
ᐧˑ
ᐧי
ᐧـ
ᐧٴ
ᐧᴵ
ᐧᵎ
ᐧᵔ
ᐧᵢ
ᐧⁱ
ᐧﹳ
ᐧﹶ
ᐧ゙
ᴵʻ
ᴵʼ
ᴵʽ
ᴵʾ
ᴵʿ
ᴵˆ
ᴵˈ
ᴵˉ
ᴵˊ
ᴵˋ
ᴵˎ
ᴵˏ
ᴵˑ
ᴵי
ᴵـ
ᴵٴ
ᴵᐧ
ᴵᵎ
ᴵᵔ
ᴵᵢ
ᴵⁱ
ᴵﹳ
ᴵﹶ
ᴵ゙
ᵎʻ
ᵎʼ
ᵎʽ
ᵎʾ
ᵎʿ
ᵎˆ
ᵎˈ
ᵎˉ
ᵎˊ
ᵎˋ
ᵎˎ
ᵎˏ
ᵎˑ
ᵎי
ᵎـ
ᵎٴ
ᵎᐧ
ᵎᴵ
ᵎᵔ
ᵎᵢ
ᵎⁱ
ᵎﹳ
ᵎﹶ
ᵎ゙
ᵔʻ
ᵔʼ
ᵔʽ
ᵔʾ
ᵔʿ
ᵔˆ
ᵔˈ
ᵔˉ
ᵔˊ
ᵔˋ
ᵔˎ
ᵔˏ
ᵔˑ
ᵔי
ᵔـ
ᵔٴ
ᵔᐧ
ᵔᴵ
ᵔᵎ
ᵔᵢ
ᵔⁱ
ᵔﹳ
ᵔﹶ
ᵔ゙
ᵢʻ
ᵢʼ
ᵢʽ
ᵢʾ
ᵢʿ
ᵢˆ
ᵢˈ
ᵢˉ
ᵢˊ
ᵢˋ
ᵢˎ
ᵢˏ
ᵢˑ
ᵢי
ᵢـ
ᵢٴ
ᵢᐧ
ᵢᴵ
ᵢᵎ
ᵢᵔ
ᵢⁱ
ᵢﹳ
ᵢﹶ
ᵢ゙
ⁱʻ
ⁱʼ
ⁱʽ
ⁱʾ
ⁱʿ
ⁱˆ
ⁱˈ
ⁱˉ
ⁱˊ
ⁱˋ
ⁱˎ
ⁱˏ
ⁱˑ
ⁱי
ⁱـ
ⁱٴ
ⁱᐧ
ⁱᴵ
ⁱᵎ
ⁱᵔ
ⁱᵢ
ⁱﹳ
ⁱﹶ
ⁱ゙
ﹳʻ
ﹳʼ
ﹳʽ
ﹳʾ
ﹳʿ
ﹳˆ
ﹳˈ
ﹳˉ
ﹳˊ
ﹳˋ
ﹳˎ
ﹳˏ
ﹳˑ
ﹳי
ﹳـ
ﹳٴ
ﹳᐧ
ﹳᴵ
ﹳᵎ
ﹳᵔ
ﹳᵢ
ﹳⁱ
ﹳﹶ
ﹳ゙
ﹶʻ
ﹶʼ
ﹶʽ
ﹶʾ
ﹶʿ
ﹶˆ
ﹶˈ
ﹶˉ
ﹶˊ
ﹶˋ
ﹶˎ
ﹶˏ
ﹶˑ
ﹶי
ﹶـ
ﹶٴ
ﹶᐧ
ﹶᴵ
ﹶᵎ
ﹶᵔ
ﹶᵢ
ﹶⁱ
ﹶﹳ
ﹶ゙
゙ʻ
゙ʼ
゙ʽ
゙ʾ
゙ʿ
゙ˆ
゙ˈ
゙ˉ
゙ˊ
゙ˋ
゙ˎ
゙ˏ
゙ˑ
゙י
゙ـ
゙ٴ
゙ᐧ
゙ᴵ
゙ᵎ
゙ᵔ
゙ᵢ
゙ⁱ
゙ﹳ
゙ﹶ

View File

@ -65,7 +65,6 @@
</goals> </goals>
<configuration> <configuration>
<options> <options>
<option>-repackageclasses nul.${project.groupId}.for.${project.artifactId}.class</option>
<option>-keep class ${project.groupId}.${project.artifactId}.${project.artifactId}</option> <option>-keep class ${project.groupId}.${project.artifactId}.${project.artifactId}</option>
</options> </options>
<libs> <libs>

View File

@ -10,12 +10,15 @@
# -----启用混淆字典----- # -----启用混淆字典-----
-obfuscationdictionary obf.dict -obfuscationdictionary obf.dict
-classobfuscationdictionary class.dict -classobfuscationdictionary obf.dict
-packageobfuscationdictionary class.dict -packageobfuscationdictionary obf.dict
# -----保留所有属性 # -----保留所有属性
-keepattributes ** -keepattributes **
# -----替换包名
-repackageclasses \ʼ.ʽ.ʾ
# -----公共数据不混淆----- # -----公共数据不混淆-----
-keep class cn.citycraft.CommonData.** {*;} -keep class cn.citycraft.CommonData.** {*;}
@ -26,24 +29,22 @@
-keepclassmembers class * implements org.bukkit.event.Listener { -keepclassmembers class * implements org.bukkit.event.Listener {
@org.bukkit.event.EventHandler <methods>; @org.bukkit.event.EventHandler <methods>;
} }
# -----保护枚举方法的完整性----- # -----保护枚举方法的完整性-----
-keep enum ** {*;} -keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# -----保护配置注入不被清理----- # -----保护配置注入不被清理-----
-keepclassmembers class * extends **.config.InjectConfigurationSection { -keepclassmembers class * extends **.config.Inject** {
<fields>;
}
-keepclassmembers class * extends **.config.InjectConfig {
<fields>; <fields>;
} }
# -----保护注解命令方法不被清理----- # -----保护注解命令方法不被清理-----
-keepclassmembers class **.commands.annotation.** { <methods>; } -keepclassmembers class **.commands.annotation.** { <methods>; }
-keepclassmembers class * implements **.commands.CommandExecutor { <methods>; } -keepclassmembers class * implements **.commands.CommandExecutor { <methods>; }
-keepclassmembers class **.commands.HandlerCommand { <methods>; }
-keepclassmembers class * implements **.commands.HandlerCommands {
@**.commands.HandlerCommand <methods>;
@**.commands.HandlerTabComplete <methods>;
}
# -----保护注解NotProguard标记----- # -----保护注解NotProguard标记-----
-keep class **.NotProguard -keep class **.NotProguard
-keep @**.NotProguard class * {*;} -keep @**.NotProguard class * {*;}
@ -51,6 +52,3 @@
@**.NotProguard <fields>; @**.NotProguard <fields>;
@**.NotProguard <methods>; @**.NotProguard <methods>;
} }
# -----保护命令解析正常-----
-keepnames class * extends **.commands.BaseCommand

View File

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

View File

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

View File

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

View File

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

View File

@ -42,17 +42,26 @@ public class ChatListener implements Listener {
new SubscribeTask(true, true); new SubscribeTask(true, true);
} }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onChat(final AsyncPlayerChatEvent e) { public void onChat(final AsyncPlayerChatEvent e) {
final Player p = e.getPlayer(); final Player p = e.getPlayer();
final ChatRule cr = plugin.getConfigExt().getChatRule(e.getPlayer()); final ChatRule cr = plugin.getConfigExt().getChatRule(e.getPlayer());
if (cr == null) { if (cr == null) {
return; return;
} }
final ChatConfig cc = cr.getFormats();
e.setCancelled(true); e.setCancelled(true);
final String msg = e.getMessage();
final Tellraw tr = Tellraw.create(); 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()) { for (final ChatMessagePart cmp : cc.getPrefixs()) {
cmp.then(tr, p); cmp.then(tr, p);
} }
@ -60,29 +69,9 @@ public class ChatListener implements Listener {
for (final ChatMessagePart cmp : cc.getSuffixs()) { for (final ChatMessagePart cmp : cc.getSuffixs()) {
cmp.then(tr, p); 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<>(); final LinkedList<String> mlist = new LinkedList<>();
if (!il.isEmpty()) { if (!il.isEmpty()) {
for (final String k : il) { for (final String k : il) {
@ -98,7 +87,7 @@ public class ChatListener implements Listener {
return mlist; return mlist;
} }
private LinkedList<String> handlerPattern(final String message) { private LinkedList<String> handlePattern(final String message) {
final Matcher m = ITEM_PATTERN.matcher(message); final Matcher m = ITEM_PATTERN.matcher(message);
final Set<String> temp = new HashSet<>(); final Set<String> temp = new HashSet<>();
final LinkedList<String> ilist = new LinkedList<>(); final LinkedList<String> ilist = new LinkedList<>();
@ -115,12 +104,35 @@ public class ChatListener implements Listener {
return ilist; return ilist;
} }
private boolean handlerTellraw(final Player player, final Tellraw tr, final String message, final String itemformat) { private void handleSend(final Player p, final Tellraw tr, final ChatRule cr) {
final LinkedList<String> il = handlerPattern(message); final int range = cr.getRange();
if (il == null) { Collection<? extends Entity> plist = Collections.emptyList();
return false; 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()) { while (!ml.isEmpty()) {
final String mm = ml.removeFirst(); final String mm = ml.removeFirst();
if (il.contains(mm)) { if (il.contains(mm)) {
@ -132,14 +144,12 @@ public class ChatListener implements Listener {
is = player.getInventory().getItem(k - '0' - 1); is = player.getInventory().getItem(k - '0' - 1);
} }
if (is != null && is.getType() != Material.AIR) { if (is != null && is.getType() != Material.AIR) {
tr.then(String.format(ChatColor.translateAlternateColorCodes('&', itemformat), tr.then(String.format(ChatColor.translateAlternateColorCodes('&', cr.getItemformat()), is.hasItemMeta() && is.getItemMeta().hasDisplayName() ? is.getItemMeta().getDisplayName() : is.getType().name()));
is.hasItemMeta() && is.getItemMeta().hasDisplayName() ? is.getItemMeta().getDisplayName() : is.getType().name()));
tr.item(is); tr.item(is);
} }
} else { } else {
tr.then(mm); tr.then(mm);
} }
} }
return true;
} }
} }

View File

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

View File

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

View File

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