diff --git a/src/main/kotlin/dev/znci/rocket/Rocket.kt b/src/main/kotlin/dev/znci/rocket/Rocket.kt index 3f3ebfd..8263348 100644 --- a/src/main/kotlin/dev/znci/rocket/Rocket.kt +++ b/src/main/kotlin/dev/znci/rocket/Rocket.kt @@ -17,6 +17,7 @@ package dev.znci.rocket import dev.znci.rocket.commands.RocketCommand import dev.znci.rocket.i18n.LocaleManager +import dev.znci.rocket.scripting.ScriptManager import dev.znci.rocket.scripting.events.EventListener import org.bukkit.plugin.java.JavaPlugin import java.io.File @@ -45,6 +46,8 @@ class Rocket : JavaPlugin() { scriptsFolder.mkdirs() } + ScriptManager.scriptsFolder = scriptsFolder + // Register commands this.getCommand("rocket")?.setExecutor(RocketCommand(this)) diff --git a/src/main/kotlin/dev/znci/rocket/commands/RocketCommand.kt b/src/main/kotlin/dev/znci/rocket/commands/RocketCommand.kt index 8590ed2..269f9f4 100644 --- a/src/main/kotlin/dev/znci/rocket/commands/RocketCommand.kt +++ b/src/main/kotlin/dev/znci/rocket/commands/RocketCommand.kt @@ -17,13 +17,14 @@ package dev.znci.rocket.commands import dev.znci.rocket.i18n.LocaleManager import dev.znci.rocket.scripting.ScriptManager +import dev.znci.rocket.scripting.ScriptManager.scriptsFolder import org.bukkit.command.Command -import org.bukkit.command.CommandExecutor import org.bukkit.command.CommandSender +import org.bukkit.command.TabExecutor import org.bukkit.plugin.java.JavaPlugin import java.io.File -class RocketCommand(private val plugin: JavaPlugin) : CommandExecutor { +class RocketCommand(private val plugin: JavaPlugin) : TabExecutor { override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array): Boolean { if (args.size != 2) { sender.sendMessage(LocaleManager.getMessageAsComponent("rocket_command.usage")) @@ -31,8 +32,7 @@ class RocketCommand(private val plugin: JavaPlugin) : CommandExecutor { } val action = args[0].lowercase() - val scriptName = args[1] - val scriptsFolder = File(plugin.dataFolder, "scripts") + val scriptName = if (!args[1].endsWith(".lua")) "${args[1]}.lua" else args[1] if (!scriptsFolder.exists() || !scriptsFolder.isDirectory) { sender.sendMessage(LocaleManager.getMessageAsComponent("rocket_command.scripts_folder_not_found")) @@ -88,4 +88,25 @@ class RocketCommand(private val plugin: JavaPlugin) : CommandExecutor { } return true } + + @Suppress("SENSELESS_COMPARISON") + override fun onTabComplete( + sender: CommandSender, + command: Command, + label: String, + args: Array + ): MutableList? { + + if (!sender.isOp) return null + if (args.size == 1) { + return mutableListOf("reload", "disable") + } else if (args.size == 2) { + return if (args[0] == "reload") ScriptManager.getAllScripts().toMutableList() + else if (args[0] == "disable") ScriptManager.getAllScripts(false).toMutableList() + else null + } + return null + + } + } diff --git a/src/main/kotlin/dev/znci/rocket/scripting/ScriptManager.kt b/src/main/kotlin/dev/znci/rocket/scripting/ScriptManager.kt index e26b6ca..1e4a98f 100644 --- a/src/main/kotlin/dev/znci/rocket/scripting/ScriptManager.kt +++ b/src/main/kotlin/dev/znci/rocket/scripting/ScriptManager.kt @@ -17,14 +17,13 @@ package dev.znci.rocket.scripting import dev.znci.rocket.scripting.classes.Command import dev.znci.rocket.scripting.functions.* -import org.bukkit.entity.Player import org.bukkit.event.Event import java.io.File import org.luaj.vm2.Globals import org.luaj.vm2.LuaError -import org.luaj.vm2.LuaTable import org.luaj.vm2.LuaValue import org.luaj.vm2.lib.jse.JsePlatform +import java.util.ArrayList object ScriptManager { var scriptsFolder: File = File("") @@ -47,6 +46,17 @@ object ScriptManager { } } + fun getAllScripts(includeDisabled: Boolean = true): List { + val list = ArrayList() + scriptsFolder.walkTopDown().forEach { file -> + if (file.isFile) { + if (includeDisabled && file.startsWith("-")) return@forEach + list.add(file.path.removePrefix("plugins/rocket/scripts/")) + } + } + return list + } + fun runScript(text: String): String? { try { globals.set("players", LuaPlayers())