Fix Sidekick not becoming the Jackal and Ninja double jump after revive
This commit is contained in:
parent
82b7661c20
commit
f01bc4233d
4 changed files with 29 additions and 14 deletions
|
@ -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")
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
||||
|
|
Reference in a new issue