Prevent converting skill targets to arrays.

This commit is contained in:
MobiusDevelopment
2022-12-30 22:59:01 +00:00
parent 15e8e6842e
commit e28b5bce65
226 changed files with 1286 additions and 1486 deletions

View File

@@ -17,6 +17,7 @@
package ai.areas.BeastFarm; package ai.areas.BeastFarm;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@@ -512,11 +513,11 @@ public class FeedableBeasts extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
// this behavior is only run when the target of skill is the passed npc (chest) // this behavior is only run when the target of skill is the passed npc (chest)
// i.e. when the player is attempting to open the chest using a skill // i.e. when the player is attempting to open the chest using a skill
if (!CommonUtil.contains(targets, npc)) if (!targets.contains(npc))
{ {
return super.onSkillSee(npc, caster, skill, targets, isSummon); return super.onSkillSee(npc, caster, skill, targets, isSummon);
} }

View File

@@ -16,7 +16,8 @@
*/ */
package ai.areas.MonasteryOfSilence; package ai.areas.MonasteryOfSilence;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List;
import org.l2jmobius.commons.util.CommonUtil; import org.l2jmobius.commons.util.CommonUtil;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
@@ -103,11 +104,11 @@ public class MonasteryOfSilence extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (CommonUtil.contains(mobs2, npc.getId())) if (CommonUtil.contains(mobs2, npc.getId()))
{ {
if (skill.hasEffectType(EffectType.AGGRESSION) && (targets.length != 0)) if (skill.hasEffectType(EffectType.AGGRESSION) && !targets.isEmpty())
{ {
for (WorldObject obj : targets) for (WorldObject obj : targets)
{ {
@@ -129,7 +130,7 @@ public class MonasteryOfSilence extends AbstractNpcAI
{ {
if (CommonUtil.contains(mobs1, npc.getId())) if (CommonUtil.contains(mobs1, npc.getId()))
{ {
final ArrayList<Playable> result = new ArrayList<>(); final List<Playable> result = new LinkedList<>();
for (WorldObject obj : World.getInstance().getVisibleObjects(npc, WorldObject.class)) for (WorldObject obj : World.getInstance().getVisibleObjects(npc, WorldObject.class))
{ {
if ((obj instanceof Player) || (obj instanceof Pet)) if ((obj instanceof Player) || (obj instanceof Pet))
@@ -140,12 +141,12 @@ public class MonasteryOfSilence extends AbstractNpcAI
} }
} }
} }
if (!result.isEmpty() && (result.size() != 0))
if (!result.isEmpty())
{ {
final Object[] characters = result.toArray(); for (Playable obj : result)
for (Object obj : characters)
{ {
final Playable target = (Playable) (obj instanceof Player ? obj : ((Summon) obj).getOwner()); final Playable target = obj instanceof Player ? obj : ((Summon) obj).getOwner();
if ((target.getActiveWeaponInstance() != null) && !npc.isInCombat() && (npc.getTarget() == null)) if ((target.getActiveWeaponInstance() != null) && !npc.isInCombat() && (npc.getTarget() == null))
{ {
npc.setTarget(target); npc.setTarget(target);

View File

@@ -17,6 +17,7 @@
package ai.bosses.Orfen; package ai.bosses.Orfen;
import java.util.Collection; import java.util.Collection;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.Config; import org.l2jmobius.Config;
@@ -235,7 +236,7 @@ public class Orfen extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (npc.getId() == ORFEN) if (npc.getId() == ORFEN)
{ {

View File

@@ -16,6 +16,8 @@
*/ */
package ai.others; package ai.others;
import java.util.List;
import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -60,7 +62,7 @@ public class Chests extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (npc instanceof Chest) if (npc instanceof Chest)
{ {

View File

@@ -16,6 +16,7 @@
*/ */
package custom.SellBuff; package custom.SellBuff;
import java.util.Collections;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import org.l2jmobius.Config; import org.l2jmobius.Config;
@@ -407,7 +408,7 @@ public class SellBuff implements IVoicedCommandHandler, IBypassHandler
AbstractScript.takeItems(player, Config.SELLBUFF_PAYMENT_ID, holder.getPrice()); AbstractScript.takeItems(player, Config.SELLBUFF_PAYMENT_ID, holder.getPrice());
AbstractScript.giveItems(seller, Config.SELLBUFF_PAYMENT_ID, holder.getPrice()); AbstractScript.giveItems(seller, Config.SELLBUFF_PAYMENT_ID, holder.getPrice());
seller.reduceCurrentMp(skillToBuy.getMpConsume() * Config.SELLBUFF_MP_MULTIPLER); seller.reduceCurrentMp(skillToBuy.getMpConsume() * Config.SELLBUFF_MP_MULTIPLER);
skillToBuy.activateSkill(seller, player); skillToBuy.activateSkill(seller, Collections.singletonList(player));
} }
else else
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
@@ -78,11 +77,10 @@ public class Confuse extends AbstractEffect
{ {
info.getEffected().getAI().notifyEvent(CtrlEvent.EVT_CONFUSED); info.getEffected().getAI().notifyEvent(CtrlEvent.EVT_CONFUSED);
final List<Creature> targetList = new ArrayList<>();
// Getting the possible targets // Getting the possible targets
World.getInstance().forEachVisibleObject(info.getEffected(), Creature.class, targetList::add); final List<Creature> targetList = World.getInstance().getVisibleObjects(info.getEffected(), Creature.class);
// if there is no target, exit function // If there is no target, exit function
if (!targetList.isEmpty()) if (!targetList.isEmpty())
{ {
// Choosing randomly a new target // Choosing randomly a new target

View File

@@ -140,8 +140,7 @@ public class TriggerSkillByAttack extends AbstractEffect
} }
final Skill triggerSkill = _skill.getSkill(); final Skill triggerSkill = _skill.getSkill();
final WorldObject[] targets = targetHandler.getTargetList(triggerSkill, event.getAttacker(), false, event.getTarget()); for (WorldObject triggerTarget : targetHandler.getTargetList(triggerSkill, event.getAttacker(), false, event.getTarget()))
for (WorldObject triggerTarget : targets)
{ {
if ((triggerTarget == null) || !triggerTarget.isCreature()) if ((triggerTarget == null) || !triggerTarget.isCreature())
{ {

View File

@@ -78,8 +78,7 @@ public class TriggerSkillByAvoid extends AbstractEffect
} }
final Skill triggerSkill = _skill.getSkill(); final Skill triggerSkill = _skill.getSkill();
final WorldObject[] targets = targetHandler.getTargetList(triggerSkill, event.getTarget(), false, event.getAttacker()); for (WorldObject triggerTarget : targetHandler.getTargetList(triggerSkill, event.getTarget(), false, event.getAttacker()))
for (WorldObject triggerTarget : targets)
{ {
if ((triggerTarget == null) || !triggerTarget.isCreature()) if ((triggerTarget == null) || !triggerTarget.isCreature())
{ {

View File

@@ -95,8 +95,7 @@ public class TriggerSkillByDamage extends AbstractEffect
} }
final Skill triggerSkill = _skill.getSkill(); final Skill triggerSkill = _skill.getSkill();
final WorldObject[] targets = targetHandler.getTargetList(triggerSkill, event.getTarget(), false, event.getAttacker()); for (WorldObject triggerTarget : targetHandler.getTargetList(triggerSkill, event.getTarget(), false, event.getAttacker()))
for (WorldObject triggerTarget : targets)
{ {
if ((triggerTarget == null) || !triggerTarget.isCreature()) if ((triggerTarget == null) || !triggerTarget.isCreature())
{ {

View File

@@ -85,8 +85,7 @@ public class TriggerSkillBySkill extends AbstractEffect
} }
final Skill triggerSkill = _skill.getSkill(); final Skill triggerSkill = _skill.getSkill();
final WorldObject[] targets = targetHandler.getTargetList(triggerSkill, event.getCaster(), false, event.getTarget()); for (WorldObject triggerTarget : targetHandler.getTargetList(triggerSkill, event.getCaster(), false, event.getTarget()))
for (WorldObject triggerTarget : targets)
{ {
if ((triggerTarget == null) || !triggerTarget.isCreature()) if ((triggerTarget == null) || !triggerTarget.isCreature())
{ {

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -35,13 +35,13 @@ import org.l2jmobius.gameserver.util.Util;
public class Area implements ITargetTypeHandler public class Area implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
if ((target == null) || (((target == creature) || target.isAlikeDead()) && (skill.getCastRange() >= 0)) || (!(target.isAttackable() || target.isPlayable()))) if ((target == null) || (((target == creature) || target.isAlikeDead()) && (skill.getCastRange() >= 0)) || (!(target.isAttackable() || target.isPlayable())))
{ {
creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return targetList;
} }
final Creature origin; final Creature origin;
@@ -50,15 +50,13 @@ public class Area implements ITargetTypeHandler
{ {
if (!Skill.checkForAreaOffensiveSkills(creature, target, skill, srcInArena)) if (!Skill.checkForAreaOffensiveSkills(creature, target, skill, srcInArena))
{ {
return EMPTY_TARGET_LIST; return targetList;
} }
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
origin = target; origin = target;
@@ -93,12 +91,7 @@ public class Area implements ITargetTypeHandler
} }
}); });
if (targetList.isEmpty()) return targetList;
{
return EMPTY_TARGET_LIST;
}
return targetList.toArray(new Creature[targetList.size()]);
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -35,25 +35,22 @@ import org.l2jmobius.gameserver.util.Util;
public class AreaCorpseMob implements ITargetTypeHandler public class AreaCorpseMob implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<WorldObject> targetList = new LinkedList<>();
if ((target == null) || !target.isAttackable() || !target.isDead()) if ((target == null) || !target.isAttackable() || !target.isDead())
{ {
creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return targetList;
} }
targetList.add(target);
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] return targetList;
{
target
};
} }
final List<Creature> targetList = new ArrayList<>();
targetList.add(target);
final boolean srcInArena = creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE); final boolean srcInArena = creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE);
World.getInstance().forEachVisibleObject(creature, Creature.class, obj -> World.getInstance().forEachVisibleObject(creature, Creature.class, obj ->
{ {
@@ -70,11 +67,7 @@ public class AreaCorpseMob implements ITargetTypeHandler
targetList.add(obj); targetList.add(obj);
}); });
if (targetList.isEmpty()) return targetList;
{
return EMPTY_TARGET_LIST;
}
return targetList.toArray(new Creature[targetList.size()]);
} }
@Override @Override

View File

@@ -16,8 +16,8 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.geoengine.GeoEngine;
@@ -38,31 +38,28 @@ import org.l2jmobius.gameserver.network.SystemMessageId;
public class AreaFriendly implements ITargetTypeHandler public class AreaFriendly implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
final Player player = creature.getActingPlayer(); final Player player = creature.getActingPlayer();
if (!checkTarget(player, target) && (skill.getCastRange() >= 0)) if (!checkTarget(player, target) && (skill.getCastRange() >= 0))
{ {
player.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); player.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return targetList;
} }
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
if (player.getActingPlayer().isInOlympiadMode()) if (player.getActingPlayer().isInOlympiadMode())
{ {
return new Creature[] targetList.add(player);
{ return targetList;
player
};
} }
targetList.add(target); // Add target to target list targetList.add(target); // Add target to target list
if (target != null) if (target != null)
{ {
@@ -83,11 +80,7 @@ public class AreaFriendly implements ITargetTypeHandler
}); });
} }
if (targetList.isEmpty()) return targetList;
{
return EMPTY_TARGET_LIST;
}
return targetList.toArray(new Creature[targetList.size()]);
} }
private boolean checkTarget(Player player, Creature target) private boolean checkTarget(Player player, Creature target)

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -33,21 +33,19 @@ import org.l2jmobius.gameserver.model.zone.ZoneId;
public class AreaSummon implements ITargetTypeHandler public class AreaSummon implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
final Creature targetCreature = creature.getSummon(); final Creature targetCreature = creature.getSummon();
if ((targetCreature == null) || !targetCreature.isServitor() || targetCreature.isDead()) if ((targetCreature == null) || !targetCreature.isServitor() || targetCreature.isDead())
{ {
return EMPTY_TARGET_LIST; return targetList;
} }
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] targetList.add(targetCreature);
{ return targetList;
targetCreature
};
} }
final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE)); final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE));
@@ -77,12 +75,7 @@ public class AreaSummon implements ITargetTypeHandler
targetList.add(obj); targetList.add(obj);
}); });
if (targetList.isEmpty()) return targetList;
{
return EMPTY_TARGET_LIST;
}
return targetList.toArray(new Creature[targetList.size()]);
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -35,9 +35,9 @@ import org.l2jmobius.gameserver.model.zone.ZoneId;
public class Aura implements ITargetTypeHandler public class Aura implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE)); final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE));
for (Creature obj : World.getInstance().getVisibleObjectsInRange(creature, Creature.class, skill.getAffectRange())) for (Creature obj : World.getInstance().getVisibleObjectsInRange(creature, Creature.class, skill.getAffectRange()))
{ {
@@ -63,18 +63,16 @@ public class Aura implements ITargetTypeHandler
continue; continue;
} }
targetList.add(obj);
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] return targetList;
{
obj
};
} }
targetList.add(obj);
} }
} }
return targetList.toArray(new Creature[targetList.size()]);
return targetList;
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -33,32 +33,29 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class AuraCorpseMob implements ITargetTypeHandler public class AuraCorpseMob implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
// Go through the Creature _knownList // Go through the Creature _knownList
final int maxTargets = skill.getAffectLimit(); final int maxTargets = skill.getAffectLimit();
for (Attackable obj : World.getInstance().getVisibleObjectsInRange(creature, Attackable.class, skill.getAffectRange())) for (Attackable obj : World.getInstance().getVisibleObjectsInRange(creature, Attackable.class, skill.getAffectRange()))
{ {
if (obj.isDead()) if (obj.isDead())
{ {
targetList.add(obj);
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] return targetList;
{
obj
};
} }
if ((maxTargets > 0) && (targetList.size() >= maxTargets)) if ((maxTargets > 0) && (targetList.size() >= maxTargets))
{ {
break; break;
} }
targetList.add(obj);
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.geoengine.GeoEngine;
@@ -37,9 +37,9 @@ import org.l2jmobius.gameserver.model.zone.ZoneId;
public class AuraFriendly implements ITargetTypeHandler public class AuraFriendly implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
final Player player = creature.getActingPlayer(); final Player player = creature.getActingPlayer();
final int maxTargets = skill.getAffectLimit(); final int maxTargets = skill.getAffectLimit();
World.getInstance().forEachVisibleObject(player, Creature.class, obj -> World.getInstance().forEachVisibleObject(player, Creature.class, obj ->
@@ -57,12 +57,7 @@ public class AuraFriendly implements ITargetTypeHandler
targetList.add(obj); targetList.add(obj);
}); });
if (targetList.isEmpty()) return targetList;
{
return EMPTY_TARGET_LIST;
}
return targetList.toArray(new Creature[targetList.size()]);
} }
private boolean checkTarget(Player player, Creature target) private boolean checkTarget(Player player, Creature target)

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -35,13 +35,13 @@ import org.l2jmobius.gameserver.util.Util;
public class BehindArea implements ITargetTypeHandler public class BehindArea implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
if ((target == null) || (((target == creature) || target.isAlikeDead()) && (skill.getCastRange() >= 0)) || (!(target.isAttackable() || target.isPlayable()))) if ((target == null) || (((target == creature) || target.isAlikeDead()) && (skill.getCastRange() >= 0)) || (!(target.isAttackable() || target.isPlayable())))
{ {
creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return targetList;
} }
final Creature origin; final Creature origin;
@@ -50,19 +50,16 @@ public class BehindArea implements ITargetTypeHandler
{ {
if (!Skill.checkForAreaOffensiveSkills(creature, target, skill, srcInArena)) if (!Skill.checkForAreaOffensiveSkills(creature, target, skill, srcInArena))
{ {
return EMPTY_TARGET_LIST; return targetList;
}
if (onlyFirst)
{
return new Creature[]
{
target
};
} }
origin = target; origin = target;
targetList.add(origin); // Add target to target list targetList.add(origin); // Add target to target list
if (onlyFirst)
{
return targetList;
}
} }
else else
{ {
@@ -103,12 +100,7 @@ public class BehindArea implements ITargetTypeHandler
} }
}); });
if (targetList.isEmpty()) return targetList;
{
return EMPTY_TARGET_LIST;
}
return targetList.toArray(new Creature[targetList.size()]);
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -33,9 +33,9 @@ import org.l2jmobius.gameserver.model.zone.ZoneId;
public class BehindAura implements ITargetTypeHandler public class BehindAura implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE)); final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE));
final int maxTargets = skill.getAffectLimit(); final int maxTargets = skill.getAffectLimit();
for (Creature obj : World.getInstance().getVisibleObjectsInRange(creature, Creature.class, skill.getAffectRange())) for (Creature obj : World.getInstance().getVisibleObjectsInRange(creature, Creature.class, skill.getAffectRange()))
@@ -52,23 +52,20 @@ public class BehindAura implements ITargetTypeHandler
continue; continue;
} }
targetList.add(obj);
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] return targetList;
{
obj
};
} }
if ((maxTargets > 0) && (targetList.size() >= maxTargets)) if ((maxTargets > 0) && (targetList.size() >= maxTargets))
{ {
break; break;
} }
targetList.add(obj);
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -35,31 +35,27 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class Clan implements ITargetTypeHandler public class Clan implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
if (creature.isPlayable()) if (creature.isPlayable())
{ {
final Player player = creature.getActingPlayer(); final Player player = creature.getActingPlayer();
if (player == null) if (player == null)
{ {
return EMPTY_TARGET_LIST; return targetList;
} }
if (player.isInOlympiadMode()) if (player.isInOlympiadMode())
{ {
return new Creature[] targetList.add(player);
{ return targetList;
player
};
} }
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] targetList.add(player);
{ return targetList;
player
};
} }
targetList.add(player); targetList.add(player);
@@ -115,32 +111,25 @@ public class Clan implements ITargetTypeHandler
continue; continue;
} }
targetList.add(obj);
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] return targetList;
{
obj
};
} }
targetList.add(obj);
} }
} }
} }
else if (creature.isNpc()) else if (creature.isNpc())
{ {
// for buff purposes, returns friendly mobs nearby and mob itself // for buff purposes, returns friendly mobs nearby and mob itself
targetList.add(creature);
final Npc npc = (Npc) creature; final Npc npc = (Npc) creature;
if ((npc.getTemplate().getClans() == null) || npc.getTemplate().getClans().isEmpty()) if ((npc.getTemplate().getClans() == null) || npc.getTemplate().getClans().isEmpty())
{ {
return new Creature[] return targetList;
{
creature
};
} }
targetList.add(creature);
for (Npc newTarget : World.getInstance().getVisibleObjectsInRange(creature, Npc.class, skill.getCastRange())) for (Npc newTarget : World.getInstance().getVisibleObjectsInRange(creature, Npc.class, skill.getCastRange()))
{ {
if (newTarget.isNpc() && npc.isInMyClan(newTarget)) if (newTarget.isNpc() && npc.isInMyClan(newTarget))
@@ -156,7 +145,7 @@ public class Clan implements ITargetTypeHandler
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -33,20 +33,19 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class ClanMember implements ITargetTypeHandler public class ClanMember implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
if (creature.isNpc()) if (creature.isNpc())
{ {
// for buff purposes, returns friendly mobs nearby and mob itself // for buff purposes, returns friendly mobs nearby and mob itself
final Npc npc = (Npc) creature; final Npc npc = (Npc) creature;
if ((npc.getTemplate().getClans() == null) || npc.getTemplate().getClans().isEmpty()) if ((npc.getTemplate().getClans() == null) || npc.getTemplate().getClans().isEmpty())
{ {
return new Creature[] targetList.add(creature);
{ return targetList;
creature
};
} }
for (Npc newTarget : World.getInstance().getVisibleObjectsInRange(creature, Npc.class, skill.getCastRange())) for (Npc newTarget : World.getInstance().getVisibleObjectsInRange(creature, Npc.class, skill.getCastRange()))
{ {
if (newTarget.isNpc() && npc.isInMyClan(newTarget)) if (newTarget.isNpc() && npc.isInMyClan(newTarget))
@@ -55,16 +54,14 @@ public class ClanMember implements ITargetTypeHandler
break; break;
} }
} }
if (targetList.isEmpty()) if (targetList.isEmpty())
{ {
targetList.add(npc); targetList.add(npc);
} }
} }
else
{ return targetList;
return EMPTY_TARGET_LIST;
}
return targetList.toArray(new Creature[targetList.size()]);
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -33,13 +33,13 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class CommandChannel implements ITargetTypeHandler public class CommandChannel implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
final Player player = creature.getActingPlayer(); final Player player = creature.getActingPlayer();
if (player == null) if (player == null)
{ {
return EMPTY_TARGET_LIST; return targetList;
} }
targetList.add(player); targetList.add(player);
@@ -55,7 +55,7 @@ public class CommandChannel implements ITargetTypeHandler
// if player in not in party // if player in not in party
if (party == null) if (party == null)
{ {
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
// Get all visible objects in a spherical area near the Creature // Get all visible objects in a spherical area near the Creature
@@ -78,7 +78,7 @@ public class CommandChannel implements ITargetTypeHandler
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
@Override @Override

View File

@@ -37,7 +37,7 @@ import org.l2jmobius.gameserver.model.zone.ZoneId;
public class CorpseClan implements ITargetTypeHandler public class CorpseClan implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<WorldObject> targetList = new ArrayList<>(); final List<WorldObject> targetList = new ArrayList<>();
if (creature.isPlayable()) if (creature.isPlayable())
@@ -45,15 +45,13 @@ public class CorpseClan implements ITargetTypeHandler
final Player player = creature.getActingPlayer(); final Player player = creature.getActingPlayer();
if (player == null) if (player == null)
{ {
return EMPTY_TARGET_LIST; return targetList;
} }
if (player.isInOlympiadMode()) if (player.isInOlympiadMode())
{ {
return new WorldObject[] targetList.add(player);
{ return targetList;
player
};
} }
final Clan clan = player.getClan(); final Clan clan = player.getClan();
@@ -103,37 +101,30 @@ public class CorpseClan implements ITargetTypeHandler
continue; continue;
} }
targetList.add(obj);
if (onlyFirst) if (onlyFirst)
{ {
return new WorldObject[] return targetList;
{
obj
};
} }
if ((maxTargets > 0) && (targetList.size() >= maxTargets)) if ((maxTargets > 0) && (targetList.size() >= maxTargets))
{ {
break; break;
} }
targetList.add(obj);
} }
} }
} }
else if (creature.isNpc()) else if (creature.isNpc())
{ {
// for buff purposes, returns friendly mobs nearby and mob itself // for buff purposes, returns friendly mobs nearby and mob itself
targetList.add(creature);
final Npc npc = (Npc) creature; final Npc npc = (Npc) creature;
if ((npc.getTemplate().getClans() == null) || npc.getTemplate().getClans().isEmpty()) if ((npc.getTemplate().getClans() == null) || npc.getTemplate().getClans().isEmpty())
{ {
return new WorldObject[] return targetList;
{
creature
};
} }
targetList.add(creature);
for (Npc newTarget : World.getInstance().getVisibleObjectsInRange(creature, Npc.class, skill.getCastRange())) for (Npc newTarget : World.getInstance().getVisibleObjectsInRange(creature, Npc.class, skill.getCastRange()))
{ {
if (npc.isInMyClan(newTarget)) if (npc.isInMyClan(newTarget))
@@ -148,7 +139,7 @@ public class CorpseClan implements ITargetTypeHandler
} }
} }
return targetList.toArray(new WorldObject[targetList.size()]); return targetList;
} }
@Override @Override

View File

@@ -16,6 +16,9 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
@@ -33,28 +36,25 @@ import org.l2jmobius.gameserver.network.SystemMessageId;
public class CorpseMob implements ITargetTypeHandler public class CorpseMob implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
if ((target == null) || !target.isAttackable() || !target.isDead()) if ((target == null) || !target.isAttackable() || !target.isDead())
{ {
creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
if (skill.hasEffectType(EffectType.SUMMON) && target.isServitor() && (target.getActingPlayer() != null) && (target.getActingPlayer().getObjectId() == creature.getObjectId())) if (skill.hasEffectType(EffectType.SUMMON) && target.isServitor() && (target.getActingPlayer() != null) && (target.getActingPlayer().getObjectId() == creature.getObjectId()))
{ {
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
if (skill.hasEffectType(EffectType.HP_DRAIN) && ((Attackable) target).isOldCorpse(creature.getActingPlayer(), Config.CORPSE_CONSUME_SKILL_ALLOWED_TIME_BEFORE_DECAY, true)) if (skill.hasEffectType(EffectType.HP_DRAIN) && ((Attackable) target).isOldCorpse(creature.getActingPlayer(), Config.CORPSE_CONSUME_SKILL_ALLOWED_TIME_BEFORE_DECAY, true))
{ {
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
return new Creature[] return Collections.singletonList(target);
{
target
};
} }
@Override @Override

View File

@@ -16,6 +16,9 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -30,20 +33,18 @@ import org.l2jmobius.gameserver.model.zone.ZoneId;
public class EnemySummon implements ITargetTypeHandler public class EnemySummon implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
if ((target != null) && target.isSummon()) if ((target != null) && target.isSummon())
{ {
final Summon targetSummon = (Summon) target; final Summon targetSummon = (Summon) target;
if ((creature.isPlayer() && (creature.getSummon() != targetSummon) && !targetSummon.isDead() && ((targetSummon.getOwner().getPvpFlag() != 0) || (targetSummon.getOwner().getKarma() > 0))) || (targetSummon.getOwner().isInsideZone(ZoneId.PVP) && creature.getActingPlayer().isInsideZone(ZoneId.PVP)) || (targetSummon.getOwner().isInDuel() && creature.getActingPlayer().isInDuel() && (targetSummon.getOwner().getDuelId() == creature.getActingPlayer().getDuelId()))) if ((creature.isPlayer() && (creature.getSummon() != targetSummon) && !targetSummon.isDead() && ((targetSummon.getOwner().getPvpFlag() != 0) || (targetSummon.getOwner().getKarma() > 0))) || (targetSummon.getOwner().isInsideZone(ZoneId.PVP) && creature.getActingPlayer().isInsideZone(ZoneId.PVP)) || (targetSummon.getOwner().isInDuel() && creature.getActingPlayer().isInDuel() && (targetSummon.getOwner().getDuelId() == creature.getActingPlayer().getDuelId())))
{ {
return new Creature[] return Collections.singletonList(targetSummon);
{
targetSummon
};
} }
} }
return EMPTY_TARGET_LIST;
return Collections.emptyList();
} }
@Override @Override

View File

@@ -16,6 +16,9 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -28,16 +31,14 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class FlagPole implements ITargetTypeHandler public class FlagPole implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
if (!creature.isPlayer()) if (!creature.isPlayer())
{ {
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
return new WorldObject[]
{ return Collections.singletonList(target);
target
};
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -35,13 +35,13 @@ import org.l2jmobius.gameserver.util.Util;
public class FrontArea implements ITargetTypeHandler public class FrontArea implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
if ((target == null) || (((target == creature) || target.isAlikeDead()) && (skill.getCastRange() >= 0)) || (!(target.isAttackable() || target.isPlayable()))) if ((target == null) || (((target == creature) || target.isAlikeDead()) && (skill.getCastRange() >= 0)) || (!(target.isAttackable() || target.isPlayable())))
{ {
creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return targetList;
} }
final Creature origin; final Creature origin;
@@ -50,19 +50,16 @@ public class FrontArea implements ITargetTypeHandler
{ {
if (!Skill.checkForAreaOffensiveSkills(creature, target, skill, srcInArena)) if (!Skill.checkForAreaOffensiveSkills(creature, target, skill, srcInArena))
{ {
return EMPTY_TARGET_LIST; return targetList;
}
if (onlyFirst)
{
return new Creature[]
{
target
};
} }
origin = target; origin = target;
targetList.add(origin); // Add target to target list targetList.add(origin); // Add target to target list
if (onlyFirst)
{
return targetList;
}
} }
else else
{ {
@@ -109,12 +106,7 @@ public class FrontArea implements ITargetTypeHandler
} }
}); });
if (targetList.isEmpty()) return targetList;
{
return EMPTY_TARGET_LIST;
}
return targetList.toArray(new Creature[targetList.size()]);
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -33,9 +33,9 @@ import org.l2jmobius.gameserver.model.zone.ZoneId;
public class FrontAura implements ITargetTypeHandler public class FrontAura implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE)); final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE));
final int maxTargets = skill.getAffectLimit(); final int maxTargets = skill.getAffectLimit();
for (Creature obj : World.getInstance().getVisibleObjectsInRange(creature, Creature.class, skill.getAffectRange())) for (Creature obj : World.getInstance().getVisibleObjectsInRange(creature, Creature.class, skill.getAffectRange()))
@@ -52,23 +52,21 @@ public class FrontAura implements ITargetTypeHandler
continue; continue;
} }
targetList.add(obj);
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] return targetList;
{
obj
};
} }
if ((maxTargets > 0) && (targetList.size() >= maxTargets)) if ((maxTargets > 0) && (targetList.size() >= maxTargets))
{ {
break; break;
} }
targetList.add(obj);
} }
} }
return targetList.toArray(new Creature[targetList.size()]);
return targetList;
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -35,9 +35,9 @@ import org.l2jmobius.gameserver.model.zone.ZoneId;
public class Ground implements ITargetTypeHandler public class Ground implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
final Player player = (Player) creature; final Player player = (Player) creature;
final int maxTargets = skill.getAffectLimit(); final int maxTargets = skill.getAffectLimit();
final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE)); final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE));
@@ -55,11 +55,12 @@ public class Ground implements ITargetTypeHandler
return; return;
} }
targetList.add(character);
if ((maxTargets > 0) && (targetList.size() >= maxTargets)) if ((maxTargets > 0) && (targetList.size() >= maxTargets))
{ {
return; return;
} }
targetList.add(character);
} }
}); });
@@ -67,7 +68,8 @@ public class Ground implements ITargetTypeHandler
{ {
targetList.add(creature); targetList.add(creature);
} }
return targetList.isEmpty() ? EMPTY_TARGET_LIST : targetList.toArray(new Creature[targetList.size()]);
return targetList;
} }
@Override @Override

View File

@@ -16,6 +16,9 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -28,16 +31,14 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class Holy implements ITargetTypeHandler public class Holy implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
if ((target == null) || !target.isArtefact()) if ((target == null) || !target.isArtefact())
{ {
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
return new WorldObject[]
{ return Collections.singletonList(target);
target
};
} }
@Override @Override

View File

@@ -16,6 +16,9 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -29,20 +32,17 @@ import org.l2jmobius.gameserver.network.SystemMessageId;
public class One implements ITargetTypeHandler public class One implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
// Check for null target or any other invalid target // Check for null target or any other invalid target
if ((target == null) || target.isDead() || ((target == creature) && skill.isBad())) if ((target == null) || target.isDead() || ((target == creature) && skill.isBad()))
{ {
creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
// If a target is found, return it in a table else send a system message TARGET_IS_INCORRECT // If a target is found, return it in a table else send a system message TARGET_IS_INCORRECT
return new Creature[] return Collections.singletonList(target);
{
target
};
} }
@Override @Override

View File

@@ -16,6 +16,9 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -30,20 +33,18 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class OwnerPet implements ITargetTypeHandler public class OwnerPet implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
if (creature.isSummon()) if (creature.isSummon())
{ {
final Player owner = ((Summon) creature).getOwner(); final Player owner = ((Summon) creature).getOwner();
if ((owner != null) && !owner.isDead()) if ((owner != null) && !owner.isDead())
{ {
return new Creature[] return Collections.singletonList(owner);
{
owner
};
} }
} }
return EMPTY_TARGET_LIST;
return Collections.emptyList();
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -32,19 +32,15 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class Party implements ITargetTypeHandler public class Party implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
targetList.add(creature);
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] return targetList;
{
creature
};
} }
targetList.add(creature);
final int radius = skill.getAffectRange(); final int radius = skill.getAffectRange();
final Player player = creature.getActingPlayer(); final Player player = creature.getActingPlayer();
if (creature.isSummon()) if (creature.isSummon())
@@ -83,7 +79,8 @@ public class Party implements ITargetTypeHandler
} }
} }
} }
return targetList.toArray(new Creature[targetList.size()]);
return targetList;
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -33,25 +33,22 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class PartyClan implements ITargetTypeHandler public class PartyClan implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
if (onlyFirst)
{
return new Creature[]
{
creature
};
}
final Player player = creature.getActingPlayer(); final Player player = creature.getActingPlayer();
if (player == null) if (player == null)
{ {
return EMPTY_TARGET_LIST; return targetList;
} }
targetList.add(player); targetList.add(player);
if (onlyFirst)
{
return targetList;
}
final int radius = skill.getAffectRange(); final int radius = skill.getAffectRange();
final boolean hasClan = player.getClan() != null; final boolean hasClan = player.getClan() != null;
final boolean hasParty = player.isInParty(); final boolean hasParty = player.isInParty();
@@ -63,7 +60,7 @@ public class PartyClan implements ITargetTypeHandler
// if player in clan and not in party // if player in clan and not in party
if (!(hasClan || hasParty)) if (!(hasClan || hasParty))
{ {
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
// Get all visible objects in a spherical area near the Creature // Get all visible objects in a spherical area near the Creature
@@ -132,22 +129,20 @@ public class PartyClan implements ITargetTypeHandler
continue; continue;
} }
targetList.add(obj);
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] return targetList;
{
obj
};
} }
if ((maxTargets > 0) && (targetList.size() >= maxTargets)) if ((maxTargets > 0) && (targetList.size() >= maxTargets))
{ {
break; break;
} }
targetList.add(obj);
} }
return targetList.toArray(new Creature[targetList.size()]);
return targetList;
} }
@Override @Override

View File

@@ -16,6 +16,9 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -29,21 +32,20 @@ import org.l2jmobius.gameserver.network.SystemMessageId;
public class PartyMember implements ITargetTypeHandler public class PartyMember implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
if (target == null) if (target == null)
{ {
creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
if (!target.isDead() && ((target == creature) || (creature.isInParty() && target.isInParty() && (creature.getParty().getLeaderObjectId() == target.getParty().getLeaderObjectId())) || (creature.isPlayer() && target.isSummon() && (creature.getSummon() == target)) || (creature.isSummon() && target.isPlayer() && (creature == target.getSummon())))) if (!target.isDead() && ((target == creature) || (creature.isInParty() && target.isInParty() && (creature.getParty().getLeaderObjectId() == target.getParty().getLeaderObjectId())) || (creature.isPlayer() && target.isSummon() && (creature.getSummon() == target)) || (creature.isSummon() && target.isPlayer() && (creature == target.getSummon()))))
{ {
return new Creature[] return Collections.singletonList(target);
{
target
};
} }
return EMPTY_TARGET_LIST;
return Collections.emptyList();
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.Config; import org.l2jmobius.Config;
@@ -34,9 +34,9 @@ import org.l2jmobius.gameserver.util.Util;
public class PartyNotMe implements ITargetTypeHandler public class PartyNotMe implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
if (creature.getParty() != null) if (creature.getParty() != null)
{ {
final List<Player> partyList = creature.getParty().getMembers(); final List<Player> partyList = creature.getParty().getMembers();
@@ -52,7 +52,7 @@ public class PartyNotMe implements ITargetTypeHandler
} }
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
@Override @Override

View File

@@ -16,6 +16,9 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -29,7 +32,7 @@ import org.l2jmobius.gameserver.network.SystemMessageId;
public class PartyOther implements ITargetTypeHandler public class PartyOther implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
if ((target != null) && (target != creature) && creature.isInParty() && target.isInParty() && (creature.getParty().getLeaderObjectId() == target.getParty().getLeaderObjectId())) if ((target != null) && (target != creature) && creature.isInParty() && target.isInParty() && (creature.getParty().getLeaderObjectId() == target.getParty().getLeaderObjectId()))
{ {
@@ -44,35 +47,27 @@ public class PartyOther implements ITargetTypeHandler
{ {
if (!target.getActingPlayer().isMageClass()) if (!target.getActingPlayer().isMageClass())
{ {
return new Creature[] return Collections.singletonList(target);
{
target
};
} }
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
case 427: case 427:
{ {
if (target.getActingPlayer().isMageClass()) if (target.getActingPlayer().isMageClass())
{ {
return new Creature[] return Collections.singletonList(target);
{
target
};
} }
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
} }
} }
return new Creature[] return Collections.singletonList(target);
{
target
};
} }
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -36,9 +36,9 @@ import org.l2jmobius.gameserver.network.SystemMessageId;
public class PcBody implements ITargetTypeHandler public class PcBody implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
if ((target != null) && target.isDead()) if ((target != null) && target.isDead())
{ {
final Player player; final Player player;
@@ -92,20 +92,14 @@ public class PcBody implements ITargetTypeHandler
if (condGood) if (condGood)
{ {
if (!onlyFirst) targetList.add(target);
{ return targetList;
targetList.add(target);
return targetList.toArray(new WorldObject[targetList.size()]);
}
return new Creature[]
{
target
};
} }
} }
} }
creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return targetList;
} }
@Override @Override

View File

@@ -16,6 +16,9 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -29,16 +32,14 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class Pet implements ITargetTypeHandler public class Pet implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
if (creature.hasPet()) if (creature.hasPet())
{ {
return new Creature[] return Collections.singletonList(creature.getSummon());
{
creature.getSummon()
};
} }
return EMPTY_TARGET_LIST;
return Collections.emptyList();
} }
@Override @Override

View File

@@ -16,6 +16,9 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -28,12 +31,9 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class Self implements ITargetTypeHandler public class Self implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
return new Creature[] return Collections.singletonList(creature);
{
creature
};
} }
@Override @Override

View File

@@ -16,6 +16,9 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -29,16 +32,14 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class Servitor implements ITargetTypeHandler public class Servitor implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
if (creature.hasServitor()) if (creature.hasServitor())
{ {
return new Creature[] return Collections.singletonList(creature.getSummon());
{
creature.getSummon()
};
} }
return EMPTY_TARGET_LIST;
return Collections.emptyList();
} }
@Override @Override

View File

@@ -16,6 +16,9 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -29,16 +32,14 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class Summon implements ITargetTypeHandler public class Summon implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
if (creature.hasSummon()) if (creature.hasSummon())
{ {
return new Creature[] return Collections.singletonList(creature.getSummon());
{
creature.getSummon()
};
} }
return EMPTY_TARGET_LIST;
return Collections.emptyList();
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -33,15 +33,15 @@ import org.l2jmobius.gameserver.network.SystemMessageId;
public class TargetParty implements ITargetTypeHandler public class TargetParty implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
// Check for null target or any other invalid target // Check for null target or any other invalid target
if ((target == null) || target.isDead() || (target == creature)) if ((target == null) || target.isDead() || (target == creature))
{ {
creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return targetList;
} }
final int radius = skill.getAffectRange(); final int radius = skill.getAffectRange();
@@ -70,7 +70,8 @@ public class TargetParty implements ITargetTypeHandler
{ {
targetList.add(target); targetList.add(target);
} }
return targetList.toArray(new Creature[targetList.size()]);
return targetList;
} }
@Override @Override

View File

@@ -16,6 +16,9 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -29,16 +32,14 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class Unlockable implements ITargetTypeHandler public class Unlockable implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
if ((target == null) || (!target.isDoor() && !(target instanceof Chest))) if ((target == null) || (!target.isDoor() && !(target instanceof Chest)))
{ {
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
return new Creature[]
{ return Collections.singletonList(target);
target
};
} }
@Override @Override

View File

@@ -762,7 +762,7 @@ public abstract class AbstractSagaQuest extends Quest
} }
@Override @Override
public String onSkillSee(Npc npc, Player player, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player player, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (SPAWN_LIST.containsKey(npc) && (SPAWN_LIST.get(npc) != player.getObjectId())) if (SPAWN_LIST.containsKey(npc) && (SPAWN_LIST.get(npc) != player.getObjectId()))
{ {

View File

@@ -16,6 +16,8 @@
*/ */
package quests.Q00120_PavelsLastResearch; package quests.Q00120_PavelsLastResearch;
import java.util.List;
import org.l2jmobius.gameserver.enums.QuestSound; import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
@@ -1105,7 +1107,7 @@ public class Q00120_PavelsLastResearch extends Quest
} }
@Override @Override
public String onSkillSee(Npc npc, Player player, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player player, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
final QuestState qs = getQuestState(player, false); final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isStarted()) if ((qs != null) && qs.isStarted())

View File

@@ -185,7 +185,7 @@ public class Q00350_EnhanceYourWeapon extends Quest
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
super.onSkillSee(npc, caster, skill, targets, isSummon); super.onSkillSee(npc, caster, skill, targets, isSummon);

View File

@@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler; package org.l2jmobius.gameserver.handler;
import java.util.List;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
@@ -26,9 +28,7 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
*/ */
public interface ITargetTypeHandler public interface ITargetTypeHandler
{ {
WorldObject[] EMPTY_TARGET_LIST = new WorldObject[0]; List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target);
WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target);
Enum<TargetType> getTargetType(); Enum<TargetType> getTargetType();
} }

View File

@@ -21,6 +21,8 @@ import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Queue; import java.util.Queue;
@@ -37,7 +39,6 @@ import java.util.logging.Logger;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.commons.util.CommonUtil;
import org.l2jmobius.commons.util.EmptyQueue; import org.l2jmobius.commons.util.EmptyQueue;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.ai.AttackableAI; import org.l2jmobius.gameserver.ai.AttackableAI;
@@ -1485,7 +1486,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
beginCast(skill, true); beginCast(skill, true);
} }
public void doCast(Skill skill, Creature target, WorldObject[] targets) public void doCast(Skill skill, Creature target, List<WorldObject> targets)
{ {
if (!checkDoCastConditions(skill)) if (!checkDoCastConditions(skill))
{ {
@@ -1507,7 +1508,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
beginCast(skill, false, target, targets); beginCast(skill, false, target, targets);
} }
public void doSimultaneousCast(Skill skill, Creature target, WorldObject[] targets) public void doSimultaneousCast(Skill skill, Creature target, List<WorldObject> targets)
{ {
if (!checkDoCastConditions(skill)) if (!checkDoCastConditions(skill))
{ {
@@ -1550,7 +1551,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
// Set the target of the skill in function of Skill Type and Target Type // Set the target of the skill in function of Skill Type and Target Type
Creature target = null; Creature target = null;
// Get all possible targets of the skill in a table in function of the skill target type // Get all possible targets of the skill in a table in function of the skill target type
final WorldObject[] targets = skill.getTargetList(this); final List<WorldObject> targets = skill.getTargetList(this);
boolean doit = false; boolean doit = false;
// AURA skills should always be using caster as target // AURA skills should always be using caster as target
@@ -1586,7 +1587,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
} }
default: default:
{ {
if (targets.length == 0) if (targets.isEmpty())
{ {
if (simultaneously) if (simultaneously)
{ {
@@ -1612,7 +1613,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
if (doit) if (doit)
{ {
target = (Creature) targets[0]; target = (Creature) targets.get(0);
} }
else else
{ {
@@ -1624,7 +1625,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
beginCast(skill, simultaneously, target, targets); beginCast(skill, simultaneously, target, targets);
} }
private void beginCast(Skill skill, boolean simultaneously, Creature target, WorldObject[] targets) private void beginCast(Skill skill, boolean simultaneously, Creature target, List<WorldObject> targets)
{ {
if (target == null) if (target == null)
{ {
@@ -5228,14 +5229,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
public void onMagicLaunchedTimer(MagicUseTask mut) public void onMagicLaunchedTimer(MagicUseTask mut)
{ {
final Skill skill = mut.getSkill(); final Skill skill = mut.getSkill();
final WorldObject[] targets = mut.getTargets(); final List<WorldObject> targets = mut.getTargets();
if ((skill == null) || (targets == null)) if ((skill == null) || (targets == null))
{ {
abortCast(); abortCast();
return; return;
} }
if (targets.length == 0) if (targets.isEmpty())
{ {
switch (skill.getTargetType()) switch (skill.getTargetType())
{ {
@@ -5267,12 +5268,12 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
escapeRange = skill.getAffectRange(); escapeRange = skill.getAffectRange();
} }
if ((targets.length > 0) && (escapeRange > 0)) if (!targets.isEmpty() && (escapeRange > 0))
{ {
int skipRange = 0; int skipRange = 0;
int skipLOS = 0; int skipLOS = 0;
int skipPeaceZone = 0; int skipPeaceZone = 0;
final List<WorldObject> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
for (WorldObject target : targets) for (WorldObject target : targets)
{ {
if (target.isCreature()) if (target.isCreature())
@@ -5333,7 +5334,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
abortCast(); abortCast();
return; return;
} }
mut.setTargets(targetList.toArray(new WorldObject[targetList.size()])); mut.setTargets(targetList);
} }
// Ensure that a cast is in progress // Ensure that a cast is in progress
@@ -5361,7 +5362,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
public void onMagicHitTimer(MagicUseTask mut) public void onMagicHitTimer(MagicUseTask mut)
{ {
final Skill skill = mut.getSkill(); final Skill skill = mut.getSkill();
final WorldObject[] targets = mut.getTargets(); final List<WorldObject> targets = mut.getTargets();
if ((skill == null) || (targets == null)) if ((skill == null) || (targets == null))
{ {
abortCast(); abortCast();
@@ -5499,7 +5500,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
setCastingSimultaneouslyNow(false); setCastingSimultaneouslyNow(false);
final Skill skill = mut.getSkill(); final Skill skill = mut.getSkill();
final WorldObject target = mut.getTargets().length > 0 ? mut.getTargets()[0] : null; final WorldObject target = !mut.getTargets().isEmpty() ? mut.getTargets().get(0) : null;
// Attack target after skill use // Attack target after skill use
if ((skill.nextActionIsAttack()) && (_target != this) && (target != null) && (_target == target) && _target.isCreature() && target.canBeAttacked()) if ((skill.nextActionIsAttack()) && (_target != this) && (target != null) && (_target == target) && _target.isCreature() && target.canBeAttacked())
@@ -5567,7 +5568,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
* @param skill The Skill to use * @param skill The Skill to use
* @param targets The table of WorldObject targets * @param targets The table of WorldObject targets
*/ */
public void callSkill(Skill skill, WorldObject[] targets) public void callSkill(Skill skill, List<WorldObject> targets)
{ {
try try
{ {
@@ -5739,7 +5740,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
{ {
final Attackable attackable = (Attackable) npcMob; final Attackable attackable = (Attackable) npcMob;
int skillEffectPoint = skill.getEffectPoint(); int skillEffectPoint = skill.getEffectPoint();
if (player.hasSummon() && (targets.length == 1) && CommonUtil.contains(targets, player.getSummon())) if (player.hasSummon() && (targets.size() == 1) && targets.contains(player.getSummon()))
{ {
skillEffectPoint = 0; skillEffectPoint = 0;
} }
@@ -6321,10 +6322,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
disableSkill(skill, skill.getReuseDelay()); disableSkill(skill, skill.getReuseDelay());
} }
// @formatter:off final List<WorldObject> targets = !ignoreTargetType ? skill.getTargetList(this, false, target) : Collections.singletonList(target);
final WorldObject[] targets = !ignoreTargetType ? skill.getTargetList(this, false, target) : new Creature[]{ target }; if (targets.isEmpty())
// @formatter:on
if (targets.length == 0)
{ {
return; return;
} }

View File

@@ -468,9 +468,9 @@ public class Cubic implements IIdentifiable
} }
} }
public void useCubicContinuous(Skill skill, WorldObject[] targets) public void useCubicContinuous(Skill skill, List<Creature> targets)
{ {
for (Creature target : (Creature[]) targets) for (Creature target : targets)
{ {
if ((target == null) || target.isDead()) if ((target == null) || target.isDead())
{ {
@@ -503,9 +503,9 @@ public class Cubic implements IIdentifiable
* @param skill * @param skill
* @param targets * @param targets
*/ */
public void useCubicMdam(Skill skill, WorldObject[] targets) public void useCubicMdam(Skill skill, List<Creature> targets)
{ {
for (Creature target : (Creature[]) targets) for (Creature target : targets)
{ {
if (target == null) if (target == null)
{ {
@@ -550,9 +550,9 @@ public class Cubic implements IIdentifiable
} }
} }
public void useCubicDrain(Skill skill, WorldObject[] targets) public void useCubicDrain(Skill skill, List<Creature> targets)
{ {
for (Creature target : (Creature[]) targets) for (Creature target : targets)
{ {
if (target.isAlikeDead()) if (target.isAlikeDead())
{ {
@@ -585,9 +585,9 @@ public class Cubic implements IIdentifiable
} }
} }
public void useCubicDisabler(Skill skill, WorldObject[] targets) public void useCubicDisabler(Skill skill, List<Creature> targets)
{ {
for (Creature target : (Creature[]) targets) for (Creature target : targets)
{ {
if ((target == null) || target.isDead()) if ((target == null) || target.isDead())
{ {

View File

@@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.model.actor.instance; package org.l2jmobius.gameserver.model.actor.instance;
import java.util.List;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.InstanceType; import org.l2jmobius.gameserver.enums.InstanceType;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
@@ -194,7 +196,7 @@ public class Monster extends Attackable
} }
@Override @Override
public void doCast(Skill skill, Creature target, WorldObject[] targets) public void doCast(Skill skill, Creature target, List<WorldObject> targets)
{ {
// Might need some exceptions here, but it will prevent the monster buffing player bug. // Might need some exceptions here, but it will prevent the monster buffing player bug.
if (!skill.isBad() && (getTarget() != null) && getTarget().isPlayer()) if (!skill.isBad() && (getTarget() != null) && getTarget().isPlayer())
@@ -203,6 +205,7 @@ public class Monster extends Attackable
setCastingSimultaneouslyNow(false); setCastingSimultaneouslyNow(false);
return; return;
} }
super.doCast(skill, target, targets); super.doCast(skill, target, targets);
} }
} }

View File

@@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.model.actor.instance;
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE; import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Future; import java.util.concurrent.Future;
@@ -456,14 +457,10 @@ public class TamedBeast extends FeedableBeast
{ {
final WorldObject oldTarget = owner.getTarget(); final WorldObject oldTarget = owner.getTarget();
owner.setTarget(_tamedBeast); owner.setTarget(_tamedBeast);
final WorldObject[] targets =
{
_tamedBeast
};
// emulate a call to the owner using food, but bypass all checks for range, etc // emulate a call to the owner using food, but bypass all checks for range, etc
// this also causes a call to the AI tasks handling feeding, which may call onReceiveFood as required. // this also causes a call to the AI tasks handling feeding, which may call onReceiveFood as required.
owner.callSkill(SkillData.getInstance().getSkill(foodTypeSkillId, 1), targets); owner.callSkill(SkillData.getInstance().getSkill(foodTypeSkillId, 1), Collections.singletonList(_tamedBeast));
owner.setTarget(oldTarget); owner.setTarget(oldTarget);
} }
else else

View File

@@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.model.actor.tasks.creature; package org.l2jmobius.gameserver.model.actor.tasks.creature;
import java.util.List;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
@@ -27,17 +29,17 @@ import org.l2jmobius.gameserver.model.skill.Skill;
public class MagicUseTask implements Runnable public class MagicUseTask implements Runnable
{ {
private final Creature _creature; private final Creature _creature;
private WorldObject[] _targets; private List<WorldObject> _targets;
private final Skill _skill; private final Skill _skill;
private int _count; private int _count;
private int _skillTime; private int _skillTime;
private int _phase; private int _phase;
private final boolean _simultaneously; private final boolean _simultaneously;
public MagicUseTask(Creature creature, WorldObject[] tgts, Skill s, int hit, boolean simultaneous) public MagicUseTask(Creature creature, List<WorldObject> targets, Skill s, int hit, boolean simultaneous)
{ {
_creature = creature; _creature = creature;
_targets = tgts; _targets = targets;
_skill = s; _skill = s;
_count = 0; _count = 0;
_phase = 1; _phase = 1;
@@ -92,7 +94,7 @@ public class MagicUseTask implements Runnable
return _skillTime; return _skillTime;
} }
public WorldObject[] getTargets() public List<WorldObject> getTargets()
{ {
return _targets; return _targets;
} }
@@ -117,7 +119,7 @@ public class MagicUseTask implements Runnable
_skillTime = skillTime; _skillTime = skillTime;
} }
public void setTargets(WorldObject[] targets) public void setTargets(List<WorldObject> targets)
{ {
_targets = targets; _targets = targets;
} }

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.tasks.cubics; package org.l2jmobius.gameserver.model.actor.tasks.cubics;
import java.util.Collections;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -139,39 +140,34 @@ public class CubicAction implements Runnable
{ {
_cubic.getOwner().broadcastPacket(new MagicSkillUse(_cubic.getOwner(), target, skill.getId(), skill.getLevel(), 0, 0)); _cubic.getOwner().broadcastPacket(new MagicSkillUse(_cubic.getOwner(), target, skill.getId(), skill.getLevel(), 0, 0));
final Creature[] targets =
{
target
};
if (skill.isContinuous()) if (skill.isContinuous())
{ {
_cubic.useCubicContinuous(skill, targets); _cubic.useCubicContinuous(skill, Collections.singletonList(target));
} }
else else
{ {
skill.activateSkill(_cubic, targets); skill.activateSkill(_cubic, Collections.singletonList(target));
} }
if (skill.hasEffectType(EffectType.MAGICAL_ATTACK)) if (skill.hasEffectType(EffectType.MAGICAL_ATTACK))
{ {
_cubic.useCubicMdam(skill, targets); _cubic.useCubicMdam(skill, Collections.singletonList(target));
} }
else if (skill.hasEffectType(EffectType.HP_DRAIN)) else if (skill.hasEffectType(EffectType.HP_DRAIN))
{ {
_cubic.useCubicDrain(skill, targets); _cubic.useCubicDrain(skill, Collections.singletonList(target));
} }
else if (skill.hasEffectType(EffectType.STUN, EffectType.ROOT, EffectType.PARALYZE)) else if (skill.hasEffectType(EffectType.STUN, EffectType.ROOT, EffectType.PARALYZE))
{ {
_cubic.useCubicDisabler(skill, targets); _cubic.useCubicDisabler(skill, Collections.singletonList(target));
} }
else if (skill.hasEffectType(EffectType.DMG_OVER_TIME, EffectType.DMG_OVER_TIME_PERCENT)) else if (skill.hasEffectType(EffectType.DMG_OVER_TIME, EffectType.DMG_OVER_TIME_PERCENT))
{ {
_cubic.useCubicContinuous(skill, targets); _cubic.useCubicContinuous(skill, Collections.singletonList(target));
} }
else if (skill.hasEffectType(EffectType.AGGRESSION)) else if (skill.hasEffectType(EffectType.AGGRESSION))
{ {
_cubic.useCubicDisabler(skill, targets); _cubic.useCubicDisabler(skill, Collections.singletonList(target));
} }
// The cubic has done an action, increase the current count // The cubic has done an action, increase the current count

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.tasks.cubics; package org.l2jmobius.gameserver.model.actor.tasks.cubics;
import java.util.Collections;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -75,7 +76,7 @@ public class CubicHeal implements Runnable
final Creature target = _cubic.getTarget(); final Creature target = _cubic.getTarget();
if ((target != null) && !target.isDead() && ((target.getMaxHp() - target.getCurrentHp()) > skill.getPower())) if ((target != null) && !target.isDead() && ((target.getMaxHp() - target.getCurrentHp()) > skill.getPower()))
{ {
skill.activateSkill(_cubic, target); skill.activateSkill(_cubic, Collections.singletonList(target));
_cubic.getOwner().broadcastPacket(new MagicSkillUse(_cubic.getOwner(), target, skill.getId(), skill.getLevel(), 0, 0)); _cubic.getOwner().broadcastPacket(new MagicSkillUse(_cubic.getOwner(), target, skill.getId(), skill.getLevel(), 0, 0));
} }
} }

View File

@@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.model.conditions; package org.l2jmobius.gameserver.model.conditions;
import java.util.List;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Attackable; import org.l2jmobius.gameserver.model.actor.Attackable;
@@ -55,7 +57,7 @@ public class ConditionPlayerCanSweep extends Condition
final Player sweeper = effector.getActingPlayer(); final Player sweeper = effector.getActingPlayer();
if (skill != null) if (skill != null)
{ {
final WorldObject[] targets = skill.getTargetList(sweeper); final List<WorldObject> targets = skill.getTargetList(sweeper);
if (targets != null) if (targets != null)
{ {
Attackable target; Attackable target;

View File

@@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.model.events.impl.creature; package org.l2jmobius.gameserver.model.events.impl.creature;
import java.util.Collection;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.EventType;
@@ -32,7 +34,7 @@ public class OnCreatureSkillUse implements IBaseEvent
private Skill _skill; private Skill _skill;
private boolean _simultaneously; private boolean _simultaneously;
private Creature _target; private Creature _target;
private WorldObject[] _targets; private Collection<WorldObject> _targets;
public OnCreatureSkillUse() public OnCreatureSkillUse()
{ {
@@ -78,12 +80,12 @@ public class OnCreatureSkillUse implements IBaseEvent
_target = target; _target = target;
} }
public WorldObject[] getTargets() public Collection<WorldObject> getTargets()
{ {
return _targets; return _targets;
} }
public synchronized void setTargets(WorldObject[] targets) public synchronized void setTargets(Collection<WorldObject> targets)
{ {
_targets = targets; _targets = targets;
} }

View File

@@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.model.events.impl.creature.npc; package org.l2jmobius.gameserver.model.events.impl.creature.npc;
import java.util.List;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
@@ -31,10 +33,10 @@ public class OnNpcSkillSee implements IBaseEvent
private final Npc _npc; private final Npc _npc;
private final Player _caster; private final Player _caster;
private final Skill _skill; private final Skill _skill;
private final WorldObject[] _targets; private final List<WorldObject> _targets;
private final boolean _isSummon; private final boolean _isSummon;
public OnNpcSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public OnNpcSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
_npc = npc; _npc = npc;
_caster = caster; _caster = caster;
@@ -58,7 +60,7 @@ public class OnNpcSkillSee implements IBaseEvent
return _skill; return _skill;
} }
public WorldObject[] getTargets() public List<WorldObject> getTargets()
{ {
return _targets; return _targets;
} }

View File

@@ -16,8 +16,12 @@
*/ */
package org.l2jmobius.gameserver.model.item; package org.l2jmobius.gameserver.model.item;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.conditions.Condition; import org.l2jmobius.gameserver.model.conditions.Condition;
@@ -365,7 +369,7 @@ public class Weapon extends ItemTemplate
return; return;
} }
onCritSkill.activateSkill(caster, target); onCritSkill.activateSkill(caster, Collections.singletonList(target));
} }
/** /**
@@ -423,16 +427,12 @@ public class Weapon extends ItemTemplate
// Launch the magic skill and calculate its effects // Launch the magic skill and calculate its effects
// Get the skill handler corresponding to the skill type // Get the skill handler corresponding to the skill type
onMagicSkill.activateSkill(caster, target); onMagicSkill.activateSkill(caster, Collections.singletonList(target));
// notify quests of a skill use // notify quests of a skill use
if (caster.isPlayer()) if (caster.isPlayer())
{ {
final Creature[] targets = final List<WorldObject> targets = Collections.singletonList(target);
{
target
};
World.getInstance().forEachVisibleObjectInRange(caster, Npc.class, 1000, npc -> World.getInstance().forEachVisibleObjectInRange(caster, Npc.class, 1000, npc ->
{ {
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_SKILL_SEE, npc)) if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_SKILL_SEE, npc))

View File

@@ -21,6 +21,7 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -334,7 +335,7 @@ public abstract class Inventory extends ItemContainer
final Skill unequipSkill = it.getUnequipSkill(); final Skill unequipSkill = it.getUnequipSkill();
if (unequipSkill != null) if (unequipSkill != null)
{ {
unequipSkill.activateSkill(player, player); unequipSkill.activateSkill(player, Collections.singletonList(player));
} }
if (update) if (update)

View File

@@ -705,7 +705,7 @@ public class Quest extends AbstractScript implements IIdentifiable
* @param targets * @param targets
* @param isSummon * @param isSummon
*/ */
public void notifySkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public void notifySkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
String res = null; String res = null;
try try
@@ -1142,7 +1142,7 @@ public class Quest extends AbstractScript implements IIdentifiable
* @param isSummon if {@code true}, the skill was actually cast by the player's summon, not the player himself * @param isSummon if {@code true}, the skill was actually cast by the player's summon, not the player himself
* @return * @return
*/ */
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
return null; return null;
} }

View File

@@ -18,6 +18,7 @@ package org.l2jmobius.gameserver.model.skill;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.HashSet; import java.util.HashSet;
@@ -64,8 +65,6 @@ public class Skill implements IIdentifiable
{ {
private static final Logger LOGGER = Logger.getLogger(Skill.class.getName()); private static final Logger LOGGER = Logger.getLogger(Skill.class.getName());
private static final WorldObject[] EMPTY_TARGET_LIST = new WorldObject[0];
/** Skill ID. */ /** Skill ID. */
private final int _id; private final int _id;
/** Skill level. */ /** Skill level. */
@@ -950,7 +949,7 @@ public class Skill implements IIdentifiable
return true; return true;
} }
public WorldObject[] getTargetList(Creature creature, boolean onlyFirst) public List<WorldObject> getTargetList(Creature creature, boolean onlyFirst)
{ {
// Init to null the target of the skill // Init to null the target of the skill
Creature target = null; Creature target = null;
@@ -987,7 +986,7 @@ public class Skill implements IIdentifiable
* @param target * @param target
* @return * @return
*/ */
public WorldObject[] getTargetList(Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Creature creature, boolean onlyFirst, Creature target)
{ {
final ITargetTypeHandler handler = TargetHandler.getInstance().getHandler(getTargetType()); final ITargetTypeHandler handler = TargetHandler.getInstance().getHandler(getTargetType());
if (handler != null) if (handler != null)
@@ -1001,23 +1000,25 @@ public class Skill implements IIdentifiable
LOGGER.log(Level.WARNING, "Exception in Skill.getTargetList(): " + e.getMessage(), e); LOGGER.log(Level.WARNING, "Exception in Skill.getTargetList(): " + e.getMessage(), e);
} }
} }
creature.sendMessage("Target type of skill is not currently handled."); creature.sendMessage("Target type of skill is not currently handled.");
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
public WorldObject[] getTargetList(Creature creature) public List<WorldObject> getTargetList(Creature creature)
{ {
return getTargetList(creature, false); return getTargetList(creature, false);
} }
public WorldObject getFirstOfTargetList(Creature creature) public WorldObject getFirstOfTargetList(Creature creature)
{ {
final WorldObject[] targets = getTargetList(creature, true); final List<WorldObject> targets = getTargetList(creature, true);
if (targets.length == 0) if (targets.isEmpty())
{ {
return null; return null;
} }
return targets[0];
return targets.get(0);
} }
/** /**
@@ -1321,7 +1322,7 @@ public class Skill implements IIdentifiable
* @param caster the caster * @param caster the caster
* @param targets the targets * @param targets the targets
*/ */
public void activateSkill(Creature caster, WorldObject... targets) public void activateSkill(Creature caster, Collection<WorldObject> targets)
{ {
activateSkill(caster, null, targets); activateSkill(caster, null, targets);
} }
@@ -1331,7 +1332,7 @@ public class Skill implements IIdentifiable
* @param cubic the cubic * @param cubic the cubic
* @param targets the targets * @param targets the targets
*/ */
public void activateSkill(Cubic cubic, WorldObject... targets) public void activateSkill(Cubic cubic, Collection<WorldObject> targets)
{ {
activateSkill(cubic.getOwner(), cubic, targets); activateSkill(cubic.getOwner(), cubic, targets);
} }
@@ -1342,7 +1343,7 @@ public class Skill implements IIdentifiable
* @param cubic the cubic, can be {@code null} * @param cubic the cubic, can be {@code null}
* @param targets the targets * @param targets the targets
*/ */
private void activateSkill(Creature caster, Cubic cubic, WorldObject... targets) private void activateSkill(Creature caster, Cubic cubic, Collection<WorldObject> targets)
{ {
for (WorldObject obj : targets) for (WorldObject obj : targets)
{ {

View File

@@ -16,7 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.skill; package org.l2jmobius.gameserver.model.skill;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.logging.Level; import java.util.logging.Level;
@@ -162,8 +162,7 @@ public class SkillChannelizer implements Runnable
return; return;
} }
final List<Creature> targetList = new ArrayList<>(); final List<Creature> targetList = new LinkedList<>();
for (WorldObject chars : skill.getTargetList(_channelizer)) for (WorldObject chars : skill.getTargetList(_channelizer))
{ {
if (chars.isCreature()) if (chars.isCreature())

View File

@@ -16,9 +16,8 @@
*/ */
package org.l2jmobius.gameserver.network.serverpackets; package org.l2jmobius.gameserver.network.serverpackets;
import java.util.Arrays; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -33,9 +32,9 @@ public class MagicSkillLaunched extends ServerPacket
private final int _objectId; private final int _objectId;
private final int _skillId; private final int _skillId;
private final int _skillLevel; private final int _skillLevel;
private final List<WorldObject> _targets; private final Collection<WorldObject> _targets;
public MagicSkillLaunched(Creature creature, int skillId, int skillLevel, WorldObject... targets) public MagicSkillLaunched(Creature creature, int skillId, int skillLevel, Collection<WorldObject> targets)
{ {
_objectId = creature.getObjectId(); _objectId = creature.getObjectId();
_skillId = skillId; _skillId = skillId;
@@ -45,12 +44,17 @@ public class MagicSkillLaunched extends ServerPacket
_targets = Collections.singletonList(creature); _targets = Collections.singletonList(creature);
return; return;
} }
_targets = Arrays.asList(targets); _targets = targets;
}
public MagicSkillLaunched(Creature creature, int skillId, int skillLevel, WorldObject target)
{
this(creature, skillId, skillLevel, Collections.singletonList(target == null ? creature : target));
} }
public MagicSkillLaunched(Creature creature, int skillId, int skillLevel) public MagicSkillLaunched(Creature creature, int skillId, int skillLevel)
{ {
this(creature, skillId, skillLevel, creature); this(creature, skillId, skillLevel, Collections.singletonList(creature));
} }
@Override @Override

View File

@@ -17,6 +17,7 @@
package ai.areas.BeastFarm; package ai.areas.BeastFarm;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@@ -512,11 +513,11 @@ public class FeedableBeasts extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
// this behavior is only run when the target of skill is the passed npc (chest) // this behavior is only run when the target of skill is the passed npc (chest)
// i.e. when the player is attempting to open the chest using a skill // i.e. when the player is attempting to open the chest using a skill
if (!CommonUtil.contains(targets, npc)) if (!targets.contains(npc))
{ {
return super.onSkillSee(npc, caster, skill, targets, isSummon); return super.onSkillSee(npc, caster, skill, targets, isSummon);
} }

View File

@@ -25,7 +25,6 @@ import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.commons.util.CommonUtil;
import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.DoorData; import org.l2jmobius.gameserver.data.xml.DoorData;
import org.l2jmobius.gameserver.data.xml.NpcData; import org.l2jmobius.gameserver.data.xml.NpcData;
@@ -310,9 +309,9 @@ public class EnergySeeds extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (!CommonUtil.contains(targets, npc) || (skill.getId() != 5780)) if (!targets.contains(npc) || (skill.getId() != 5780))
{ {
return super.onSkillSee(npc, caster, skill, targets, isSummon); return super.onSkillSee(npc, caster, skill, targets, isSummon);
} }

View File

@@ -16,6 +16,8 @@
*/ */
package ai.areas.Gracia.AI; package ai.areas.Gracia.AI;
import java.util.List;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
@@ -45,7 +47,7 @@ public class StarStones extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (skill.getId() == 932) if (skill.getId() == 932)
{ {

View File

@@ -18,6 +18,7 @@ package ai.areas.Gracia.instances.HallOfSufferingAttack;
import java.util.Calendar; import java.util.Calendar;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.ai.CtrlEvent; import org.l2jmobius.gameserver.ai.CtrlEvent;
@@ -353,7 +354,7 @@ public class HallOfSufferingAttack extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (skill.hasEffectType(EffectType.REBALANCE_HP, EffectType.HEAL)) if (skill.hasEffectType(EffectType.REBALANCE_HP, EffectType.HEAL))
{ {

View File

@@ -18,6 +18,7 @@ package ai.areas.Gracia.instances.HallOfSufferingDefence;
import java.util.Calendar; import java.util.Calendar;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.ai.CtrlEvent; import org.l2jmobius.gameserver.ai.CtrlEvent;
@@ -353,7 +354,7 @@ public class HallOfSufferingDefence extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (skill.hasEffectType(EffectType.REBALANCE_HP, EffectType.HEAL)) if (skill.hasEffectType(EffectType.REBALANCE_HP, EffectType.HEAL))
{ {

View File

@@ -16,6 +16,8 @@
*/ */
package ai.areas.Hellbound.AI; package ai.areas.Hellbound.AI;
import java.util.List;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
@@ -82,10 +84,10 @@ public class Chimeras extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (((skill.getId() == BOTTLE) && !npc.isDead()) // if (((skill.getId() == BOTTLE) && !npc.isDead()) //
&& ((targets.length > 0) && (targets[0] == npc)) // && ((!targets.isEmpty()) && (targets.get(0) == npc)) //
&& (npc.getCurrentHp() < (npc.getMaxHp() * 0.1))) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.1)))
{ {
if (HellboundEngine.getInstance().getLevel() == 7) if (HellboundEngine.getInstance().getLevel() == 7)

View File

@@ -16,7 +16,8 @@
*/ */
package ai.areas.MonasteryOfSilence; package ai.areas.MonasteryOfSilence;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List;
import org.l2jmobius.commons.util.CommonUtil; import org.l2jmobius.commons.util.CommonUtil;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
@@ -103,11 +104,11 @@ public class MonasteryOfSilence extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (CommonUtil.contains(mobs2, npc.getId())) if (CommonUtil.contains(mobs2, npc.getId()))
{ {
if (skill.hasEffectType(EffectType.AGGRESSION) && (targets.length != 0)) if (skill.hasEffectType(EffectType.AGGRESSION) && !targets.isEmpty())
{ {
for (WorldObject obj : targets) for (WorldObject obj : targets)
{ {
@@ -129,7 +130,7 @@ public class MonasteryOfSilence extends AbstractNpcAI
{ {
if (CommonUtil.contains(mobs1, npc.getId())) if (CommonUtil.contains(mobs1, npc.getId()))
{ {
final ArrayList<Playable> result = new ArrayList<>(); final List<Playable> result = new LinkedList<>();
for (WorldObject obj : World.getInstance().getVisibleObjects(npc, WorldObject.class)) for (WorldObject obj : World.getInstance().getVisibleObjects(npc, WorldObject.class))
{ {
if ((obj instanceof Player) || (obj instanceof Pet)) if ((obj instanceof Player) || (obj instanceof Pet))
@@ -140,12 +141,12 @@ public class MonasteryOfSilence extends AbstractNpcAI
} }
} }
} }
if (!result.isEmpty() && (result.size() != 0))
if (!result.isEmpty())
{ {
final Object[] characters = result.toArray(); for (Playable obj : result)
for (Object obj : characters)
{ {
final Playable target = (Playable) (obj instanceof Player ? obj : ((Summon) obj).getOwner()); final Playable target = obj instanceof Player ? obj : ((Summon) obj).getOwner();
if ((target.getActiveWeaponInstance() != null) && !npc.isInCombat() && (npc.getTarget() == null)) if ((target.getActiveWeaponInstance() != null) && !npc.isInCombat() && (npc.getTarget() == null))
{ {
npc.setTarget(target); npc.setTarget(target);

View File

@@ -184,9 +184,9 @@ public class StakatoNest extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (CommonUtil.contains(COCOONS, npc.getId()) && CommonUtil.contains(targets, npc) && (skill.getId() == GROWTH_ACCELERATOR)) if (CommonUtil.contains(COCOONS, npc.getId()) && targets.contains(npc) && (skill.getId() == GROWTH_ACCELERATOR))
{ {
npc.doDie(caster); npc.doDie(caster);
final Npc spawned = addSpawn(STAKATO_CHIEF, npc.getX(), npc.getY(), npc.getZ(), Util.calculateHeadingFrom(npc, caster), false, 0, true); final Npc spawned = addSpawn(STAKATO_CHIEF, npc.getX(), npc.getY(), npc.getZ(), Util.calculateHeadingFrom(npc, caster), false, 0, true);

View File

@@ -559,7 +559,7 @@ public class Beleth extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player player, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player player, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (!npc.isDead() && (npc.getId() == REAL_BELETH) && !npc.isCastingNow() && skill.hasEffectType(EffectType.HEAL) && (getRandom(100) < 80)) if (!npc.isDead() && (npc.getId() == REAL_BELETH) && !npc.isCastingNow() && skill.hasEffectType(EffectType.HEAL) && (getRandom(100) < 80))
{ {

View File

@@ -17,6 +17,7 @@
package ai.bosses.Orfen; package ai.bosses.Orfen;
import java.util.Collection; import java.util.Collection;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.Config; import org.l2jmobius.Config;
@@ -235,7 +236,7 @@ public class Orfen extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (npc.getId() == ORFEN) if (npc.getId() == ORFEN)
{ {

View File

@@ -16,6 +16,8 @@
*/ */
package ai.others; package ai.others;
import java.util.List;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
@@ -69,7 +71,7 @@ public class Ballista extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if ((skill != null) && (caster.getTarget() == npc) && (getRandom(100) < 40) && (skill == BOMB.getSkill())) if ((skill != null) && (caster.getTarget() == npc) && (getRandom(100) < 40) && (skill == BOMB.getSkill()))
{ {

View File

@@ -16,6 +16,8 @@
*/ */
package ai.others; package ai.others;
import java.util.List;
import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -60,7 +62,7 @@ public class Chests extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (npc instanceof Chest) if (npc instanceof Chest)
{ {

View File

@@ -16,6 +16,8 @@
*/ */
package ai.others; package ai.others;
import java.util.List;
import org.l2jmobius.gameserver.enums.ChatType; import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Attackable; import org.l2jmobius.gameserver.model.actor.Attackable;
@@ -104,7 +106,7 @@ public class PrisonGuards extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (!caster.isAffectedBySkill(TIMER)) if (!caster.isAffectedBySkill(TIMER))
{ {

View File

@@ -16,6 +16,8 @@
*/ */
package ai.others; package ai.others;
import java.util.List;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
@@ -55,9 +57,9 @@ public class Remnants extends AbstractNpcAI
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if ((skill.getId() == SKILL_HOLY_WATER) && !npc.isDead() && (targets.length > 0) && (targets[0] == npc) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.02))) if ((skill.getId() == SKILL_HOLY_WATER) && !npc.isDead() && !targets.isEmpty() && (targets.get(0) == npc) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.02)))
{ {
npc.doDie(caster); npc.doDie(caster);
//@formatter:off //@formatter:off

View File

@@ -16,6 +16,7 @@
*/ */
package custom.SellBuff; package custom.SellBuff;
import java.util.Collections;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import org.l2jmobius.Config; import org.l2jmobius.Config;
@@ -407,7 +408,7 @@ public class SellBuff implements IVoicedCommandHandler, IBypassHandler
AbstractScript.takeItems(player, Config.SELLBUFF_PAYMENT_ID, holder.getPrice()); AbstractScript.takeItems(player, Config.SELLBUFF_PAYMENT_ID, holder.getPrice());
AbstractScript.giveItems(seller, Config.SELLBUFF_PAYMENT_ID, holder.getPrice()); AbstractScript.giveItems(seller, Config.SELLBUFF_PAYMENT_ID, holder.getPrice());
seller.reduceCurrentMp(skillToBuy.getMpConsume() * Config.SELLBUFF_MP_MULTIPLER); seller.reduceCurrentMp(skillToBuy.getMpConsume() * Config.SELLBUFF_MP_MULTIPLER);
skillToBuy.activateSkill(seller, player); skillToBuy.activateSkill(seller, Collections.singletonList(player));
} }
else else
{ {

View File

@@ -22,7 +22,6 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.util.CommonUtil;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
@@ -197,11 +196,11 @@ public class Rabbits extends Event
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (skill.getId() == RABBIT_TORNADO.getSkillId()) if (skill.getId() == RABBIT_TORNADO.getSkillId())
{ {
if (!npc.isInvisible() && CommonUtil.contains(targets, npc)) if (!npc.isInvisible() && targets.contains(npc))
{ {
dropItem(npc, caster, DROPLIST); dropItem(npc, caster, DROPLIST);
npc.deleteMe(); npc.deleteMe();

View File

@@ -170,7 +170,7 @@ public class SavingSanta extends LongTimeEvent
} }
@Override @Override
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isSummon) public String onSkillSee(Npc npc, Player caster, Skill skill, List<WorldObject> targets, boolean isSummon)
{ {
if (_isWaitingForPlayerSkill && (skill.getId() > 21013) && (skill.getId() < 21017)) if (_isWaitingForPlayerSkill && (skill.getId() > 21013) && (skill.getId() < 21017))
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
@@ -78,11 +77,10 @@ public class Confuse extends AbstractEffect
{ {
info.getEffected().getAI().notifyEvent(CtrlEvent.EVT_CONFUSED); info.getEffected().getAI().notifyEvent(CtrlEvent.EVT_CONFUSED);
final List<Creature> targetList = new ArrayList<>();
// Getting the possible targets // Getting the possible targets
World.getInstance().forEachVisibleObject(info.getEffected(), Creature.class, targetList::add); final List<Creature> targetList = World.getInstance().getVisibleObjects(info.getEffected(), Creature.class);
// if there is no target, exit function // If there is no target, exit function
if (!targetList.isEmpty()) if (!targetList.isEmpty())
{ {
// Choosing randomly a new target // Choosing randomly a new target

View File

@@ -140,8 +140,7 @@ public class TriggerSkillByAttack extends AbstractEffect
} }
final Skill triggerSkill = _skill.getSkill(); final Skill triggerSkill = _skill.getSkill();
final WorldObject[] targets = targetHandler.getTargetList(triggerSkill, event.getAttacker(), false, event.getTarget()); for (WorldObject triggerTarget : targetHandler.getTargetList(triggerSkill, event.getAttacker(), false, event.getTarget()))
for (WorldObject triggerTarget : targets)
{ {
if ((triggerTarget == null) || !triggerTarget.isCreature()) if ((triggerTarget == null) || !triggerTarget.isCreature())
{ {

View File

@@ -78,8 +78,7 @@ public class TriggerSkillByAvoid extends AbstractEffect
} }
final Skill triggerSkill = _skill.getSkill(); final Skill triggerSkill = _skill.getSkill();
final WorldObject[] targets = targetHandler.getTargetList(triggerSkill, event.getTarget(), false, event.getAttacker()); for (WorldObject triggerTarget : targetHandler.getTargetList(triggerSkill, event.getTarget(), false, event.getAttacker()))
for (WorldObject triggerTarget : targets)
{ {
if ((triggerTarget == null) || !triggerTarget.isCreature()) if ((triggerTarget == null) || !triggerTarget.isCreature())
{ {

View File

@@ -95,8 +95,7 @@ public class TriggerSkillByDamage extends AbstractEffect
} }
final Skill triggerSkill = _skill.getSkill(); final Skill triggerSkill = _skill.getSkill();
final WorldObject[] targets = targetHandler.getTargetList(triggerSkill, event.getTarget(), false, event.getAttacker()); for (WorldObject triggerTarget : targetHandler.getTargetList(triggerSkill, event.getTarget(), false, event.getAttacker()))
for (WorldObject triggerTarget : targets)
{ {
if ((triggerTarget == null) || !triggerTarget.isCreature()) if ((triggerTarget == null) || !triggerTarget.isCreature())
{ {

View File

@@ -85,8 +85,7 @@ public class TriggerSkillBySkill extends AbstractEffect
} }
final Skill triggerSkill = _skill.getSkill(); final Skill triggerSkill = _skill.getSkill();
final WorldObject[] targets = targetHandler.getTargetList(triggerSkill, event.getCaster(), false, event.getTarget()); for (WorldObject triggerTarget : targetHandler.getTargetList(triggerSkill, event.getCaster(), false, event.getTarget()))
for (WorldObject triggerTarget : targets)
{ {
if ((triggerTarget == null) || !triggerTarget.isCreature()) if ((triggerTarget == null) || !triggerTarget.isCreature())
{ {

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -35,13 +35,13 @@ import org.l2jmobius.gameserver.util.Util;
public class Area implements ITargetTypeHandler public class Area implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
if ((target == null) || (((target == creature) || target.isAlikeDead()) && (skill.getCastRange() >= 0)) || (!(target.isAttackable() || target.isPlayable()))) if ((target == null) || (((target == creature) || target.isAlikeDead()) && (skill.getCastRange() >= 0)) || (!(target.isAttackable() || target.isPlayable())))
{ {
creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return targetList;
} }
final Creature origin; final Creature origin;
@@ -50,15 +50,13 @@ public class Area implements ITargetTypeHandler
{ {
if (!Skill.checkForAreaOffensiveSkills(creature, target, skill, srcInArena)) if (!Skill.checkForAreaOffensiveSkills(creature, target, skill, srcInArena))
{ {
return EMPTY_TARGET_LIST; return targetList;
} }
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
origin = target; origin = target;
@@ -93,12 +91,7 @@ public class Area implements ITargetTypeHandler
} }
}); });
if (targetList.isEmpty()) return targetList;
{
return EMPTY_TARGET_LIST;
}
return targetList.toArray(new Creature[targetList.size()]);
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -35,25 +35,22 @@ import org.l2jmobius.gameserver.util.Util;
public class AreaCorpseMob implements ITargetTypeHandler public class AreaCorpseMob implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<WorldObject> targetList = new LinkedList<>();
if ((target == null) || !target.isAttackable() || !target.isDead()) if ((target == null) || !target.isAttackable() || !target.isDead())
{ {
creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return targetList;
} }
targetList.add(target);
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] return targetList;
{
target
};
} }
final List<Creature> targetList = new ArrayList<>();
targetList.add(target);
final boolean srcInArena = creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE); final boolean srcInArena = creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE);
World.getInstance().forEachVisibleObject(creature, Creature.class, obj -> World.getInstance().forEachVisibleObject(creature, Creature.class, obj ->
{ {
@@ -70,11 +67,7 @@ public class AreaCorpseMob implements ITargetTypeHandler
targetList.add(obj); targetList.add(obj);
}); });
if (targetList.isEmpty()) return targetList;
{
return EMPTY_TARGET_LIST;
}
return targetList.toArray(new Creature[targetList.size()]);
} }
@Override @Override

View File

@@ -16,8 +16,8 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.geoengine.GeoEngine;
@@ -38,31 +38,28 @@ import org.l2jmobius.gameserver.network.SystemMessageId;
public class AreaFriendly implements ITargetTypeHandler public class AreaFriendly implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
final Player player = creature.getActingPlayer(); final Player player = creature.getActingPlayer();
if (!checkTarget(player, target) && (skill.getCastRange() >= 0)) if (!checkTarget(player, target) && (skill.getCastRange() >= 0))
{ {
player.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); player.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return targetList;
} }
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
if (player.getActingPlayer().isInOlympiadMode()) if (player.getActingPlayer().isInOlympiadMode())
{ {
return new Creature[] targetList.add(player);
{ return targetList;
player
};
} }
targetList.add(target); // Add target to target list targetList.add(target); // Add target to target list
if (target != null) if (target != null)
{ {
@@ -83,11 +80,7 @@ public class AreaFriendly implements ITargetTypeHandler
}); });
} }
if (targetList.isEmpty()) return targetList;
{
return EMPTY_TARGET_LIST;
}
return targetList.toArray(new Creature[targetList.size()]);
} }
private boolean checkTarget(Player player, Creature target) private boolean checkTarget(Player player, Creature target)

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -33,21 +33,19 @@ import org.l2jmobius.gameserver.model.zone.ZoneId;
public class AreaSummon implements ITargetTypeHandler public class AreaSummon implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
final Creature targetCreature = creature.getSummon(); final Creature targetCreature = creature.getSummon();
if ((targetCreature == null) || !targetCreature.isServitor() || targetCreature.isDead()) if ((targetCreature == null) || !targetCreature.isServitor() || targetCreature.isDead())
{ {
return EMPTY_TARGET_LIST; return targetList;
} }
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] targetList.add(targetCreature);
{ return targetList;
targetCreature
};
} }
final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE)); final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE));
@@ -77,12 +75,7 @@ public class AreaSummon implements ITargetTypeHandler
targetList.add(obj); targetList.add(obj);
}); });
if (targetList.isEmpty()) return targetList;
{
return EMPTY_TARGET_LIST;
}
return targetList.toArray(new Creature[targetList.size()]);
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -35,9 +35,9 @@ import org.l2jmobius.gameserver.model.zone.ZoneId;
public class Aura implements ITargetTypeHandler public class Aura implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE)); final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE));
for (Creature obj : World.getInstance().getVisibleObjectsInRange(creature, Creature.class, skill.getAffectRange())) for (Creature obj : World.getInstance().getVisibleObjectsInRange(creature, Creature.class, skill.getAffectRange()))
{ {
@@ -63,18 +63,16 @@ public class Aura implements ITargetTypeHandler
continue; continue;
} }
targetList.add(obj);
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] return targetList;
{
obj
};
} }
targetList.add(obj);
} }
} }
return targetList.toArray(new Creature[targetList.size()]);
return targetList;
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -33,32 +33,29 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class AuraCorpseMob implements ITargetTypeHandler public class AuraCorpseMob implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
// Go through the Creature _knownList // Go through the Creature _knownList
final int maxTargets = skill.getAffectLimit(); final int maxTargets = skill.getAffectLimit();
for (Attackable obj : World.getInstance().getVisibleObjectsInRange(creature, Attackable.class, skill.getAffectRange())) for (Attackable obj : World.getInstance().getVisibleObjectsInRange(creature, Attackable.class, skill.getAffectRange()))
{ {
if (obj.isDead()) if (obj.isDead())
{ {
targetList.add(obj);
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] return targetList;
{
obj
};
} }
if ((maxTargets > 0) && (targetList.size() >= maxTargets)) if ((maxTargets > 0) && (targetList.size() >= maxTargets))
{ {
break; break;
} }
targetList.add(obj);
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.geoengine.GeoEngine;
@@ -37,9 +37,9 @@ import org.l2jmobius.gameserver.model.zone.ZoneId;
public class AuraFriendly implements ITargetTypeHandler public class AuraFriendly implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
final Player player = creature.getActingPlayer(); final Player player = creature.getActingPlayer();
final int maxTargets = skill.getAffectLimit(); final int maxTargets = skill.getAffectLimit();
World.getInstance().forEachVisibleObject(player, Creature.class, obj -> World.getInstance().forEachVisibleObject(player, Creature.class, obj ->
@@ -57,12 +57,7 @@ public class AuraFriendly implements ITargetTypeHandler
targetList.add(obj); targetList.add(obj);
}); });
if (targetList.isEmpty()) return targetList;
{
return EMPTY_TARGET_LIST;
}
return targetList.toArray(new Creature[targetList.size()]);
} }
private boolean checkTarget(Player player, Creature target) private boolean checkTarget(Player player, Creature target)

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -35,13 +35,13 @@ import org.l2jmobius.gameserver.util.Util;
public class BehindArea implements ITargetTypeHandler public class BehindArea implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
if ((target == null) || (((target == creature) || target.isAlikeDead()) && (skill.getCastRange() >= 0)) || (!(target.isAttackable() || target.isPlayable()))) if ((target == null) || (((target == creature) || target.isAlikeDead()) && (skill.getCastRange() >= 0)) || (!(target.isAttackable() || target.isPlayable())))
{ {
creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return targetList;
} }
final Creature origin; final Creature origin;
@@ -50,19 +50,16 @@ public class BehindArea implements ITargetTypeHandler
{ {
if (!Skill.checkForAreaOffensiveSkills(creature, target, skill, srcInArena)) if (!Skill.checkForAreaOffensiveSkills(creature, target, skill, srcInArena))
{ {
return EMPTY_TARGET_LIST; return targetList;
}
if (onlyFirst)
{
return new Creature[]
{
target
};
} }
origin = target; origin = target;
targetList.add(origin); // Add target to target list targetList.add(origin); // Add target to target list
if (onlyFirst)
{
return targetList;
}
} }
else else
{ {
@@ -103,12 +100,7 @@ public class BehindArea implements ITargetTypeHandler
} }
}); });
if (targetList.isEmpty()) return targetList;
{
return EMPTY_TARGET_LIST;
}
return targetList.toArray(new Creature[targetList.size()]);
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -33,9 +33,9 @@ import org.l2jmobius.gameserver.model.zone.ZoneId;
public class BehindAura implements ITargetTypeHandler public class BehindAura implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE)); final boolean srcInArena = (creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE));
final int maxTargets = skill.getAffectLimit(); final int maxTargets = skill.getAffectLimit();
for (Creature obj : World.getInstance().getVisibleObjectsInRange(creature, Creature.class, skill.getAffectRange())) for (Creature obj : World.getInstance().getVisibleObjectsInRange(creature, Creature.class, skill.getAffectRange()))
@@ -52,23 +52,20 @@ public class BehindAura implements ITargetTypeHandler
continue; continue;
} }
targetList.add(obj);
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] return targetList;
{
obj
};
} }
if ((maxTargets > 0) && (targetList.size() >= maxTargets)) if ((maxTargets > 0) && (targetList.size() >= maxTargets))
{ {
break; break;
} }
targetList.add(obj);
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -35,31 +35,27 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class Clan implements ITargetTypeHandler public class Clan implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
if (creature.isPlayable()) if (creature.isPlayable())
{ {
final Player player = creature.getActingPlayer(); final Player player = creature.getActingPlayer();
if (player == null) if (player == null)
{ {
return EMPTY_TARGET_LIST; return targetList;
} }
if (player.isInOlympiadMode()) if (player.isInOlympiadMode())
{ {
return new Creature[] targetList.add(player);
{ return targetList;
player
};
} }
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] targetList.add(player);
{ return targetList;
player
};
} }
targetList.add(player); targetList.add(player);
@@ -115,32 +111,25 @@ public class Clan implements ITargetTypeHandler
continue; continue;
} }
targetList.add(obj);
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] return targetList;
{
obj
};
} }
targetList.add(obj);
} }
} }
} }
else if (creature.isNpc()) else if (creature.isNpc())
{ {
// for buff purposes, returns friendly mobs nearby and mob itself // for buff purposes, returns friendly mobs nearby and mob itself
targetList.add(creature);
final Npc npc = (Npc) creature; final Npc npc = (Npc) creature;
if ((npc.getTemplate().getClans() == null) || npc.getTemplate().getClans().isEmpty()) if ((npc.getTemplate().getClans() == null) || npc.getTemplate().getClans().isEmpty())
{ {
return new Creature[] return targetList;
{
creature
};
} }
targetList.add(creature);
for (Npc newTarget : World.getInstance().getVisibleObjectsInRange(creature, Npc.class, skill.getCastRange())) for (Npc newTarget : World.getInstance().getVisibleObjectsInRange(creature, Npc.class, skill.getCastRange()))
{ {
if (newTarget.isNpc() && npc.isInMyClan(newTarget)) if (newTarget.isNpc() && npc.isInMyClan(newTarget))
@@ -156,7 +145,7 @@ public class Clan implements ITargetTypeHandler
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -33,20 +33,19 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class ClanMember implements ITargetTypeHandler public class ClanMember implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
if (creature.isNpc()) if (creature.isNpc())
{ {
// for buff purposes, returns friendly mobs nearby and mob itself // for buff purposes, returns friendly mobs nearby and mob itself
final Npc npc = (Npc) creature; final Npc npc = (Npc) creature;
if ((npc.getTemplate().getClans() == null) || npc.getTemplate().getClans().isEmpty()) if ((npc.getTemplate().getClans() == null) || npc.getTemplate().getClans().isEmpty())
{ {
return new Creature[] targetList.add(creature);
{ return targetList;
creature
};
} }
for (Npc newTarget : World.getInstance().getVisibleObjectsInRange(creature, Npc.class, skill.getCastRange())) for (Npc newTarget : World.getInstance().getVisibleObjectsInRange(creature, Npc.class, skill.getCastRange()))
{ {
if (newTarget.isNpc() && npc.isInMyClan(newTarget)) if (newTarget.isNpc() && npc.isInMyClan(newTarget))
@@ -55,16 +54,14 @@ public class ClanMember implements ITargetTypeHandler
break; break;
} }
} }
if (targetList.isEmpty()) if (targetList.isEmpty())
{ {
targetList.add(npc); targetList.add(npc);
} }
} }
else
{ return targetList;
return EMPTY_TARGET_LIST;
}
return targetList.toArray(new Creature[targetList.size()]);
} }
@Override @Override

View File

@@ -16,7 +16,7 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.ArrayList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
@@ -33,13 +33,13 @@ import org.l2jmobius.gameserver.model.skill.targets.TargetType;
public class CommandChannel implements ITargetTypeHandler public class CommandChannel implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<WorldObject> targetList = new LinkedList<>();
final Player player = creature.getActingPlayer(); final Player player = creature.getActingPlayer();
if (player == null) if (player == null)
{ {
return EMPTY_TARGET_LIST; return targetList;
} }
targetList.add(player); targetList.add(player);
@@ -55,7 +55,7 @@ public class CommandChannel implements ITargetTypeHandler
// if player in not in party // if player in not in party
if (party == null) if (party == null)
{ {
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
// Get all visible objects in a spherical area near the Creature // Get all visible objects in a spherical area near the Creature
@@ -78,7 +78,7 @@ public class CommandChannel implements ITargetTypeHandler
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
@Override @Override

View File

@@ -37,7 +37,7 @@ import org.l2jmobius.gameserver.model.zone.ZoneId;
public class CorpseClan implements ITargetTypeHandler public class CorpseClan implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
final List<WorldObject> targetList = new ArrayList<>(); final List<WorldObject> targetList = new ArrayList<>();
if (creature.isPlayable()) if (creature.isPlayable())
@@ -45,15 +45,13 @@ public class CorpseClan implements ITargetTypeHandler
final Player player = creature.getActingPlayer(); final Player player = creature.getActingPlayer();
if (player == null) if (player == null)
{ {
return EMPTY_TARGET_LIST; return targetList;
} }
if (player.isInOlympiadMode()) if (player.isInOlympiadMode())
{ {
return new WorldObject[] targetList.add(player);
{ return targetList;
player
};
} }
final Clan clan = player.getClan(); final Clan clan = player.getClan();
@@ -103,37 +101,30 @@ public class CorpseClan implements ITargetTypeHandler
continue; continue;
} }
targetList.add(obj);
if (onlyFirst) if (onlyFirst)
{ {
return new WorldObject[] return targetList;
{
obj
};
} }
if ((maxTargets > 0) && (targetList.size() >= maxTargets)) if ((maxTargets > 0) && (targetList.size() >= maxTargets))
{ {
break; break;
} }
targetList.add(obj);
} }
} }
} }
else if (creature.isNpc()) else if (creature.isNpc())
{ {
// for buff purposes, returns friendly mobs nearby and mob itself // for buff purposes, returns friendly mobs nearby and mob itself
targetList.add(creature);
final Npc npc = (Npc) creature; final Npc npc = (Npc) creature;
if ((npc.getTemplate().getClans() == null) || npc.getTemplate().getClans().isEmpty()) if ((npc.getTemplate().getClans() == null) || npc.getTemplate().getClans().isEmpty())
{ {
return new WorldObject[] return targetList;
{
creature
};
} }
targetList.add(creature);
for (Npc newTarget : World.getInstance().getVisibleObjectsInRange(creature, Npc.class, skill.getCastRange())) for (Npc newTarget : World.getInstance().getVisibleObjectsInRange(creature, Npc.class, skill.getCastRange()))
{ {
if (npc.isInMyClan(newTarget)) if (npc.isInMyClan(newTarget))
@@ -148,7 +139,7 @@ public class CorpseClan implements ITargetTypeHandler
} }
} }
return targetList.toArray(new WorldObject[targetList.size()]); return targetList;
} }
@Override @Override

View File

@@ -16,6 +16,9 @@
*/ */
package handlers.targethandlers; package handlers.targethandlers;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
@@ -33,28 +36,25 @@ import org.l2jmobius.gameserver.network.SystemMessageId;
public class CorpseMob implements ITargetTypeHandler public class CorpseMob implements ITargetTypeHandler
{ {
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public List<WorldObject> getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
if ((target == null) || !target.isAttackable() || !target.isDead()) if ((target == null) || !target.isAttackable() || !target.isDead())
{ {
creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); creature.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
if (skill.hasEffectType(EffectType.SUMMON) && target.isServitor() && (target.getActingPlayer() != null) && (target.getActingPlayer().getObjectId() == creature.getObjectId())) if (skill.hasEffectType(EffectType.SUMMON) && target.isServitor() && (target.getActingPlayer() != null) && (target.getActingPlayer().getObjectId() == creature.getObjectId()))
{ {
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
if (skill.hasEffectType(EffectType.HP_DRAIN) && ((Attackable) target).isOldCorpse(creature.getActingPlayer(), Config.CORPSE_CONSUME_SKILL_ALLOWED_TIME_BEFORE_DECAY, true)) if (skill.hasEffectType(EffectType.HP_DRAIN) && ((Attackable) target).isOldCorpse(creature.getActingPlayer(), Config.CORPSE_CONSUME_SKILL_ALLOWED_TIME_BEFORE_DECAY, true))
{ {
return EMPTY_TARGET_LIST; return Collections.emptyList();
} }
return new Creature[] return Collections.singletonList(target);
{
target
};
} }
@Override @Override

Some files were not shown because too many files have changed in this diff Show More