aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-11-30 12:50:31 +0100
committerhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-11-30 12:50:31 +0100
commitb49c4b47c2910ab6ae75b62acf9fcc455d1da501 (patch)
tree4d0289149e02bf43a1d6704d21b8283c9c74820f /src/main/java
parent9e418deb7cb94b048d7bd6d41e85c3d439108698 (diff)
downloadskyhanni-b49c4b47c2910ab6ae75b62acf9fcc455d1da501.tar.gz
skyhanni-b49c4b47c2910ab6ae75b62acf9fcc455d1da501.tar.bz2
skyhanni-b49c4b47c2910ab6ae75b62acf9fcc455d1da501.zip
fixed ConcurrentModificationException in DelayedRun
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/data/MinecraftData.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/DelayedRun.kt25
2 files changed, 18 insertions, 9 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/data/MinecraftData.kt b/src/main/java/at/hannibal2/skyhanni/data/MinecraftData.kt
index 56d565299..2ec0ea667 100644
--- a/src/main/java/at/hannibal2/skyhanni/data/MinecraftData.kt
+++ b/src/main/java/at/hannibal2/skyhanni/data/MinecraftData.kt
@@ -72,11 +72,11 @@ object MinecraftData {
Minecraft.getMinecraft().thePlayer ?: return
totalTicks++
LorenzTickEvent(totalTicks).postAndCatch()
- DelayedRun.checkRuns()
}
@SubscribeEvent
fun onTick(event: LorenzTickEvent) {
+ DelayedRun.checkRuns()
if (!LorenzUtils.inSkyBlock) return
val hand = InventoryUtils.getItemInHand()
val newItem = hand?.getInternalName() ?: NEUInternalName.NONE
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/DelayedRun.kt b/src/main/java/at/hannibal2/skyhanni/utils/DelayedRun.kt
index 2af59435d..f90237588 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/DelayedRun.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/DelayedRun.kt
@@ -1,25 +1,34 @@
package at.hannibal2.skyhanni.utils
+import at.hannibal2.skyhanni.utils.LorenzUtils.editCopy
import kotlin.time.Duration
+// TODO find better sync bug fix than creating a new map for each use
object DelayedRun {
- val map = mutableMapOf<() -> Any, SimpleTimeMark>()
+ var map = mapOf<() -> Any, SimpleTimeMark>()
fun runDelayed(duration: Duration, run: () -> Unit) {
- map[run] = SimpleTimeMark.now() + duration
+ map = map.editCopy {
+ this[run] = SimpleTimeMark.now() + duration
+ }
}
fun runNextTick(run: () -> Unit) {
- map[run] = SimpleTimeMark.now()
+ map = map.editCopy {
+ this[run] = SimpleTimeMark.now()
+ }
}
fun checkRuns() {
- map.entries.removeIf { (runnable, time) ->
- val inPast = time.isInPast()
- if (inPast) {
- runnable()
+ if (map.isEmpty()) return
+ map = map.editCopy {
+ entries.removeIf { (runnable, time) ->
+ val inPast = time.isInPast()
+ if (inPast) {
+ runnable()
+ }
+ inPast
}
- inPast
}
}
}