1
0
Fork 0

Add Ninja class and remove stamina (it's annoying)

This commit is contained in:
Moritz Ruth 2020-06-14 14:53:03 +02:00
parent 202e359e81
commit d90e1cd504
No known key found for this signature in database
GPG key ID: AFD57E23E753841B
5 changed files with 96 additions and 31 deletions

View file

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

View file

@ -138,7 +138,6 @@ object GameManager {
PlayerManager.tttPlayers.forEach { PlayerManager.tttPlayers.forEach {
it.player.teleportToWorldSpawn() it.player.teleportToWorldSpawn()
it.activateStamina()
it.addDefaultClassItems() it.addDefaultClassItems()
} }

View file

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

View file

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

View file

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