Tutorial.kt

Branches > main > d7463bf > files / src / main / kotlin / net / bowmap / events / Tutorial.kt

package net.bowmap.events

import net.bowmap.mc.items.TUTORIAL_BOW

import net.bowmap.Main
import net.kyori.adventure.text.Component
import org.bukkit.Location
import org.bukkit.entity.Villager
import org.bukkit.entity.EntityType
import org.bukkit.entity.Entity
import org.bukkit.entity.Player
import org.bukkit.entity.Damageable
import org.bukkit.entity.Zombie
import org.bukkit.event.Listener
import org.bukkit.event.EventHandler
import org.bukkit.event.entity.EntityDamageByEntityEvent
import org.bukkit.event.entity.EntityDeathEvent
import org.bukkit.Bukkit
import org.bukkit.Material
import org.bukkit.inventory.ItemStack

// Give ID and kill :p
// TODO needs to be per-player
fun spawnTutorialNPC() {
  val server = Bukkit.getServer()
  val loc = Location(server.getWorld("world"), -1.5, 56.0, 3.5);
  val tutorial = loc.getWorld().spawn(loc, Zombie::class.java);
  tutorial.setAI(false)
  tutorial.setShouldBurnInDay(false)
  tutorial.setFireTicks(0)
  tutorial.setInvulnerable(true)
  tutorial.setSilent(true)
  tutorial.customName(Component.text("Tutorial"));
  tutorial.setCustomNameVisible(true)
  // Below name says "PUNCH TO INTERACT"
  // Set look at player
}

fun tutorial(e: Entity): Zombie? {
  // Find a better way!
  return if (e.customName() == Component.text("Tutorial")) e as? Zombie else null
}

class Tutorial : Listener {
  init {
    spawnTutorialNPC()
  }

  @EventHandler
  fun onTutorialDeath(event: EntityDeathEvent) {
    if(tutorial(event.entity) != null) {
      // TODO these items also need to only be pickup-able by the player?
      // If they ignore the bow and don't pick it up, it shouldn't despawn...
      event.drops.clear()
      event.drops.add(TUTORIAL_BOW) // Tutorial Bow!
      event.drops.add(ItemStack(Material.ARROW))
    }
  }

  // TODO can't seem to punch in survival?
  @EventHandler
  fun onPunchTutorial(event: EntityDamageByEntityEvent) {
    tutorial(event.entity)?.let { zombie ->
      // TODO remove the unsafe cast
      zombie.health = 0.0;
      // Give player bow!
      // Drop bow
      Bukkit.broadcast(Component.text("Tutorial NPC killed"))
    }
  }
}