I dont know how it needs to be work exactly, but if you want to change Confuse effect to switch target only monsters, do this:
diff --git a/dist/game/data/scripts/handlers/effecthandlers/Confuse.java b/dist/game/data/scripts/handlers/effecthandlers/Confuse.java
--- a/dist/game/data/scripts/handlers/effecthandlers/Confuse.java (date 1609953339310)
+++ b/dist/game/data/scripts/handlers/effecthandlers/Confuse.java (date 1609953339310)
@@ -25,6 +25,7 @@
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
+import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
@@ -70,7 +71,7 @@
final List<Creature> targetList = new ArrayList<>();
// Getting the possible targets
- World.getInstance().forEachVisibleObject(effected, Creature.class, targetList::add);
+ World.getInstance().forEachVisibleObject(effected, MonsterInstance.class, targetList::add);
// if there is no target, exit function
if (!targetList.isEmpty())
forEachVisibleObject method has an overload, where you can set range too. For example set range to 600:
diff --git a/dist/game/data/scripts/handlers/effecthandlers/Confuse.java b/dist/game/data/scripts/handlers/effecthandlers/Confuse.java
--- a/dist/game/data/scripts/handlers/effecthandlers/Confuse.java (date 1609953650912)
+++ b/dist/game/data/scripts/handlers/effecthandlers/Confuse.java (date 1609953650912)
@@ -25,6 +25,7 @@
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
+import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
@@ -70,7 +71,7 @@
final List<Creature> targetList = new ArrayList<>();
// Getting the possible targets
- World.getInstance().forEachVisibleObject(effected, Creature.class, targetList::add);
+ World.getInstance().forEachVisibleObject(effected, MonsterInstance.class, 600, targetList::add);
// if there is no target, exit function
if (!targetList.isEmpty())