Skip to content

Commit e40d369

Browse files
committed
Fixed bugs.
1 parent 1e67467 commit e40d369

File tree

9 files changed

+111
-54
lines changed

9 files changed

+111
-54
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import me.scoretwo.fastscript.api.script.custom.CustomScript
88
import me.scoretwo.fastscript.command.FSCommandNexus
99
import me.scoretwo.fastscript.config.SettingConfig
1010
import me.scoretwo.fastscript.api.script.ScriptManager
11+
import me.scoretwo.fastscript.command.commands.ScriptCommand
1112
import me.scoretwo.utils.sender.GlobalPlayer
1213
import me.scoretwo.utils.sender.GlobalSender
1314
import net.md_5.bungee.api.ChatColor
@@ -82,6 +83,7 @@ class FastScript(val plugin: ScriptPlugin) {
8283
"script" -> {
8384
initInternalScripts()
8485
scriptManager.loadScripts()
86+
commandNexus.findSubCommand("script")?.also { (it as ScriptCommand).reload() }
8587
}
8688
"plugin" ->{
8789
plugin.reload()

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,12 @@ abstract class Script(
1919

2020
val name = description.name
2121

22-
val bindExpansions get() =
23-
mutableListOf<FastScriptExpansion>().also { expansions -> texts.keys.forEach { expansions.add(FastScript.instance.expansionManager.getExpansionBySign(it) ?: return@forEach) } }
22+
fun bindExpansions() =
23+
mutableListOf<FastScriptExpansion>().also { expansions ->
24+
texts.keys.forEach {
25+
expansions.add(FastScript.instance.expansionManager.getExpansionBySign(it) ?: return@forEach)
26+
}
27+
}
2428

2529
open fun eval(sign: String, sender: GlobalSender): Any? =
2630
eval(FastScript.instance.expansionManager.getExpansionBySign(sign), sender)

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class ScriptManager {
3838
fun getScript(name: String) = scripts[name]
3939

4040
private fun loadGeneralScript(scriptFile: File): Pair<CustomScript?, ProcessResult> {
41-
val scriptName = scriptFile.name.substringAfterLast(".")
41+
val scriptName = scriptFile.name.substringBeforeLast(".")
4242
scriptFile.parentFile.listFiles()?.forEach {
4343
if (it.name == "$scriptName.yml") {
4444
return Pair(null, ProcessResult(ProcessResultType.OTHER, "script option file exists!"))
@@ -47,7 +47,7 @@ class ScriptManager {
4747

4848
val file = let {
4949
FastScript.instance.expansionManager.expansions.forEach { expansion ->
50-
if (!scriptFile.endsWith(expansion.fileSuffix))
50+
if (!scriptFile.name.endsWith(expansion.fileSuffix))
5151
return@forEach
5252

5353
return@let scriptFile
@@ -65,7 +65,7 @@ class ScriptManager {
6565
},
6666
ConfigScriptOption(),
6767
mutableListOf(file)
68-
)
68+
).reload()
6969

7070
scripts[scriptName] = script
7171
return Pair(script, ProcessResult(ProcessResultType.SUCCESS))
@@ -81,12 +81,12 @@ class ScriptManager {
8181
}
8282

8383
val scriptName = if (file.name.endsWith(".yml"))
84-
file.name.substringAfterLast(".")
84+
file.name.substringBeforeLast(".")
8585
else
8686
return loadGeneralScript(file)
8787

8888
val options = ConfigScriptOption(file)
89-
val script = CustomScript(ScriptDescription.fromSection(options.config), options)
89+
val script = CustomScript(ScriptDescription.fromSection(options.config), options).reload()
9090

9191
script.scriptFiles = mutableListOf<File>().also { files ->
9292
FastScript.instance.expansionManager.expansions.forEach { expansion ->
@@ -121,18 +121,18 @@ class ScriptManager {
121121
return Pair(null, ProcessResult(ProcessResultType.FAILED, "Option file not found in ${folder.name}."))
122122
}
123123
val options = ConfigScriptOption(optionsFile)
124-
val script = CustomScript(ScriptDescription.fromSection(options.config), options)
124+
val script = CustomScript(ScriptDescription.fromSection(options.config), options).reload()
125125

126126
script.scriptFiles = mutableListOf<File>().also { files ->
127127
folder.listFiles()?.forEach { file ->
128-
script.bindExpansions.forEach {
129-
if (file.endsWith(it.fileSuffix))
128+
script.bindExpansions().forEach {
129+
if (file.name.endsWith(it.fileSuffix))
130130
files.add(file)
131131
}
132132
}
133133
}
134134

135-
script.bindExpansions.forEach {
135+
script.bindExpansions().forEach {
136136
if (it.needEval)
137137
script.eval(it.sign, plugin.server.console)
138138
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import me.scoretwo.fastscript.FastScript
44
import me.scoretwo.fastscript.api.expansion.FastScriptExpansion
55
import me.scoretwo.fastscript.api.script.Script
66
import me.scoretwo.fastscript.api.script.ScriptDescription
7+
import me.scoretwo.fastscript.plugin
78
import java.io.File
89

910
open class CustomScript(
@@ -12,7 +13,7 @@ open class CustomScript(
1213
var scriptFiles: MutableList<File> = mutableListOf()
1314
): Script(description, configOption) {
1415

15-
open fun reload() {
16+
open fun reload() = also {
1617
if (configOption.file != null && !configOption.file.exists()) {
1718
configOption.config.save(configOption.file)
1819
}
@@ -32,6 +33,7 @@ open class CustomScript(
3233
}
3334
}
3435
}.toString()
36+
expansion.eval(this, plugin.server.console)
3537
}
3638

3739
}

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,17 @@ import me.scoretwo.utils.sender.GlobalSender
1414
*/
1515
class ReloadCommand: SimpleCommand(arrayOf("reload")) {
1616

17+
override var description = "重新载入配置文件或设置."
18+
19+
override var moreArgs: Array<String>? = arrayOf()
20+
21+
override var customCommands: MutableMap<String, Pair<Array<String>?, String>> = mutableMapOf(
22+
"all" to Pair(null, "重新载入所有设置."),
23+
"config" to Pair(null, "重新载入配置文件."),
24+
"script" to Pair(null, "重新载入脚本设置."),
25+
"plugin" to Pair(null, "重新载入插件设置."),
26+
)
27+
1728
override fun execute(sender: GlobalSender, parents: Array<String>, args: Array<String>): Boolean {
1829
var mode = "all"
1930
if (args.isNotEmpty()) {
@@ -26,7 +37,12 @@ class ReloadCommand: SimpleCommand(arrayOf("reload")) {
2637
return true
2738
}
2839
FastScript.instance.reload(mode)
29-
sender.sendMessage(FormatHeader.INFO, "成功载入部分设置.")
40+
when (mode) {
41+
"config" -> sender.sendMessage(FormatHeader.INFO, "成功载入配置文件.")
42+
"script" -> sender.sendMessage(FormatHeader.INFO, "成功载入脚本设置.")
43+
"plugin" -> sender.sendMessage(FormatHeader.INFO, "成功载入插件设置.")
44+
}
45+
3046
return true
3147
}
3248

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

Lines changed: 52 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ import me.scoretwo.utils.sender.GlobalSender
1111

1212
class ScriptCommand: SimpleCommand(arrayOf("script")) {
1313

14-
init {
15-
scriptCommand = this
16-
}
14+
override var description = "操作脚本重载/评估/运行."
15+
16+
override var moreArgs: Array<String>? = arrayOf()
1717

1818
private val runCommand = nextBuilder()
1919
.alias("run")
@@ -22,21 +22,30 @@ class ScriptCommand: SimpleCommand(arrayOf("script")) {
2222
override fun execute(sender: GlobalSender, parents: Array<String>, args: Array<String>): Boolean {
2323
val noReturn = if (args.isEmpty()) false else args[args.size - 1] == ":s"
2424

25-
val script = FastScript.instance.scriptManager.scripts[parents[parents.size - 4]] ?: let {
25+
val script = FastScript.instance.scriptManager.scripts[parents[parents.size - 2]] ?: let {
2626
// 似乎不会发生?
27-
sender.sendMessage(FormatHeader.WARN, "没有找到目标脚本 §c${parents[parents.size - 4]}§7! 请检查名称.")
27+
sender.sendMessage(FormatHeader.WARN, "没有找到目标脚本 §c${parents[parents.size - 2]}§7! 请检查名称.")
28+
return true
29+
}
30+
if (args.isEmpty()) {
31+
sender.sendMessage(FormatHeader.ERROR, "正确用法: /${parents.joinToString(" ")} §f<${script.texts.keys.joinToString("/")}> §7<${script.option.main}> <args...>")
32+
return true
33+
}
34+
val sign = args[0]
35+
if (!script.texts.keys.contains(sign)) {
36+
sender.sendMessage(FormatHeader.ERROR, "指定的拓展标识 §6$sign §7不正确! 正确用法: /${parents.joinToString(" ")} §f<${script.texts.keys.joinToString("/")}> §7<${script.option.main}> <args...>")
2837
return true
2938
}
3039

3140
val args0: Array<Any?> = when {
3241
args.size < 2 -> arrayOf()
33-
noReturn -> arrayOf(*args.sliceArray(1..args.size - 2))
34-
else -> arrayOf(*args.sliceArray(1 until args.size))
42+
noReturn -> arrayOf(*args.sliceArray(2..args.size - 2))
43+
else -> arrayOf(*args.sliceArray(2 until args.size))
3544
}
3645

3746
val result = when {
38-
args.isEmpty() -> script.execute(parents[parents.size - 3], sender)
39-
args.size >= 2 -> script.execute(parents[parents.size - 3], sender, args[0], args0)
47+
args.isEmpty() -> script.execute(sign, sender)
48+
args.size >= 2 -> script.execute(sign, sender, args[1], args0)
4049
else -> null
4150
}
4251

@@ -52,19 +61,28 @@ class ScriptCommand: SimpleCommand(arrayOf("script")) {
5261
.build()
5362

5463
private val evaluateCommand = nextBuilder()
55-
.alias("evaluate")
64+
.alias("eval")
5665
.description("评估这个脚本并获得返回值(:s 加在最后不返回消息)")
5766
.executor(object : Executors {
5867
override fun execute(sender: GlobalSender, parents: Array<String>, args: Array<String>): Boolean {
5968
val noReturn = if (args.isEmpty()) false else args[args.size - 1] == ":s"
6069

61-
val script = FastScript.instance.scriptManager.scripts[parents[parents.size - 4]] ?: let {
70+
val script = FastScript.instance.scriptManager.scripts[parents[parents.size - 2]] ?: let {
6271
// 似乎不会发生?
63-
sender.sendMessage(FormatHeader.WARN, "没有找到目标脚本 §c${parents[parents.size - 4]}§7! 请检查名称.")
72+
sender.sendMessage(FormatHeader.WARN, "没有找到目标脚本 §c${parents[parents.size - 2]}§7! 请检查名称.")
73+
return true
74+
}
75+
if (args.isEmpty()) {
76+
sender.sendMessage(FormatHeader.ERROR, "正确用法: /${parents.joinToString(" ")} §f<${script.texts.keys.joinToString("/")}>")
77+
return true
78+
}
79+
val sign = args[0]
80+
if (!script.texts.keys.contains(sign)) {
81+
sender.sendMessage(FormatHeader.ERROR, "指定的拓展标识 §6$sign §7不正确! 正确用法: /${parents.joinToString(" ")} §f<${script.texts.keys.joinToString("/")}>")
6482
return true
6583
}
6684

67-
val result = script.eval(parents[parents.size - 3], sender)
85+
val result = script.eval(sign, sender)
6886

6987
if (!noReturn) {
7088
sender.sendMessage(FormatHeader.INFO, "脚本 §b${script.name} §7的评估结果: §b${result}")
@@ -82,9 +100,9 @@ class ScriptCommand: SimpleCommand(arrayOf("script")) {
82100
.description("重新载入这个脚本")
83101
.execute(object : CommandExecutor {
84102
override fun execute(sender: GlobalSender, parents: Array<String>, args: Array<String>): Boolean {
85-
val script = FastScript.instance.scriptManager.scripts[parents[parents.size - 4]] ?: let {
103+
val script = FastScript.instance.scriptManager.scripts[parents[parents.size - 2]] ?: let {
86104
// 似乎不会发生?
87-
sender.sendMessage(FormatHeader.WARN, "没有找到目标脚本 §c${parents[parents.size - 4]}§7! 请检查名称.")
105+
sender.sendMessage(FormatHeader.WARN, "没有找到目标脚本 §c${parents[parents.size - 2]}§7! 请检查名称.")
88106
return true
89107
}
90108

@@ -100,31 +118,31 @@ class ScriptCommand: SimpleCommand(arrayOf("script")) {
100118
.description("显示有关这个脚本的信息")
101119
.execute(object : CommandExecutor {
102120
override fun execute(sender: GlobalSender, parents: Array<String>, args: Array<String>): Boolean {
103-
val script = FastScript.instance.scriptManager.scripts[parents[parents.size - 4]] ?: let {
121+
val script = FastScript.instance.scriptManager.scripts[parents[parents.size - 2]] ?: let {
104122
// 似乎不会发生?
105-
sender.sendMessage(FormatHeader.WARN, "没有找到目标脚本 §c${parents[parents.size - 4]}§7! 请检查名称.")
123+
sender.sendMessage(FormatHeader.WARN, "没有找到目标脚本 §c${parents[parents.size - 2]}§7! 请检查名称.")
106124
return true
107125
}
108126

109-
sender.sendMessage(FormatHeader.INFO, StringBuilder("脚本 §b${script.name} §7的相关信息:").also { builder ->
127+
sender.sendMessage(FormatHeader.INFO, StringBuilder("脚本 §b${script.name} §7的相关信息:\n").also { builder ->
110128
script.description.version?.also {
111-
builder.append(" §7版本: §2$it\n")
129+
builder.append(" §3§l* §7版本: §2$it\n")
112130
}
113131
script.description.authors.let {
114132
if (it.isEmpty())
115133
return@let
116-
builder.append(" §7编写者: §3${it.joinToString("§7, §3")}\n")
134+
builder.append(" §3§l* §7编写者: §3${it.joinToString("§7, §3")}\n")
117135
}
118136
script.description.description?.also {
119-
builder.append(" §7描述: §f$it\n")
137+
builder.append(" §3§l* §7描述: §f$it\n")
120138
}
121-
builder.append(" §7主函数: §a${script.description.main}\n")
122-
script.bindExpansions.let { expansions ->
139+
builder.append(" §3§l* §7主函数: §a${script.description.main}\n")
140+
script.bindExpansions().let { expansions ->
123141
if (expansions.isEmpty())
124142
return@let
125143
val signs = mutableListOf<String>().also { signs -> expansions.forEach { expansion -> signs.add(expansion.sign) } }
126144

127-
builder.append(" §7拓展挂钩: §6${signs.joinToString("§7, §6")}\n")
145+
builder.append(" §3§l* §7拓展: §6${signs.joinToString("§7, §6")}\n")
128146
}
129147
}.toString())
130148
return true
@@ -138,6 +156,15 @@ class ScriptCommand: SimpleCommand(arrayOf("script")) {
138156
val subCommand = nextBuilder()
139157
.alias(it.value.description.name)
140158
.description("一个自定义脚本")
159+
.execute(object : CommandExecutor {
160+
override fun execute(sender: GlobalSender, parents: Array<String>, args: Array<String>): Boolean {
161+
if (args.isEmpty()) {
162+
infoCommand.execute(sender, arrayOf(*parents, "info"), arrayOf())
163+
return true
164+
}
165+
return false
166+
}
167+
})
141168
.subCommand(runCommand)
142169
.subCommand(evaluateCommand)
143170
.subCommand(reloadCommand)
@@ -148,5 +175,4 @@ class ScriptCommand: SimpleCommand(arrayOf("script")) {
148175
}
149176

150177

151-
}
152-
lateinit var scriptCommand: ScriptCommand
178+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ class JavaScriptExpansion: TypeEngineExpansion() {
77
override val name = "JavaScript"
88
override val sign = "nashorn"
99
override val fileSuffix = "js"
10-
override val engine = scriptEngineManager.getEngineByName("js")
10+
override val engine: ScriptEngine = scriptEngineManager.getEngineByName("nashorn")
1111
}

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

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,15 @@ abstract class TypeEngineExpansion: FastScriptExpansion() {
3535
}
3636
engine.put("sender", sender)
3737
engine.put("originalsender", plugin.toOriginalSender(sender))
38-
return try {
39-
engine.eval(script.texts[sign])
40-
} catch (e: ScriptException) {
41-
plugin.server.console.sendMessage(FormatHeader.ERROR,"脚本 §c${script.description.name} §7解析时出现错误, 请检查脚本格式.")
38+
return let {
39+
try {
40+
engine.eval(script.texts[sign]).also {
41+
if (script.texts[sign]?.contains(it.toString()) == true) return@let "EVALUATED"
42+
}
43+
} catch (e: ScriptException) {
44+
plugin.server.console.sendMessage(FormatHeader.ERROR,"脚本 §c${script.description.name} §7评估时出现错误, 请检查脚本格式.")
45+
null
46+
}
4247
}
4348
}
4449

@@ -51,10 +56,15 @@ abstract class TypeEngineExpansion: FastScriptExpansion() {
5156
}
5257
engine.put("sender", sender)
5358
engine.put("originalsender", plugin.toOriginalSender(sender))
54-
return try {
55-
engine.eval(text)
56-
} catch (e: ScriptException) {
57-
plugin.server.console.sendMessage(FormatHeader.ERROR,"临时脚本解析时出现错误, 请检查脚本格式.")
59+
return let {
60+
try {
61+
engine.eval(text).also {
62+
if (text.contains(it.toString())) return@let "EVALUATED"
63+
}
64+
} catch (e: ScriptException) {
65+
plugin.server.console.sendMessage(FormatHeader.ERROR,"临时脚本评估时出现错误, 请检查脚本格式.")
66+
null
67+
}
5868
}
5969
}
6070

@@ -69,10 +79,8 @@ abstract class TypeEngineExpansion: FastScriptExpansion() {
6979

7080
invocable.invokeFunction(main, *args)
7181
} catch (e: Exception) {
72-
plugin.server.console.sendMessage(
73-
FormatHeader.ERROR,
74-
"脚本 §c${script.description.name} §7执行函数 §8$main §7时发生错误."
75-
)
82+
plugin.server.console.sendMessage(FormatHeader.ERROR, "脚本 §c${script.description.name} §7执行函数 §8$main §7时发生错误.")
83+
null
7684
}
7785
}
7886

@@ -88,6 +96,7 @@ abstract class TypeEngineExpansion: FastScriptExpansion() {
8896
invocable.invokeFunction(main, *args)
8997
} catch (e: Exception) {
9098
plugin.server.console.sendMessage(FormatHeader.ERROR, "临时脚本执行函数 §8$main §7时发生错误.")
99+
null
91100
}
92101
}
93102

build.gradle.kts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ allprojects {
3333
maven("https://jitpack.io")
3434
maven("https://hub.spigotmc.org/nexus/content/repositories/sonatype-nexus-snapshots/")
3535
maven("https://repo.codemc.io/repository/maven-snapshots/")
36-
maven("https://hub.spigotmc.org/nexus/content/repositories/sonatype-nexus-snapshots/")
37-
maven("https://repo.codemc.io/repository/maven-snapshots/")
3836
maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/")
3937
}
4038

0 commit comments

Comments
 (0)