diff --git a/src/main/kotlin/de/moritzruth/spigot_ttt/game/GameListener.kt b/src/main/kotlin/de/moritzruth/spigot_ttt/game/GameListener.kt index f38aa37..e563853 100644 --- a/src/main/kotlin/de/moritzruth/spigot_ttt/game/GameListener.kt +++ b/src/main/kotlin/de/moritzruth/spigot_ttt/game/GameListener.kt @@ -143,13 +143,15 @@ object GameListener : Listener { @EventHandler(priority = EventPriority.HIGHEST) fun onTTTPlayerTrueDeath(event: TTTPlayerTrueDeathEvent) { - if (event.winnerRoleGroup == RoleGroup.JACKAL && event.tttPlayer.role == Role.JACKAL) { + if (event.winnerRoleGroup != RoleGroup.JACKAL && 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) + event.tttPlayer.changeRole(Role.SIDEKICK) // The old Jackal + sidekicks.forEach { sidekick -> if (sidekick != newJackal) { sidekick.player.sendMessage(TTTPlugin.prefix + "${newJackal.player.displayName} ${ChatColor.GREEN}ist der neue Jackal") diff --git a/src/main/kotlin/de/moritzruth/spigot_ttt/game/classes/impl/Ninja.kt b/src/main/kotlin/de/moritzruth/spigot_ttt/game/classes/impl/Ninja.kt index ca535b8..c976adb 100644 --- a/src/main/kotlin/de/moritzruth/spigot_ttt/game/classes/impl/Ninja.kt +++ b/src/main/kotlin/de/moritzruth/spigot_ttt/game/classes/impl/Ninja.kt @@ -4,6 +4,7 @@ import de.moritzruth.spigot_ttt.game.GameEndEvent import de.moritzruth.spigot_ttt.game.classes.TTTClass import de.moritzruth.spigot_ttt.game.players.* import de.moritzruth.spigot_ttt.plugin +import de.moritzruth.spigot_ttt.utils.nextTick import org.bukkit.ChatColor import org.bukkit.event.EventHandler import org.bukkit.event.Listener @@ -35,19 +36,21 @@ object Ninja: TTTClass( fun onPlayerToggleFlight(event: PlayerToggleFlightEvent) { val tttPlayer = TTTPlayer.of(event.player) ?: return - if (tttPlayer.tttClass == Ninja) { + if (event.isFlying && tttPlayer.tttClass == Ninja) { val state = isc.getOrCreate(tttPlayer) val current = tttPlayer.player.velocity tttPlayer.player.velocity = Vector(current.x * 3, 0.8, current.z * 3) state.jumpsRemaining -= 1 + println(state.jumpsRemaining) + if (state.jumpsRemaining == 0) { tttPlayer.player.allowFlight = false state.checkOnGroundTask = plugin.server.scheduler.runTaskTimer(plugin, fun() { if (tttPlayer.player.isOnGround) { - state.jumpsRemaining = 2 + state.jumpsRemaining = 1 tttPlayer.player.allowFlight = true state.reset() } @@ -65,22 +68,30 @@ object Ninja: TTTClass( } } - @EventHandler(ignoreCancelled = true) + @EventHandler fun onTTTPlayerDeath(event: TTTPlayerDeathEvent) { isc.get(event.tttPlayer)?.reset() isc.remove(event.tttPlayer) } + @EventHandler + fun onTTTPlayerReviveEvent(event: TTTPlayerReviveEvent) { + if (event.tttPlayer.tttClass == Ninja) { + // This must be delayed for 2 ticks, idk why + nextTick { nextTick { event.tttPlayer.player.allowFlight = true } } + } + } + @EventHandler fun onGameEnd(event: GameEndEvent) { - isc.forEveryState { state, tttPlayer -> + isc.forEveryState { state, _ -> state.reset() } } } class State: IState { - var jumpsRemaining = 2 + var jumpsRemaining = 1 var checkOnGroundTask: BukkitTask? = null fun reset() { diff --git a/src/main/kotlin/de/moritzruth/spigot_ttt/game/players/PlayerManager.kt b/src/main/kotlin/de/moritzruth/spigot_ttt/game/players/PlayerManager.kt index 6b6808f..71e6b04 100644 --- a/src/main/kotlin/de/moritzruth/spigot_ttt/game/players/PlayerManager.kt +++ b/src/main/kotlin/de/moritzruth/spigot_ttt/game/players/PlayerManager.kt @@ -112,7 +112,7 @@ object PlayerManager { playersWithoutRole.remove(player) } - for (index in 1..Settings.traitorCount) createTTTPlayer(Role.TRAITOR) + for (index in 1..Settings.traitorCount) createTTTPlayer(Role.JACKAL) if (Settings.detectiveEnabled) createTTTPlayer(Role.DETECTIVE) diff --git a/src/main/kotlin/de/moritzruth/spigot_ttt/game/players/TTTPlayer.kt b/src/main/kotlin/de/moritzruth/spigot_ttt/game/players/TTTPlayer.kt index 799b0b2..fda20ac 100644 --- a/src/main/kotlin/de/moritzruth/spigot_ttt/game/players/TTTPlayer.kt +++ b/src/main/kotlin/de/moritzruth/spigot_ttt/game/players/TTTPlayer.kt @@ -161,18 +161,20 @@ class TTTPlayer(player: Player, role: Role, val tttClass: TTTClass?) { private fun getOwningTTTItems() = player.inventory.hotbarContents.mapNotNull { it?.run { ItemManager.getItemByItemStack(this) } } - fun changeRole(newRole: Role) { + fun changeRole(newRole: Role, notify: Boolean = true) { roleHistory.add(role) role = newRole - val message = if (role == Role.SIDEKICK) { - val jackal = PlayerManager.tttPlayers.find { it.role == Role.JACKAL } - ?: throw NoJackalLivingException() + if (notify) { + val message = if (role == Role.SIDEKICK) { + val jackal = PlayerManager.tttPlayers.find { it.role == Role.JACKAL } + ?: throw NoJackalLivingException() - "${ChatColor.WHITE}Du bist jetzt ${role.coloredDisplayName} von ${jackal.role.chatColor}${jackal.player.displayName}" - } else "${ChatColor.WHITE}Du bist jetzt ${role.coloredDisplayName}" + "${ChatColor.WHITE}Du bist jetzt ${role.coloredDisplayName} von ${jackal.role.chatColor}${jackal.player.displayName}" + } else "${ChatColor.WHITE}Du bist jetzt ${role.coloredDisplayName}" - player.sendTitle("", message, secondsToTicks(0.2), secondsToTicks(3), secondsToTicks(0.5)) + player.sendTitle("", message, secondsToTicks(0.2), secondsToTicks(3), secondsToTicks(0.5)) + } PlayerManager.letRemainingRoleGroupWin() }