Skip to content

Commit 7bc7e77

Browse files
committed
Use priority queue to make clean-up faster
1 parent 7dcf689 commit 7bc7e77

1 file changed

Lines changed: 13 additions & 2 deletions

File tree

common/src/main/kotlin/accieo/cobbleworkers/utilities/CobbleworkersNavigationUtils.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import net.minecraft.entity.player.PlayerEntity
1313
import net.minecraft.util.math.BlockPos
1414
import net.minecraft.util.math.Box
1515
import net.minecraft.world.World
16+
import java.util.PriorityQueue
1617
import java.util.UUID
1718

1819
/**
@@ -26,6 +27,8 @@ object CobbleworkersNavigationUtils {
2627
private val pokemonToPlayerTarget = mutableMapOf<UUID, UUID>()
2728
private val targetedPlayers = mutableMapOf<UUID, Claim>()
2829
private val recentlyExpiredTargets = mutableMapOf<BlockPos, ExpiredTarget>()
30+
private val expiredQueue = PriorityQueue<ExpiredTarget>(compareBy { it.expiryTick })
31+
private var lastCleanUpTick = 0L
2932
private const val CLAIM_TIMEOUT_TICKS = 140L
3033
private const val EXPIRED_TARGET_TIMEOUT_TICKS = 300L
3134

@@ -99,7 +102,9 @@ object CobbleworkersNavigationUtils {
99102
val releasedTarget = pokemonToTarget.remove(pokemonId)
100103
if (releasedTarget != null) {
101104
targetedBlocks.remove(releasedTarget)
102-
recentlyExpiredTargets[releasedTarget] = ExpiredTarget(releasedTarget, world.time)
105+
val expired = ExpiredTarget(releasedTarget, world.time)
106+
recentlyExpiredTargets[releasedTarget] = expired
107+
expiredQueue.add(expired)
103108
}
104109
}
105110

@@ -150,6 +155,10 @@ object CobbleworkersNavigationUtils {
150155
*/
151156
private fun releaseExpiredClaims(world: World) {
152157
val now = world.time
158+
159+
if (now - lastCleanUpTick < 20) return
160+
lastCleanUpTick = now
161+
153162
val expiredPokemon = mutableListOf<UUID>()
154163

155164
// Check block claims
@@ -167,7 +176,9 @@ object CobbleworkersNavigationUtils {
167176
releasePlayerTarget(it)
168177
}
169178

170-
recentlyExpiredTargets.entries.removeIf { now - it.value.expiryTick > EXPIRED_TARGET_TIMEOUT_TICKS }
179+
while (expiredQueue.isNotEmpty() && now - expiredQueue.peek().expiryTick > EXPIRED_TARGET_TIMEOUT_TICKS) {
180+
recentlyExpiredTargets.remove(expiredQueue.poll().pos)
181+
}
171182
}
172183

173184
/**

0 commit comments

Comments
 (0)