Reuse of Iterator for knownlists.

This commit is contained in:
MobiusDev
2016-05-02 09:42:50 +00:00
parent 056c45749d
commit 1b52ef2637
2 changed files with 21 additions and 7 deletions

View File

@ -16,6 +16,7 @@
*/
package com.l2jmobius.gameserver.model.actor.knownlist;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@ -122,25 +123,30 @@ public class CharKnownList extends ObjectKnownList
{
if (!fullCheck)
{
for (L2PcInstance player : getKnownPlayers().values())
final Iterator<L2PcInstance> pIter = getKnownPlayers().values().iterator();
while (pIter.hasNext())
{
final L2PcInstance player = pIter.next();
if (player == null)
{
removeKnownObject(player, true);
pIter.remove();
}
else if (!player.isVisible() || !Util.checkIfInShortRadius(getDistanceToForgetObject(player), getActiveObject(), player, true))
{
pIter.remove();
removeKnownObject(player, true);
getKnownRelations().remove(player.getObjectId());
getKnownObjects().remove(player.getObjectId());
}
}
for (L2Summon summon : getKnownSummons().values())
final Iterator<L2Summon> sIter = getKnownSummons().values().iterator();
while (sIter.hasNext())
{
final L2Summon summon = sIter.next();
if (summon == null)
{
removeKnownObject(summon, true);
sIter.remove();
}
else if (getActiveChar().isPlayer() && (summon.getOwner() == getActiveChar()))
{
@ -148,6 +154,7 @@ public class CharKnownList extends ObjectKnownList
}
else if (!summon.isVisible() || !Util.checkIfInShortRadius(getDistanceToForgetObject(summon), getActiveObject(), summon, true))
{
sIter.remove();
removeKnownObject(summon, true);
getKnownObjects().remove(summon.getObjectId());
}
@ -156,14 +163,17 @@ public class CharKnownList extends ObjectKnownList
return;
}
// Go through knownObjects
for (L2Object object : getKnownObjects().values())
final Iterator<L2Object> oIter = getKnownObjects().values().iterator();
while (oIter.hasNext())
{
final L2Object object = oIter.next();
if (object == null)
{
removeKnownObject(object, true);
oIter.remove();
}
else if (!object.isVisible() || !Util.checkIfInShortRadius(getDistanceToForgetObject(object), getActiveObject(), object, true))
{
oIter.remove();
removeKnownObject(object, true);
if (object.isPlayer())

View File

@ -16,6 +16,7 @@
*/
package com.l2jmobius.gameserver.model.actor.knownlist;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@ -158,8 +159,10 @@ public class ObjectKnownList
*/
public void forgetObjects(boolean fullCheck)
{
for (L2Object object : getKnownObjects().values())
final Iterator<L2Object> oIter = getKnownObjects().values().iterator();
while (oIter.hasNext())
{
final L2Object object = oIter.next();
if (!fullCheck && !object.isPlayable())
{
continue;
@ -168,6 +171,7 @@ public class ObjectKnownList
// Remove all objects invisible or too far
if (!object.isVisible() || !Util.checkIfInShortRadius(getDistanceToForgetObject(object), getActiveObject(), object, true))
{
oIter.remove();
removeKnownObject(object, true);
}
}