Skip to content

Commit 0468606

Browse files
committed
Update language system.
Update and repair plugin BootStrap.
1 parent 271170a commit 0468606

File tree

13 files changed

+275
-149
lines changed

13 files changed

+275
-149
lines changed

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

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

33
import me.scoretwo.fastscript.api.expansion.ExpansionManager
44
import me.scoretwo.fastscript.api.format.FormatHeader
5+
import me.scoretwo.fastscript.api.language.LanguageManager
56
import me.scoretwo.fastscript.api.plugin.ScriptPlugin
67
import me.scoretwo.fastscript.api.script.Script
78
import me.scoretwo.fastscript.command.ScriptCommandNexus
@@ -36,6 +37,9 @@ class FastScript(val plugin: ScriptPlugin) {
3637

3738
settings = SettingConfig()
3839

40+
language = LanguageManager()
41+
language.current = language.languages[settings.getString("Options.Language")]!!
42+
3943
commandNexus = ScriptCommandNexus()
4044
scriptManager = ScriptManager()
4145
expansionManager = ExpansionManager()
@@ -49,17 +53,11 @@ class FastScript(val plugin: ScriptPlugin) {
4953

5054
}
5155

52-
fun initLanguageFiles() {
53-
Utils.saveDefaultResource(File("${plugin.dataFolder}/languages", "en_US.yml"), StreamUtils.getResource("lang/en_US.yml")!!)
54-
Utils.saveDefaultResource(File("${plugin.dataFolder}/languages", "zh_CN.yml"), StreamUtils.getResource("lang/zh_CN.yml")!!)
55-
}
56-
5756
fun onReload() {
5857
if (!plugin.dataFolder.exists()) {
5958
plugin.dataFolder.mkdirs()
6059
}
6160
plugin.reload()
62-
initLanguageFiles()
6361
initInternalScripts()
6462
scriptManager.loadScripts()
6563
}
@@ -109,6 +107,7 @@ lateinit var plugin: ScriptPlugin
109107
val scripts = mutableListOf<Script>()
110108

111109
lateinit var settings: SettingConfig
110+
lateinit var language: LanguageManager
112111

113112
fun GlobalSender.sendMessage(formatHeader: FormatHeader, strings: Array<String>, colorIndex: Boolean = true) {
114113
strings.forEach {
@@ -118,12 +117,10 @@ fun GlobalSender.sendMessage(formatHeader: FormatHeader, strings: Array<String>,
118117

119118
fun GlobalSender.sendMessage(formatHeader: FormatHeader, string: String, colorIndex: Boolean = true) {
120119
if (colorIndex)
121-
this.sendMessage("${settings.defaultLanguage.getString(settings.defaultLanguage.getLowerCaseNode("format-header.${formatHeader.name.toLowerCase()}"))}${string}")
120+
this.sendMessage("${language["format-header.${formatHeader.name}"]}${string}")
122121
else
123122
this.sendMessage(
124-
ChatColor.translateAlternateColorCodes('&',"${
125-
settings.defaultLanguage.getString(
126-
settings.defaultLanguage.getLowerCaseNode("format-header.${formatHeader.name.toLowerCase()}"))}${string}"))
123+
ChatColor.translateAlternateColorCodes('&',"${"${language["format-header.${formatHeader.name}"]}${string}"}${string}"))
127124
}
128125

129126
fun String.setPlaceholder(player: GlobalPlayer): String {
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package me.scoretwo.fastscript.api.language
2+
3+
import me.scoretwo.fastscript.FastScript
4+
import me.scoretwo.fastscript.plugin
5+
import me.scoretwo.utils.bukkit.configuration.yaml.file.YamlConfiguration
6+
import me.scoretwo.utils.bukkit.configuration.yaml.patchs.getLowerCaseNode
7+
import me.scoretwo.utils.bukkit.configuration.yaml.patchs.saveConfiguration
8+
import java.io.File
9+
10+
class Language {
11+
12+
val name: String
13+
val file: File
14+
15+
constructor(name: String = "en_US") {
16+
this.name = name
17+
this.file = File(plugin.dataFolder, "language/$name.yml")
18+
if (!file.exists()) {
19+
file.saveConfiguration(config)
20+
}
21+
}
22+
23+
constructor(file: File) {
24+
this.name = file.name.substringBeforeLast(".")
25+
this.file = file
26+
if (!file.exists()) {
27+
file.saveConfiguration(config)
28+
}
29+
}
30+
31+
val config = YamlConfiguration().also {
32+
it.addDefault("FORMAT-HEADER", YamlConfiguration().also {
33+
it.addDefault("INFO", "&7[&2Fast&aScript&7] &bINFO &8| &7")
34+
it.addDefault("WARN", "&7[&2Fast&aScript&7] &eWARN &8| &7")
35+
it.addDefault("ERROR", "&7[&2Fast&aScript&7] &cERROR &8| &7")
36+
it.addDefault("TIPS", "&7[&2Fast&aScript&7] &2TIPS &8| &7")
37+
it.addDefault("HOOKED", "&7[&2Fast&aScript&7] &6HOOKED &8| &7")
38+
it.addDefault("DEBUG", "&7[&2Fast&aScript&7] &3DEBUG &8| &7")
39+
})
40+
41+
}
42+
43+
operator fun set(node: String, any: Any?) = config.set(
44+
let {
45+
if (config.contains(config.getLowerCaseNode(node))) {
46+
config.getLowerCaseNode(node)
47+
} else {
48+
node.toUpperCase()
49+
}
50+
}
51+
, any)
52+
53+
operator fun get(node: String) = config.getString(config.getLowerCaseNode(node))!!
54+
55+
fun getList(node: String) = config.getStringList(config.getLowerCaseNode(node))!!
56+
57+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package me.scoretwo.fastscript.api.language
2+
3+
class LanguageManager {
4+
5+
val languages = mutableMapOf<String, Language>().also {
6+
it["en_US"] = Language()
7+
}
8+
9+
var current = languages["en_US"]!!
10+
11+
12+
operator fun set(node: String, any: Any?) = current.set(node, any)
13+
14+
operator fun get(node: String) = current[node]
15+
16+
17+
fun getList(node: String) = current.getList(node)
18+
19+
}

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

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,38 +21,45 @@ class ScriptManager {
2121
* 仅接受文件后缀为yml的文件或者可用的脚本文件夹才能被处理
2222
*/
2323
private fun loadScript(file: File): ProcessResult {
24+
if (file.name.contains(" ")) return ProcessResult(ProcessResultType.FAILED, "File name cannot contain spaces!")
2425
if (file.isDirectory) {
2526
return loadFromFolderScript(file)
2627
}
2728

28-
if (file.name.endsWith(".yml")) {
29-
val scriptName = file.name.substringBeforeLast(".")
29+
val scriptName= if (file.name.endsWith(".yml"))
30+
file.name.substringBeforeLast(".")
31+
else
32+
return ProcessResult(ProcessResultType.OTHER, "The file does not belong to the script, skip reading!")
3033

31-
val option = ScriptOptions(file)
34+
val options = ScriptOptions(file)
35+
val script = Script(ScriptDescription.fromSection(options.config), options)
3236

37+
script.scriptFiles = mutableListOf<File>().also { files ->
38+
FastScript.instance.expansionManager.expansions.forEach { expansion ->
39+
val candidateFile = File(file.parentFile, "$scriptName.${expansion.fileSuffix}")
40+
if (candidateFile.exists()) {
41+
files.add(candidateFile)
42+
}
43+
}
3344
}
3445

35-
FastScript.instance.expansionManager.expansions.forEach { expansion ->
36-
37-
// 載入脚本
38-
scripts[file.name.substringBeforeLast(".")]
39-
}
40-
46+
scripts[file.name.substringBeforeLast(".")] = script
47+
return ProcessResult(ProcessResultType.SUCCESS)
4148
}
4249

4350
private fun loadFromFolderScript(folder: File): ProcessResult {
44-
val optionFiles = arrayOf("option.yml", "${folder.name}.yml", "setting.yml")
51+
val optionsFiles = arrayOf("option.yml", "${folder.name}.yml", "setting.yml")
4552

46-
val optionFile: File = optionFiles.let {
53+
val optionsFile: File = optionsFiles.let {
4754
for (fileName in it) {
4855
val file = File(fileName)
4956
if (file.exists()) return@let file
5057
}
5158

5259
return ProcessResult(ProcessResultType.FAILED, "Option file not found in ${folder.name}.")
5360
}
54-
val option = ScriptOptions(optionFile)
55-
val script = Script(ScriptDescription.fromSection(option.config), option)
61+
val options = ScriptOptions(optionsFile)
62+
val script = Script(ScriptDescription.fromSection(options.config), options)
5663

5764
script.scriptFiles = mutableListOf<File>().also { files ->
5865
folder.listFiles()?.forEach { file ->
@@ -81,7 +88,7 @@ class ScriptManager {
8188
settings.getStringList(settings.getLowerCaseNode("load-script-files")).forEach {
8289
val file = File(it)
8390

84-
if (file.exists()) selectScriptFiles(file).forEach { loadScript(it) }
91+
if (file.isDirectory && file.exists()) file.listFiles()?.forEach { loadScript(it) }
8592

8693
}
8794
}
@@ -91,16 +98,6 @@ class ScriptManager {
9198
(section.isString(section.getLowerCaseNode("version")) || section.isInt(section.getLowerCaseNode("version"))) &&
9299
section.isString(section.getLowerCaseNode("main"))
93100

94-
fun selectScriptFiles(file: File): MutableList<File> = mutableListOf<File>().let { files ->
95-
if (file.isDirectory) {
96-
file.listFiles()?.forEach {
97-
files.addAll(selectScriptFiles(it))
98-
}
99-
} else if (file.name.endsWith(".yml", true)) {
100-
files.add(file)
101-
}
102-
files
103-
}
104101

105102

106103

common/src/main/kotlin/me/scoretwo/fastscript/config/SettingConfig.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class SettingConfig(): Config(File(plugin.dataFolder, "settings.yml")) {
1010
val default = YamlConfiguration().also {
1111
it.set("Options", YamlConfiguration().also {
1212
it.set("Debug", false)
13-
it.set("Language", "en_Us")
13+
it.set("Language", "en_US")
1414
it.set("File-Listener", true)
1515
})
1616
it.set("Load-Script-Files", listOf("plugins/CustomScriptFolder"))

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

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@ import me.scoretwo.fastscript.api.format.FormatHeader
55
import me.scoretwo.fastscript.api.plugin.ScriptPlugin
66
import me.scoretwo.fastscript.bukkit.hook.PlaceholderAPIHook
77
import me.scoretwo.fastscript.sendMessage
8-
import me.scoretwo.utils.bukkit.command.bukkitCommandMap
9-
import me.scoretwo.utils.bukkit.command.toBukkitPlayer
10-
import me.scoretwo.utils.bukkit.command.toBukkitSender
11-
import me.scoretwo.utils.bukkit.command.toGlobalSender
8+
import me.scoretwo.utils.bukkit.command.*
129
import me.scoretwo.utils.bukkit.plugin.toBukkitPlugin
1310
import me.scoretwo.utils.plugin.GlobalPlugin
1411
import me.scoretwo.utils.sender.GlobalPlayer
@@ -24,16 +21,9 @@ class BukkitPlugin(val plugin: GlobalPlugin): ScriptPlugin(plugin) {
2421
}
2522

2623
override fun enable() {
27-
bukkitCommandMap.register(description.name, object : Command(description.name, "", "/" + description.name, listOf("script","bukkitScript")) {
28-
override fun execute(sender: CommandSender, label: String, args: Array<String>): Boolean {
29-
FastScript.instance.commandNexus.execute(sender.toGlobalSender(), mutableListOf(label), args.toMutableList())
30-
return true
31-
}
24+
FastScript.instance.onReload()
3225

33-
override fun tabComplete(sender: CommandSender, alias: String, args: Array<String>): MutableList<String> {
34-
return FastScript.instance.commandNexus.tabComplete(sender.toGlobalSender(), mutableListOf(label), args.toMutableList()) ?: mutableListOf()
35-
}
36-
})
26+
FastScript.instance.commandNexus.registerBukkitCommands()
3727
}
3828

3929
override fun setPlaceholder(player: GlobalPlayer, string: String): String {
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package me.scoretwo.fastscript.bungee
2+
3+
import me.scoretwo.utils.bungee.plugin.toGlobalPlugin
4+
import net.md_5.bungee.api.plugin.Plugin
5+
6+
class BungeeBootStrap: Plugin() {
7+
8+
val bungeePlugin = BungeePlugin(toGlobalPlugin())
9+
10+
override fun onLoad() {
11+
bungeePlugin.load()
12+
}
13+
14+
override fun onEnable() {
15+
bungeePlugin.enable()
16+
}
17+
18+
override fun onDisable() {
19+
bungeePlugin.disable()
20+
}
21+
22+
}

version-control/bungee/src/main/kotlin/me/scoretwo/fastscript/bungee/BungeePlugin.kt

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,48 +2,44 @@ package me.scoretwo.fastscript.bungee
22

33
import me.scoretwo.fastscript.FastScript
44
import me.scoretwo.fastscript.api.plugin.ScriptPlugin
5+
import me.scoretwo.utils.bungee.command.registerBungeeCommands
6+
import me.scoretwo.utils.bungee.command.toBungeePlayer
7+
import me.scoretwo.utils.bungee.command.toBungeeSender
8+
import me.scoretwo.utils.bungee.command.toGlobalSender
9+
import me.scoretwo.utils.bungee.plugin.toBungeePlugin
10+
import me.scoretwo.utils.plugin.GlobalPlugin
11+
import me.scoretwo.utils.sender.GlobalPlayer
12+
import me.scoretwo.utils.sender.GlobalSender
513
import net.md_5.bungee.api.ChatColor
614
import net.md_5.bungee.api.CommandSender
715
import net.md_5.bungee.api.ProxyServer
816
import net.md_5.bungee.api.plugin.Command
917
import net.md_5.bungee.api.plugin.Plugin
1018
import net.md_5.bungee.api.plugin.TabExecutor
1119

12-
class BungeePlugin: Plugin(), ScriptPlugin {
20+
class BungeePlugin(val plugin: GlobalPlugin): ScriptPlugin(plugin) {
1321

14-
override fun onLoad() {
15-
}
16-
17-
override fun onEnable() {
22+
override fun load() {
1823
FastScript.setBootstrap(this)
19-
FastScript.instance.onReload()
20-
21-
ProxyServer.getInstance().pluginManager.registerCommand(this, object : Command("FastScript", null, "script"), TabExecutor {
22-
override fun execute(sender: CommandSender, args: Array<String>) {
23-
FastScript.instance.commandManager.execute(sender, args)
24-
}
25-
26-
override fun onTabComplete(sender: CommandSender, args: Array<String>): MutableIterable<String> {
27-
return FastScript.instance.commandManager.tabComplete(sender, args)
28-
}
29-
})
3024
}
3125

32-
override val console: Any = ProxyServer.getInstance().console
26+
override fun enable() {
27+
FastScript.instance.onReload()
3328

34-
override fun getPluginClassLoader(): ClassLoader {
35-
return javaClass.classLoader
29+
FastScript.instance.commandNexus.registerBungeeCommands()
3630
}
3731

38-
override fun setPlaceholder(player: Any, string: String): String {
32+
override fun setPlaceholder(player: GlobalPlayer, string: String): String {
3933
return string
4034
}
4135

42-
override fun translateStringColors(string: String): String {
43-
return ChatColor.translateAlternateColorCodes('&', string)
44-
}
36+
override fun toOriginalSender(sender: GlobalSender) = sender.toBungeeSender()
37+
38+
override fun toOriginalPlayer(player: GlobalPlayer) = player.toBungeePlayer()
39+
40+
override fun toOriginalServer(): Any? = ProxyServer.getInstance()
4541

46-
override fun onReload() {
42+
override fun reload() {
4743

4844
}
4945

version-control/sponge/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ repositories {
1717
}
1818

1919
blossom {
20-
replaceTokenIn("src/main/kotlin/me/scoretwo/fastscript/sponge/SpongePlugin.kt")
20+
replaceTokenIn("src/main/kotlin/me/scoretwo/fastscript/sponge/SpongeBootStrap.kt")
2121
replaceToken("%%version%%", rootProject.version)
2222
replaceToken("%%description%%", rootProject.description)
2323
}

0 commit comments

Comments
 (0)