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
117 lines
3.6 KiB
Kotlin
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()
|
|
}
|
|
|
|
} |