1
0
Fork 0

Add revive command

This commit is contained in:
Moritz Ruth 2020-06-10 00:27:59 +02:00
parent d9bc5f137e
commit 54a2f8a82e
No known key found for this signature in database
GPG key ID: AFD57E23E753841B
10 changed files with 155 additions and 15 deletions

View file

@ -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()
}
}

View file

@ -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 = ""

View file

@ -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)
}

View 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
}
}

View file

@ -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

View file

@ -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
}

View file

@ -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(

View file

@ -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) }
}

View file

@ -6,7 +6,7 @@ import org.bukkit.command.TabCompleter
fun noop() {}
class NoOpTabCompleter: TabCompleter {
object EmptyTabCompleter: TabCompleter {
override fun onTabComplete(
sender: CommandSender,
command: Command,

View file

@ -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