Skip to content

Commit 912cf3a

Browse files
committed
Completed JavaScript Module.
1 parent a47990d commit 912cf3a

File tree

8 files changed

+85
-14
lines changed

8 files changed

+85
-14
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package me.scoretwo.fastscript
22

33
import me.scoretwo.fastscript.api.format.FormatHeader
44
import me.scoretwo.fastscript.api.plugin.ScriptPlugin
5+
import me.scoretwo.fastscript.api.script.AbstractScript
56
import me.scoretwo.fastscript.command.ScriptCommandNexus
67
import me.scoretwo.fastscript.config.SettingConfig
78
import me.scoretwo.fastscript.script.ScriptManager
@@ -103,7 +104,8 @@ class FastScript(val plugin: ScriptPlugin) {
103104
}
104105

105106
}
106-
lateinit var plugin: GlobalPlugin
107+
lateinit var plugin: ScriptPlugin
108+
val scripts = mutableListOf<AbstractScript>()
107109

108110
fun GlobalSender.sendMessage(formatHeader: FormatHeader, strings: Array<String>, colorIndex: Boolean = true) {
109111
strings.forEach {
Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,65 @@
11
package me.scoretwo.fastscript.addon.javascript
22

33
import me.scoretwo.fastscript.FastScript
4+
import me.scoretwo.fastscript.api.format.FormatHeader
45
import me.scoretwo.fastscript.api.script.ConfigScriptOptions
56
import me.scoretwo.fastscript.api.script.FileScript
67
import me.scoretwo.fastscript.api.script.ScriptDescription
78
import me.scoretwo.fastscript.plugin
9+
import me.scoretwo.fastscript.sendMessage
10+
import me.scoretwo.utils.syntaxes.readString
811
import java.io.File
12+
import javax.script.Invocable
13+
import javax.script.ScriptEngine
914
import javax.script.ScriptEngineManager
15+
import javax.script.ScriptException
1016

1117
class JavaScript(
1218
description: ScriptDescription,
1319
val options: JavaScriptOptions,
1420
files: MutableList<File>
1521
): FileScript(description, options, files) {
1622

17-
val engine = ScriptEngineManager(plugin.pluginClassLoader).getEngineByName(options.engine)
23+
val engine: ScriptEngine
24+
val mergedString: String
1825

1926
init {
27+
mergedString = StringBuilder().also { builder ->
28+
files.forEach {
29+
builder.append(it.readString())
30+
builder.append("\n")
31+
}
32+
}.toString()
33+
engine = ScriptEngineManager(plugin.pluginClassLoader).getEngineByName(options.engine)
2034

35+
options.includes.forEach {
36+
engine.put(it.key, it.value[this])
37+
}
38+
meta.forEach {
39+
engine.put(it.key, it.value)
40+
}
41+
engine.put("api", plugin.abstractScriptUtils)
2142
}
43+
fun directEval(): Any? {
44+
return try {
45+
engine.eval(mergedString)
46+
} catch (e: ScriptException) {
47+
plugin.server.console.sendMessage(FormatHeader.ERROR,"脚本 §c${description.name} §7解析时出现错误, 请检查脚本格式.")
48+
}
49+
}
50+
51+
fun execute(function: String = options.main, args: Array<Any?> = arrayOf()): Any? {
52+
/*if (engine !is Invocable)*/
53+
return try {
54+
directEval()
2255

56+
val invocable = engine as Invocable
57+
58+
invocable.invokeFunction(function, *args)
59+
} catch (e: Exception) {
60+
plugin.server.console.sendMessage(FormatHeader.ERROR,"脚本 §c${description.name} §7执行函数 $function 时发生错误.")
61+
}
62+
}
2363

2464

2565
}

common/src/main/kotlin/me/scoretwo/fastscript/addon/javascript/ScriptInclude.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import me.scoretwo.fastscript.addon.javascript.exception.IncludeFormatException
55
import me.scoretwo.fastscript.addon.javascript.exception.TypeInferenceException
66
import me.scoretwo.fastscript.api.format.FormatHeader
77
import me.scoretwo.fastscript.plugin
8-
import me.scoretwo.fastscript.utils.sendMessage
8+
import me.scoretwo.fastscript.sendMessage
99
import me.scoretwo.utils.bukkit.configuration.yaml.ConfigurationSection
1010
import me.scoretwo.utils.bukkit.configuration.yaml.patchs.getLowerCaseNode
1111
import java.lang.reflect.Method
@@ -31,7 +31,7 @@ class ScriptInclude(
3131
} else this.type = type
3232
}
3333

34-
fun get(script: JavaScript): Any? {
34+
operator fun get(script: JavaScript): Any? {
3535
obj ?: throw IncludeFormatException()
3636
met ?: throw IncludeFormatException()
3737
val clazz = findClass(script, obj.first) ?: throw ClassNotFoundException()

common/src/main/kotlin/me/scoretwo/fastscript/api/plugin/ScriptPlugin.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package me.scoretwo.fastscript.api.plugin
22

3+
import me.scoretwo.fastscript.api.utils.AbstractScriptUtils
34
import me.scoretwo.utils.plugin.GlobalPlugin
45
import me.scoretwo.utils.plugin.PluginDescription
56
import me.scoretwo.utils.plugin.logging.GlobalLogger
@@ -11,6 +12,8 @@ abstract class ScriptPlugin(plugin: GlobalPlugin): GlobalPlugin {
1112

1213
abstract fun setPlaceholder(player: GlobalPlayer, string: String): String
1314

15+
abstract val abstractScriptUtils: AbstractScriptUtils
16+
1417
open fun load() {}
1518
open fun reload() {}
1619
open fun enable() {}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package me.scoretwo.fastscript.api.utils
2+
3+
import me.scoretwo.utils.sender.GlobalPlayer
4+
import me.scoretwo.utils.sender.GlobalSender
5+
import me.scoretwo.utils.server.GlobalServer
6+
7+
abstract class AbstractScriptUtils {
8+
9+
abstract fun toSender(sender: GlobalSender): Any?
10+
abstract fun toPlayer(player: GlobalPlayer): Any?
11+
abstract fun toServer(): Any?
12+
13+
14+
}

common/src/main/kotlin/me/scoretwo/fastscript/api/utils/ScriptKits.kt

Lines changed: 0 additions & 8 deletions
This file was deleted.

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,19 @@ import me.scoretwo.utils.sender.GlobalSender
66

77
class ScriptCommand: SubCommand(plugin, arrayOf("script")) {
88

9+
init {
910

11+
}
1012

1113
override fun executed(sender: GlobalSender, parents: MutableList<String>, args: MutableList<String>): Boolean {
1214
if (args.isEmpty()) {
1315
// list script
16+
return true
1417
}
1518

19+
if (args[0] == "") {
20+
21+
}
1622

1723

1824
return true

version-control/bukkit/src/main/kotlin/me/scoretwo/fastscript/bukkit/BukkitPlugin.kt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,18 @@ package me.scoretwo.fastscript.bukkit
33
import me.scoretwo.fastscript.FastScript
44
import me.scoretwo.fastscript.api.format.FormatHeader
55
import me.scoretwo.fastscript.api.plugin.ScriptPlugin
6+
import me.scoretwo.fastscript.api.utils.AbstractScriptUtils
67
import me.scoretwo.fastscript.bukkit.hook.PlaceholderAPIHook
8+
import me.scoretwo.fastscript.sendMessage
79
import me.scoretwo.utils.bukkit.command.bukkitCommandMap
810
import me.scoretwo.utils.bukkit.command.toBukkitPlayer
11+
import me.scoretwo.utils.bukkit.command.toBukkitSender
12+
import me.scoretwo.utils.bukkit.command.toGlobalSender
913
import me.scoretwo.utils.bukkit.plugin.toBukkitPlugin
1014
import me.scoretwo.utils.plugin.GlobalPlugin
1115
import me.scoretwo.utils.sender.GlobalPlayer
16+
import me.scoretwo.utils.sender.GlobalSender
17+
import me.scoretwo.utils.server.GlobalServer
1218
import org.bukkit.Bukkit
1319
import org.bukkit.command.Command
1420
import org.bukkit.command.CommandSender
@@ -22,16 +28,24 @@ class BukkitPlugin(val plugin: GlobalPlugin): ScriptPlugin(plugin) {
2228
override fun enable() {
2329
bukkitCommandMap.register(description.name, object : Command(description.name, "", "/" + description.name, listOf("script","bukkitScript")) {
2430
override fun execute(sender: CommandSender, label: String, args: Array<String>): Boolean {
25-
FastScript.instance.commandManager.execute(sender, args)
31+
FastScript.instance.commandNexus.execute(sender.toGlobalSender(), mutableListOf(label), args.toMutableList())
2632
return true
2733
}
2834

2935
override fun tabComplete(sender: CommandSender, alias: String, args: Array<String>): MutableList<String> {
30-
return FastScript.instance.commandManager.tabComplete(sender, args)
36+
return FastScript.instance.commandNexus.tabComplete(sender.toGlobalSender(), mutableListOf(label), args.toMutableList()) ?: mutableListOf()
3137
}
3238
})
3339
}
3440

41+
override val abstractScriptUtils = object : AbstractScriptUtils() {
42+
override fun toSender(sender: GlobalSender) = sender.toBukkitSender()
43+
override fun toPlayer(player: GlobalPlayer) = player.toBukkitPlayer()
44+
45+
override fun toServer() = Bukkit.getServer()
46+
47+
}
48+
3549
override fun setPlaceholder(player: GlobalPlayer, string: String): String {
3650
var text: String = string
3751
if (PAPIHook != null) {

0 commit comments

Comments
 (0)