From dd3809c495c170d6fa007985803647676c2a6749 Mon Sep 17 00:00:00 2001 From: Netami1 Date: Thu, 15 Aug 2019 17:41:14 -0400 Subject: [PATCH] freezetimers: fix concurrent modification exception (#1349) * Changed for loop to iterator to prevent concurrent modification exceptions * changes suggested on PR * freezetimers: Cleanup * Fix actual issue * Fix format * freezetimers: clean * freezetimers: we need to rewrite this fucking plugin, holy shit, i'd rather kms than to work on this for 1 more minute JFC. :( --- .../freezetimers/FreezeTimersPlugin.java | 2 +- .../client/plugins/freezetimers/Timers.java | 30 ++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersPlugin.java index 9e1a3015f7..c219b25a16 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersPlugin.java @@ -207,7 +207,7 @@ public class FreezeTimersPlugin extends Plugin } } - public void onLocalPlayerDeath(LocalPlayerDeath event) + private void onLocalPlayerDeath(LocalPlayerDeath event) { final Player localPlayer = client.getLocalPlayer(); final long currentTime = System.currentTimeMillis(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Timers.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Timers.java index 1f2114cdd1..303a5d4868 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Timers.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Timers.java @@ -25,6 +25,7 @@ package net.runelite.client.plugins.freezetimers; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import javax.inject.Singleton; @@ -37,7 +38,7 @@ public class Timers { private final Map> timerMap = new HashMap<>(); - public void setTimerEnd(Actor actor, TimerType type, long n) + void setTimerEnd(Actor actor, TimerType type, long n) { if (!timerMap.containsKey(actor)) { @@ -47,7 +48,7 @@ public class Timers timerMap.get(actor).put(type, n + type.getImmunityTime()); } - public void setTimerReApply(Actor actor, TimerType type, long n) + void setTimerReApply(Actor actor, TimerType type, long n) { if (!timerMap.containsKey(actor)) { @@ -57,7 +58,7 @@ public class Timers timerMap.get(actor).put(type, n); } - public long getTimerEnd(Actor actor, TimerType type) + long getTimerEnd(Actor actor, TimerType type) { if (!timerMap.containsKey(actor)) { @@ -67,7 +68,7 @@ public class Timers return timerMap.get(actor).getOrDefault(type, (long) type.getImmunityTime()) - type.getImmunityTime(); } - public long getTimerReApply(Actor actor, TimerType type) + long getTimerReApply(Actor actor, TimerType type) { if (!timerMap.containsKey(actor)) { @@ -77,15 +78,23 @@ public class Timers return timerMap.get(actor).getOrDefault(type, (long) 0); } - public List getAllActorsOnTimer(TimerType type) + List getAllActorsOnTimer(TimerType type) { - List actors = new ArrayList(); + final List actors = new ArrayList<>(); + final Iterator it = timerMap.keySet().iterator(); - for (Actor actor : timerMap.keySet()) + while (it.hasNext()) { - if (areAllTimersZero(actor)) + final Actor actor = it.next(); + + for (TimerType timerType : TimerType.values()) { - continue; + if (getTimerReApply(actor, timerType) > System.currentTimeMillis()) + { + break; + } + it.remove(); + break; } final long end = getTimerReApply(actor, type); @@ -99,7 +108,7 @@ public class Timers return actors; } - public boolean areAllTimersZero(Actor actor) + boolean areAllTimersZero(Actor actor) { for (TimerType type : TimerType.values()) { @@ -108,7 +117,6 @@ public class Timers return false; } } - timerMap.remove(actor); return true; } }