ZoneGuard.kt
Branches > main > 690b0fd > files / src / main / kotlin / net / bowmap / events / ZoneGuard.kt
package net.bowmap.events
import org.bukkit.event.Listener
import org.bukkit.event.block.BlockBreakEvent
import org.bukkit.event.EventHandler
import org.bukkit.block.Block
import org.bukkit.Location
import net.bowmap.world.world
data class Region(val from: Location, val to: Location) {
init {
require(from.world == to.world) {
"Regions can only exist in a single world"
}
}
}
val spawn = Region(Location(world, 5.0, world.minHeight.toDouble(), -5.0), Location(world, -5.0, world.maxHeight - 1.0, 5.0))
fun isInsideRegion(region: Region, location: Location): Boolean {
if (location.world != region.from.world) return false
val minX = minOf(region.from.blockX, region.to.blockX)
val maxX = maxOf(region.from.blockX, region.to.blockX)
val minY = minOf(region.from.blockY, region.to.blockY)
val maxY = maxOf(region.from.blockY, region.to.blockY)
val minZ = minOf(region.from.blockZ, region.to.blockZ)
val maxZ = maxOf(region.from.blockZ, region.to.blockZ)
return location.blockX in minX..maxX &&
location.blockY in minY..maxY &&
location.blockZ in minZ..maxZ
}
fun isBlockInSpawn(b: Block): Boolean {
return isInsideRegion(spawn, b.location)
}
class ZoneGuard : Listener {
@EventHandler
fun onBlockBreak(e: BlockBreakEvent) {
if (isBlockInSpawn(e.block)) {
e.setCancelled(true)
}
}
}