Refactor some Role-related things
This commit is contained in:
parent
aeaa3fcc7e
commit
2927b75e8d
20 changed files with 103 additions and 111 deletions
|
@ -1,9 +1,9 @@
|
||||||
package de.moritzruth.spigot_ttt.game
|
package de.moritzruth.spigot_ttt.game
|
||||||
|
|
||||||
|
import de.moritzruth.spigot_ttt.game.corpses.CorpseListener
|
||||||
|
import de.moritzruth.spigot_ttt.game.corpses.CorpseManager
|
||||||
import de.moritzruth.spigot_ttt.game.players.PlayerManager
|
import de.moritzruth.spigot_ttt.game.players.PlayerManager
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
import de.moritzruth.spigot_ttt.game.players.Role
|
||||||
import de.moritzruth.spigot_ttt.game.players.corpses.CorpseListener
|
|
||||||
import de.moritzruth.spigot_ttt.game.players.corpses.CorpseManager
|
|
||||||
import de.moritzruth.spigot_ttt.items.ItemManager
|
import de.moritzruth.spigot_ttt.items.ItemManager
|
||||||
import de.moritzruth.spigot_ttt.items.ItemSpawner
|
import de.moritzruth.spigot_ttt.items.ItemSpawner
|
||||||
import de.moritzruth.spigot_ttt.plugin
|
import de.moritzruth.spigot_ttt.plugin
|
||||||
|
@ -26,7 +26,7 @@ object GameManager {
|
||||||
CorpseListener.register()
|
CorpseListener.register()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun letRoleWin(role: TTTPlayer.Role?) {
|
fun letRoleWin(role: Role?) {
|
||||||
ensurePhase(GamePhase.COMBAT)
|
ensurePhase(GamePhase.COMBAT)
|
||||||
GameMessenger.win(role)
|
GameMessenger.win(role)
|
||||||
phase = GamePhase.OVER
|
phase = GamePhase.OVER
|
||||||
|
@ -101,8 +101,8 @@ object GameManager {
|
||||||
GameMessenger.combatPhaseStarted()
|
GameMessenger.combatPhaseStarted()
|
||||||
|
|
||||||
Timers.startCombatPhaseTimer(plugin.config.getInt("duration.combat", 480)) {
|
Timers.startCombatPhaseTimer(plugin.config.getInt("duration.combat", 480)) {
|
||||||
if (PlayerManager.stillLivingRoles.contains(TTTPlayer.Role.INNOCENT)) {
|
if (PlayerManager.stillLivingRoles.contains(Role.INNOCENT)) {
|
||||||
letRoleWin(TTTPlayer.Role.INNOCENT)
|
letRoleWin(Role.INNOCENT)
|
||||||
} else {
|
} else {
|
||||||
letRoleWin(null)
|
letRoleWin(null)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package de.moritzruth.spigot_ttt.game
|
package de.moritzruth.spigot_ttt.game
|
||||||
|
|
||||||
import de.moritzruth.spigot_ttt.game.players.PlayerManager
|
import de.moritzruth.spigot_ttt.game.players.PlayerManager
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
import de.moritzruth.spigot_ttt.game.players.Role
|
||||||
import de.moritzruth.spigot_ttt.plugin
|
import de.moritzruth.spigot_ttt.plugin
|
||||||
import de.moritzruth.spigot_ttt.utils.secondsToTicks
|
import de.moritzruth.spigot_ttt.utils.secondsToTicks
|
||||||
import org.bukkit.ChatColor
|
import org.bukkit.ChatColor
|
||||||
|
@ -35,7 +35,7 @@ object GameMessenger {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun win(winnerRole: TTTPlayer.Role?) {
|
fun win(winnerRole: Role?) {
|
||||||
val winner = when(winnerRole) {
|
val winner = when(winnerRole) {
|
||||||
null -> {
|
null -> {
|
||||||
plugin.broadcast("Niemand hat gewonnen")
|
plugin.broadcast("Niemand hat gewonnen")
|
||||||
|
@ -45,14 +45,14 @@ object GameMessenger {
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
TTTPlayer.Role.JACKAL, TTTPlayer.Role.SIDEKICK -> "Der ${TTTPlayer.Role.JACKAL.chatColor}Jackal"
|
Role.JACKAL, Role.SIDEKICK -> "Der ${Role.JACKAL.chatColor}Jackal"
|
||||||
TTTPlayer.Role.TRAITOR -> "Die ${TTTPlayer.Role.TRAITOR.chatColor}Traitor"
|
Role.TRAITOR -> "Die ${Role.TRAITOR.chatColor}Traitor"
|
||||||
TTTPlayer.Role.INNOCENT, TTTPlayer.Role.DETECTIVE -> "Die ${TTTPlayer.Role.INNOCENT.chatColor}Innocents"
|
Role.INNOCENT, Role.DETECTIVE -> "Die ${Role.INNOCENT.chatColor}Innocents"
|
||||||
}
|
}
|
||||||
|
|
||||||
val winnerMessage = when(winnerRole) {
|
val winnerMessage = when(winnerRole) {
|
||||||
TTTPlayer.Role.JACKAL, TTTPlayer.Role.SIDEKICK -> "hat gewonnen"
|
Role.JACKAL, Role.SIDEKICK -> "hat gewonnen"
|
||||||
TTTPlayer.Role.TRAITOR, TTTPlayer.Role.INNOCENT, TTTPlayer.Role.DETECTIVE -> "haben gewonnen"
|
Role.TRAITOR, Role.INNOCENT, Role.DETECTIVE -> "haben gewonnen"
|
||||||
}
|
}
|
||||||
|
|
||||||
plugin.broadcast("${ChatColor.GOLD}$winner ${ChatColor.GOLD}${winnerMessage}")
|
plugin.broadcast("${ChatColor.GOLD}$winner ${ChatColor.GOLD}${winnerMessage}")
|
||||||
|
@ -69,13 +69,13 @@ object GameMessenger {
|
||||||
plugin.broadcast("${ChatColor.RED}Das Spiel wurde abgebrochen.")
|
plugin.broadcast("${ChatColor.RED}Das Spiel wurde abgebrochen.")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun corpseIdentified(by: String, who: String, role: TTTPlayer.Role) {
|
fun corpseIdentified(by: String, who: String, role: Role) {
|
||||||
plugin.broadcast("$by ${ChatColor.GOLD}hat die Leiche von ${ChatColor.WHITE}$who ${ChatColor.GOLD}identifiziert. Er/Sie war ${role.coloredDisplayName}")
|
plugin.broadcast("$by ${ChatColor.GOLD}hat die Leiche von ${ChatColor.WHITE}$who ${ChatColor.GOLD}identifiziert. Er/Sie war ${role.coloredDisplayName}")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun roles() {
|
fun roles() {
|
||||||
val playersByRole = PlayerManager.getPlayersByRole()
|
val playersByRole = PlayerManager.getPlayersByRole()
|
||||||
val roles = playersByRole.keys.sortedBy(TTTPlayer.Role::position)
|
val roles = playersByRole.keys.sortedBy(Role::position)
|
||||||
|
|
||||||
for (role in roles) {
|
for (role in roles) {
|
||||||
val entries = playersByRole.getValue(role).map { tttPlayer ->
|
val entries = playersByRole.getValue(role).map { tttPlayer ->
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package de.moritzruth.spigot_ttt.game.players.corpses
|
package de.moritzruth.spigot_ttt.game.corpses
|
||||||
|
|
||||||
import de.moritzruth.spigot_ttt.game.players.PlayerManager
|
import de.moritzruth.spigot_ttt.game.players.PlayerManager
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
import de.moritzruth.spigot_ttt.game.players.Role
|
||||||
import de.moritzruth.spigot_ttt.plugin
|
import de.moritzruth.spigot_ttt.plugin
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
import org.bukkit.event.EventHandler
|
import org.bukkit.event.EventHandler
|
||||||
|
@ -37,7 +37,7 @@ object CorpseListener: Listener {
|
||||||
if(Instant.now().toEpochMilli() - tttCorpse.timestamp.toEpochMilli() < 200) return
|
if(Instant.now().toEpochMilli() - tttCorpse.timestamp.toEpochMilli() < 200) return
|
||||||
|
|
||||||
event.clicker.openInventory(tttCorpse.inventory)
|
event.clicker.openInventory(tttCorpse.inventory)
|
||||||
if (tttPlayer.role == TTTPlayer.Role.DETECTIVE) tttCorpse.inspect(tttPlayer.player)
|
if (tttPlayer.role == Role.DETECTIVE) tttCorpse.inspect(tttPlayer.player)
|
||||||
else tttCorpse.identify(tttPlayer.player)
|
else tttCorpse.identify(tttPlayer.player)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package de.moritzruth.spigot_ttt.game.players.corpses
|
package de.moritzruth.spigot_ttt.game.corpses
|
||||||
|
|
||||||
import de.moritzruth.spigot_ttt.game.players.DeathReason
|
import de.moritzruth.spigot_ttt.game.players.DeathReason
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
|
@ -1,9 +1,9 @@
|
||||||
package de.moritzruth.spigot_ttt.game.players.corpses
|
package de.moritzruth.spigot_ttt.game.corpses
|
||||||
|
|
||||||
import de.moritzruth.spigot_ttt.CustomItems
|
import de.moritzruth.spigot_ttt.CustomItems
|
||||||
import de.moritzruth.spigot_ttt.game.GameMessenger
|
import de.moritzruth.spigot_ttt.game.GameMessenger
|
||||||
import de.moritzruth.spigot_ttt.game.players.DeathReason
|
import de.moritzruth.spigot_ttt.game.players.DeathReason
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
import de.moritzruth.spigot_ttt.game.players.Role
|
||||||
import de.moritzruth.spigot_ttt.plugin
|
import de.moritzruth.spigot_ttt.plugin
|
||||||
import de.moritzruth.spigot_ttt.utils.applyMeta
|
import de.moritzruth.spigot_ttt.utils.applyMeta
|
||||||
import de.moritzruth.spigot_ttt.utils.secondsToTicks
|
import de.moritzruth.spigot_ttt.utils.secondsToTicks
|
||||||
|
@ -17,17 +17,17 @@ import org.golde.bukkit.corpsereborn.CorpseAPI.CorpseAPI
|
||||||
import org.golde.bukkit.corpsereborn.nms.Corpses
|
import org.golde.bukkit.corpsereborn.nms.Corpses
|
||||||
import java.time.Instant
|
import java.time.Instant
|
||||||
|
|
||||||
class TTTCorpse(private val player: Player, location: Location, private val role: TTTPlayer.Role, private val reason: DeathReason) {
|
class TTTCorpse(private val player: Player, location: Location, private val role: Role, private val reason: DeathReason) {
|
||||||
val corpse: Corpses.CorpseData?
|
val corpse: Corpses.CorpseData?
|
||||||
val inventory = player.server.createInventory(null, InventoryType.HOPPER, "${role.chatColor}${player.displayName}")
|
val inventory = player.server.createInventory(null, InventoryType.HOPPER, "${role.chatColor}${player.displayName}")
|
||||||
val timestamp: Instant = Instant.now()
|
val timestamp: Instant = Instant.now()
|
||||||
var identified = false; private set
|
private var identified = false
|
||||||
var inspected = false
|
private var inspected = false
|
||||||
private set(value) {
|
private set(value) {
|
||||||
field = value
|
field = value
|
||||||
updateTimeItem()
|
updateTimeItem()
|
||||||
}
|
}
|
||||||
var wholeMinutesSinceDeath = 0; private set
|
private var wholeMinutesSinceDeath = 0; private set
|
||||||
private var updateTimeListener: BukkitTask
|
private var updateTimeListener: BukkitTask
|
||||||
|
|
||||||
init {
|
init {
|
|
@ -16,12 +16,12 @@ object PlayerManager {
|
||||||
|
|
||||||
val availablePlayers get() = plugin.server.onlinePlayers.filter { it.gameMode === GameMode.SURVIVAL }
|
val availablePlayers get() = plugin.server.onlinePlayers.filter { it.gameMode === GameMode.SURVIVAL }
|
||||||
val stillLivingRoles get() = tttPlayers.filter { it.alive }.map { it.role }.toSet()
|
val stillLivingRoles get() = tttPlayers.filter { it.alive }.map { it.role }.toSet()
|
||||||
val stillLivingRoleGroups get() = stillLivingRoles.map { it.group }.toSet()
|
private val stillLivingRoleGroups get() = stillLivingRoles.map { it.group }.toSet()
|
||||||
val playersJoinedDuringRound = mutableSetOf<Player>()
|
private val playersJoinedDuringRound = mutableSetOf<Player>()
|
||||||
|
|
||||||
fun getTTTPlayer(player: Player) = tttPlayers.find { it.player === player }
|
fun getTTTPlayer(player: Player) = tttPlayers.find { it.player === player }
|
||||||
|
|
||||||
fun getPlayersByRole() = mutableMapOf<TTTPlayer.Role, MutableSet<TTTPlayer>>()
|
fun getPlayersByRole() = mutableMapOf<Role, MutableSet<TTTPlayer>>()
|
||||||
.apply { tttPlayers.forEach { getOrPut(it.role) { mutableSetOf() }.add(it) } }
|
.apply { tttPlayers.forEach { getOrPut(it.role) { mutableSetOf() }.add(it) } }
|
||||||
.toMap()
|
.toMap()
|
||||||
|
|
||||||
|
@ -100,22 +100,22 @@ object PlayerManager {
|
||||||
|
|
||||||
if (playerCount >= plugin.config.getInt("min-players-for.detective", 5)) {
|
if (playerCount >= plugin.config.getInt("min-players-for.detective", 5)) {
|
||||||
val player = playersWithoutRole.random()
|
val player = playersWithoutRole.random()
|
||||||
tttPlayers.add(TTTPlayer(player, TTTPlayer.Role.DETECTIVE))
|
tttPlayers.add(TTTPlayer(player, Role.DETECTIVE))
|
||||||
playersWithoutRole.remove(player)
|
playersWithoutRole.remove(player)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (playerCount >= plugin.config.getInt("min-players-for.jackal", 6)) {
|
if (playerCount >= plugin.config.getInt("min-players-for.jackal", 6)) {
|
||||||
val player = playersWithoutRole.random()
|
val player = playersWithoutRole.random()
|
||||||
tttPlayers.add(TTTPlayer(player, TTTPlayer.Role.JACKAL))
|
tttPlayers.add(TTTPlayer(player, Role.JACKAL))
|
||||||
playersWithoutRole.remove(player)
|
playersWithoutRole.remove(player)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (index in 1..traitorCount) {
|
for (index in 1..traitorCount) {
|
||||||
val player = playersWithoutRole.random()
|
val player = playersWithoutRole.random()
|
||||||
tttPlayers.add(TTTPlayer(player, TTTPlayer.Role.TRAITOR))
|
tttPlayers.add(TTTPlayer(player, Role.TRAITOR))
|
||||||
playersWithoutRole.remove(player)
|
playersWithoutRole.remove(player)
|
||||||
}
|
}
|
||||||
|
|
||||||
playersWithoutRole.forEach { tttPlayers.add(TTTPlayer(it, TTTPlayer.Role.INNOCENT)) }
|
playersWithoutRole.forEach { tttPlayers.add(TTTPlayer(it, Role.INNOCENT)) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
package de.moritzruth.spigot_ttt.game.players
|
||||||
|
|
||||||
|
import de.moritzruth.spigot_ttt.CustomItems
|
||||||
|
import org.bukkit.ChatColor
|
||||||
|
import org.bukkit.Material
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
enum class Role(
|
||||||
|
val chatColor: ChatColor,
|
||||||
|
val displayName: String,
|
||||||
|
val iconItemMaterial: Material,
|
||||||
|
val canOwnCredits: Boolean = false
|
||||||
|
) {
|
||||||
|
INNOCENT(ChatColor.GREEN, "Innocent", CustomItems.innocent),
|
||||||
|
DETECTIVE(ChatColor.YELLOW, "Detective", CustomItems.detective, true),
|
||||||
|
TRAITOR(ChatColor.RED, "Traitor", CustomItems.traitor, true),
|
||||||
|
JACKAL(ChatColor.AQUA, "Jackal", CustomItems.jackal, true),
|
||||||
|
SIDEKICK(ChatColor.AQUA, "Sidekick", CustomItems.sidekick, true);
|
||||||
|
|
||||||
|
val coloredDisplayName = "$chatColor$displayName${ChatColor.RESET}"
|
||||||
|
|
||||||
|
val position by lazy { values().indexOf(this) }
|
||||||
|
val group by lazy { RoleGroup.getGroupOf(this) }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun roles(role: Role, vararg moreRoles: Role): EnumSet<Role> = EnumSet.of(role, *moreRoles)
|
|
@ -0,0 +1,16 @@
|
||||||
|
package de.moritzruth.spigot_ttt.game.players
|
||||||
|
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
enum class RoleGroup(val primaryRole: Role, val additionalRoles: EnumSet<Role> = EnumSet.noneOf(Role::class.java)) {
|
||||||
|
INNOCENT(Role.INNOCENT, EnumSet.of(Role.DETECTIVE)),
|
||||||
|
JACKAL(Role.JACKAL, EnumSet.of(Role.SIDEKICK)),
|
||||||
|
TRAITOR(Role.TRAITOR);
|
||||||
|
|
||||||
|
fun bothAre(firstTTTPlayer: TTTPlayer, secondTTTPlayer: TTTPlayer) =
|
||||||
|
firstTTTPlayer.role.group == this && secondTTTPlayer.role.group == this
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun getGroupOf(role: Role) = values().find { it.primaryRole == role || it.additionalRoles.contains(role) }
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,11 +1,10 @@
|
||||||
package de.moritzruth.spigot_ttt.game.players
|
package de.moritzruth.spigot_ttt.game.players
|
||||||
|
|
||||||
import de.moritzruth.spigot_ttt.CustomItems
|
|
||||||
import de.moritzruth.spigot_ttt.discord.DiscordBot
|
import de.moritzruth.spigot_ttt.discord.DiscordBot
|
||||||
import de.moritzruth.spigot_ttt.discord.DiscordInterface
|
import de.moritzruth.spigot_ttt.discord.DiscordInterface
|
||||||
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.players.corpses.CorpseManager
|
import de.moritzruth.spigot_ttt.game.corpses.CorpseManager
|
||||||
import de.moritzruth.spigot_ttt.items.ItemManager
|
import de.moritzruth.spigot_ttt.items.ItemManager
|
||||||
import de.moritzruth.spigot_ttt.items.Selectable
|
import de.moritzruth.spigot_ttt.items.Selectable
|
||||||
import de.moritzruth.spigot_ttt.items.TTTItem
|
import de.moritzruth.spigot_ttt.items.TTTItem
|
||||||
|
@ -13,18 +12,15 @@ import de.moritzruth.spigot_ttt.plugin
|
||||||
import de.moritzruth.spigot_ttt.shop.Shop
|
import de.moritzruth.spigot_ttt.shop.Shop
|
||||||
import de.moritzruth.spigot_ttt.utils.hotbarContents
|
import de.moritzruth.spigot_ttt.utils.hotbarContents
|
||||||
import de.moritzruth.spigot_ttt.utils.teleportPlayerToWorldSpawn
|
import de.moritzruth.spigot_ttt.utils.teleportPlayerToWorldSpawn
|
||||||
import org.bukkit.ChatColor
|
|
||||||
import org.bukkit.GameMode
|
import org.bukkit.GameMode
|
||||||
import org.bukkit.Material
|
import org.bukkit.Material
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
import org.bukkit.potion.PotionEffect
|
import org.bukkit.potion.PotionEffect
|
||||||
import org.bukkit.potion.PotionEffectType
|
import org.bukkit.potion.PotionEffectType
|
||||||
import java.util.*
|
|
||||||
import kotlin.properties.Delegates
|
import kotlin.properties.Delegates
|
||||||
|
|
||||||
class TTTPlayer(player: Player, role: Role) {
|
class TTTPlayer(player: Player, role: Role) {
|
||||||
var alive = true
|
var alive = true
|
||||||
|
|
||||||
var player by Delegates.observable(player) { _, _, _ -> initializePlayer() }
|
var player by Delegates.observable(player) { _, _, _ -> initializePlayer() }
|
||||||
|
|
||||||
var role by Delegates.observable(role) { _, _, _ -> scoreboard.updateRole() }
|
var role by Delegates.observable(role) { _, _, _ -> scoreboard.updateRole() }
|
||||||
|
@ -164,33 +160,5 @@ class TTTPlayer(player: Player, role: Role) {
|
||||||
|
|
||||||
private fun getOwningTTTItems() = player.inventory.hotbarContents.mapNotNull { it?.run { ItemManager.getItemByItemStack(this) } }
|
private fun getOwningTTTItems() = player.inventory.hotbarContents.mapNotNull { it?.run { ItemManager.getItemByItemStack(this) } }
|
||||||
|
|
||||||
enum class RoleGroup(val primaryRole: Role, val additionalRoles: EnumSet<Role> = EnumSet.noneOf(Role::class.java)) {
|
|
||||||
INNOCENT(Role.INNOCENT, EnumSet.of(Role.DETECTIVE)),
|
|
||||||
JACKAL(Role.JACKAL, EnumSet.of(Role.SIDEKICK)),
|
|
||||||
TRAITOR(Role.TRAITOR);
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
fun getGroupOf(role: Role) = values().find { it.primaryRole == role || it.additionalRoles.contains(role) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum class Role(
|
|
||||||
val chatColor: ChatColor,
|
|
||||||
val displayName: String,
|
|
||||||
val iconItemMaterial: Material,
|
|
||||||
val canOwnCredits: Boolean = false
|
|
||||||
) {
|
|
||||||
INNOCENT(ChatColor.GREEN, "Innocent", CustomItems.innocent),
|
|
||||||
DETECTIVE(ChatColor.YELLOW, "Detective", CustomItems.detective, true),
|
|
||||||
TRAITOR(ChatColor.RED, "Traitor", CustomItems.traitor, true),
|
|
||||||
JACKAL(ChatColor.AQUA, "Jackal", CustomItems.jackal, true),
|
|
||||||
SIDEKICK(ChatColor.AQUA, "Sidekick", CustomItems.sidekick, true);
|
|
||||||
|
|
||||||
val coloredDisplayName = "$chatColor$displayName${ChatColor.RESET}"
|
|
||||||
|
|
||||||
val position by lazy { values().indexOf(this) }
|
|
||||||
val group by lazy { RoleGroup.getGroupOf(this) }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun toString() = "TTTPlayer(${player.name} is $role)"
|
override fun toString() = "TTTPlayer(${player.name} is $role)"
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,7 +77,6 @@ class TTTScoreboard(private val tttPlayer: TTTPlayer) {
|
||||||
scoreboard.registerNewTeam(DEFAULT_TEAM_NAME).apply {
|
scoreboard.registerNewTeam(DEFAULT_TEAM_NAME).apply {
|
||||||
setAllowFriendlyFire(true)
|
setAllowFriendlyFire(true)
|
||||||
setCanSeeFriendlyInvisibles(false)
|
setCanSeeFriendlyInvisibles(false)
|
||||||
color = ChatColor.GREEN
|
|
||||||
setOption(Team.Option.COLLISION_RULE, Team.OptionStatus.ALWAYS)
|
setOption(Team.Option.COLLISION_RULE, Team.OptionStatus.ALWAYS)
|
||||||
setOption(Team.Option.DEATH_MESSAGE_VISIBILITY, Team.OptionStatus.NEVER)
|
setOption(Team.Option.DEATH_MESSAGE_VISIBILITY, Team.OptionStatus.NEVER)
|
||||||
setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER)
|
setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER)
|
||||||
|
@ -116,17 +115,14 @@ class TTTScoreboard(private val tttPlayer: TTTPlayer) {
|
||||||
val phase = GameManager.phase
|
val phase = GameManager.phase
|
||||||
|
|
||||||
if (phase === GamePhase.COMBAT) {
|
if (phase === GamePhase.COMBAT) {
|
||||||
if (tttPlayer.role.group == TTTPlayer.RoleGroup.JACKAL || tttPlayer.role === TTTPlayer.Role.TRAITOR) {
|
if (tttPlayer.role.group == RoleGroup.JACKAL || tttPlayer.role === Role.TRAITOR) {
|
||||||
val specialTeam = scoreboard.getTeam(SPECIAL_TEAM_NAME)!!
|
val specialTeam = scoreboard.getTeam(SPECIAL_TEAM_NAME)!!
|
||||||
specialTeam.color = tttPlayer.role.chatColor
|
specialTeam.color = tttPlayer.role.chatColor
|
||||||
|
defaultTeam.color = Role.INNOCENT.chatColor
|
||||||
|
|
||||||
PlayerManager.tttPlayers.forEach {
|
PlayerManager.tttPlayers.forEach {
|
||||||
val bothPlayersAreJackalGroup =
|
if (RoleGroup.JACKAL.bothAre(tttPlayer, it) ||
|
||||||
tttPlayer.role.group == TTTPlayer.RoleGroup.JACKAL &&
|
RoleGroup.TRAITOR.bothAre(tttPlayer, it)) {
|
||||||
it.role.group == TTTPlayer.RoleGroup.JACKAL
|
|
||||||
|
|
||||||
if (bothPlayersAreJackalGroup ||
|
|
||||||
(tttPlayer.role === TTTPlayer.Role.TRAITOR && it.role === TTTPlayer.Role.TRAITOR)) {
|
|
||||||
specialTeam.addEntry(it.player.displayName)
|
specialTeam.addEntry(it.player.displayName)
|
||||||
} else {
|
} else {
|
||||||
defaultTeam.addEntry(it.player.displayName)
|
defaultTeam.addEntry(it.player.displayName)
|
||||||
|
|
|
@ -9,12 +9,12 @@ import de.moritzruth.spigot_ttt.items.impl.CloakingDevice
|
||||||
import de.moritzruth.spigot_ttt.items.impl.EnderPearl
|
import de.moritzruth.spigot_ttt.items.impl.EnderPearl
|
||||||
import de.moritzruth.spigot_ttt.items.impl.HealingPotion
|
import de.moritzruth.spigot_ttt.items.impl.HealingPotion
|
||||||
import de.moritzruth.spigot_ttt.items.impl.Radar
|
import de.moritzruth.spigot_ttt.items.impl.Radar
|
||||||
import de.moritzruth.spigot_ttt.items.weapons.guns.deagle.GoldenDeagle
|
import de.moritzruth.spigot_ttt.items.weapons.guns.impl.GoldenDeagle
|
||||||
import de.moritzruth.spigot_ttt.items.weapons.guns.impl.Deagle
|
import de.moritzruth.spigot_ttt.items.weapons.guns.impl.Deagle
|
||||||
import de.moritzruth.spigot_ttt.items.weapons.guns.impl.Glock
|
import de.moritzruth.spigot_ttt.items.weapons.guns.impl.Glock
|
||||||
import de.moritzruth.spigot_ttt.items.weapons.guns.impl.Pistol
|
import de.moritzruth.spigot_ttt.items.weapons.guns.impl.Pistol
|
||||||
import de.moritzruth.spigot_ttt.items.weapons.guns.impl.Shotgun
|
import de.moritzruth.spigot_ttt.items.weapons.guns.impl.Shotgun
|
||||||
import de.moritzruth.spigot_ttt.items.weapons.guns.pistol.Rifle
|
import de.moritzruth.spigot_ttt.items.weapons.guns.impl.Rifle
|
||||||
import de.moritzruth.spigot_ttt.items.weapons.impl.BaseballBat
|
import de.moritzruth.spigot_ttt.items.weapons.impl.BaseballBat
|
||||||
import de.moritzruth.spigot_ttt.items.weapons.impl.Knife
|
import de.moritzruth.spigot_ttt.items.weapons.impl.Knife
|
||||||
import de.moritzruth.spigot_ttt.plugin
|
import de.moritzruth.spigot_ttt.plugin
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package de.moritzruth.spigot_ttt.items
|
package de.moritzruth.spigot_ttt.items
|
||||||
|
|
||||||
import com.comphenix.protocol.events.PacketListener
|
import com.comphenix.protocol.events.PacketListener
|
||||||
|
import de.moritzruth.spigot_ttt.game.players.Role
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
||||||
import org.bukkit.entity.Item
|
import org.bukkit.entity.Item
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
|
@ -21,7 +22,7 @@ interface DropHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Buyable {
|
interface Buyable {
|
||||||
val buyableBy: EnumSet<TTTPlayer.Role>
|
val buyableBy: EnumSet<Role>
|
||||||
val price: Int
|
val price: Int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
package de.moritzruth.spigot_ttt.items.impl
|
package de.moritzruth.spigot_ttt.items.impl
|
||||||
|
|
||||||
import de.moritzruth.spigot_ttt.CustomItems
|
import de.moritzruth.spigot_ttt.CustomItems
|
||||||
import de.moritzruth.spigot_ttt.game.players.IState
|
import de.moritzruth.spigot_ttt.game.players.*
|
||||||
import de.moritzruth.spigot_ttt.game.players.InversedStateContainer
|
|
||||||
import de.moritzruth.spigot_ttt.game.players.PlayerManager
|
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer.Role.*
|
|
||||||
import de.moritzruth.spigot_ttt.items.Buyable
|
import de.moritzruth.spigot_ttt.items.Buyable
|
||||||
import de.moritzruth.spigot_ttt.items.Selectable
|
import de.moritzruth.spigot_ttt.items.Selectable
|
||||||
import de.moritzruth.spigot_ttt.items.TTTItem
|
import de.moritzruth.spigot_ttt.items.TTTItem
|
||||||
|
@ -22,7 +18,6 @@ import org.bukkit.inventory.ItemFlag
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import org.bukkit.potion.PotionEffect
|
import org.bukkit.potion.PotionEffect
|
||||||
import org.bukkit.potion.PotionEffectType
|
import org.bukkit.potion.PotionEffectType
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
object CloakingDevice: TTTItem,
|
object CloakingDevice: TTTItem,
|
||||||
Buyable,
|
Buyable,
|
||||||
|
@ -37,7 +32,7 @@ object CloakingDevice: TTTItem,
|
||||||
}
|
}
|
||||||
override val type = TTTItem.Type.SPECIAL
|
override val type = TTTItem.Type.SPECIAL
|
||||||
override val price = 2
|
override val price = 2
|
||||||
override val buyableBy = EnumSet.of(DETECTIVE, TRAITOR, JACKAL)
|
override val buyableBy = roles(Role.TRAITOR, Role.JACKAL)
|
||||||
|
|
||||||
val isc = InversedStateContainer(State::class)
|
val isc = InversedStateContainer(State::class)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package de.moritzruth.spigot_ttt.items.impl
|
package de.moritzruth.spigot_ttt.items.impl
|
||||||
|
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer.Role.*
|
import de.moritzruth.spigot_ttt.game.players.Role
|
||||||
|
import de.moritzruth.spigot_ttt.game.players.roles
|
||||||
import de.moritzruth.spigot_ttt.items.Buyable
|
import de.moritzruth.spigot_ttt.items.Buyable
|
||||||
import de.moritzruth.spigot_ttt.items.TTTItem
|
import de.moritzruth.spigot_ttt.items.TTTItem
|
||||||
import de.moritzruth.spigot_ttt.items.isRelevant
|
import de.moritzruth.spigot_ttt.items.isRelevant
|
||||||
|
@ -11,14 +12,13 @@ import org.bukkit.event.EventHandler
|
||||||
import org.bukkit.event.Listener
|
import org.bukkit.event.Listener
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent
|
import org.bukkit.event.entity.EntityDamageByEntityEvent
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
object EnderPearl: TTTItem, Buyable {
|
object EnderPearl: TTTItem, Buyable {
|
||||||
override val type = TTTItem.Type.SPECIAL
|
override val type = TTTItem.Type.SPECIAL
|
||||||
override val itemStack = ItemStack(Material.ENDER_PEARL).applyMeta {
|
override val itemStack = ItemStack(Material.ENDER_PEARL).applyMeta {
|
||||||
setDisplayName("${ChatColor.DARK_GREEN}Ender Perle")
|
setDisplayName("${ChatColor.DARK_GREEN}Ender Perle")
|
||||||
}
|
}
|
||||||
override val buyableBy = EnumSet.of(TRAITOR, JACKAL, SIDEKICK, DETECTIVE)
|
override val buyableBy = roles(Role.TRAITOR, Role.JACKAL, Role.DETECTIVE)
|
||||||
override val price = 1
|
override val price = 1
|
||||||
|
|
||||||
override val listener = object : Listener {
|
override val listener = object : Listener {
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
package de.moritzruth.spigot_ttt.items.impl
|
package de.moritzruth.spigot_ttt.items.impl
|
||||||
|
|
||||||
import de.moritzruth.spigot_ttt.game.players.PlayerManager
|
import de.moritzruth.spigot_ttt.game.players.PlayerManager
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer.Role.*
|
import de.moritzruth.spigot_ttt.game.players.Role
|
||||||
|
import de.moritzruth.spigot_ttt.game.players.roles
|
||||||
import de.moritzruth.spigot_ttt.items.Buyable
|
import de.moritzruth.spigot_ttt.items.Buyable
|
||||||
import de.moritzruth.spigot_ttt.items.TTTItem
|
import de.moritzruth.spigot_ttt.items.TTTItem
|
||||||
import de.moritzruth.spigot_ttt.items.isRelevant
|
import de.moritzruth.spigot_ttt.items.isRelevant
|
||||||
|
@ -18,7 +19,6 @@ import org.bukkit.inventory.ItemStack
|
||||||
import org.bukkit.inventory.meta.PotionMeta
|
import org.bukkit.inventory.meta.PotionMeta
|
||||||
import org.bukkit.potion.PotionData
|
import org.bukkit.potion.PotionData
|
||||||
import org.bukkit.potion.PotionType
|
import org.bukkit.potion.PotionType
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
object HealingPotion: TTTItem, Buyable {
|
object HealingPotion: TTTItem, Buyable {
|
||||||
override val itemStack = ItemStack(Material.POTION).apply {
|
override val itemStack = ItemStack(Material.POTION).apply {
|
||||||
|
@ -35,7 +35,7 @@ object HealingPotion: TTTItem, Buyable {
|
||||||
addItemFlags(ItemFlag.HIDE_POTION_EFFECTS)
|
addItemFlags(ItemFlag.HIDE_POTION_EFFECTS)
|
||||||
}
|
}
|
||||||
override val type = TTTItem.Type.SPECIAL
|
override val type = TTTItem.Type.SPECIAL
|
||||||
override val buyableBy = EnumSet.of(TRAITOR, JACKAL, SIDEKICK, DETECTIVE)
|
override val buyableBy = roles(Role.TRAITOR, Role.JACKAL, Role.DETECTIVE)
|
||||||
override val price = 1
|
override val price = 1
|
||||||
|
|
||||||
override val listener = object : Listener {
|
override val listener = object : Listener {
|
||||||
|
|
|
@ -5,10 +5,7 @@ import com.comphenix.protocol.PacketType
|
||||||
import com.comphenix.protocol.events.PacketAdapter
|
import com.comphenix.protocol.events.PacketAdapter
|
||||||
import com.comphenix.protocol.events.PacketEvent
|
import com.comphenix.protocol.events.PacketEvent
|
||||||
import de.moritzruth.spigot_ttt.CustomItems
|
import de.moritzruth.spigot_ttt.CustomItems
|
||||||
import de.moritzruth.spigot_ttt.game.players.IState
|
import de.moritzruth.spigot_ttt.game.players.*
|
||||||
import de.moritzruth.spigot_ttt.game.players.InversedStateContainer
|
|
||||||
import de.moritzruth.spigot_ttt.game.players.PlayerManager
|
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
|
||||||
import de.moritzruth.spigot_ttt.items.Buyable
|
import de.moritzruth.spigot_ttt.items.Buyable
|
||||||
import de.moritzruth.spigot_ttt.items.TTTItem
|
import de.moritzruth.spigot_ttt.items.TTTItem
|
||||||
import de.moritzruth.spigot_ttt.items.isRelevant
|
import de.moritzruth.spigot_ttt.items.isRelevant
|
||||||
|
@ -32,7 +29,7 @@ object Radar: TTTItem, Buyable {
|
||||||
setDisplayName("${ChatColor.DARK_AQUA}${ChatColor.BOLD}Radar")
|
setDisplayName("${ChatColor.DARK_AQUA}${ChatColor.BOLD}Radar")
|
||||||
}
|
}
|
||||||
override val type = TTTItem.Type.SPECIAL
|
override val type = TTTItem.Type.SPECIAL
|
||||||
override val buyableBy = EnumSet.of(TTTPlayer.Role.TRAITOR, TTTPlayer.Role.JACKAL)
|
override val buyableBy: EnumSet<Role> = EnumSet.of(Role.TRAITOR, Role.DETECTIVE, Role.JACKAL)
|
||||||
override val price = 2
|
override val price = 2
|
||||||
|
|
||||||
val isc = InversedStateContainer(State::class)
|
val isc = InversedStateContainer(State::class)
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
package de.moritzruth.spigot_ttt.items.weapons.guns.deagle
|
package de.moritzruth.spigot_ttt.items.weapons.guns.impl
|
||||||
|
|
||||||
import de.moritzruth.spigot_ttt.CustomItems
|
import de.moritzruth.spigot_ttt.CustomItems
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer.Role.DETECTIVE
|
import de.moritzruth.spigot_ttt.game.players.Role
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer.Role.TRAITOR
|
import de.moritzruth.spigot_ttt.game.players.roles
|
||||||
import de.moritzruth.spigot_ttt.items.Buyable
|
import de.moritzruth.spigot_ttt.items.Buyable
|
||||||
import de.moritzruth.spigot_ttt.items.TTTItem
|
import de.moritzruth.spigot_ttt.items.TTTItem
|
||||||
import de.moritzruth.spigot_ttt.items.weapons.guns.Gun
|
import de.moritzruth.spigot_ttt.items.weapons.guns.Gun
|
||||||
import org.bukkit.ChatColor
|
import org.bukkit.ChatColor
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
object GoldenDeagle: Gun(
|
object GoldenDeagle: Gun(
|
||||||
stateClass = State::class,
|
stateClass = State::class,
|
||||||
|
@ -18,7 +17,7 @@ object GoldenDeagle: Gun(
|
||||||
reloadTime = 20.0,
|
reloadTime = 20.0,
|
||||||
itemMaterial = CustomItems.goldenDeagle
|
itemMaterial = CustomItems.goldenDeagle
|
||||||
), Buyable {
|
), Buyable {
|
||||||
override val buyableBy = EnumSet.of(TRAITOR, DETECTIVE)
|
override val buyableBy = roles(Role.TRAITOR, Role.JACKAL, Role.DETECTIVE)
|
||||||
override val price = 3
|
override val price = 3
|
||||||
override val type = TTTItem.Type.PISTOL_LIKE
|
override val type = TTTItem.Type.PISTOL_LIKE
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package de.moritzruth.spigot_ttt.items.weapons.guns.pistol
|
package de.moritzruth.spigot_ttt.items.weapons.guns.impl
|
||||||
|
|
||||||
import de.moritzruth.spigot_ttt.CustomItems
|
import de.moritzruth.spigot_ttt.CustomItems
|
||||||
import de.moritzruth.spigot_ttt.items.Spawning
|
import de.moritzruth.spigot_ttt.items.Spawning
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
package de.moritzruth.spigot_ttt.items.weapons.impl
|
package de.moritzruth.spigot_ttt.items.weapons.impl
|
||||||
|
|
||||||
import de.moritzruth.spigot_ttt.CustomItems
|
import de.moritzruth.spigot_ttt.CustomItems
|
||||||
|
import de.moritzruth.spigot_ttt.game.players.Role
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer.Role.JACKAL
|
import de.moritzruth.spigot_ttt.game.players.roles
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer.Role.TRAITOR
|
|
||||||
import de.moritzruth.spigot_ttt.items.Buyable
|
import de.moritzruth.spigot_ttt.items.Buyable
|
||||||
import de.moritzruth.spigot_ttt.items.Selectable
|
import de.moritzruth.spigot_ttt.items.Selectable
|
||||||
import de.moritzruth.spigot_ttt.items.TTTItem
|
import de.moritzruth.spigot_ttt.items.TTTItem
|
||||||
|
@ -19,7 +19,6 @@ import org.bukkit.inventory.ItemStack
|
||||||
import org.bukkit.inventory.meta.Damageable
|
import org.bukkit.inventory.meta.Damageable
|
||||||
import org.bukkit.inventory.meta.ItemMeta
|
import org.bukkit.inventory.meta.ItemMeta
|
||||||
import org.bukkit.util.Vector
|
import org.bukkit.util.Vector
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
object BaseballBat: TTTItem, Buyable, Selectable {
|
object BaseballBat: TTTItem, Buyable, Selectable {
|
||||||
override val type = TTTItem.Type.MELEE
|
override val type = TTTItem.Type.MELEE
|
||||||
|
@ -35,7 +34,7 @@ object BaseballBat: TTTItem, Buyable, Selectable {
|
||||||
)
|
)
|
||||||
addItemFlags(ItemFlag.HIDE_ATTRIBUTES)
|
addItemFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||||
}
|
}
|
||||||
override val buyableBy = EnumSet.of(TRAITOR, JACKAL)
|
override val buyableBy = roles(Role.TRAITOR, Role.JACKAL)
|
||||||
override val price = 1
|
override val price = 1
|
||||||
|
|
||||||
override fun onSelect(tttPlayer: TTTPlayer) {
|
override fun onSelect(tttPlayer: TTTPlayer) {
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
package de.moritzruth.spigot_ttt.items.weapons.impl
|
package de.moritzruth.spigot_ttt.items.weapons.impl
|
||||||
|
|
||||||
import de.moritzruth.spigot_ttt.CustomItems
|
import de.moritzruth.spigot_ttt.CustomItems
|
||||||
import de.moritzruth.spigot_ttt.game.players.DamageInfo
|
import de.moritzruth.spigot_ttt.game.players.*
|
||||||
import de.moritzruth.spigot_ttt.game.players.DeathReason
|
|
||||||
import de.moritzruth.spigot_ttt.game.players.PlayerManager
|
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer.Role.TRAITOR
|
|
||||||
import de.moritzruth.spigot_ttt.items.Buyable
|
import de.moritzruth.spigot_ttt.items.Buyable
|
||||||
import de.moritzruth.spigot_ttt.items.TTTItem
|
import de.moritzruth.spigot_ttt.items.TTTItem
|
||||||
import de.moritzruth.spigot_ttt.items.isRelevant
|
import de.moritzruth.spigot_ttt.items.isRelevant
|
||||||
|
@ -20,7 +16,6 @@ import org.bukkit.inventory.ItemFlag
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import org.bukkit.inventory.meta.Damageable
|
import org.bukkit.inventory.meta.Damageable
|
||||||
import org.bukkit.inventory.meta.ItemMeta
|
import org.bukkit.inventory.meta.ItemMeta
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
object Knife: TTTItem, Buyable {
|
object Knife: TTTItem, Buyable {
|
||||||
override val itemStack = ItemStack(CustomItems.knife).applyMeta {
|
override val itemStack = ItemStack(CustomItems.knife).applyMeta {
|
||||||
|
@ -34,7 +29,7 @@ object Knife: TTTItem, Buyable {
|
||||||
)
|
)
|
||||||
addItemFlags(ItemFlag.HIDE_ATTRIBUTES)
|
addItemFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||||
}
|
}
|
||||||
override val buyableBy: EnumSet<TTTPlayer.Role> = EnumSet.of(TRAITOR)
|
override val buyableBy = roles(Role.TRAITOR, Role.JACKAL)
|
||||||
override val price = 1
|
override val price = 1
|
||||||
override val type = TTTItem.Type.MELEE
|
override val type = TTTItem.Type.MELEE
|
||||||
|
|
||||||
|
|
Reference in a new issue