diff --git a/src/main/java/openblocks/common/entity/EntityHangGlider.java b/src/main/java/openblocks/common/entity/EntityHangGlider.java index a750fbf47..7a4a488aa 100644 --- a/src/main/java/openblocks/common/entity/EntityHangGlider.java +++ b/src/main/java/openblocks/common/entity/EntityHangGlider.java @@ -2,6 +2,7 @@ import java.util.Calendar; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import java.util.Random; @@ -75,11 +76,18 @@ private static boolean isGliderValid(EntityPlayer player, EntityHangGlider glide @SideOnly(Side.CLIENT) public static void updateGliders(World worldObj) { - for (Map.Entry e : gliderMap.entrySet()) { + Iterator> iterator = gliderMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry e = iterator.next(); EntityPlayer player = e.getKey(); EntityHangGlider glider = e.getValue(); - if (isGliderValid(player, glider)) glider.fixPositions(player, true); - else glider.setDead(); + + if (isGliderValid(player, glider)) { + glider.fixPositions(player, true); + } else { + iterator.remove(); + glider.setDeadUnsafe(); + } } } @@ -245,8 +253,12 @@ public double getNoise() { @Override public void setDead() { - super.setDead(); gliderMap.remove(player); + setDeadUnsafe(); + } + + private void setDeadUnsafe() { + super.setDead(); if (varioControl.isValid()) { varioControl.kill();