11package me.scoretwo.fastscript.command.commands
22
33import me.scoretwo.fastscript.FastScript
4+ import me.scoretwo.fastscript.api.format.FormatHeader
5+ import me.scoretwo.fastscript.api.script.custom.CustomScript
46import me.scoretwo.fastscript.command.SimpleCommand
5- import me.scoretwo.utils.command.SubCommand
7+ import me.scoretwo.fastscript.sendMessage
8+ import me.scoretwo.utils.command.executor.CommandExecutor
9+ import me.scoretwo.utils.command.executor.Executors
10+ import me.scoretwo.utils.sender.GlobalSender
11+ import net.md_5.bungee.api.chat.ClickEvent
12+ import net.md_5.bungee.api.chat.HoverEvent
13+ import net.md_5.bungee.api.chat.TextComponent
14+ import net.md_5.bungee.api.chat.hover.content.Text
615
716/* *
817 * @author Score2
@@ -14,11 +23,88 @@ class ExpansionCommand: SimpleCommand(arrayOf("expansion")) {
1423
1524 override var description = " 有关拓展的设置."
1625
26+ private val evaluateCommand = nextBuilder()
27+ .alias(" evaluate" , " eval" )
28+ .description(" 评估指定内容获得返回值(:s 加在最后不返回消息)" )
29+ .executor(object : Executors {
30+ override fun execute (sender : GlobalSender , parents : Array <String >, args : Array <String >): Boolean {
31+ if (args.isEmpty()) {
32+ sender.sendMessage(FormatHeader .ERROR , " 正确用法: /${parents.joinToString(" " )} §f<text...> §8:s" )
33+ return true
34+ }
35+ val noReturn = if (args.isEmpty()) false else args[args.size - 1 ] == " :s"
36+
37+ val expansion = FastScript .instance.expansionManager.getExpansionByName(parents[parents.size - 2 ]) ? : FastScript .instance.expansionManager.getExpansionBySign(parents[parents.size - 2 ]) ? : let {
38+ sender.sendMessage(FormatHeader .WARN , " 找不到拓展名称或标识 §c${parents[parents.size - 2 ]} §7! 请检查名称." )
39+ sender.sendMessage(FormatHeader .INFO , " 目前可用的拓展有: §6${FastScript .instance.expansionManager.expansions.joinToString(" , " ) { it.name }} " )
40+ return true
41+ }
42+
43+ val text = args.sliceArray(0 .. (if (! noReturn) args.size - 1 else args.size - 2 )).joinToString(" " )
44+
45+ val result = expansion.eval(text, sender)
46+
47+ if (! noReturn) {
48+ sender.sendMessage(FormatHeader .INFO , " 使用拓展 §6${expansion.name} §7评估该内容的结果: ${result.toString()} " )
49+ }
50+
51+ return true
52+ }
53+
54+ override fun tabComplete (sender : GlobalSender , parents : Array <String >, args : Array <String >) = mutableListOf (" :s" )
55+ })
56+ .build()
57+
58+
59+ private val infoCommand = nextBuilder()
60+ .alias(" info" )
61+ .description(" 显示有关这个脚本的信息" )
62+ .execute(object : CommandExecutor {
63+ override fun execute (sender : GlobalSender , parents : Array <String >, args : Array <String >): Boolean {
64+ val expansion = FastScript .instance.expansionManager.getExpansionByName(parents[parents.size - 2 ]) ? : FastScript .instance.expansionManager.getExpansionBySign(parents[parents.size - 2 ]) ? : let {
65+ sender.sendMessage(FormatHeader .WARN , " 找不到拓展名称或标识 §c${parents[parents.size - 2 ]} §7! 请检查名称." )
66+ sender.sendMessage(FormatHeader .INFO , " 目前可用的拓展有: §6${FastScript .instance.expansionManager.expansions.joinToString(" , " ) { it.name }} " )
67+ return true
68+ }
69+
70+ val displayParents = parents.joinToString(" " )
71+
72+ val bindScripts = mutableListOf<CustomScript >().also { list -> FastScript .instance.scriptManager.scripts.forEach { if (it.value.texts.keys.contains(expansion.sign)) list.add(it.value) } }
73+
74+ sender.sendMessage(FormatHeader .INFO , " 拓展 §6${expansion.name} §7的相关信息:" )
75+ sender.sendMessage(" §3§l* §7标识: §a${expansion.sign} " )
76+ sender.sendMessage(" §3§l* §7文件后缀: §a${expansion.fileSuffix} " )
77+ sender.sendMessage(" §3§l* §7绑定的脚本: §f${bindScripts.joinToString { it.name }} " )
78+ sender.sendMessage(" " )
79+ sender.sendMessage(" §7查看脚本 §f${expansion.name} §7的更多帮助请输入:" )
80+ sender.sendMessage(TextComponent (" " ), TextComponent (" §7/$displayParents §fhelp" ).also {
81+ it.hoverEvent = HoverEvent (HoverEvent .Action .SHOW_TEXT , Text (" §7点击自动补全命令: §f$displayParents help" ))
82+ it.clickEvent = ClickEvent (ClickEvent .Action .SUGGEST_COMMAND , " /$displayParents help " )
83+ })
84+ sender.sendMessage(" " )
85+
86+ return true
87+ }
88+ })
89+ .build()
90+
1791 init {
1892 subCommands.clear()
1993 FastScript .instance.expansionManager.expansions.forEach {
20- val subCommand = nextBuilder().alias(it.name.toLowerCase(), it.sign.toLowerCase())
94+ val subCommand = nextBuilder()
95+ .alias(it.name.toLowerCase(), it.sign.toLowerCase())
2196 .description(" 有关 ${it.name} 的命令" )
97+ .execute(object : CommandExecutor {
98+ override fun execute (sender : GlobalSender , parents : Array <String >, args : Array <String >): Boolean {
99+ if (args.isEmpty()) {
100+ infoCommand.execute(sender, arrayOf(* parents, " info" ), arrayOf())
101+ return true
102+ }
103+ return false
104+ }
105+ })
106+ .subCommand(infoCommand)
107+ .subCommand(evaluateCommand)
22108 .build()
23109 subCommands.add(subCommand)
24110 }
0 commit comments