Add revive command
This commit is contained in:
parent
d9bc5f137e
commit
54a2f8a82e
10 changed files with 155 additions and 15 deletions
|
@ -1,6 +1,7 @@
|
|||
package de.moritzruth.spigot_ttt
|
||||
|
||||
import de.moritzruth.spigot_ttt.game.AbortCommand
|
||||
import de.moritzruth.spigot_ttt.game.ReviveCommand
|
||||
import de.moritzruth.spigot_ttt.game.StartCommand
|
||||
import de.moritzruth.spigot_ttt.game.items.AddItemSpawnCommand
|
||||
|
||||
|
@ -9,5 +10,6 @@ object CommandManager {
|
|||
StartCommand()
|
||||
AbortCommand()
|
||||
AddItemSpawnCommand()
|
||||
ReviveCommand()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,3 +39,5 @@ private var pluginInstance: TTTPlugin? = null
|
|||
|
||||
val plugin: TTTPlugin
|
||||
get() = pluginInstance ?: throw Error("The plugin is not initialized yet (How are you even calling this???)")
|
||||
|
||||
const val COMMAND_RESPONSE_PREFIX = "➤ "
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package de.moritzruth.spigot_ttt.game
|
||||
|
||||
import de.moritzruth.spigot_ttt.TTTPlugin
|
||||
import de.moritzruth.spigot_ttt.utils.NoOpTabCompleter
|
||||
import de.moritzruth.spigot_ttt.COMMAND_RESPONSE_PREFIX
|
||||
import de.moritzruth.spigot_ttt.plugin
|
||||
import de.moritzruth.spigot_ttt.utils.EmptyTabCompleter
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandExecutor
|
||||
|
@ -12,13 +12,13 @@ class AbortCommand: CommandExecutor {
|
|||
init {
|
||||
plugin.getCommand("abort")?.let {
|
||||
it.setExecutor(this)
|
||||
it.tabCompleter = NoOpTabCompleter()
|
||||
it.tabCompleter = EmptyTabCompleter
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
if (GameManager.phase === null) {
|
||||
sender.sendMessage("${TTTPlugin.prefix}${ChatColor.RED}Zurzeit läuft kein Spiel.")
|
||||
sender.sendMessage("$COMMAND_RESPONSE_PREFIX${ChatColor.RED}Zurzeit läuft kein Spiel.")
|
||||
} else {
|
||||
GameManager.abortGame(true)
|
||||
}
|
||||
|
|
113
src/main/kotlin/de/moritzruth/spigot_ttt/game/ReviveCommand.kt
Normal file
113
src/main/kotlin/de/moritzruth/spigot_ttt/game/ReviveCommand.kt
Normal file
|
@ -0,0 +1,113 @@
|
|||
package de.moritzruth.spigot_ttt.game
|
||||
|
||||
import de.moritzruth.spigot_ttt.COMMAND_RESPONSE_PREFIX
|
||||
import de.moritzruth.spigot_ttt.game.players.PlayerManager
|
||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
||||
import de.moritzruth.spigot_ttt.plugin
|
||||
import de.moritzruth.spigot_ttt.utils.createTabCompleter
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.Location
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandExecutor
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
class ReviveCommand: CommandExecutor {
|
||||
init {
|
||||
val command = plugin.getCommand("revive")!!
|
||||
|
||||
command.setExecutor(this)
|
||||
command.tabCompleter = createTabCompleter { sender, index ->
|
||||
fun getPlayers() = PlayerManager.tttPlayers
|
||||
.filter { !it.alive }
|
||||
.map { it.player.name }
|
||||
|
||||
if (sender is Player) when (index) {
|
||||
1 -> getPlayers().filter { it != sender.name }.run {
|
||||
if (TTTPlayer.of(sender)?.alive == false) plus("here")
|
||||
else this
|
||||
}
|
||||
2 -> listOf("here")
|
||||
else -> null
|
||||
} else when (index) {
|
||||
1 -> getPlayers()
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val invalidUseMessage = "$COMMAND_RESPONSE_PREFIX${ChatColor.RED}Falsche Verwendung. Syntax: " +
|
||||
"${ChatColor.WHITE}/revive [Player] ['here']"
|
||||
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
if (GameManager.phase == null) {
|
||||
sender.sendMessage("$COMMAND_RESPONSE_PREFIX${ChatColor.RED}Zurzeit läuft kein Spiel.")
|
||||
} else {
|
||||
fun continueWithPlayer(
|
||||
player: Player,
|
||||
isSelf: Boolean,
|
||||
location: Location = GameManager.world.spawnLocation
|
||||
) {
|
||||
val tttPlayer = TTTPlayer.of(player)
|
||||
|
||||
if (tttPlayer == null) {
|
||||
if (isSelf) {
|
||||
sender.sendMessage(
|
||||
"$COMMAND_RESPONSE_PREFIX${ChatColor.RED}Du kannst dich nicht wiederbeleben, " +
|
||||
"da du nicht mitspielst."
|
||||
)
|
||||
} else {
|
||||
sender.sendMessage(
|
||||
"$COMMAND_RESPONSE_PREFIX${ChatColor.RED}Du kannst ${ChatColor.WHITE}${player.name} ${ChatColor.RED}nicht wiederbeleben, " +
|
||||
"da er/sie nicht mitspielst."
|
||||
)
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
tttPlayer.revive(location)
|
||||
if (!isSelf) sender.sendMessage("$COMMAND_RESPONSE_PREFIX${player.name} ${ChatColor.GREEN}wurde wiederbelebt.")
|
||||
} catch (e: TTTPlayer.AlreadyLivingException) {
|
||||
if (isSelf) sender.sendMessage("$COMMAND_RESPONSE_PREFIX${ChatColor.RED}Du lebst bereits.")
|
||||
else sender.sendMessage("$COMMAND_RESPONSE_PREFIX${player.name} ${ChatColor.RED}lebt bereits.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun continueWithPlayerName(
|
||||
playerName: String,
|
||||
location: Location = GameManager.world.spawnLocation
|
||||
) {
|
||||
val player = plugin.server.getPlayer(playerName)
|
||||
|
||||
if (player == null) {
|
||||
sender.sendMessage(
|
||||
"$COMMAND_RESPONSE_PREFIX$playerName ${ChatColor.RED}existiert nicht oder ist nicht online."
|
||||
)
|
||||
} else continueWithPlayer(player, player == sender, location)
|
||||
}
|
||||
|
||||
if (sender is Player) {
|
||||
when(args.count()) {
|
||||
0 -> continueWithPlayer(sender, isSelf = true)
|
||||
1 ->
|
||||
if (args[0].equals("here", true))
|
||||
continueWithPlayer(sender, isSelf = true, location = sender.location)
|
||||
else continueWithPlayerName(args[0])
|
||||
2 ->
|
||||
if (args[1].equals("here", true))
|
||||
continueWithPlayerName(args[0], sender.location)
|
||||
else sender.sendMessage(invalidUseMessage)
|
||||
else -> sender.sendMessage(invalidUseMessage)
|
||||
}
|
||||
} else {
|
||||
when(args.count()) {
|
||||
0 -> sender.sendMessage("$COMMAND_RESPONSE_PREFIX${ChatColor.RED}Bitte gib einen Spieler an.")
|
||||
1 -> continueWithPlayerName(args[0])
|
||||
else -> sender.sendMessage(invalidUseMessage)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
|
@ -1,8 +1,8 @@
|
|||
package de.moritzruth.spigot_ttt.game
|
||||
|
||||
import de.moritzruth.spigot_ttt.TTTPlugin
|
||||
import de.moritzruth.spigot_ttt.utils.NoOpTabCompleter
|
||||
import de.moritzruth.spigot_ttt.COMMAND_RESPONSE_PREFIX
|
||||
import de.moritzruth.spigot_ttt.plugin
|
||||
import de.moritzruth.spigot_ttt.utils.EmptyTabCompleter
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandExecutor
|
||||
|
@ -12,7 +12,7 @@ class StartCommand: CommandExecutor {
|
|||
init {
|
||||
plugin.getCommand("start")?.let {
|
||||
it.setExecutor(this)
|
||||
it.tabCompleter = NoOpTabCompleter()
|
||||
it.tabCompleter = EmptyTabCompleter
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -21,10 +21,10 @@ class StartCommand: CommandExecutor {
|
|||
try {
|
||||
GameManager.startPreparingPhase()
|
||||
} catch (e: GameManager.NotEnoughPlayersException) {
|
||||
sender.sendMessage("${ChatColor.RED}Es sind nicht genügend Spieler online.")
|
||||
sender.sendMessage("$COMMAND_RESPONSE_PREFIX${ChatColor.RED}Es sind nicht genügend Spieler online.")
|
||||
}
|
||||
} else {
|
||||
sender.sendMessage("${TTTPlugin.prefix}${ChatColor.RED}Das Spiel läuft bereits.")
|
||||
sender.sendMessage("$COMMAND_RESPONSE_PREFIX${ChatColor.RED}Das Spiel läuft bereits.")
|
||||
}
|
||||
|
||||
return true
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
package de.moritzruth.spigot_ttt.game.items
|
||||
|
||||
import de.moritzruth.spigot_ttt.COMMAND_RESPONSE_PREFIX
|
||||
import de.moritzruth.spigot_ttt.TTTPlugin
|
||||
import de.moritzruth.spigot_ttt.plugin
|
||||
import de.moritzruth.spigot_ttt.utils.NoOpTabCompleter
|
||||
import de.moritzruth.spigot_ttt.utils.EmptyTabCompleter
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandExecutor
|
||||
|
@ -13,18 +14,18 @@ class AddItemSpawnCommand: CommandExecutor {
|
|||
init {
|
||||
plugin.getCommand("additemspawn")?.let {
|
||||
it.setExecutor(this)
|
||||
it.tabCompleter = NoOpTabCompleter()
|
||||
it.tabCompleter = EmptyTabCompleter
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
if (sender !is Player) {
|
||||
sender.sendMessage("${ChatColor.RED}Dieser Befehl kann nur von Spielern verwendet werden.")
|
||||
sender.sendMessage("$COMMAND_RESPONSE_PREFIX${ChatColor.RED}Dieser Befehl kann nur von Spielern verwendet werden.")
|
||||
return true
|
||||
}
|
||||
|
||||
ItemSpawner.addItemSpawnLocation(sender.location)
|
||||
sender.sendMessage("${TTTPlugin.prefix}${ChatColor.GREEN}Ein Waffenspawn wurde an deiner Position hinzugefügt.")
|
||||
sender.sendMessage("$COMMAND_RESPONSE_PREFIX${TTTPlugin.prefix}${ChatColor.GREEN}Ein Waffenspawn wurde an deiner Position hinzugefügt.")
|
||||
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -106,7 +106,7 @@ class TTTPlayer(player: Player, role: Role) {
|
|||
onlyRemainingRoleGroup
|
||||
).call()
|
||||
|
||||
event.winnerRoleGroup?.run { GameManager.letRoleWin(primaryRole) }
|
||||
// event.winnerRoleGroup?.run { GameManager.letRoleWin(primaryRole) }
|
||||
|
||||
if (event.scream) {
|
||||
GameManager.world.playSound(
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
package de.moritzruth.spigot_ttt.utils
|
||||
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.command.TabCompleter
|
||||
|
||||
fun createTabCompleter(fn: (sender: CommandSender, index: Int) -> List<String>?) =
|
||||
TabCompleter { sender, _, _, args ->
|
||||
val index = args.count()
|
||||
|
||||
val completions =
|
||||
if (index == 0) emptyList()
|
||||
else fn(sender, index) ?: emptyList()
|
||||
|
||||
completions.filter { it.startsWith(args.last(), true) }
|
||||
}
|
|
@ -6,7 +6,7 @@ import org.bukkit.command.TabCompleter
|
|||
|
||||
fun noop() {}
|
||||
|
||||
class NoOpTabCompleter: TabCompleter {
|
||||
object EmptyTabCompleter: TabCompleter {
|
||||
override fun onTabComplete(
|
||||
sender: CommandSender,
|
||||
command: Command,
|
||||
|
|
|
@ -21,3 +21,10 @@ commands:
|
|||
usage: /additemspawn
|
||||
permission: ttt.additemspawn
|
||||
description: Add an item spawn
|
||||
|
||||
revive:
|
||||
usage: /revive [Player] [here]
|
||||
permission: ttt.revive
|
||||
description: Revive yourself or another player at the world spawn or at your location
|
||||
|
||||
|
||||
|
|
Reference in a new issue