Add a reload command for Config

This commit is contained in:
2025-04-02 23:10:16 -07:00
parent 48c608b77b
commit f8eef33127
5 changed files with 139 additions and 5 deletions

View File

@@ -0,0 +1,38 @@
package xyz.lncvrt.galaxytab.commands.api
import org.bukkit.command.CommandSender
import org.bukkit.plugin.java.JavaPlugin
import org.incendo.cloud.SenderMapper
import org.incendo.cloud.description.Description
import org.incendo.cloud.execution.ExecutionCoordinator
import org.incendo.cloud.kotlin.MutableCommandBuilder
import org.incendo.cloud.kotlin.extension.buildAndRegister
import org.incendo.cloud.kotlin.extension.commandBuilder
import org.incendo.cloud.paper.LegacyPaperCommandManager
import org.incendo.cloud.setting.ManagerSetting
abstract class BukkitCommand(
plugin: JavaPlugin,
private val name: String,
private val aliases: Array<String>
) {
private val manager = LegacyPaperCommandManager(
plugin,
ExecutionCoordinator.simpleCoordinator(),
SenderMapper.create({ commandSender: CommandSender -> BukkitSender(commandSender) }, { bukkitSender: BukkitSender -> bukkitSender.platformSender() })
)
private val command: MutableCommandBuilder<BukkitSender>
init {
manager.settings().set(ManagerSetting.OVERRIDE_EXISTING_COMMANDS, true)
// manager.registerAsynchronousCompletions()
command = manager.buildAndRegister(name, Description.empty(), aliases) {
rootBuilder(this)
}
}
fun rawCommandBuilder() = manager.commandBuilder(name, Description.empty(), aliases) { }
open fun rootBuilder(builder: MutableCommandBuilder<BukkitSender>) { }
}

View File

@@ -0,0 +1,41 @@
package xyz.lncvrt.galaxytab.commands.api
import net.kyori.adventure.audience.Audience
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.format.TextColor
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
open class BukkitSender(
private var commandSender: CommandSender,
) {
private var onlinePlayersMessage = Component.text("Only players can use this command.")
.color(TextColor.color(192, 32, 16))
.asComponent()
fun player(): Player? {
if (commandSender is Player) return (commandSender as Player)
if (onlinePlayersMessage != Component.empty()) {
commandSender.sendMessage(onlinePlayersMessage)
}
return null
}
fun audience(): Audience {
return commandSender
}
fun platformSender(): CommandSender {
return commandSender
}
fun platformSender(commandSender: CommandSender) {
this.commandSender = commandSender
}
fun onlyPlayersComponent(onlinePlayersMessage: Component) {
this.onlinePlayersMessage = onlinePlayersMessage
}
}