@@ -3,37 +3,61 @@ package dev.slne.surf.protect.paper.region
33import com.sk89q.worldedit.util.Location
44import dev.slne.surf.protect.paper.config
55import dev.slne.surf.protect.paper.math.Mth
6- import org.bukkit.util.Vector
7-
8- fun Location.getProtectionPricePerBlock (): PricePerBlockResult {
9- val spawns = listOf (
10- Vector (0 , 0 , 0 ),
11- Vector (0 , 0 , - 25000 ),
12- Vector (25000 , 0 , - 25000 ),
13- Vector (- 25000 , 0 , - 25000 ),
14- Vector (0 , 0 , 25000 ),
15- Vector (25000 , 0 , 25000 ),
16- Vector (- 25000 , 0 , 25000 ),
17- Vector (25000 , 0 , 0 ),
18- Vector (- 25000 , 0 , 0 )
6+ import dev.slne.surf.protect.paper.util.bukkitWorld
7+ import org.bukkit.World
8+ import org.spongepowered.math.vector.Vector2i
9+
10+ private val spawnPositionsByEnvironment = mapOf (
11+ World .Environment .NETHER to listOf (
12+ Vector2i (0 , 0 ),
13+ Vector2i (0 , - 3125 ),
14+ Vector2i (3125 , - 3125 ),
15+ Vector2i (- 3125 , - 3125 ),
16+ Vector2i (0 , 3125 ),
17+ Vector2i (3125 , 3125 ),
18+ Vector2i (- 3125 , 3125 ),
19+ Vector2i (3125 , 0 ),
20+ Vector2i (- 3125 , 0 )
21+ ),
22+ World .Environment .THE_END to listOf (Vector2i .ZERO ),
23+ World .Environment .NORMAL to listOf (
24+ Vector2i (0 , 0 ),
25+ Vector2i (0 , - 25000 ),
26+ Vector2i (25000 , - 25000 ),
27+ Vector2i (- 25000 , - 25000 ),
28+ Vector2i (0 , 25000 ),
29+ Vector2i (25000 , 25000 ),
30+ Vector2i (- 25000 , 25000 ),
31+ Vector2i (25000 , 0 ),
32+ Vector2i (- 25000 , 0 )
1933 )
34+ )
2035
21- val pos = Vector (blockX.toDouble(), 0.0 , blockZ.toDouble())
22-
23- val nearestSpawn = spawns.minBy {
24- pos.distance(it)
25- }
36+ fun Location.getProtectionPricePerBlock (): PricePerBlockResult {
37+ val environment = this .bukkitWorld.environment
38+ val spawns = spawnPositionsByEnvironment[environment] ? : return PricePerBlockResult .EMPTY
39+ val pos = Vector2i (blockX, blockZ)
2640
41+ val nearestSpawn = spawns.minBy { pos.distanceSquared(it) }
2742 val distance = pos.distance(nearestSpawn)
2843
2944 if (distance < config.pricing.spawnProtectionPerBlock) {
3045 return PricePerBlockResult (Double .MAX_VALUE , distance)
3146 }
3247
33- return PricePerBlockResult (Mth .calculatePricePerBlock(distance), distance)
48+ val multiplier = config.pricing.environmentMultiplier[environment] ? : 1.0
49+
50+ return PricePerBlockResult (
51+ Mth .calculatePricePerBlock(distance) * multiplier,
52+ distance
53+ )
3454}
3555
3656data class PricePerBlockResult (
3757 val pricePerBlock : Double ,
38- val spawnDistance : Double
39- )
58+ val spawnDistance : Float
59+ ) {
60+ companion object {
61+ val EMPTY = PricePerBlockResult (Double .MAX_VALUE , Float .MAX_VALUE )
62+ }
63+ }
0 commit comments