Skip to content

Commit 3ab69b4

Browse files
committed
Update command languages.
1 parent e98380e commit 3ab69b4

File tree

15 files changed

+198
-83
lines changed

15 files changed

+198
-83
lines changed

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,4 +155,12 @@ fun GlobalSender.sendMessage(text: String, placeholders: Map<String, String>) {
155155
this.sendMessage(text)
156156
}
157157

158-
fun String.setPlaceholder(player: GlobalPlayer) = FastScript.instance.setPlaceholder(player, this)
158+
fun String.setPlaceholder(player: GlobalPlayer) = FastScript.instance.setPlaceholder(player, this)
159+
160+
fun String.setPlaceholder(placeholders: Map<String, String>): String {
161+
var rawText = this
162+
placeholders.forEach {
163+
rawText = rawText.replace("{${it.key}}", it.value)
164+
}
165+
return rawText
166+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ abstract class FastScriptExpansion {
1313

1414
abstract fun reload(): FastScriptExpansion
1515

16-
abstract fun eval(script: Script, sender: GlobalSender): Any?
17-
abstract fun eval(text: String, sender: GlobalSender): Any?
16+
abstract fun eval(text: String, sender: GlobalSender, vararg args: String): Any?
17+
abstract fun eval(script: Script, sender: GlobalSender, vararg args: String): Any?
1818
abstract fun execute(script: Script, sender: GlobalSender, main: String = script.option.main, args: Array<Any?> = arrayOf()): Any?
1919
abstract fun execute(text: String, sender: GlobalSender, main: String = "main", args: Array<Any?> = arrayOf()): Any?
2020

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

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package me.scoretwo.fastscript.api.language
22

33
import me.scoretwo.fastscript.FastScript
4+
import me.scoretwo.fastscript.languages
45
import me.scoretwo.fastscript.plugin
56
import me.scoretwo.utils.bukkit.configuration.yaml.file.YamlConfiguration
67
import me.scoretwo.utils.bukkit.configuration.yaml.patchs.getLowerCaseNode
@@ -17,6 +18,15 @@ class Language {
1718
this.file = File(plugin.dataFolder, "language/$name.yml")
1819
if (!file.exists()) {
1920
file.saveConfiguration(config)
21+
} else {
22+
config.load(file)
23+
val version = config.getString(config.getLowerCaseNode("version"))
24+
25+
if (version == null || languages.version.toString() != version) {
26+
languages.defaultLanguage.config.getKeys(true).forEach { if (!config.contains(it)) { config.set(it, languages.defaultLanguage.config[it]) } }
27+
config.save(file)
28+
}
29+
2030
}
2131
}
2232

@@ -29,27 +39,40 @@ class Language {
2939
}
3040

3141
val config = YamlConfiguration().also {
32-
it.set("FORMAT-HEADER", YamlConfiguration().also {
42+
it["FORMAT-HEADER"] = YamlConfiguration().also {
3343
it.set("INFO", "&7[&3Fast&bScript&7] &bINFO &8| &7")
3444
it.set("WARN", "&7[&3Fast&bScript&7] &eWARN &8| &7")
3545
it.set("ERROR", "&7[&3Fast&bScript&7] &cERROR &8| &7")
3646
it.set("TIPS", "&7[&3Fast&bScript&7] &2TIPS &8| &7")
3747
it.set("HOOKED", "&7[&3Fast&bScript&7] &6HOOKED &8| &7")
3848
it.set("DEBUG", "&7[&3Fast&bScript&7] &3DEBUG &8| &7")
39-
})
40-
it.set("COMMAND-TIPS", YamlConfiguration().also {
41-
it.set("COMMAND_ONLY_CONSOLE", "This command can only be executed on the console.")
42-
it.set("COMMAND_ONLY_PLAYER", "This command can only be executed by the player.")
43-
it.set("COMMAND_NO_PERMISSION", "You do not have permission to execute the command.")
44-
it.set("COMMAND_UNKNOWN_USAGE", "&cUsage &e{usage_error} &cis incorrect, you may want to use &e{usage_guess}")
45-
})
49+
}
50+
it["COMMAND-NEXUS"] = YamlConfiguration().also {
51+
it["SUBSTANTIVE"] = YamlConfiguration().also {
52+
it["ARGS"] = "args"
53+
}
54+
it["TIPS"] = YamlConfiguration().also {
55+
it["ONLY-CONSOLE"] = "This command can only be executed on the console."
56+
it["ONLY-PLAYER"] = "This command can only be executed by the player."
57+
it["NO-PERMISSION"] = "You do not have permission to execute the command."
58+
it["UNKNOWN-USAGE"] = "&cUsage &e{usage_error} &cis incorrect, you may want to use &e{usage_guess}"
59+
}
60+
it["HELP-GENERATION"] = YamlConfiguration().also {
61+
it["NOT-FOUND-COMMANDS"] = "&7No command data available."
62+
it["CLICK-INSERT-COMMAND"] = "&7Click insert command: &f/{command}"
63+
it["CLICK-TO-GO-URL"] = "&7Click to go to url: &f{url}"
64+
}
65+
it["COMMANDS"] = YamlConfiguration().also {
66+
67+
}
68+
}
4669

4770
}
4871

4972
operator fun set(node: String, any: Any?) = config.set(node.toUpperCase(), any)
5073

5174
operator fun get(node: String) = config.getString(node.toUpperCase())!!
5275

53-
fun getList(node: String) = config.getString(node.toUpperCase())!!
76+
fun getList(node: String): MutableList<String> = config.getStringList(node.toUpperCase())!!
5477

5578
}
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package me.scoretwo.fastscript.api.language
22

3-
class LanguageManager {
3+
import net.md_5.bungee.api.ChatColor
44

5+
class LanguageManager {
6+
val version = 1
57
val defaultLanguage = Language()
68
val languages = mutableMapOf<String, Language>().also {
79
it["en_US"] = defaultLanguage
@@ -11,9 +13,8 @@ class LanguageManager {
1113

1214
operator fun set(node: String, any: Any?) = current.set(node, any)
1315

14-
operator fun get(node: String) = current[node]
15-
16+
operator fun get(node: String): String = ChatColor.translateAlternateColorCodes('&', current[node])
1617

17-
fun getList(node: String) = current.getList(node)
18+
fun getList(node: String) = current.getList(node).also { it.toMutableList().forEachIndexed { i, s -> it[i] = ChatColor.translateAlternateColorCodes('&', s) } }
1819

1920
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ abstract class Script(
2626
}
2727
}
2828

29-
open fun eval(sign: String, sender: GlobalSender): Any? =
30-
eval(FastScript.instance.expansionManager.getExpansionBySign(sign), sender)
29+
open fun eval(sign: String, sender: GlobalSender, vararg args: String): Any? =
30+
eval(FastScript.instance.expansionManager.getExpansionBySign(sign), sender, *args)
3131

32-
fun eval(expansion: FastScriptExpansion?, sender: GlobalSender): Any? =
33-
expansion?.eval(this, sender)
32+
fun eval(expansion: FastScriptExpansion?, sender: GlobalSender, vararg args: String): Any? =
33+
expansion?.eval(this, sender, *args)
3434

3535
open fun execute(sign: String, sender: GlobalSender, main: String = option.main, args: Array<Any?> = arrayOf()): Any? =
3636
execute(FastScript.instance.expansionManager.getExpansionBySign(sign), sender, main, args)

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,10 @@ class ScriptManager {
109109
script.texts.keys.forEach { sign ->
110110
val expansion = FastScript.instance.expansionManager.getExpansionBySign(sign) ?: return@forEach
111111

112-
if (expansion.needEval) {
112+
/* if (expansion.needEval) {
113113
expansion.eval(sign, plugin.server.console)
114114
}
115+
*/
115116
}
116117

117118
scripts[file.name.substringBeforeLast(".")] = script
@@ -141,10 +142,12 @@ class ScriptManager {
141142
}
142143
}
143144

145+
/*
144146
script.bindExpansions().forEach {
145147
if (it.needEval)
146148
script.eval(it.sign, plugin.server.console)
147149
}
150+
*/
148151

149152
scripts[folder.name] = script
150153

@@ -186,8 +189,8 @@ class ScriptManager {
186189
section.isString(section.getLowerCaseNode("main"))
187190

188191

189-
fun eval(script: CustomScript, sign: String, sender: GlobalSender) =
190-
script.eval(sign, sender).also { evaluateCount += 1; operationCount += 1 }
192+
fun eval(script: CustomScript, sign: String, sender: GlobalSender, vararg args: String) =
193+
script.eval(sign, sender, *args).also { evaluateCount += 1; operationCount += 1 }
191194

192195
fun execute(script: CustomScript, sign: String, sender: GlobalSender, main: String = script.configOption.main, args: Array<Any?> = arrayOf()) =
193196
script.execute(sign, sender, main, args).also { executeCount += 1; operationCount += 1 }

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ import me.scoretwo.utils.sender.GlobalSender
1212
*/
1313
class TempScript(texts : MutableMap<String, String> = mutableMapOf()): Script(TempScriptDescription(), TempScriptOption(), texts) {
1414

15-
override fun eval(sign: String, sender: GlobalSender): Any? {
15+
override fun eval(sign: String, sender: GlobalSender, vararg args: String): Any? {
1616
for (expansion in FastScript.instance.expansionManager.expansions) {
1717
if (expansion.sign != sign)
1818
continue
19-
return expansion.eval(texts[sign] ?: "", sender)
19+
return expansion.eval(texts[sign] ?: "", sender, *args)
2020
}
2121
return null
2222
}

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

Lines changed: 76 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,18 @@ import me.scoretwo.fastscript.command.commands.ExpansionCommand
55
import me.scoretwo.fastscript.command.commands.ReloadCommand
66
import me.scoretwo.fastscript.command.commands.ScriptCommand
77
import me.scoretwo.fastscript.languages
8+
import me.scoretwo.fastscript.setPlaceholder
89
import me.scoretwo.utils.command.CommandBuilder
910
import me.scoretwo.utils.command.CommandNexus
1011
import me.scoretwo.utils.command.SubCommand
1112
import me.scoretwo.utils.command.executor.Executors
1213
import me.scoretwo.utils.command.helper.HelpGenerator
1314
import me.scoretwo.utils.command.language.CommandLanguage
1415
import me.scoretwo.utils.sender.GlobalSender
16+
import net.md_5.bungee.api.chat.ClickEvent
17+
import net.md_5.bungee.api.chat.HoverEvent
1518
import net.md_5.bungee.api.chat.TextComponent
19+
import net.md_5.bungee.api.chat.hover.content.Text
1620

1721
class FSCommandNexus: CommandNexus(FastScript.instance.plugin, arrayOf("FastScript", "script", "fs")) {
1822

@@ -23,21 +27,80 @@ class FSCommandNexus: CommandNexus(FastScript.instance.plugin, arrayOf("FastScri
2327
}
2428

2529
override var language = object : CommandLanguage {
26-
override val COMMAND_NO_PERMISSION = languages["COMMAND-TIPS.COMMAND_NO_PERMISSION"]
27-
override val COMMAND_ONLY_CONSOLE = languages["COMMAND-TIPS.COMMAND_ONLY_CONSOLE"]
28-
override val COMMAND_ONLY_PLAYER = languages["COMMAND-TIPS.COMMAND_ONLY_PLAYER"]
29-
override val COMMAND_UNKNOWN_USAGE = languages["COMMAND-TIPS.COMMAND_UNKNOWN_USAGE"]
30+
override val COMMAND_NO_PERMISSION = languages["COMMAND-NEXUS.TIPS.NO-PERMISSION"]
31+
override val COMMAND_ONLY_CONSOLE = languages["COMMAND-NEXUS.TIPS.ONLY-CONSOLE"]
32+
override val COMMAND_ONLY_PLAYER = languages["COMMAND-NEXUS.TIPS.ONLY-PLAYER"]
33+
override val COMMAND_UNKNOWN_USAGE = languages["COMMAND-NEXUS.TIPS.UNKNOWN-USAGE"]
3034
}
31-
/* override var helpGenerator = object : HelpGenerator {
32-
33-
override fun translateTexts(
34-
command: SubCommand,
35-
parents: MutableList<String>,
36-
args: MutableList<String>
37-
): MutableList<MutableList<TextComponent>> {
38-
return mutableListOf()
35+
// copy from commons-command DefaultHelpgeneration
36+
override var helpGenerator = object : HelpGenerator {
37+
38+
override fun translateTexts(command: SubCommand, parents: MutableList<String>, args: MutableList<String>): MutableList<MutableList<Array<TextComponent>>> {
39+
val texts = mutableListOf<Array<TextComponent>>()
40+
41+
texts.addAll(upperModule)
42+
43+
val displayParents = parents.joinToString(" ")
44+
45+
command.subCommands.forEach { subCommand ->
46+
val displayAlia = subCommand.alias[0]
47+
val displayAlias =
48+
if (subCommand.alias.size < 2)
49+
""
50+
else
51+
subCommand.alias.slice(1 until subCommand.alias.size)
52+
.joinToString("/","§8[","§8]§7")
53+
54+
val displayArgs =
55+
if (subCommand.subCommands.isEmpty() && subCommand.customCommands.isNotEmpty())
56+
"§7<${languages["COMMAND-NEXUS.SUBSTANTIVE.ARGS"]}...> "
57+
else if (subCommand.subCommands.isNotEmpty()) {
58+
subCommand.subCommands.joinToString("/", "§7<", "§7> ", 5, "§8...") { it.alias[0] }
59+
} else
60+
""
61+
62+
texts.add(arrayOf(TextComponent("§7/$displayParents §f$displayAlia$displayAlias §7$displayArgs§8§l- §7${subCommand.description}").also {
63+
it.hoverEvent = HoverEvent(HoverEvent.Action.SHOW_TEXT, Text(languages["COMMAND-NEXUS.HELP-GENERATION.CLICK-INSERT-COMMAND"].setPlaceholder(
64+
mapOf("command" to "$displayParents $displayAlia"))))
65+
it.clickEvent = ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/$displayParents $displayAlia ")
66+
}))
67+
}
68+
69+
command.customCommands.forEach {
70+
val displayAlia = it.key
71+
val displayArgs = it.value.first?.joinToString("/", "§7<", "§7> ", 5, "§8...") ?: ""
72+
texts.add(arrayOf(TextComponent("§7/$displayParents §f$displayAlia §7$displayArgs§8§l- §7${it.value.second}").also {
73+
it.hoverEvent = HoverEvent(HoverEvent.Action.SHOW_TEXT, Text(languages["COMMAND-NEXUS.HELP-GENERATION.CLICK-INSERT-COMMAND"].setPlaceholder(
74+
mapOf("command" to "$displayParents $displayAlia"))))
75+
it.clickEvent = ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/$displayParents $displayAlia ")
76+
}))
77+
}
78+
79+
if (upperModule.size == texts.size) {
80+
texts.add(arrayOf(TextComponent(languages["COMMAND-NEXUS.HELP-GENERATION.NOT-FOUND-COMMANDS"]).also {
81+
it.hoverEvent = HoverEvent(HoverEvent.Action.SHOW_TEXT, Text(languages["COMMAND-NEXUS.HELP-GENERATION.NOT-FOUND-COMMANDS"]))
82+
}))
83+
}
84+
85+
86+
return mutableListOf(texts)
3987
}
4088

41-
}*/
89+
val upperModule = mutableListOf(
90+
arrayOf(TextComponent("")),
91+
arrayOf(
92+
TextComponent(" §3${plugin.description.name} §7v${plugin.description.version}").also {
93+
it.hoverEvent = HoverEvent(
94+
HoverEvent.Action.SHOW_TEXT, Text(languages["COMMAND-NEXUS.HELP-GENERATION.CLICK-TO-GO-URL"].setPlaceholder(
95+
mapOf("url" to "https://github.com/FastScriptModule/FastScript")))
96+
)
97+
it.clickEvent = ClickEvent(ClickEvent.Action.OPEN_URL, "https://github.com/FastScriptModule/FastScript")
98+
},
99+
TextComponent(" §8§l- §bCOMMANDS")
100+
),
101+
arrayOf(TextComponent(""))
102+
)
103+
104+
}
42105

43106
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class ExpansionCommand: SimpleCommand(arrayOf("expansion")) {
6767
return true
6868
}
6969

70-
val displayParents = parents.joinToString(" ")
70+
val displayParents = parents.slice(0..parents.size - 2).joinToString(" ")
7171

7272
val bindScripts = mutableListOf<CustomScript>().also { list -> FastScript.instance.scriptManager.scripts.forEach { if (it.value.texts.keys.contains(expansion.sign)) list.add(it.value) } }
7373

@@ -78,7 +78,7 @@ class ExpansionCommand: SimpleCommand(arrayOf("expansion")) {
7878
sender.sendMessage("")
7979
sender.sendMessage(" §7查看脚本 §f${expansion.name} §7的更多帮助请输入:")
8080
sender.sendMessage(TextComponent(" "), TextComponent("§7/$displayParents §fhelp").also {
81-
it.hoverEvent = HoverEvent(HoverEvent.Action.SHOW_TEXT, Text("§7点击自动补全命令: §f$displayParents help"))
81+
it.hoverEvent = HoverEvent(HoverEvent.Action.SHOW_TEXT, Text("§7点击自动补全命令: §f/$displayParents help"))
8282
it.clickEvent = ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/$displayParents help ")
8383
})
8484
sender.sendMessage("")

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,17 @@ class ScriptCommand: SimpleCommand(arrayOf("script")) {
3737
return true
3838
}
3939
if (args.isEmpty()) {
40-
sender.sendMessage(FormatHeader.ERROR, "正确用法: /${parents.joinToString(" ")} §f<${script.texts.keys.joinToString("/")}> §7<${script.option.main}> <args...>")
40+
sender.sendMessage(FormatHeader.ERROR, "正确用法: /${parents.joinToString(" ")} §f<${script.texts.keys.joinToString("/")}> §7<${script.option.main}> <args...> §8:s")
4141
return true
4242
}
4343
val sign = args[0]
4444
if (!script.texts.keys.contains(sign)) {
45-
sender.sendMessage(FormatHeader.ERROR, "指定的拓展标识 §6$sign §7不正确! 正确用法: /${parents.joinToString(" ")} §f<${script.texts.keys.joinToString("/")}> §7<${script.option.main}> <args...>")
45+
sender.sendMessage(FormatHeader.ERROR, "指定的拓展标识 §6$sign §7不正确! 正确用法: /${parents.joinToString(" ")} §f<${script.texts.keys.joinToString("/")}> §7<${script.option.main}> <args...> §8:s")
4646
return true
4747
}
4848

4949
val args0: Array<Any?> = when {
50-
args.size < 2 -> arrayOf()
50+
args.size < 3 -> arrayOf()
5151
noReturn -> arrayOf(*args.sliceArray(2..args.size - 2))
5252
else -> arrayOf(*args.sliceArray(2 until args.size))
5353
}
@@ -96,16 +96,21 @@ class ScriptCommand: SimpleCommand(arrayOf("script")) {
9696
return true
9797
}
9898
if (args.isEmpty()) {
99-
sender.sendMessage(FormatHeader.ERROR, "正确用法: /${parents.joinToString(" ")} §f<${script.texts.keys.joinToString("/")}>")
99+
sender.sendMessage(FormatHeader.ERROR, "正确用法: /${parents.joinToString(" ")} §f<${script.texts.keys.joinToString("/")}> §7<args> §8:s")
100100
return true
101101
}
102102
val sign = args[0]
103103
if (!script.texts.keys.contains(sign)) {
104104
sender.sendMessage(FormatHeader.ERROR, "指定的拓展标识 §6$sign §7不正确! 正确用法: /${parents.joinToString(" ")} §f<${script.texts.keys.joinToString("/")}>")
105105
return true
106106
}
107+
val args0: Array<String> = when {
108+
args.size < 2 -> arrayOf()
109+
noReturn -> arrayOf(*args.sliceArray(1..args.size - 2))
110+
else -> arrayOf(*args.sliceArray(1 until args.size))
111+
}
107112

108-
val result = script.eval(sign, sender)
113+
val result = script.eval(sign, sender, *args0)
109114

110115
if (!noReturn) {
111116
sender.sendMessage(FormatHeader.INFO, "脚本 §b${script.name} §7使用拓展 §6${FastScript.instance.expansionManager.getExpansionBySign(sign)?.name ?: "Unknown"} §7的评估结果: §b${result}")
@@ -152,7 +157,7 @@ class ScriptCommand: SimpleCommand(arrayOf("script")) {
152157
return true
153158
}
154159

155-
val displayParents = parents.joinToString(" ")
160+
val displayParents = parents.slice(0..parents.size - 2).joinToString(" ")
156161

157162
sender.sendMessage(FormatHeader.INFO, "脚本 §b${script.name} §7的相关信息:")
158163
script.description.version?.also {

0 commit comments

Comments
 (0)