1
0
Fork 0

Fix Sidekick not becoming the Jackal and Ninja double jump after revive

This commit is contained in:
Moritz Ruth 2020-06-14 23:39:57 +02:00
parent 82b7661c20
commit f01bc4233d
No known key found for this signature in database
GPG key ID: AFD57E23E753841B
4 changed files with 29 additions and 14 deletions

View file

@ -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")

View file

@ -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() {

View file

@ -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)

View file

@ -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()
} }