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

@@ -5,7 +5,7 @@ plugins {
}
group = "xyz.lncvrt"
version = "1.0.1"
version = "1.0.2"
repositories {
mavenCentral()
@@ -20,6 +20,8 @@ repositories {
dependencies {
compileOnly("io.papermc.paper:paper-api:1.20.1-R0.1-SNAPSHOT")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.incendo:cloud-paper:2.0.0-beta.10")
implementation("org.incendo:cloud-kotlin-extensions:2.0.0")
}
val targetJavaVersion = 17

View File

@@ -3,26 +3,42 @@ package xyz.lncvrt.galaxytab
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.minimessage.MiniMessage
import org.bukkit.configuration.file.FileConfiguration
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerJoinEvent
import org.bukkit.plugin.java.JavaPlugin
import xyz.lncvrt.galaxytab.commands.GalaxyTabCommand
import java.lang.String
class GalaxyTab : JavaPlugin(), Listener {
private val miniMessage = MiniMessage.miniMessage()
private var configFile: FileConfiguration? = null
var configFile: FileConfiguration? = null
override fun onEnable() {
instance = this
saveDefaultConfig()
configFile = config
server.pluginManager.registerEvents(this, this)
GalaxyTabCommand()
}
@EventHandler
fun onPlayerJoinEvent(event: PlayerJoinEvent) {
val header: Component = miniMessage.deserialize(String.join("\n", config.getStringList("header")))
val footer: Component = miniMessage.deserialize(String.join("\n", config.getStringList("footer")))
event.getPlayer().sendPlayerListHeaderAndFooter(header, footer)
setTab(event.player)
}
fun setTab(player: Player) {
val header: Component = miniMessage.deserialize(String.join("\n", configFile?.getStringList("header")))
val footer: Component = miniMessage.deserialize(String.join("\n", configFile?.getStringList("footer")))
player.sendPlayerListHeaderAndFooter(header, footer)
}
companion object {
private lateinit var instance: GalaxyTab
fun getInstance(): GalaxyTab {
return instance
}
}
}

View File

@@ -0,0 +1,37 @@
package xyz.lncvrt.galaxytab.commands
import net.kyori.adventure.text.minimessage.MiniMessage
import org.incendo.cloud.kotlin.MutableCommandBuilder
import xyz.lncvrt.galaxytab.GalaxyTab
import xyz.lncvrt.galaxytab.commands.api.BukkitCommand
import xyz.lncvrt.galaxytab.commands.api.BukkitSender
class GalaxyTabCommand : BukkitCommand(GalaxyTab.getInstance(), "galaxytab", arrayOf("tab")) {
override fun rootBuilder(builder: MutableCommandBuilder<BukkitSender>) {
builder.handler { context ->
val sender = context.sender().platformSender()
val miniMessage = MiniMessage.miniMessage()
sender.sendMessage(miniMessage.deserialize("<rainbow>GalaxyTab</rainbow> <light_purple>by Lncvrt</light_purple>"))
}
}
init {
rawCommandBuilder().registerCopy {
literal("reload")
permission("${GalaxyTab.getInstance().name.lowercase()}.reload")
handler { context ->
val sender = context.sender().platformSender()
val miniMessage = MiniMessage.miniMessage()
val instance = GalaxyTab.getInstance()
instance.saveDefaultConfig()
instance.reloadConfig()
instance.configFile = instance.config
for (player in instance.server.onlinePlayers) instance.setTab(player)
sender.sendMessage(miniMessage.deserialize("<rainbow>GalaxyTab</rainbow> <light_purple>has been reloaded!</light_purple>"))
}
}
}
}

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
}
}