Files
GameModes-SpeedHG/src/main/kotlin/club/mcscrims/speedhg/command/KitInfoCommand.kt
TDSTOS 86435a9dec Add new command; update kit command
A new command /kitinfo has been added to provide information about kits / perks at any time. The command /kit now also works in invincibility for players without kits. Sounds when picking up items has been removed
2026-04-14 00:43:36 +02:00

117 lines
3.6 KiB
Kotlin

package club.mcscrims.speedhg.command
import club.mcscrims.speedhg.SpeedHG
import club.mcscrims.speedhg.util.sendMsg
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.minimessage.MiniMessage
import org.bukkit.command.Command
import org.bukkit.command.CommandExecutor
import org.bukkit.command.CommandSender
import org.bukkit.command.TabCompleter
import org.bukkit.entity.Player
/**
* ## KitInfoCommand
*
* Zeigt den Namen und die Beschreibung eines Kits oder Perks im Chat an.
*
* ## Verwendung
* | Command | Alias | Beschreibung |
* |---|---|---|
* | `/kitinfo <id>` | `/perkinfo <id>` | Zeigt Name + Lore des Kits/Perks |
*
* ## Lookup-Reihenfolge
* 1. Suche in `kitManager` (case-insensitive auf `kit.id`)
* 2. Falls nicht gefunden, suche in `perkManager`
* 3. Falls immer noch nicht gefunden, sende Fehlermeldung
*/
class KitInfoCommand : CommandExecutor, TabCompleter
{
private val plugin get() = SpeedHG.instance
private val mm = MiniMessage.miniMessage()
override fun onCommand(
sender: CommandSender,
command: Command,
label: String,
args: Array<out String>
): Boolean
{
val player = sender as? Player ?: run {
sender.sendMessage( "§cOnly players can execute this command." )
return true
}
if ( args.isEmpty() )
{
player.sendMsg( "commands.kitinfo.usage" )
return true
}
val query = args[0].lowercase()
// ── 1. Kit-Lookup ─────────────────────────────────────────────────────
val kit = plugin.kitManager.getKit( query )
if ( kit != null )
{
sendKitInfo( player, kit.displayName, kit.lore )
return true
}
// ── 2. Perk-Lookup ────────────────────────────────────────────────────
val perk = plugin.perkManager.getPerk( query )
if ( perk != null )
{
sendKitInfo( player, perk.displayName, perk.lore )
return true
}
// ── 3. Nicht gefunden ─────────────────────────────────────────────────
player.sendMsg( "commands.kitinfo.notFound", "name" to args[0] )
return true
}
// ── Formatierungs-Helfer ──────────────────────────────────────────────────
private fun sendKitInfo(
player: Player,
displayName: Component,
lore: List<String>
) {
val separator = mm.deserialize( plugin.languageManager.getRawMessage( player, "commands.kitinfo.separator" ) )
val header = mm.deserialize( plugin.languageManager.getRawMessage( player, "commands.kitinfo.header" ) )
player.sendMessage( separator )
player.sendMessage( header.append( displayName ) )
lore.forEach { line ->
player.sendMessage( mm.deserialize( line ) )
}
player.sendMessage( separator )
}
// ── Tab-Completion ────────────────────────────────────────────────────────
override fun onTabComplete(
sender: CommandSender,
command: Command,
label: String,
args: Array<out String>
): List<String>
{
if ( args.size != 1 )
return emptyList()
val input = args[0].lowercase()
val kitIds = plugin.kitManager.getRegisteredKits().map { it.id }
val perkIds = plugin.perkManager.getRegisteredPerks().map { it.id }
return ( kitIds + perkIds )
.filter { it.startsWith( input ) }
.sorted()
}
}