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

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

View file

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

View file

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