Fishing.kt
Branches > main > bedd093 > files / src / main / kotlin / net / bowmap / handlers / Fishing.kt
package net.bowmap.handlers
import net.bowmap.stormbow.handler
import net.bowmap.stormbow.fact.*
import net.bowmap.stormbow.effect.*
import net.bowmap.server.loot.*
import org.bukkit.Material.*
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerFishEvent
import org.bukkit.event.player.PlayerFishEvent.State
import org.bukkit.util.Vector
import net.bowmap.server.loot.tables.fishingLootTable
import net.bowmap.server.item.toItemStacks
private fun calculateFishVelocity(e: PlayerCaughtFish): Vector {
val eye = e.player.eyeLocation
val distance = eye.distance(e.hook.location)
return eye.subtract(e.hook.location)
.toVector()
.normalize()
.multiply(0.2 + distance * 0.1)
}
object Fishing {
fun register() {
handler<PlayerStartedFishing> {
effects(SetFishTime(ticks = 20))
}
handler<PlayerCaughtFish> {
val loot = fishingLootTable.getLoot()
for (stack in toItemStacks(loot)) {
val item = hook.world.dropItem(hook.location, stack)
item.setVelocity(calculateFishVelocity(this))
}
effects()
}
}
}