mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-26 07:06:45 +01:00
Don't modify the list we are iterating over
This commit is contained in:
parent
bb64221c6b
commit
3cfd3b0109
@ -11,25 +11,29 @@ import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
public class BleedTimerTask extends BukkitRunnable {
|
||||
private final static int MAX_BLEED_TICKS = 100; //The cap has been raised :)
|
||||
private static Map<LivingEntity, Integer> bleedList = new HashMap<LivingEntity, Integer>();
|
||||
private static Map<LivingEntity, Integer> bleedDamage = new HashMap<LivingEntity, Integer>();
|
||||
private static Map<LivingEntity, LivingEntity> attackerMap = new HashMap<>();
|
||||
private static ArrayList<LivingEntity> cleanupList = new ArrayList<>();
|
||||
private static ArrayList<LivingEntity> lowerList = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
lowerBleedTicks(); //Lower bleed ticks
|
||||
cleanEntities(); //Remove unwanted entities
|
||||
|
||||
for(LivingEntity target : bleedList.keySet())
|
||||
{
|
||||
//mcMMO.p.getServer().broadcastMessage("Entity "+target.getName()+" has "+bleedList.get(target)+" ticks of bleed left");
|
||||
|
||||
if (bleedList.get(target) <= 0 || !target.isValid()) {
|
||||
remove(target);
|
||||
cleanupList.add(target);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -45,7 +49,7 @@ public class BleedTimerTask extends BukkitRunnable {
|
||||
Player player = (Player) target;
|
||||
|
||||
if (!player.isOnline()) {
|
||||
remove(target);
|
||||
cleanupList.add(target);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -68,9 +72,31 @@ public class BleedTimerTask extends BukkitRunnable {
|
||||
}
|
||||
}
|
||||
|
||||
private void lowerBleedTicks() {
|
||||
for(LivingEntity lower : lowerList)
|
||||
{
|
||||
if(bleedList.containsKey(lower))
|
||||
bleedList.put(lower, bleedList.get(lower) - 1);
|
||||
}
|
||||
|
||||
lowerList.clear();
|
||||
}
|
||||
|
||||
private void cleanEntities() {
|
||||
for(LivingEntity cleanTarget : cleanupList)
|
||||
{
|
||||
if(bleedList.containsKey(cleanTarget))
|
||||
{
|
||||
remove(cleanTarget);
|
||||
}
|
||||
}
|
||||
|
||||
cleanupList.clear(); //Reset List
|
||||
}
|
||||
|
||||
private void lowerBleedDurationTicks(LivingEntity target) {
|
||||
if(bleedList.get(target) != null)
|
||||
bleedList.put(target, bleedList.get(target) - 1);
|
||||
lowerList.add(target);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user