Let a random Sidekick become the Jackal after the latter died
This commit is contained in:
parent
b853fef498
commit
d9bc5f137e
7 changed files with 49 additions and 32 deletions
|
@ -8,9 +8,7 @@ import com.comphenix.protocol.events.PacketEvent
|
|||
import com.comphenix.protocol.wrappers.EnumWrappers
|
||||
import com.comphenix.protocol.wrappers.PlayerInfoData
|
||||
import de.moritzruth.spigot_ttt.TTTPlugin
|
||||
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.*
|
||||
import de.moritzruth.spigot_ttt.plugin
|
||||
import de.moritzruth.spigot_ttt.utils.nextTick
|
||||
import org.bukkit.ChatColor
|
||||
|
@ -24,7 +22,7 @@ import org.bukkit.event.entity.EntityDamageEvent
|
|||
import org.bukkit.event.entity.PlayerDeathEvent
|
||||
import org.bukkit.event.player.*
|
||||
|
||||
object GeneralGameEventsListener : Listener {
|
||||
object GameListener : Listener {
|
||||
private val BLOCKED_COMMANDS = setOf("me", "tell")
|
||||
|
||||
fun register() {
|
||||
|
@ -105,10 +103,6 @@ object GeneralGameEventsListener : Listener {
|
|||
tttPlayer.onDeath(reason, null)
|
||||
}
|
||||
|
||||
// gameManager.playerManager.tttPlayers.forEach {
|
||||
// it.player.playSound(tttPlayer.player.location, Sound.ENTITY_PLAYER_DEATH, SoundCategory.PLAYERS, 2f, 1f)
|
||||
// }
|
||||
|
||||
event.damage = 0.0
|
||||
}
|
||||
}
|
||||
|
@ -136,6 +130,24 @@ object GeneralGameEventsListener : Listener {
|
|||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
fun onTTTPlayerDeath(event: TTTPlayerDeathEvent) {
|
||||
if (!setOf(RoleGroup.JACKAL, null).contains(event.winnerRoleGroup) && event.tttPlayer.role == Role.JACKAL) {
|
||||
val sidekicks = PlayerManager.tttPlayers.filter { it.role == Role.SIDEKICK }
|
||||
|
||||
if (sidekicks.isNotEmpty()) {
|
||||
val newJackal = sidekicks.random()
|
||||
newJackal.changeRole(Role.JACKAL)
|
||||
|
||||
sidekicks.forEach { sidekick ->
|
||||
if (sidekick != newJackal) {
|
||||
sidekick.player.sendMessage(TTTPlugin.prefix + "${newJackal.player.displayName} ${ChatColor.GREEN}ist der neue Jackal")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val packetListener = object : PacketAdapter(plugin, PacketType.Play.Server.PLAYER_INFO) {
|
||||
override fun onPacketSending(event: PacketEvent) {
|
||||
val packet = WrapperPlayServerPlayerInfo(event.packet)
|
|
@ -9,6 +9,7 @@ import de.moritzruth.spigot_ttt.game.items.shop.ShopListener
|
|||
import de.moritzruth.spigot_ttt.game.players.PlayerManager
|
||||
import de.moritzruth.spigot_ttt.game.players.Role
|
||||
import de.moritzruth.spigot_ttt.plugin
|
||||
import de.moritzruth.spigot_ttt.utils.call
|
||||
import org.bukkit.GameRule
|
||||
import kotlin.random.Random
|
||||
|
||||
|
@ -25,7 +26,7 @@ object GameManager {
|
|||
adjustWorld()
|
||||
|
||||
ItemManager.registerListeners()
|
||||
GeneralGameEventsListener.register()
|
||||
GameListener.register()
|
||||
ShopListener.register()
|
||||
CorpseListener.register()
|
||||
}
|
||||
|
@ -43,7 +44,7 @@ object GameManager {
|
|||
}
|
||||
|
||||
Timers.startOverPhaseTimer(plugin.config.getInt("duration.over", 10)) {
|
||||
plugin.server.pluginManager.callEvent(GameEndEvent(false))
|
||||
GameEndEvent(false).call()
|
||||
|
||||
phase = null
|
||||
resetWorld()
|
||||
|
@ -89,7 +90,7 @@ object GameManager {
|
|||
fun abortGame(broadcast: Boolean = false) {
|
||||
if (phase === null) throw IllegalStateException("The game is not running")
|
||||
|
||||
plugin.server.pluginManager.callEvent(GameEndEvent(true))
|
||||
GameEndEvent(true).call()
|
||||
phase = null
|
||||
Timers.cancelCurrentTask()
|
||||
resetWorld()
|
||||
|
|
|
@ -79,7 +79,7 @@ object SecondChance: TTTItem, Buyable {
|
|||
val state = isc.get(event.tttPlayer)
|
||||
if (state != null) {
|
||||
if (Random.nextBoolean()) {
|
||||
event.letRoundEnd = false
|
||||
event.winnerRoleGroup = null
|
||||
event.tttPlayer.player.openInventory(chooseSpawnInventory)
|
||||
state.timeoutAction = TimeoutAction(event.tttPlayer, event.tttCorpse.corpse.trueLocation)
|
||||
}
|
||||
|
|
|
@ -36,12 +36,14 @@ object PlayerManager {
|
|||
}
|
||||
|
||||
fun letRemainingRoleGroupWin() {
|
||||
GameManager.ensurePhase(GamePhase.COMBAT)
|
||||
val onlyRemainingRoleGroup = getOnlyRemainingRoleGroup() ?: return
|
||||
GameManager.letRoleWin(onlyRemainingRoleGroup.primaryRole)
|
||||
}
|
||||
|
||||
val stillLivingRoleGroups = stillLivingRoleGroups
|
||||
if (stillLivingRoleGroups.count() == 1) {
|
||||
GameManager.letRoleWin(stillLivingRoleGroups.first().primaryRole)
|
||||
}
|
||||
fun getOnlyRemainingRoleGroup(): RoleGroup? {
|
||||
GameManager.ensurePhase(GamePhase.COMBAT)
|
||||
return if (stillLivingRoleGroups.count() == 1) stillLivingRoleGroups.first()
|
||||
else null
|
||||
}
|
||||
|
||||
fun onPlayerJoin(player: Player) {
|
||||
|
|
|
@ -10,10 +10,7 @@ import de.moritzruth.spigot_ttt.game.items.Selectable
|
|||
import de.moritzruth.spigot_ttt.game.items.TTTItem
|
||||
import de.moritzruth.spigot_ttt.game.items.shop.Shop
|
||||
import de.moritzruth.spigot_ttt.plugin
|
||||
import de.moritzruth.spigot_ttt.utils.hotbarContents
|
||||
import de.moritzruth.spigot_ttt.utils.nextTick
|
||||
import de.moritzruth.spigot_ttt.utils.secondsToTicks
|
||||
import de.moritzruth.spigot_ttt.utils.teleportPlayerToWorldSpawn
|
||||
import de.moritzruth.spigot_ttt.utils.*
|
||||
import org.bukkit.*
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.potion.PotionEffect
|
||||
|
@ -88,7 +85,7 @@ class TTTPlayer(player: Player, role: Role) {
|
|||
if (killer == null) "${ChatColor.RED}${ChatColor.BOLD}Du bist gestorben"
|
||||
else "${ChatColor.RED}${ChatColor.BOLD}Du wurdest von " +
|
||||
"${ChatColor.RESET}${killer.player.displayName}" +
|
||||
"${ChatColor.RED}${ChatColor.BOLD} getötet"
|
||||
" ${ChatColor.RED}${ChatColor.BOLD}getötet"
|
||||
)
|
||||
|
||||
player.gameMode = GameMode.SPECTATOR
|
||||
|
@ -98,18 +95,18 @@ class TTTPlayer(player: Player, role: Role) {
|
|||
player.inventory.clear()
|
||||
credits = 0
|
||||
|
||||
val onlyRemainingRoleGroup = PlayerManager.getOnlyRemainingRoleGroup()
|
||||
|
||||
val event = TTTPlayerDeathEvent(
|
||||
this,
|
||||
player.location,
|
||||
tttCorpse,
|
||||
killer,
|
||||
scream
|
||||
)
|
||||
plugin.server.pluginManager.callEvent(event)
|
||||
scream,
|
||||
onlyRemainingRoleGroup
|
||||
).call()
|
||||
|
||||
if (event.letRoundEnd) {
|
||||
PlayerManager.letRemainingRoleGroupWin()
|
||||
}
|
||||
event.winnerRoleGroup?.run { GameManager.letRoleWin(primaryRole) }
|
||||
|
||||
if (event.scream) {
|
||||
GameManager.world.playSound(
|
||||
|
@ -133,7 +130,7 @@ class TTTPlayer(player: Player, role: Role) {
|
|||
|
||||
Shop.setItems(this)
|
||||
|
||||
plugin.server.pluginManager.callEvent(TTTPlayerReviveEvent(this))
|
||||
TTTPlayerReviveEvent(this).call()
|
||||
player.sendMessage(TTTPlugin.prefix + "${ChatColor.GREEN}${ChatColor.BOLD}Du wurdest wiederbelebt")
|
||||
|
||||
nextTick { player.gameMode = GameMode.SURVIVAL }
|
||||
|
|
|
@ -10,15 +10,14 @@ data class TTTPlayerDeathEvent(
|
|||
val location: Location,
|
||||
val tttCorpse: TTTCorpse,
|
||||
val killer: TTTPlayer?,
|
||||
var scream: Boolean = true
|
||||
var scream: Boolean = true,
|
||||
var winnerRoleGroup: RoleGroup? = null
|
||||
): Event() {
|
||||
override fun getHandlers(): HandlerList {
|
||||
@Suppress("RedundantCompanionReference") // false positive
|
||||
return Companion.handlers
|
||||
}
|
||||
|
||||
var letRoundEnd = true
|
||||
|
||||
companion object {
|
||||
private val handlers = HandlerList()
|
||||
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
package de.moritzruth.spigot_ttt.utils
|
||||
|
||||
import de.moritzruth.spigot_ttt.plugin
|
||||
import org.bukkit.event.Event
|
||||
|
||||
fun <T: Event> T.call(): T = this.also { plugin.server.pluginManager.callEvent(this) }
|
Reference in a new issue