1
0
Fork 0

Fix damage reduction for Warrior

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

View file

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

View file

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

View file

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

View file

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

View file

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