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)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
fun onTTTPlayerTrueDeath(event: TTTPlayerTrueDeathEvent) {
|
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 }
|
val sidekicks = PlayerManager.tttPlayers.filter { it.role == Role.SIDEKICK }
|
||||||
|
|
||||||
if (sidekicks.isNotEmpty()) {
|
if (sidekicks.isNotEmpty()) {
|
||||||
val newJackal = sidekicks.random()
|
val newJackal = sidekicks.random()
|
||||||
newJackal.changeRole(Role.JACKAL)
|
newJackal.changeRole(Role.JACKAL)
|
||||||
|
|
||||||
|
event.tttPlayer.changeRole(Role.SIDEKICK) // The old Jackal
|
||||||
|
|
||||||
sidekicks.forEach { sidekick ->
|
sidekicks.forEach { sidekick ->
|
||||||
if (sidekick != newJackal) {
|
if (sidekick != newJackal) {
|
||||||
sidekick.player.sendMessage(TTTPlugin.prefix + "${newJackal.player.displayName} ${ChatColor.GREEN}ist der neue Jackal")
|
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.classes.TTTClass
|
||||||
import de.moritzruth.spigot_ttt.game.players.*
|
import de.moritzruth.spigot_ttt.game.players.*
|
||||||
import de.moritzruth.spigot_ttt.plugin
|
import de.moritzruth.spigot_ttt.plugin
|
||||||
|
import de.moritzruth.spigot_ttt.utils.nextTick
|
||||||
import org.bukkit.ChatColor
|
import org.bukkit.ChatColor
|
||||||
import org.bukkit.event.EventHandler
|
import org.bukkit.event.EventHandler
|
||||||
import org.bukkit.event.Listener
|
import org.bukkit.event.Listener
|
||||||
|
@ -35,19 +36,21 @@ object Ninja: TTTClass(
|
||||||
fun onPlayerToggleFlight(event: PlayerToggleFlightEvent) {
|
fun onPlayerToggleFlight(event: PlayerToggleFlightEvent) {
|
||||||
val tttPlayer = TTTPlayer.of(event.player) ?: return
|
val tttPlayer = TTTPlayer.of(event.player) ?: return
|
||||||
|
|
||||||
if (tttPlayer.tttClass == Ninja) {
|
if (event.isFlying && tttPlayer.tttClass == Ninja) {
|
||||||
val state = isc.getOrCreate(tttPlayer)
|
val state = isc.getOrCreate(tttPlayer)
|
||||||
|
|
||||||
val current = tttPlayer.player.velocity
|
val current = tttPlayer.player.velocity
|
||||||
tttPlayer.player.velocity = Vector(current.x * 3, 0.8, current.z * 3)
|
tttPlayer.player.velocity = Vector(current.x * 3, 0.8, current.z * 3)
|
||||||
state.jumpsRemaining -= 1
|
state.jumpsRemaining -= 1
|
||||||
|
|
||||||
|
println(state.jumpsRemaining)
|
||||||
|
|
||||||
if (state.jumpsRemaining == 0) {
|
if (state.jumpsRemaining == 0) {
|
||||||
tttPlayer.player.allowFlight = false
|
tttPlayer.player.allowFlight = false
|
||||||
|
|
||||||
state.checkOnGroundTask = plugin.server.scheduler.runTaskTimer(plugin, fun() {
|
state.checkOnGroundTask = plugin.server.scheduler.runTaskTimer(plugin, fun() {
|
||||||
if (tttPlayer.player.isOnGround) {
|
if (tttPlayer.player.isOnGround) {
|
||||||
state.jumpsRemaining = 2
|
state.jumpsRemaining = 1
|
||||||
tttPlayer.player.allowFlight = true
|
tttPlayer.player.allowFlight = true
|
||||||
state.reset()
|
state.reset()
|
||||||
}
|
}
|
||||||
|
@ -65,22 +68,30 @@ object Ninja: TTTClass(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
@EventHandler
|
||||||
fun onTTTPlayerDeath(event: TTTPlayerDeathEvent) {
|
fun onTTTPlayerDeath(event: TTTPlayerDeathEvent) {
|
||||||
isc.get(event.tttPlayer)?.reset()
|
isc.get(event.tttPlayer)?.reset()
|
||||||
isc.remove(event.tttPlayer)
|
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
|
@EventHandler
|
||||||
fun onGameEnd(event: GameEndEvent) {
|
fun onGameEnd(event: GameEndEvent) {
|
||||||
isc.forEveryState { state, tttPlayer ->
|
isc.forEveryState { state, _ ->
|
||||||
state.reset()
|
state.reset()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class State: IState {
|
class State: IState {
|
||||||
var jumpsRemaining = 2
|
var jumpsRemaining = 1
|
||||||
var checkOnGroundTask: BukkitTask? = null
|
var checkOnGroundTask: BukkitTask? = null
|
||||||
|
|
||||||
fun reset() {
|
fun reset() {
|
||||||
|
|
|
@ -112,7 +112,7 @@ object PlayerManager {
|
||||||
playersWithoutRole.remove(player)
|
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)
|
if (Settings.detectiveEnabled) createTTTPlayer(Role.DETECTIVE)
|
||||||
|
|
||||||
|
|
|
@ -161,10 +161,11 @@ class TTTPlayer(player: Player, role: Role, val tttClass: TTTClass?) {
|
||||||
|
|
||||||
private fun getOwningTTTItems() = player.inventory.hotbarContents.mapNotNull { it?.run { ItemManager.getItemByItemStack(this) } }
|
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)
|
roleHistory.add(role)
|
||||||
role = newRole
|
role = newRole
|
||||||
|
|
||||||
|
if (notify) {
|
||||||
val message = if (role == Role.SIDEKICK) {
|
val message = if (role == Role.SIDEKICK) {
|
||||||
val jackal = PlayerManager.tttPlayers.find { it.role == Role.JACKAL }
|
val jackal = PlayerManager.tttPlayers.find { it.role == Role.JACKAL }
|
||||||
?: throw NoJackalLivingException()
|
?: throw NoJackalLivingException()
|
||||||
|
@ -173,6 +174,7 @@ class TTTPlayer(player: Player, role: Role, val tttClass: TTTClass?) {
|
||||||
} else "${ChatColor.WHITE}Du bist jetzt ${role.coloredDisplayName}"
|
} 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()
|
PlayerManager.letRemainingRoleGroupWin()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue