Skip to content

Commit 2de3783

Browse files
committed
Update commands.
1 parent 478c3de commit 2de3783

File tree

21 files changed

+231
-75
lines changed

21 files changed

+231
-75
lines changed

FastScript-common/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ plugins {
88
}
99

1010
dependencies {
11-
compileOnly("org.apache.commons:commons-lang3:3.10")
1211
compileOnly("com.google.code.gson:gson:2.8.6")
1312
compileOnly("org.slf4j:slf4j-log4j12:1.7.30")
1413

1514
implementation("org.jetbrains.kotlin:kotlin-script-util:${rootProject.extra.get("kotlinVersion")}")
1615
implementation("org.jetbrains.kotlin:kotlin-compiler:${rootProject.extra.get("kotlinVersion")}")
1716

17+
implementation("commons-lang:commons-lang:2.6")
1818
implementation("commons-io:commons-io:2.7")
1919
implementation("me.scoretwo:commons-syntaxes:${rootProject.extra.get("commonsVersion")}")
2020
implementation("me.scoretwo:commons-command:${rootProject.extra.get("commonsVersion")}")
@@ -28,6 +28,7 @@ tasks.withType<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar> {
2828
exclude(dependency("org.jetbrains.kotlin:kotlin-stdlib-common"))
2929

3030
exclude(dependency("commons-io:commons-io:2.7"))
31+
include(dependency("commons-lang:commons-lang:2.6"))
3132

3233
include(dependency("me.scoretwo:commons-syntaxes:${rootProject.extra.get("commonsVersion")}"))
3334
include(dependency("me.scoretwo:commons-command:${rootProject.extra.get("commonsVersion")}"))

FastScript-common/src/main/kotlin/me/scoretwo/fastscript/FastScript.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import me.scoretwo.fastscript.api.expansion.ExpansionManager
44
import me.scoretwo.fastscript.api.format.FormatHeader
55
import me.scoretwo.fastscript.api.language.LanguageManager
66
import me.scoretwo.fastscript.api.plugin.ScriptPlugin
7+
import me.scoretwo.fastscript.api.plugin.ScriptPluginState
78
import me.scoretwo.fastscript.command.FSCommandNexus
89
import me.scoretwo.fastscript.config.SettingConfig
910
import me.scoretwo.fastscript.api.script.ScriptManager
@@ -58,15 +59,11 @@ class FastScript(val plugin: ScriptPlugin) {
5859
ExecUtils.execPeriod(ExecType.Initialized, "expansion manager") {
5960
expansionManager = ExpansionManager()
6061
}
61-
ExecUtils.execPeriod(ExecType.Reloaded, "expansion manager") {
62-
expansionManager.reload()
63-
}
62+
expansionManager.reload()
6463

6564
ExecUtils.execPeriod(ExecType.Initialized, "CommandNexus") {
6665
commandNexus = FSCommandNexus()
6766
}
68-
69-
stats = ExecType.Initialized
7067
}
7168

7269
fun reloadLanguage() {
@@ -109,7 +106,7 @@ class FastScript(val plugin: ScriptPlugin) {
109106

110107
companion object {
111108
lateinit var instance: FastScript
112-
var stats = ExecType.Initialize
109+
var stats = ScriptPluginState.INITIALIZING
113110

114111
fun setBootstrap(plugin: ScriptPlugin) {
115112
if (::instance.isInitialized) {

FastScript-common/src/main/kotlin/me/scoretwo/fastscript/api/expansion/ExpansionManager.kt

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package me.scoretwo.fastscript.api.expansion
22

33
import me.scoretwo.fastscript.FastScript
44
import me.scoretwo.fastscript.api.format.FormatHeader
5+
import me.scoretwo.fastscript.api.plugin.ScriptPluginState
56
import me.scoretwo.fastscript.api.utils.ExecType
67
import me.scoretwo.fastscript.api.utils.process.ProcessResult
78
import me.scoretwo.fastscript.api.utils.process.ProcessResultType
@@ -34,15 +35,15 @@ class ExpansionManager {
3435

3536
fun getExpansionByName(name: String): FastScriptExpansion? {
3637
for (expansion in expansions) {
37-
if (expansion.name == name)
38+
if (expansion.name.equals(name, ignoreCase = true))
3839
return expansion
3940
}
4041
return null
4142
}
4243

4344
fun getExpansionBySign(sign: String): FastScriptExpansion? {
4445
for (expansion in expansions) {
45-
if (expansion.sign == sign)
46+
if (expansion.sign.equals(sign, ignoreCase = true))
4647
return expansion
4748
}
4849
return null
@@ -75,11 +76,10 @@ class ExpansionManager {
7576
success++
7677
} catch (e: Exception) {
7778
fail++
78-
e.printStackTrace()
7979
plugin.server.console.sendMessage(FormatHeader.ERROR, "An exception occurred when loading extended ${file.name}, reason:\n§8${e.stackTraceToString()}")
8080
}
8181
}
82-
val format = if (FastScript.stats == ExecType.Loaded) FormatHeader.INFO else FormatHeader.TREE
82+
val format = if (FastScript.stats == ScriptPluginState.RUNNING) FormatHeader.INFO else FormatHeader.TREE
8383

8484
plugin.server.console.sendMessage(format, "Loaded §b$total §7expansions, §a$success §7successes${if (fail == 0) "" else ", §c$fail §7failures"}.§8(${System.currentTimeMillis() - startTime}ms)")
8585
}
@@ -96,22 +96,19 @@ class ExpansionManager {
9696
description = try {
9797
ExpansionDescription.readConfig(YamlConfiguration().also { it.load(jarFile.getInputStream(jarFile.getJarEntry("expansion.yml")).reader()) })
9898
} catch (e: Exception) {
99-
e.printStackTrace()
10099
plugin.server.console.sendMessage(FormatHeader.ERROR, "An error occurred while loading the expansion '${file.name}' description file, reason:\n§8${e.stackTraceToString()}")
101100
return Pair(ProcessResult(ProcessResultType.FAILED), null)
102101
}
103102
val clazz = try {
104103
Class.forName(description.main)
105104
} catch (e: Exception) {
106-
e.printStackTrace()
107105
plugin.server.console.sendMessage(FormatHeader.ERROR, "An error occurred while loading the main class ${description.main} of expansion '${file.name}', reason:\n§8${e.stackTraceToString()}")
108106
return Pair(ProcessResult(ProcessResultType.FAILED), null)
109107
}
110108

111109
val instance = try {
112110
clazz.newInstance()
113111
} catch (e: Exception) {
114-
e.printStackTrace()
115112
plugin.server.console.sendMessage(FormatHeader.ERROR, "An error occurred while loading the main class ${description.main} of expansion '${file.name}', reason:\n§8${e.stackTraceToString()}")
116113
return Pair(ProcessResult(ProcessResultType.FAILED), null)
117114
}
@@ -123,7 +120,6 @@ class ExpansionManager {
123120

124121
clazz.asSubclass(FastScriptExpansion::class.java)
125122
} catch (e: Exception) {
126-
e.printStackTrace()
127123
plugin.server.console.sendMessage(FormatHeader.ERROR, "An exception occurred when loading extended '${file.name}', reason:\n§8${e.stackTraceToString()}")
128124
return Pair(ProcessResult(ProcessResultType.FAILED), null)
129125
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package me.scoretwo.fastscript.api.plugin
2+
3+
/**
4+
* @author Score2
5+
* @date 2021/2/20 16:01
6+
*
7+
* @project FastScript
8+
*/
9+
enum class ScriptPluginState {
10+
INITIALIZING,
11+
RUNNING,
12+
RELOADING,
13+
DISABLE
14+
}

FastScript-common/src/main/kotlin/me/scoretwo/fastscript/api/script/ScriptManager.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@ class ScriptManager {
2626
init {
2727
if (!folders[0].exists()) {
2828
folders[0].mkdirs()
29-
"""
29+
File(folders[0], "example.js").writeText(
30+
"""
3031
function main() {
31-
sender.sendMessage("&athis is demo.")
32+
sender.sendMessage("§athis is demo.")
3233
}
33-
""".trimIndent().save(File(folders[0], "example.js"))
34+
""".trimIndent()
35+
)
3436
}
3537
}
3638

@@ -61,7 +63,7 @@ class ScriptManager {
6163
override val main: String = "main"
6264
override val version: String? = null
6365
override val description: String? = null
64-
override val authors: Array<String> = arrayOf("FastScript")
66+
override val authors: Array<String> = arrayOf()
6567

6668
},
6769
ConfigScriptOption(),
@@ -169,8 +171,7 @@ class ScriptManager {
169171
}
170172
}
171173
}
172-
val format = if (FastScript.stats == ExecType.Loaded) FormatHeader.INFO else FormatHeader.TREE
173-
plugin.server.console.sendMessage(format, "Loaded §b$total §7scripts, §a$success §7successes${if (fail == 0) "" else ", §c$fail §7failures"}.§8(${System.currentTimeMillis() - startTime}ms)")
174+
plugin.server.console.sendMessage(FormatHeader.INFO, "Loaded §b$total §7scripts, §a$success §7successes${if (fail == 0) "" else ", §c$fail §7failures"}.§8(${System.currentTimeMillis() - startTime}ms)")
174175
}
175176

176177
fun isConfigScriptOption(section: ConfigurationSection) =

FastScript-common/src/main/kotlin/me/scoretwo/fastscript/api/script/custom/CustomScript.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ open class CustomScript(
3434
}
3535
}.toString()
3636
expansion.eval(this, plugin.server.console)
37+
expansion.execute(this, plugin.server.console, "init")
3738
}
3839

3940
}

FastScript-common/src/main/kotlin/me/scoretwo/fastscript/command/commands/ExpansionCommand.kt

Lines changed: 88 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
11
package me.scoretwo.fastscript.command.commands
22

33
import me.scoretwo.fastscript.FastScript
4+
import me.scoretwo.fastscript.api.format.FormatHeader
5+
import me.scoretwo.fastscript.api.script.custom.CustomScript
46
import 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

Comments
 (0)