Skip to content

Commit ff98fda

Browse files
authored
Merge pull request #162 from ToberoCat/claim-particle-module
Added more configurability to the claim particle modules
2 parents 78ed86b + a188954 commit ff98fda

15 files changed

Lines changed: 252 additions & 28 deletions

File tree

improved-factions-base/src/main/kotlin/io/github/toberocat/improvedfactions/claims/clustering/ChunkPosition.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.github.toberocat.improvedfactions.claims.clustering
22

33
import org.bukkit.Bukkit
4-
import kotlin.math.sqrt
54

65
data class ChunkPosition(val x: Int, val y: Int, val world: String) {
76

@@ -39,7 +38,18 @@ data class ChunkPosition(val x: Int, val y: Int, val world: String) {
3938
)
4039

4140
fun uniquId() = "$x-$y-$world"
42-
operator fun minus(cellFrom: ChunkPosition) = ChunkPosition(x - cellFrom.x, y - cellFrom.y, world)
41+
4342
fun toWorldPosition(): WorldPosition = WorldPosition(world, x * 16, y * 16)
43+
4444
fun getChunk() = Bukkit.getWorld(world)?.getChunkAt(x, y)
45+
46+
fun getNeighbours(radius: Int): MutableList<ChunkPosition> {
47+
val neightbours = mutableListOf<ChunkPosition>()
48+
for (i in -radius..radius)
49+
for (j in -radius..radius)
50+
neightbours.add(ChunkPosition(x + i, y + j, world))
51+
return neightbours
52+
}
53+
54+
operator fun minus(cellFrom: ChunkPosition) = ChunkPosition(x - cellFrom.x, y - cellFrom.y, world)
4555
}

improved-factions-base/src/main/kotlin/io/github/toberocat/improvedfactions/claims/clustering/Cluster.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ abstract class Cluster(val id: UUID, private val positions: MutableSet<ChunkPosi
1818
}
1919

2020
abstract fun scheduleUpdate()
21+
abstract fun getColor(): Int
2122

2223
fun getOuterNodes() = outerNodes.get()
2324

@@ -80,6 +81,7 @@ abstract class Cluster(val id: UUID, private val positions: MutableSet<ChunkPosi
8081
val allowedAxis = next.allowedAxis()
8182
next = openSupportingPoints.filter { it.isSameAxis(next!!, allowedAxis) }.minByOrNull { it.distanceTo(next!!) }
8283
}
84+
loop.add(loop.first()) // Close the polygon
8385
outerNodes.add(loop)
8486
}
8587
return outerNodes
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.github.toberocat.improvedfactions.claims.clustering
2+
3+
import io.github.toberocat.improvedfactions.ImprovedFactionsPlugin
4+
import org.bukkit.entity.Player
5+
6+
object ClusterExtension {
7+
fun Player.getCurrentClusters(chunkRenderDistance: Int) = location.world?.name?.let { world ->
8+
ChunkPosition(location.chunk.x, location.chunk.z, world)
9+
.getNeighbours(chunkRenderDistance)
10+
.mapNotNull { ImprovedFactionsPlugin.instance.claimChunkClusters.getCluster(it) }
11+
} ?: emptyList()
12+
}
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.toberocat.improvedfactions.claims.clustering
22

3+
import io.github.toberocat.improvedfactions.factions.FactionHandler
34
import io.github.toberocat.improvedfactions.modules.power.PowerRaidsModule.Companion.powerRaidModule
45
import io.github.toberocat.improvedfactions.modules.power.handles.FactionPowerRaidModuleHandle
56
import io.github.toberocat.improvedfactions.utils.LazyUpdate
@@ -13,11 +14,10 @@ class FactionCluster(val factionId: Int, id: UUID, positions: MutableSet<ChunkPo
1314
}
1415
}
1516

16-
override fun scheduleUpdate() {
17-
unprotectedPositions.scheduleUpdate()
18-
}
17+
override fun scheduleUpdate() = unprotectedPositions.scheduleUpdate()
18+
19+
fun isUnprotected(x: Int, y: Int, world: String) = ChunkPosition(x, y, world) in unprotectedPositions.get()
20+
21+
override fun getColor() = FactionHandler.generateColor(factionId)
1922

20-
fun isUnprotected(x: Int, y: Int, world: String): Boolean {
21-
return ChunkPosition(x, y, world) in unprotectedPositions.get()
22-
}
2323
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package io.github.toberocat.improvedfactions.claims.clustering
22

3+
import io.github.toberocat.improvedfactions.zone.ZoneHandler
34
import java.util.*
45

56
class ZoneCluster(val zoneType: String, id: UUID, positions: MutableSet<ChunkPosition>) : Cluster(id, positions) {
67
override fun scheduleUpdate() = Unit
8+
override fun getColor(): Int = ZoneHandler.getZone(zoneType)?.mapColor ?: 0xffffff
79
}

improved-factions-base/src/main/kotlin/io/github/toberocat/improvedfactions/factions/Faction.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,8 @@ class Faction(id: EntityID<Int>) : IntEntity(id) {
9797
super.delete()
9898
}
9999

100-
fun generateColor() = Integer.parseInt(
101-
Integer.toHexString("${id.value}-${Bukkit.getServer().name}".hashCode())
102-
.padStart(6, '0')
103-
.substring(0, 6), 16
104-
)
100+
fun generateColor() = FactionHandler.generateColor(id.value)
101+
105102

106103
fun setMaxPower(newMaxPower: Int) {
107104
val actualNewMaxPower = max(newMaxPower, 0)
@@ -185,7 +182,9 @@ class Faction(id: EntityID<Int>) : IntEntity(id) {
185182
invitedId = invitedUserId
186183
factionId = factId
187184
this.rankId = rankId
188-
expirationDate = Clock.System.now().plus(5, DateTimeUnit.MINUTE).toLocalDateTime(TimeZone.UTC)
185+
expirationDate = Clock.System.now()
186+
.plus(5, DateTimeUnit.MINUTE)
187+
.toLocalDateTime(TimeZone.UTC)
189188
}
190189
Bukkit.getScheduler().runTaskLater(
191190
ImprovedFactionsPlugin.instance,

improved-factions-base/src/main/kotlin/io/github/toberocat/improvedfactions/factions/FactionHandler.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ object FactionHandler {
3838
}
3939
}
4040

41+
fun generateColor(id: Int) = Integer.parseInt(
42+
Integer.toHexString("${id}-${Bukkit.getServer().name}".hashCode())
43+
.padStart(6, '0')
44+
.substring(0, 6), 16
45+
)
46+
4147
fun getFactions(): SizedIterable<Faction> {
4248
return loggedTransaction { return@loggedTransaction Faction.all() }
4349
}

improved-factions-base/src/main/kotlin/io/github/toberocat/improvedfactions/modules/ModuleManager.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import io.github.toberocat.improvedfactions.ImprovedFactionsPlugin
44
import io.github.toberocat.improvedfactions.ImprovedFactionsPlugin.Companion.instance
55
import io.github.toberocat.improvedfactions.modules.base.BaseModule
66
import io.github.toberocat.improvedfactions.modules.chat.ChatModule
7+
import io.github.toberocat.improvedfactions.modules.claimparticle.ClaimParticleModule
78
import io.github.toberocat.improvedfactions.modules.dynmap.DynmapModule
89
import io.github.toberocat.improvedfactions.modules.gui.GuiModule
910
import io.github.toberocat.improvedfactions.modules.home.HomeModule
@@ -20,7 +21,8 @@ class ModuleManager(private val plugin: ImprovedFactionsPlugin) {
2021
WildernessModule.wildernessPair(),
2122
HomeModule.homePair(),
2223
ChatModule.chatPair(),
23-
GuiModule.guiPair()
24+
GuiModule.guiPair(),
25+
ClaimParticleModule.claimParticlesPair()
2426
)
2527

2628
init {
Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,29 @@
11
package io.github.toberocat.improvedfactions.modules.claimparticle
22

3-
class ClaimParticleModule
3+
import io.github.toberocat.improvedfactions.ImprovedFactionsPlugin
4+
import io.github.toberocat.improvedfactions.modules.base.BaseModule
5+
import io.github.toberocat.improvedfactions.modules.claimparticle.config.ClaimParticleModuleConfig
6+
import io.github.toberocat.improvedfactions.modules.claimparticle.handles.RenderParticlesTask
7+
8+
class ClaimParticleModule : BaseModule {
9+
override val moduleName: String
10+
get() = MODULE_NAME
11+
12+
val config = ClaimParticleModuleConfig()
13+
14+
override fun onEnable(plugin: ImprovedFactionsPlugin) {
15+
RenderParticlesTask(config).runTaskTimer(plugin, config.particleSpawnInterval, config.particleSpawnInterval)
16+
}
17+
18+
override fun reloadConfig(plugin: ImprovedFactionsPlugin) {
19+
config.reload(plugin.config)
20+
}
21+
22+
companion object {
23+
const val MODULE_NAME = "claim-particles"
24+
fun claimParticlesModule() =
25+
ImprovedFactionsPlugin.instance.moduleManager.getModule<ClaimParticleModule>(MODULE_NAME)
26+
27+
fun claimParticlesPair() = MODULE_NAME to ClaimParticleModule()
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package io.github.toberocat.improvedfactions.modules.claimparticle.config
2+
3+
import org.bukkit.configuration.file.FileConfiguration
4+
5+
data class ClaimParticleModuleConfig(
6+
var particleCount: Int = 2,
7+
var particleSpeed: Double = 0.0,
8+
var particleSpread: Double = 0.1,
9+
var blockRenderDistance: Int = 30 * 30,
10+
var chunkRenderDistance: Int = 1,
11+
var minParticleSize: Float = 0.0f,
12+
var maxParticleSize: Float = 2.0f,
13+
var particleSizeBias: Float = 0.5f,
14+
var particleSpawnInterval: Long = 15
15+
) {
16+
private val configPath = "factions.claim-particles"
17+
18+
fun reload(config: FileConfiguration) {
19+
particleCount = config.getInt("$configPath.particle-count", particleCount)
20+
particleSpeed = config.getDouble("$configPath.particle-speed", particleSpeed)
21+
particleSpread = config.getDouble("$configPath.particle-spread", particleSpread)
22+
chunkRenderDistance = config.getInt("$configPath.chunk-render-distance", chunkRenderDistance)
23+
minParticleSize = config.getDouble("$configPath.min-particle-size", minParticleSize.toDouble()).toFloat()
24+
maxParticleSize = config.getDouble("$configPath.max-particle-size", maxParticleSize.toDouble()).toFloat()
25+
particleSizeBias = config.getDouble("$configPath.particle-size-bias", particleSizeBias.toDouble()).toFloat()
26+
particleSpawnInterval = config.getLong("$configPath.particle-spawn-interval", particleSpawnInterval)
27+
28+
config.getInt("$configPath.block-render-distance", blockRenderDistance).also { blockRenderDistance = it * it }
29+
}
30+
}

0 commit comments

Comments
 (0)