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
This commit is contained in:
117
src/main/kotlin/club/mcscrims/speedhg/command/KitInfoCommand.kt
Normal file
117
src/main/kotlin/club/mcscrims/speedhg/command/KitInfoCommand.kt
Normal file
@@ -0,0 +1,117 @@
|
||||
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()
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user