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 ` | `/perkinfo ` | 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 ): 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 ) { 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 ): List { 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() } }