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) {
|
if (tttPlayer.player.health - e.damage <= 0) {
|
||||||
tttPlayer.onDeath(reason, null)
|
tttPlayer.onDeath(reason, null)
|
||||||
event.damage = 0.0
|
event.damage = 0.0
|
||||||
|
} else {
|
||||||
|
event.damage = e.damage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -138,7 +138,6 @@ object GameManager {
|
||||||
|
|
||||||
PlayerManager.tttPlayers.forEach {
|
PlayerManager.tttPlayers.forEach {
|
||||||
it.player.teleportToWorldSpawn()
|
it.player.teleportToWorldSpawn()
|
||||||
it.activateStamina()
|
|
||||||
it.addDefaultClassItems()
|
it.addDefaultClassItems()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,11 @@
|
||||||
package de.moritzruth.spigot_ttt.game.classes
|
package de.moritzruth.spigot_ttt.game.classes
|
||||||
|
|
||||||
import de.moritzruth.spigot_ttt.game.classes.impl.Gambler
|
import de.moritzruth.spigot_ttt.game.classes.impl.*
|
||||||
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 java.util.*
|
import java.util.*
|
||||||
|
|
||||||
object TTTClassManager {
|
object TTTClassManager {
|
||||||
private val TTT_CLASSES = setOf(
|
private val TTT_CLASSES = setOf(
|
||||||
Warrior, Oracle, Gambler, Stuntman
|
Warrior, Oracle, Gambler, Stuntman, Ninja
|
||||||
)
|
)
|
||||||
|
|
||||||
val listeners = TTT_CLASSES.mapNotNull { it.listener }
|
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.TTTItem
|
||||||
import de.moritzruth.spigot_ttt.game.items.impl.CloakingDevice
|
import de.moritzruth.spigot_ttt.game.items.impl.CloakingDevice
|
||||||
import de.moritzruth.spigot_ttt.game.items.shop.Shop
|
import de.moritzruth.spigot_ttt.game.items.shop.Shop
|
||||||
import de.moritzruth.spigot_ttt.plugin
|
|
||||||
import de.moritzruth.spigot_ttt.utils.*
|
import de.moritzruth.spigot_ttt.utils.*
|
||||||
import org.bukkit.*
|
import org.bukkit.*
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
import org.bukkit.scheduler.BukkitTask
|
|
||||||
import kotlin.properties.Delegates
|
import kotlin.properties.Delegates
|
||||||
|
|
||||||
class TTTPlayer(player: Player, role: Role, val tttClass: TTTClass?) {
|
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() }
|
var credits by Delegates.observable(Settings.initialCredits) { _, _, _ -> scoreboard.updateCredits() }
|
||||||
val boughtItems = mutableListOf<TTTItem>()
|
val boughtItems = mutableListOf<TTTItem>()
|
||||||
|
|
||||||
private var staminaCooldown: Int = 0
|
|
||||||
private var staminaTask: BukkitTask? = null
|
|
||||||
|
|
||||||
val scoreboard = TTTScoreboard(this)
|
val scoreboard = TTTScoreboard(this)
|
||||||
val stateContainer = StateContainer(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) } }
|
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) {
|
fun changeRole(newRole: Role) {
|
||||||
roleHistory.add(role)
|
roleHistory.add(role)
|
||||||
role = newRole
|
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.walkSpeed = 0.2F // yes, this is the default value
|
||||||
player.level = 0
|
player.level = 0
|
||||||
player.exp = 0F
|
player.exp = 0F
|
||||||
|
player.allowFlight = player.gameMode == GameMode.CREATIVE
|
||||||
staminaTask?.cancel()
|
|
||||||
staminaTask = null
|
|
||||||
player.foodLevel = 20
|
player.foodLevel = 20
|
||||||
|
|
||||||
player.inventory.clear()
|
player.inventory.clear()
|
||||||
|
|
Reference in a new issue