1
0
Fork 0

Block /msg and add info command

This commit is contained in:
Moritz Ruth 2020-06-15 18:22:46 +02:00
parent e4d8aaa2bc
commit 9b0544fc09
No known key found for this signature in database
GPG key ID: AFD57E23E753841B
8 changed files with 105 additions and 15 deletions

View file

@ -1,6 +1,7 @@
package de.moritzruth.spigot_ttt package de.moritzruth.spigot_ttt
import de.moritzruth.spigot_ttt.game.AbortCommand import de.moritzruth.spigot_ttt.game.AbortCommand
import de.moritzruth.spigot_ttt.game.InfoCommand
import de.moritzruth.spigot_ttt.game.ReviveCommand import de.moritzruth.spigot_ttt.game.ReviveCommand
import de.moritzruth.spigot_ttt.game.StartCommand import de.moritzruth.spigot_ttt.game.StartCommand
import de.moritzruth.spigot_ttt.game.items.AddItemSpawnCommand import de.moritzruth.spigot_ttt.game.items.AddItemSpawnCommand
@ -13,5 +14,6 @@ object CommandManager {
ReviveCommand() ReviveCommand()
ResourcepackCommand() ResourcepackCommand()
ReloadTTTConfigCommand() ReloadTTTConfigCommand()
InfoCommand()
} }
} }

View file

@ -26,7 +26,7 @@ import org.bukkit.event.player.*
import java.util.* import java.util.*
object GameListener : Listener { object GameListener : Listener {
private val BLOCKED_COMMANDS = setOf("me", "tell") private val BLOCKED_COMMANDS = setOf("me", "tell", "msg")
@EventHandler @EventHandler
fun onPlayerJoin(event: PlayerJoinEvent) = PlayerManager.onPlayerJoin(event.player) fun onPlayerJoin(event: PlayerJoinEvent) = PlayerManager.onPlayerJoin(event.player)

View file

@ -0,0 +1,75 @@
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.command.Command
import org.bukkit.command.CommandExecutor
import org.bukkit.command.CommandSender
class InfoCommand: CommandExecutor {
init {
val command = plugin.getCommand("info")!!
command.tabCompleter = createTabCompleter { _, index ->
if (index == 1) PlayerManager.tttPlayers.map { it.player.name }
else null
}
command.setExecutor(this)
}
private fun getStatus(tttPlayer: TTTPlayer) =
if (tttPlayer.alive) "${ChatColor.GREEN}Lebend" else "${ChatColor.RED}Tot"
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.")
return true
}
val lines = mutableListOf<String>()
if (args.count() == 1) {
val playerName = args[0]
val player = plugin.server.getPlayer(playerName)
if (player == null) {
lines.add("$playerName ${ChatColor.RED}existiert nicht oder ist nicht online.")
} else {
val tttPlayer = TTTPlayer.of(player)
if (tttPlayer == null) {
lines.add("$COMMAND_RESPONSE_PREFIX${ChatColor.WHITE}${player.name} ${ChatColor.RED}spielt nicht mit.")
} else {
lines.add("===== ${ChatColor.BOLD}Spielerinfo: ${player.name}${ChatColor.RESET} =====")
lines.add(" ")
lines.add("Rolle: ${tttPlayer.role.coloredDisplayName}")
lines.add("Klasse: ${tttPlayer.tttClass.coloredDisplayName}")
lines.add("Status: ${getStatus(tttPlayer)}")
lines.add(" ")
}
}
} else {
lines.add("=========== ${ChatColor.BOLD}Spielinfo${ChatColor.RESET} ===========")
lines.add(" ")
lines.add("${ChatColor.GRAY}Rolle - Klasse - Status")
for (tttPlayer in PlayerManager.tttPlayers) {
val values = listOf(
tttPlayer.role.coloredDisplayName,
tttPlayer.tttClass.coloredDisplayName,
getStatus(tttPlayer)
)
lines.add("${tttPlayer.player.name}: ${values.joinToString("${ChatColor.RESET} - ")}")
}
lines.add(" ")
}
sender.sendMessage(lines.joinToString("\n${ChatColor.RESET}"))
return true
}
}

View file

@ -10,9 +10,14 @@ abstract class TTTClass(
val chatColor: ChatColor, val chatColor: ChatColor,
val defaultItems: Set<TTTItem> = emptySet() val defaultItems: Set<TTTItem> = emptySet()
) { ) {
val coloredDisplayName = "$chatColor${ChatColor.BOLD}$displayName" val coloredDisplayName = "$chatColor$displayName"
open val listener: Listener? = null open val listener: Listener? = null
open fun onInit(tttPlayer: TTTPlayer) {} open fun onInit(tttPlayer: TTTPlayer) {}
object None: TTTClass(
"Keine",
ChatColor.GRAY
)
} }

View file

@ -14,13 +14,11 @@ object TTTClassManager {
val listeners = TTT_CLASSES.mapNotNull { it.listener } val listeners = TTT_CLASSES.mapNotNull { it.listener }
fun createClassesIterator(count: Int): Iterator<TTTClass?> { fun createClassesIterator(count: Int): Iterator<TTTClass> {
val set: MutableSet<TTTClass?> = TTT_CLASSES.toMutableSet() val set: MutableSet<TTTClass> = TTT_CLASSES.toMutableSet()
val playersWithoutClass = count - TTT_CLASSES.size val playersWithoutClass = count - TTT_CLASSES.size
if (playersWithoutClass > 0) { if (playersWithoutClass > 0) set.addAll(Collections.nCopies(playersWithoutClass, TTTClass.None))
set.addAll(Collections.nCopies(playersWithoutClass, null))
}
return set.shuffled().iterator() return set.shuffled().iterator()
} }

View file

@ -17,7 +17,7 @@ import org.bukkit.*
import org.bukkit.entity.Player import org.bukkit.entity.Player
import kotlin.properties.Delegates import kotlin.properties.Delegates
class TTTPlayer(player: Player, role: Role, val tttClass: TTTClass?) { class TTTPlayer(player: Player, role: Role, val tttClass: TTTClass = TTTClass.None) {
var alive = true var alive = true
var player by Delegates.observable(player) { _, _, _ -> adjustPlayer() } var player by Delegates.observable(player) { _, _, _ -> adjustPlayer() }
@ -50,7 +50,7 @@ class TTTPlayer(player: Player, role: Role, val tttClass: TTTClass?) {
init { init {
adjustPlayer() adjustPlayer()
scoreboard.initialize() scoreboard.initialize()
tttClass?.onInit(this) tttClass.onInit(this)
} }
private fun onItemInHandChanged(oldItem: TTTItem?, newItem: TTTItem?) { private fun onItemInHandChanged(oldItem: TTTItem?, newItem: TTTItem?) {
@ -248,7 +248,7 @@ class TTTPlayer(player: Player, role: Role, val tttClass: TTTClass?) {
updateItemInHand() updateItemInHand()
} }
fun addDefaultClassItems() = tttClass?.defaultItems?.forEach { addItem(it) } fun addDefaultClassItems() = tttClass.defaultItems.forEach { addItem(it) }
override fun toString() = "TTTPlayer(${player.name} is $role)" override fun toString() = "TTTPlayer(${player.name} is $role)"

View file

@ -3,6 +3,7 @@ package de.moritzruth.spigot_ttt.game.players
import de.moritzruth.spigot_ttt.game.GameManager import de.moritzruth.spigot_ttt.game.GameManager
import de.moritzruth.spigot_ttt.game.GamePhase import de.moritzruth.spigot_ttt.game.GamePhase
import de.moritzruth.spigot_ttt.game.Timers import de.moritzruth.spigot_ttt.game.Timers
import de.moritzruth.spigot_ttt.game.classes.TTTClass
import de.moritzruth.spigot_ttt.plugin import de.moritzruth.spigot_ttt.plugin
import org.bukkit.ChatColor import org.bukkit.ChatColor
import org.bukkit.scoreboard.DisplaySlot import org.bukkit.scoreboard.DisplaySlot
@ -85,7 +86,11 @@ class TTTScoreboard(private val tttPlayer: TTTPlayer) {
setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER) setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER)
} }
setValue(ValueTeam.CLASS, "Klasse: ${tttPlayer.tttClass?.coloredDisplayName ?: "${ChatColor.GRAY}Keine"}") val classDisplayName =
if (tttPlayer.tttClass == TTTClass.None) TTTClass.None.coloredDisplayName
else "${tttPlayer.tttClass.chatColor}${ChatColor.BOLD}${tttPlayer.tttClass.displayName}"
setValue(ValueTeam.CLASS, "Klasse: $classDisplayName")
updateEverything() updateEverything()
showCorrectSidebarScoreboard() showCorrectSidebarScoreboard()

View file

@ -25,6 +25,11 @@ commands:
permission: ttt.revive permission: ttt.revive
description: Revive yourself or another player at the world spawn or at your location description: Revive yourself or another player at the world spawn or at your location
info:
usage: /info [player]
permission: ttt.info
description: Show information about all players or a specific player
resourcepack: resourcepack:
usage: /rp usage: /rp
description: Start the download of the TTT resourcepack, required for sounds description: Start the download of the TTT resourcepack, required for sounds