Add Ninja class and remove stamina (it's annoying)
This commit is contained in:
parent
202e359e81
commit
d90e1cd504
5 changed files with 96 additions and 31 deletions
|
@ -106,6 +106,8 @@ object GameListener : Listener {
|
|||
if (tttPlayer.player.health - e.damage <= 0) {
|
||||
tttPlayer.onDeath(reason, null)
|
||||
event.damage = 0.0
|
||||
} else {
|
||||
event.damage = e.damage
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -138,7 +138,6 @@ object GameManager {
|
|||
|
||||
PlayerManager.tttPlayers.forEach {
|
||||
it.player.teleportToWorldSpawn()
|
||||
it.activateStamina()
|
||||
it.addDefaultClassItems()
|
||||
}
|
||||
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
package de.moritzruth.spigot_ttt.game.classes
|
||||
|
||||
import de.moritzruth.spigot_ttt.game.classes.impl.Gambler
|
||||
import de.moritzruth.spigot_ttt.game.classes.impl.Oracle
|
||||
import de.moritzruth.spigot_ttt.game.classes.impl.Stuntman
|
||||
import de.moritzruth.spigot_ttt.game.classes.impl.Warrior
|
||||
import de.moritzruth.spigot_ttt.game.classes.impl.*
|
||||
import java.util.*
|
||||
|
||||
object TTTClassManager {
|
||||
private val TTT_CLASSES = setOf(
|
||||
Warrior, Oracle, Gambler, Stuntman
|
||||
Warrior, Oracle, Gambler, Stuntman, Ninja
|
||||
)
|
||||
|
||||
val listeners = TTT_CLASSES.mapNotNull { it.listener }
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
package de.moritzruth.spigot_ttt.game.classes.impl
|
||||
|
||||
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 org.bukkit.ChatColor
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerToggleFlightEvent
|
||||
import org.bukkit.potion.PotionEffect
|
||||
import org.bukkit.potion.PotionEffectType
|
||||
import org.bukkit.scheduler.BukkitTask
|
||||
import org.bukkit.util.Vector
|
||||
|
||||
object Ninja: TTTClass(
|
||||
"Ninja",
|
||||
ChatColor.LIGHT_PURPLE
|
||||
) {
|
||||
private val isc = InversedStateContainer(State::class)
|
||||
|
||||
override fun onInit(tttPlayer: TTTPlayer) {
|
||||
tttPlayer.player.allowFlight = true
|
||||
tttPlayer.player.addPotionEffect(PotionEffect(
|
||||
PotionEffectType.JUMP,
|
||||
1000000,
|
||||
2,
|
||||
false,
|
||||
false
|
||||
))
|
||||
}
|
||||
|
||||
override val listener = object : Listener {
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun onPlayerToggleFlight(event: PlayerToggleFlightEvent) {
|
||||
val tttPlayer = TTTPlayer.of(event.player) ?: return
|
||||
|
||||
if (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
|
||||
|
||||
if (state.jumpsRemaining == 0) {
|
||||
tttPlayer.player.allowFlight = false
|
||||
|
||||
state.checkOnGroundTask = plugin.server.scheduler.runTaskTimer(plugin, fun() {
|
||||
if (tttPlayer.player.isOnGround) {
|
||||
state.jumpsRemaining = 2
|
||||
tttPlayer.player.allowFlight = true
|
||||
state.reset()
|
||||
}
|
||||
}, 1, 1)
|
||||
}
|
||||
|
||||
event.isCancelled = true
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun onTTTPlayerDamage(event: TTTPlayerDamageEvent) {
|
||||
if (event.tttPlayer.tttClass == Ninja) {
|
||||
if (event.deathReason == DeathReason.FALL) event.damage = 0.0
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun onTTTPlayerDeath(event: TTTPlayerDeathEvent) {
|
||||
isc.get(event.tttPlayer)?.reset()
|
||||
isc.remove(event.tttPlayer)
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onGameEnd(event: GameEndEvent) {
|
||||
isc.forEveryState { state, tttPlayer ->
|
||||
state.reset()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class State: IState {
|
||||
var jumpsRemaining = 2
|
||||
var checkOnGroundTask: BukkitTask? = null
|
||||
|
||||
fun reset() {
|
||||
checkOnGroundTask?.cancel()
|
||||
checkOnGroundTask = null
|
||||
}
|
||||
}
|
||||
}
|
|
@ -13,11 +13,9 @@ import de.moritzruth.spigot_ttt.game.items.Selectable
|
|||
import de.moritzruth.spigot_ttt.game.items.TTTItem
|
||||
import de.moritzruth.spigot_ttt.game.items.impl.CloakingDevice
|
||||
import de.moritzruth.spigot_ttt.game.items.shop.Shop
|
||||
import de.moritzruth.spigot_ttt.plugin
|
||||
import de.moritzruth.spigot_ttt.utils.*
|
||||
import org.bukkit.*
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.scheduler.BukkitTask
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
class TTTPlayer(player: Player, role: Role, val tttClass: TTTClass?) {
|
||||
|
@ -47,9 +45,6 @@ class TTTPlayer(player: Player, role: Role, val tttClass: TTTClass?) {
|
|||
var credits by Delegates.observable(Settings.initialCredits) { _, _, _ -> scoreboard.updateCredits() }
|
||||
val boughtItems = mutableListOf<TTTItem>()
|
||||
|
||||
private var staminaCooldown: Int = 0
|
||||
private var staminaTask: BukkitTask? = null
|
||||
|
||||
val scoreboard = TTTScoreboard(this)
|
||||
val stateContainer = StateContainer(this)
|
||||
|
||||
|
@ -159,23 +154,6 @@ class TTTPlayer(player: Player, role: Role, val tttClass: TTTClass?) {
|
|||
|
||||
private fun getOwningTTTItems() = player.inventory.hotbarContents.mapNotNull { it?.run { ItemManager.getItemByItemStack(this) } }
|
||||
|
||||
fun activateStamina() {
|
||||
if (staminaTask != null) return
|
||||
|
||||
staminaTask = plugin.server.scheduler.runTaskTimer(plugin, fun() {
|
||||
if (!alive) return
|
||||
|
||||
if (player.isSprinting) {
|
||||
player.foodLevel -= 2
|
||||
staminaCooldown = 4
|
||||
} else {
|
||||
if (staminaCooldown == 0) {
|
||||
if (player.foodLevel < 20) player.foodLevel += 2
|
||||
} else staminaCooldown -= 1
|
||||
}
|
||||
}, 0, secondsToTicks(0.5).toLong())
|
||||
}
|
||||
|
||||
fun changeRole(newRole: Role) {
|
||||
roleHistory.add(role)
|
||||
role = newRole
|
||||
|
@ -219,9 +197,7 @@ class TTTPlayer(player: Player, role: Role, val tttClass: TTTClass?) {
|
|||
player.walkSpeed = 0.2F // yes, this is the default value
|
||||
player.level = 0
|
||||
player.exp = 0F
|
||||
|
||||
staminaTask?.cancel()
|
||||
staminaTask = null
|
||||
player.allowFlight = player.gameMode == GameMode.CREATIVE
|
||||
player.foodLevel = 20
|
||||
|
||||
player.inventory.clear()
|
||||
|
|
Reference in a new issue