Fix damage reduction for Warrior
This commit is contained in:
parent
e6f1eec9e3
commit
202e359e81
5 changed files with 51 additions and 39 deletions
|
@ -9,6 +9,7 @@ import com.comphenix.protocol.wrappers.PlayerInfoData
|
||||||
import de.moritzruth.spigot_ttt.TTTPlugin
|
import de.moritzruth.spigot_ttt.TTTPlugin
|
||||||
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.call
|
||||||
import de.moritzruth.spigot_ttt.utils.nextTick
|
import de.moritzruth.spigot_ttt.utils.nextTick
|
||||||
import org.bukkit.ChatColor
|
import org.bukkit.ChatColor
|
||||||
import org.bukkit.Material
|
import org.bukkit.Material
|
||||||
|
@ -86,22 +87,24 @@ object GameListener : Listener {
|
||||||
val tttPlayer = TTTPlayer.of(event.entity as Player) ?: return
|
val tttPlayer = TTTPlayer.of(event.entity as Player) ?: return
|
||||||
if (event.cause == EntityDamageEvent.DamageCause.CUSTOM) return
|
if (event.cause == EntityDamageEvent.DamageCause.CUSTOM) return
|
||||||
|
|
||||||
if (tttPlayer.player.health - event.finalDamage <= 0) {
|
val reason = when (event.cause) {
|
||||||
val reason = when (event.cause) {
|
EntityDamageEvent.DamageCause.FALL -> DeathReason.FALL
|
||||||
EntityDamageEvent.DamageCause.FALL -> DeathReason.FALL
|
EntityDamageEvent.DamageCause.BLOCK_EXPLOSION,
|
||||||
EntityDamageEvent.DamageCause.BLOCK_EXPLOSION,
|
EntityDamageEvent.DamageCause.ENTITY_EXPLOSION -> DeathReason.EXPLOSION
|
||||||
EntityDamageEvent.DamageCause.ENTITY_EXPLOSION -> DeathReason.EXPLOSION
|
EntityDamageEvent.DamageCause.DROWNING -> DeathReason.DROWNED
|
||||||
EntityDamageEvent.DamageCause.DROWNING -> DeathReason.DROWNED
|
EntityDamageEvent.DamageCause.FIRE,
|
||||||
EntityDamageEvent.DamageCause.FIRE,
|
EntityDamageEvent.DamageCause.FIRE_TICK,
|
||||||
EntityDamageEvent.DamageCause.FIRE_TICK,
|
EntityDamageEvent.DamageCause.LAVA,
|
||||||
EntityDamageEvent.DamageCause.LAVA,
|
EntityDamageEvent.DamageCause.HOT_FLOOR -> DeathReason.FIRE
|
||||||
EntityDamageEvent.DamageCause.HOT_FLOOR -> DeathReason.FIRE
|
EntityDamageEvent.DamageCause.POISON,
|
||||||
EntityDamageEvent.DamageCause.POISON, EntityDamageEvent.DamageCause.WITHER -> DeathReason.POISON
|
EntityDamageEvent.DamageCause.WITHER -> DeathReason.POISON
|
||||||
else -> DeathReason.SUICIDE
|
else -> DeathReason.SUICIDE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val e = TTTPlayerDamageEvent(tttPlayer, event.finalDamage, reason).call()
|
||||||
|
|
||||||
|
if (tttPlayer.player.health - e.damage <= 0) {
|
||||||
tttPlayer.onDeath(reason, null)
|
tttPlayer.onDeath(reason, null)
|
||||||
|
|
||||||
event.damage = 0.0
|
event.damage = 0.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,33 +1,23 @@
|
||||||
package de.moritzruth.spigot_ttt.game.classes.impl
|
package de.moritzruth.spigot_ttt.game.classes.impl
|
||||||
|
|
||||||
import de.moritzruth.spigot_ttt.game.classes.TTTClass
|
import de.moritzruth.spigot_ttt.game.classes.TTTClass
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
import de.moritzruth.spigot_ttt.game.players.DeathReason
|
||||||
|
import de.moritzruth.spigot_ttt.game.players.TTTPlayerDamageEvent
|
||||||
import org.bukkit.ChatColor
|
import org.bukkit.ChatColor
|
||||||
import org.bukkit.entity.Player
|
|
||||||
import org.bukkit.event.EventHandler
|
import org.bukkit.event.EventHandler
|
||||||
import org.bukkit.event.Listener
|
import org.bukkit.event.Listener
|
||||||
import org.bukkit.event.entity.EntityDamageEvent
|
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
object Stuntman: TTTClass(
|
object Stuntman: TTTClass(
|
||||||
"Stuntman",
|
"Stuntman",
|
||||||
ChatColor.DARK_RED
|
ChatColor.DARK_RED
|
||||||
) {
|
) {
|
||||||
val IMMUNE_DAMAGE_CAUSES = EnumSet.of(
|
val IMMUNE_DEATH_REASONS = setOf(DeathReason.FALL, DeathReason.EXPLOSION)
|
||||||
EntityDamageEvent.DamageCause.FALL,
|
|
||||||
EntityDamageEvent.DamageCause.BLOCK_EXPLOSION,
|
|
||||||
EntityDamageEvent.DamageCause.ENTITY_EXPLOSION
|
|
||||||
)!!
|
|
||||||
|
|
||||||
override val listener = object : Listener {
|
override val listener = object : Listener {
|
||||||
@EventHandler(ignoreCancelled = true)
|
@EventHandler(ignoreCancelled = true)
|
||||||
fun onEntityDamage(event: EntityDamageEvent) {
|
fun onEntityDamage(event: TTTPlayerDamageEvent) {
|
||||||
val entity = event.entity
|
if (event.tttPlayer.tttClass == Stuntman) {
|
||||||
if (entity !is Player) return
|
if (IMMUNE_DEATH_REASONS.contains(event.deathReason)) event.damage = 0.0
|
||||||
|
|
||||||
val tttPlayer = TTTPlayer.of(entity) ?: return
|
|
||||||
if (tttPlayer.tttClass == Stuntman) {
|
|
||||||
if (IMMUNE_DAMAGE_CAUSES.contains(event.cause)) event.damage = 0.0
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,11 +2,10 @@ package de.moritzruth.spigot_ttt.game.classes.impl
|
||||||
|
|
||||||
import de.moritzruth.spigot_ttt.game.classes.TTTClass
|
import de.moritzruth.spigot_ttt.game.classes.TTTClass
|
||||||
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
|
||||||
|
import de.moritzruth.spigot_ttt.game.players.TTTPlayerDamageEvent
|
||||||
import org.bukkit.ChatColor
|
import org.bukkit.ChatColor
|
||||||
import org.bukkit.entity.Player
|
|
||||||
import org.bukkit.event.EventHandler
|
import org.bukkit.event.EventHandler
|
||||||
import org.bukkit.event.Listener
|
import org.bukkit.event.Listener
|
||||||
import org.bukkit.event.entity.EntityDamageEvent
|
|
||||||
|
|
||||||
object Warrior: TTTClass(
|
object Warrior: TTTClass(
|
||||||
"Warrior",
|
"Warrior",
|
||||||
|
@ -18,12 +17,8 @@ object Warrior: TTTClass(
|
||||||
|
|
||||||
override val listener = object : Listener {
|
override val listener = object : Listener {
|
||||||
@EventHandler(ignoreCancelled = true)
|
@EventHandler(ignoreCancelled = true)
|
||||||
fun onEntityDamage(event: EntityDamageEvent) {
|
fun onEntityDamage(event: TTTPlayerDamageEvent) {
|
||||||
val entity = event.entity
|
if (event.tttPlayer.tttClass == Warrior) {
|
||||||
if (entity !is Player) return
|
|
||||||
|
|
||||||
val tttPlayer = TTTPlayer.of(entity) ?: return
|
|
||||||
if (tttPlayer.tttClass == Warrior) {
|
|
||||||
event.damage *= 0.9
|
event.damage *= 0.9
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,9 @@ class TTTPlayer(player: Player, role: Role, val tttClass: TTTClass?) {
|
||||||
|
|
||||||
fun damage(damage: Double, reason: DeathReason, damager: TTTPlayer, scream: Boolean = true) {
|
fun damage(damage: Double, reason: DeathReason, damager: TTTPlayer, scream: Boolean = true) {
|
||||||
if (!alive) return
|
if (!alive) return
|
||||||
val finalHealth = player.health - damage
|
|
||||||
|
val event = TTTPlayerDamageEvent(this, damage, reason).call()
|
||||||
|
val finalHealth = player.health - event.damage
|
||||||
|
|
||||||
if (finalHealth <= 0.0) onDeath(reason, damager, scream)
|
if (finalHealth <= 0.0) onDeath(reason, damager, scream)
|
||||||
else player.damage(damage)
|
else player.damage(damage)
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package de.moritzruth.spigot_ttt.game.players
|
||||||
|
|
||||||
|
import org.bukkit.event.Event
|
||||||
|
import org.bukkit.event.HandlerList
|
||||||
|
|
||||||
|
class TTTPlayerDamageEvent(
|
||||||
|
val tttPlayer: TTTPlayer,
|
||||||
|
var damage: Double,
|
||||||
|
val deathReason: DeathReason
|
||||||
|
): Event() {
|
||||||
|
override fun getHandlers(): HandlerList {
|
||||||
|
@Suppress("RedundantCompanionReference") // false positive
|
||||||
|
return Companion.handlers
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val handlers = HandlerList()
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun getHandlerList() = handlers
|
||||||
|
}
|
||||||
|
}
|
Reference in a new issue