Death.kt

Branches > main > 039d1df > files / src / main / kotlin / net / bowmap / handlers / Death.kt

package net.bowmap.handlers

import net.bowmap.stormbow.*

import net.bowmap.server.adventure.headComponent
import net.bowmap.server.item.*
import net.bowmap.server.loot.tables.mobLootTable
import net.bowmap.server.loot.Loot
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.format.NamedTextColor.*
import org.bukkit.Material
import org.bukkit.entity.Entity
import org.bukkit.entity.Player
import org.bukkit.entity.Zombie
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.entity.EntityDeathEvent
import org.bukkit.inventory.ItemStack
import org.bukkit.damage.DamageSource
import org.bukkit.Location

// Doesn't use attacker but how the player died does contribute to the death event
// This should probably be the damage source?
private fun deathMessage(player: Player, attacker: DamageSource): Component {
  return headComponent(player)
         .append(Component.text(" "))
         .append(player.displayName())
         .append(Component.text(" Died.", RED))
}

fun handlePlayerDeath(f: PlayerDied): Effects =
  Effects(
    Cancel(),
    Broadcast(message = deathMessage(f.player, f.cause)),
    Teleport(entity = f.player, location = Location(f.player.world, 0.5, 57.0, 0.5))
  )

fun handlePlayerKill(f: PlayerKilledEntity): Effects {
  val lootTable = mobLootTable(f.entity)
  if (lootTable is Loot) {
    return Effects(Give(f.player, lootTable.getLoot()))
  } else {
    return Effects(Give(f.player, Item(CustomItemType.BUG)), Debug("lootTable", lootTable), Debug("class", f.entity::class))
  }
}