Addition of EventDispatcher hasListener methods.

This commit is contained in:
MobiusDevelopment
2022-08-20 21:34:27 +00:00
parent 58f30044d5
commit fdb7fdbe3b
1657 changed files with 20543 additions and 7176 deletions

View File

@@ -26,6 +26,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonTalk;
import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.PetStatusShow;
@@ -79,7 +80,10 @@ public class PetAction implements IActionHandler
player.sendPacket(new PetStatusShow((Pet) target));
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonTalk((Summon) target), (Summon) target);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SUMMON_TALK, target))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonTalk((Summon) target), target);
}
}
player.updateNotMoveUntil();
}

View File

@@ -24,6 +24,7 @@ import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonTalk;
import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -48,7 +49,10 @@ public class SummonAction implements IActionHandler
player.sendPacket(ActionFailed.STATIC_PACKET);
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonTalk((Summon) target), (Summon) target);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SUMMON_TALK, target))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonTalk((Summon) target), target);
}
}
else if (player.getTarget() != target)
{

View File

@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.model.actor.instance.Trap;
import org.l2jmobius.gameserver.model.conditions.Condition;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.trap.OnTrapAction;
import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -83,7 +84,11 @@ public class TrapRemove extends AbstractEffect
}
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(trap, info.getEffector(), TrapAction.TRAP_DISARMED), trap);
if (EventDispatcher.getInstance().hasListener(EventType.ON_TRAP_ACTION, trap))
{
EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(trap, info.getEffector(), TrapAction.TRAP_DISARMED), trap);
}
trap.unSummon();
if (info.getEffector().isPlayer())
{

View File

@@ -52,6 +52,7 @@ import org.l2jmobius.gameserver.model.actor.instance.RiftInvader;
import org.l2jmobius.gameserver.model.actor.instance.StaticObject;
import org.l2jmobius.gameserver.model.effects.EffectType;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.attackable.OnAttackableFactionCall;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.attackable.OnAttackableHate;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
@@ -554,7 +555,7 @@ public class AttackableAI extends CreatureAI
}
return;
}
if (target.isPlayable())
if (target.isPlayable() && EventDispatcher.getInstance().hasListener(EventType.ON_NPC_HATE, getActiveChar()))
{
final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnAttackableHate(getActiveChar(), target.getActingPlayer(), target.isSummon()), getActiveChar(), TerminateReturn.class);
if ((term != null) && term.terminate())
@@ -896,7 +897,11 @@ public class AttackableAI extends CreatureAI
// By default, when a faction member calls for help, attack the caller's attacker.
// Notify the AI with EVT_AGGRESSION
called.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, finalTarget, 1);
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableFactionCall(called, getActiveChar(), finalTarget.getActingPlayer(), finalTarget.isSummon()), called);
if (EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_FACTION_CALL, called))
{
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableFactionCall(called, getActiveChar(), finalTarget.getActingPlayer(), finalTarget.isSummon()), called);
}
}
else if (called.getAI()._intention != AI_INTENTION_ATTACK)
{

View File

@@ -45,6 +45,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.effects.EffectType;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMoveFinished;
import org.l2jmobius.gameserver.model.interfaces.ILocational;
import org.l2jmobius.gameserver.model.item.Weapon;
@@ -698,11 +699,14 @@ public class CreatureAI extends AbstractAI
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
// Notify to scripts
if (_onNpcMoveFinished == null)
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_MOVE_FINISHED, npc))
{
_onNpcMoveFinished = new OnNpcMoveFinished(npc);
if (_onNpcMoveFinished == null)
{
_onNpcMoveFinished = new OnNpcMoveFinished(npc);
}
EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc);
}
EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc);
}
// If the Intention was AI_INTENTION_MOVE_TO, set the Intention to AI_INTENTION_ACTIVE

View File

@@ -46,6 +46,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.instance.EventMonster;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemCreate;
import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -347,7 +348,11 @@ public class ItemTable
}
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnItemCreate(process, item, actor, reference), item.getTemplate());
if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_CREATE, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnItemCreate(process, item, actor, reference), item.getTemplate());
}
return item;
}

View File

@@ -43,6 +43,7 @@ import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.clan.ClanMember;
import org.l2jmobius.gameserver.model.clan.ClanPrivilege;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.clan.OnClanWarFinish;
import org.l2jmobius.gameserver.model.events.impl.clan.OnClanWarStart;
import org.l2jmobius.gameserver.model.events.impl.creature.player.clan.OnPlayerClanCreate;
@@ -217,7 +218,11 @@ public class ClanTable
player.sendPacket(SystemMessageId.YOUR_CLAN_HAS_BEEN_CREATED);
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanCreate(player, clan));
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_CREATE))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanCreate(player, clan));
}
return clan;
}
@@ -346,7 +351,10 @@ public class ClanTable
}
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanDestroy(leaderMember, clan));
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_DESTROY))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanDestroy(leaderMember, clan));
}
}
public void scheduleRemoveClan(int clanId)
@@ -381,7 +389,10 @@ public class ClanTable
final Clan clan1 = getClan(clanId1);
final Clan clan2 = getClan(clanId2);
EventDispatcher.getInstance().notifyEventAsync(new OnClanWarStart(clan1, clan2));
if (EventDispatcher.getInstance().hasListener(EventType.ON_CLAN_WAR_START))
{
EventDispatcher.getInstance().notifyEventAsync(new OnClanWarStart(clan1, clan2));
}
clan1.setEnemyClan(clan2);
clan2.setAttackerClan(clan1);
@@ -420,7 +431,10 @@ public class ClanTable
final Clan clan1 = getClan(clanId1);
final Clan clan2 = getClan(clanId2);
EventDispatcher.getInstance().notifyEventAsync(new OnClanWarFinish(clan1, clan2));
if (EventDispatcher.getInstance().hasListener(EventType.ON_CLAN_WAR_FINISH))
{
EventDispatcher.getInstance().notifyEventAsync(new OnClanWarFinish(clan1, clan2));
}
clan1.deleteEnemyClan(clan2);
clan2.deleteAttackerClan(clan1);

View File

@@ -45,6 +45,7 @@ import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.Monster;
import org.l2jmobius.gameserver.model.actor.tasks.npc.walker.ArrivedTask;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMoveNodeArrived;
import org.l2jmobius.gameserver.model.holders.NpcRoutesHolder;
import org.l2jmobius.gameserver.network.NpcStringId;
@@ -424,7 +425,10 @@ public class WalkingManager implements IXmlReader
}
// Notify quest
EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveNodeArrived(npc), npc);
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_MOVE_NODE_ARRIVED, npc))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveNodeArrived(npc), npc);
}
final WalkInfo walk = _activeRoutes.get(npc.getObjectId());
// Opposite should not happen... but happens sometime

View File

@@ -22,6 +22,7 @@ import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.instancemanager.WalkingManager;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMoveRouteFinished;
/**
@@ -92,7 +93,10 @@ public class WalkInfo
if (_currentNode == getRoute().getNodesCount()) // Last node arrived
{
// Notify quest
EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveRouteFinished(npc), npc);
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_MOVE_ROUTE_FINISHED, npc))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveRouteFinished(npc), npc);
}
if (!getRoute().repeatWalk())
{

View File

@@ -58,6 +58,7 @@ import org.l2jmobius.gameserver.model.actor.status.AttackableStatus;
import org.l2jmobius.gameserver.model.actor.tasks.attackable.CommandChannelTimer;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.attackable.OnAttackableAggroRangeEnter;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.attackable.OnAttackableAttack;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.attackable.OnAttackableKill;
@@ -311,9 +312,9 @@ public class Attackable extends Npc
return false;
}
if ((killer != null) && (killer.getActingPlayer() != null))
// Delayed notification
if ((killer != null) && (killer.getActingPlayer() != null) && EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_KILL, this))
{
// Delayed notification
EventDispatcher.getInstance().notifyEventAsyncDelayed(new OnAttackableKill(killer.getActingPlayer(), this, killer.isSummon()), this, _onKillDelay);
}
@@ -723,7 +724,7 @@ public class Attackable extends Npc
addDamageHate(attacker, damage, (damage * 100) / (getLevel() + 7));
final Player player = attacker.getActingPlayer();
if (player != null)
if ((player != null) && EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_ATTACK, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAttack(player, this, damage, skill, attacker.isSummon()), this);
}
@@ -779,7 +780,10 @@ public class Attackable extends Npc
}
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAggroRangeEnter(this, targetPlayer, attacker.isSummon()), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_AGGRO_RANGE_ENTER, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAggroRangeEnter(this, targetPlayer, attacker.isSummon()), this);
}
}
else if ((targetPlayer == null) && (aggro == 0))
{

View File

@@ -570,9 +570,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
{
return;
}
spawnMe(getX(), getY(), getZ());
setTeleporting(false);
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureTeleported(this), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_TELEPORTED, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureTeleported(this), this);
}
}
/**
@@ -962,34 +967,37 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
}
// Notify to scripts
if (_onCreatureAttack == null)
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_ATTACK, this))
{
_onCreatureAttack = new OnCreatureAttack();
if (_onCreatureAttack == null)
{
_onCreatureAttack = new OnCreatureAttack();
}
_onCreatureAttack.setAttacker(this);
_onCreatureAttack.setTarget(target);
final TerminateReturn attackReturn = EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this, TerminateReturn.class);
if ((attackReturn != null) && attackReturn.terminate())
{
getAI().setIntention(AI_INTENTION_ACTIVE);
sendPacket(ActionFailed.STATIC_PACKET);
return;
}
}
_onCreatureAttack.setAttacker(this);
_onCreatureAttack.setTarget(target);
final TerminateReturn attackReturn = EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this, TerminateReturn.class);
if ((attackReturn != null) && attackReturn.terminate())
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_ATTACKED, target))
{
getAI().setIntention(AI_INTENTION_ACTIVE);
sendPacket(ActionFailed.STATIC_PACKET);
return;
}
// Notify to scripts
if (_onCreatureAttacked == null)
{
_onCreatureAttacked = new OnCreatureAttacked();
}
_onCreatureAttacked.setAttacker(this);
_onCreatureAttacked.setTarget(target);
final TerminateReturn attackedReturn = EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target, TerminateReturn.class);
if ((attackedReturn != null) && attackedReturn.terminate())
{
getAI().setIntention(AI_INTENTION_ACTIVE);
sendPacket(ActionFailed.STATIC_PACKET);
return;
if (_onCreatureAttacked == null)
{
_onCreatureAttacked = new OnCreatureAttacked();
}
_onCreatureAttacked.setAttacker(this);
_onCreatureAttacked.setTarget(target);
final TerminateReturn attackedReturn = EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target, TerminateReturn.class);
if ((attackedReturn != null) && attackedReturn.terminate())
{
getAI().setIntention(AI_INTENTION_ACTIVE);
sendPacket(ActionFailed.STATIC_PACKET);
return;
}
}
if (!isAlikeDead())
@@ -1753,32 +1761,35 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
return;
}
if (_onCreatureSkillUse == null)
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_SKILL_USE, this))
{
_onCreatureSkillUse = new OnCreatureSkillUse();
}
_onCreatureSkillUse.setCaster(this);
_onCreatureSkillUse.setSkill(skill);
_onCreatureSkillUse.setSimultaneously(simultaneously);
_onCreatureSkillUse.setTarget(target);
_onCreatureSkillUse.setTargets(targets);
final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureSkillUse, this, TerminateReturn.class);
if ((term != null) && term.terminate())
{
if (simultaneously)
if (_onCreatureSkillUse == null)
{
setCastingSimultaneouslyNow(false);
_onCreatureSkillUse = new OnCreatureSkillUse();
}
else
_onCreatureSkillUse.setCaster(this);
_onCreatureSkillUse.setSkill(skill);
_onCreatureSkillUse.setSimultaneously(simultaneously);
_onCreatureSkillUse.setTarget(target);
_onCreatureSkillUse.setTargets(targets);
final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureSkillUse, this, TerminateReturn.class);
if ((term != null) && term.terminate())
{
setCastingNow(false);
if (simultaneously)
{
setCastingSimultaneouslyNow(false);
}
else
{
setCastingNow(false);
}
if (isPlayer())
{
sendPacket(ActionFailed.STATIC_PACKET);
getAI().setIntention(AI_INTENTION_ACTIVE);
}
return;
}
if (isPlayer())
{
sendPacket(ActionFailed.STATIC_PACKET);
getAI().setIntention(AI_INTENTION_ACTIVE);
}
return;
}
// TODO: Unhardcode using event listeners!
@@ -2463,11 +2474,17 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
setDead(true);
}
EventDispatcher.getInstance().notifyEvent(new OnCreatureDeath(killer, this), this);
final TerminateReturn returnBack = EventDispatcher.getInstance().notifyEvent(new OnCreatureKilled(killer, this), this, TerminateReturn.class);
if ((returnBack != null) && returnBack.terminate())
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_DEATH, this))
{
return false;
EventDispatcher.getInstance().notifyEvent(new OnCreatureDeath(killer, this), this);
}
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_KILLED, this))
{
final TerminateReturn returnBack = EventDispatcher.getInstance().notifyEvent(new OnCreatureKilled(killer, this), this, TerminateReturn.class);
if ((returnBack != null) && returnBack.terminate())
{
return false;
}
}
// Calculate rewards for main damage dealer.
@@ -5929,7 +5946,10 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
// Mobs in range 1000 see spell
World.getInstance().forEachVisibleObjectInRange(player, Npc.class, 1000, npcMob ->
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcSkillSee(npcMob, player, skill, targets, isSummon()), npcMob);
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_SKILL_SEE, npcMob))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcSkillSee(npcMob, player, skill, targets, isSummon()), npcMob);
}
// On Skill See logic
if (npcMob.isAttackable())
@@ -6645,7 +6665,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
*/
public void notifyDamageReceived(double damage, Creature attacker, Skill skill, boolean critical, boolean damageOverTime)
{
if (attacker != null)
if ((attacker != null) && EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_DAMAGE_DEALT, attacker))
{
if (_onCreatureDamageDealt == null)
{
@@ -6659,18 +6679,20 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
_onCreatureDamageDealt.setDamageOverTime(damageOverTime);
EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker);
}
if (_onCreatureDamageReceived == null)
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_DAMAGE_RECEIVED, this))
{
_onCreatureDamageReceived = new OnCreatureDamageReceived();
if (_onCreatureDamageReceived == null)
{
_onCreatureDamageReceived = new OnCreatureDamageReceived();
}
_onCreatureDamageReceived.setAttacker(attacker);
_onCreatureDamageReceived.setTarget(this);
_onCreatureDamageReceived.setDamage(damage);
_onCreatureDamageReceived.setSkill(skill);
_onCreatureDamageReceived.setCritical(critical);
_onCreatureDamageReceived.setDamageOverTime(damageOverTime);
EventDispatcher.getInstance().notifyEventAsync(_onCreatureDamageReceived, this);
}
_onCreatureDamageReceived.setAttacker(attacker);
_onCreatureDamageReceived.setTarget(this);
_onCreatureDamageReceived.setDamage(damage);
_onCreatureDamageReceived.setSkill(skill);
_onCreatureDamageReceived.setCritical(critical);
_onCreatureDamageReceived.setDamageOverTime(damageOverTime);
EventDispatcher.getInstance().notifyEventAsync(_onCreatureDamageReceived, this);
}
/**
@@ -6680,14 +6702,17 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
*/
public void notifyAttackAvoid(Creature target, boolean isDot)
{
if (_onCreatureAttackAvoid == null)
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_ATTACK_AVOID, target))
{
_onCreatureAttackAvoid = new OnCreatureAttackAvoid();
if (_onCreatureAttackAvoid == null)
{
_onCreatureAttackAvoid = new OnCreatureAttackAvoid();
}
_onCreatureAttackAvoid.setAttacker(this);
_onCreatureAttackAvoid.setTarget(target);
_onCreatureAttackAvoid.setDamageOverTime(isDot);
EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target);
}
_onCreatureAttackAvoid.setAttacker(this);
_onCreatureAttackAvoid.setTarget(target);
_onCreatureAttackAvoid.setDamageOverTime(isDot);
EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target);
}
/**
@@ -6943,7 +6968,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
if (!creature.isInvisible())
{
final WorldRegion worldRegion = getWorldRegion();
if ((worldRegion != null) && worldRegion.areNeighborsActive() && _seenCreatures.add(creature))
if ((worldRegion != null) && worldRegion.areNeighborsActive() && _seenCreatures.add(creature) && EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_SEE, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureSee(this, creature), this);
}

View File

@@ -1260,9 +1260,12 @@ public class Npc extends Creature
if (isTeleporting())
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcTeleport(this), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_TELEPORT, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcTeleport(this), this);
}
}
else
else if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_SPAWN, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcSpawn(this), this);
}
@@ -1522,7 +1525,7 @@ public class Npc extends Creature
@Override
protected final void notifyQuestEventSkillFinished(Skill skill, WorldObject target)
{
if ((target != null) && target.isPlayable())
if ((target != null) && target.isPlayable() && EventDispatcher.getInstance().hasListener(EventType.ON_NPC_SKILL_FINISHED, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcSkillFinished(this, target.getActingPlayer(), skill), this);
}
@@ -1757,7 +1760,10 @@ public class Npc extends Creature
*/
public void sendScriptEvent(String eventName, WorldObject receiver, WorldObject reference)
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcEventReceived(eventName, this, (Npc) receiver, reference), receiver);
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_EVENT_RECEIVED, receiver))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcEventReceived(eventName, this, (Npc) receiver, reference), receiver);
}
}
/**

View File

@@ -27,6 +27,7 @@ import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate;
import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.effects.EffectType;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.instancezone.Instance;
@@ -93,10 +94,13 @@ public abstract class Playable extends Creature
@Override
public boolean doDie(Creature killer)
{
final TerminateReturn returnBack = EventDispatcher.getInstance().notifyEvent(new OnCreatureDeath(killer, this), this, TerminateReturn.class);
if ((returnBack != null) && returnBack.terminate())
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_DEATH, this))
{
return false;
final TerminateReturn returnBack = EventDispatcher.getInstance().notifyEvent(new OnCreatureDeath(killer, this), this, TerminateReturn.class);
if ((returnBack != null) && returnBack.terminate())
{
return false;
}
}
// killing is only possible one time

View File

@@ -1858,7 +1858,11 @@ public class Player extends Playable
*/
public void setPkKills(int pkKills)
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPKChanged(this, _pkKills, pkKills), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PK_CHANGED, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPKChanged(this, _pkKills, pkKills), this);
}
_pkKills = pkKills;
}
@@ -1963,7 +1967,10 @@ public class Player extends Playable
public void setKarma(int value)
{
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerKarmaChanged(this, getKarma(), value), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_KARMA_CHANGED, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerKarmaChanged(this, getKarma(), value), this);
}
int karma = value;
if (karma < 0)
@@ -2214,8 +2221,10 @@ public class Player extends Playable
}
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemEquip(this, item), item.getTemplate());
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_EQUIP, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemEquip(this, item), item.getTemplate());
}
}
else
{
@@ -2255,7 +2264,11 @@ public class Player extends Playable
*/
public void setPvpKills(int pvpKills)
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPvPChanged(this, _pvpKills, pvpKills), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PVP_CHANGED, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPvPChanged(this, _pvpKills, pvpKills), this);
}
_pvpKills = pvpKills;
}
@@ -2283,7 +2296,10 @@ public class Player extends Playable
newFame = 0;
}
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerFameChanged(this, _fame, newFame), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_FAME_CHANGED, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerFameChanged(this, _fame, newFame), this);
}
_fame = newFame;
}
@@ -4628,7 +4644,10 @@ public class Player extends Playable
broadcastUserInfo();
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerTransform(this, transformation.getId()), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_TRANSFORM, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerTransform(this, transformation.getId()), this);
}
}
@Override
@@ -4648,7 +4667,10 @@ public class Player extends Playable
broadcastUserInfo();
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerTransform(this, 0), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_TRANSFORM, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerTransform(this, 0), this);
}
}
@Override
@@ -4994,7 +5016,10 @@ public class Player extends Playable
{
if (pk != null)
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPvPKill(pk, this), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PVP_KILL, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPvPKill(pk, this), this);
}
// pvp/pk item rewards
if (!(Config.DISABLE_REWARDS_IN_INSTANCES && (getInstanceId() != 0)) && //
@@ -8013,7 +8038,11 @@ public class Player extends Playable
sendPacket(SystemMessageId.THE_SYMBOL_HAS_BEEN_DELETED);
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerHennaRemove(this, henna), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_HENNA_REMOVE, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerHennaRemove(this, henna), this);
}
return true;
}
@@ -8055,7 +8084,11 @@ public class Player extends Playable
sendPacket(new ExBrExtraUserInfo(this));
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerHennaRemove(this, henna), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_HENNA_REMOVE, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerHennaRemove(this, henna), this);
}
return true;
}
}
@@ -10063,7 +10096,7 @@ public class Player extends Playable
}
// Notify to scripts before class is removed.
if (!getSubClasses().isEmpty()) // also null check
if (!getSubClasses().isEmpty() && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PROFESSION_CANCEL, this))
{
final int classId = getSubClasses().get(classIndex).getClassId();
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerProfessionCancel(this, classId), this);
@@ -10118,7 +10151,10 @@ public class Player extends Playable
setTemplate(pcTemplate);
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerProfessionChange(this, pcTemplate, isSubClassActive()), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PROFESSION_CHANGE, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerProfessionChange(this, pcTemplate, isSubClassActive()), this);
}
}
/**
@@ -10449,7 +10485,10 @@ public class Player extends Playable
LOGGER.log(Level.SEVERE, "", e);
}
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLogin(this), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_LOGIN, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLogin(this), this);
}
}
public long getLastAccess()
@@ -11052,7 +11091,10 @@ public class Player extends Playable
@Override
public boolean deleteMe()
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLogout(this), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_LOGOUT, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLogout(this), this);
}
try
{

View File

@@ -48,6 +48,7 @@ import org.l2jmobius.gameserver.model.actor.status.SummonStatus;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.effects.EffectType;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonSpawn;
import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.Weapon;
@@ -142,7 +143,10 @@ public abstract class Summon extends Playable
rechargeShots(true, true);
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonSpawn(this), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SUMMON_SPAWN, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonSpawn(this), this);
}
}
@Override

View File

@@ -200,7 +200,10 @@ public class Guard extends Attackable
if (hasListener(EventType.ON_NPC_FIRST_TALK))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcFirstTalk(this, player), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_FIRST_TALK, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcFirstTalk(this, player), this);
}
}
else
{

View File

@@ -20,6 +20,7 @@ import org.l2jmobius.gameserver.enums.InstanceType;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.attackable.OnAttackableAttack;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.attackable.OnAttackableKill;
import org.l2jmobius.gameserver.model.skill.Skill;
@@ -49,7 +50,7 @@ public class QuestGuard extends Guard
{
super.addDamage(attacker, damage, skill);
if (attacker.isAttackable())
if (attacker.isAttackable() && EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_ATTACK, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAttack(null, this, damage, skill, false), this);
}
@@ -64,9 +65,9 @@ public class QuestGuard extends Guard
return false;
}
if (killer.isAttackable())
// Delayed notification
if (killer.isAttackable() && EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_KILL, this))
{
// Delayed notification
EventDispatcher.getInstance().notifyEventAsyncDelayed(new OnAttackableKill(null, this, false), this, _onKillDelay);
}
return true;

View File

@@ -32,6 +32,7 @@ import org.l2jmobius.gameserver.model.actor.tasks.npc.trap.TrapTask;
import org.l2jmobius.gameserver.model.actor.tasks.npc.trap.TrapTriggerTask;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.trap.OnTrapAction;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.Weapon;
@@ -368,7 +369,11 @@ public class Trap extends Npc
_playersWhoDetectedMe.add(detector.getObjectId());
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(this, detector, TrapAction.TRAP_DETECTED), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_TRAP_ACTION, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(this, detector, TrapAction.TRAP_DETECTED), this);
}
if (detector.isPlayable())
{
sendInfo(detector.getActingPlayer());
@@ -396,7 +401,11 @@ public class Trap extends Npc
broadcastPacket(new TrapInfo(this, null));
setTarget(target);
EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(this, target, TrapAction.TRAP_TRIGGERED), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_TRAP_ACTION, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(this, target, TrapAction.TRAP_TRIGGERED), this);
}
ThreadPool.schedule(new TrapTriggerTask(this), 500);
}

View File

@@ -26,6 +26,7 @@ import org.l2jmobius.gameserver.model.actor.Playable;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.playable.OnPlayableExpChanged;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.item.Weapon;
@@ -43,10 +44,13 @@ public class PlayableStat extends CreatureStat
public boolean addExp(long amount)
{
final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnPlayableExpChanged(getActiveChar(), getExp(), getExp() + amount), getActiveChar(), TerminateReturn.class);
if ((term != null) && term.terminate())
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYABLE_EXP_CHANGED, getActiveChar()))
{
return false;
final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnPlayableExpChanged(getActiveChar(), getExp(), getExp() + amount), getActiveChar(), TerminateReturn.class);
if ((term != null) && term.terminate())
{
return false;
}
}
if (((getExp() + amount) < 0) || ((amount > 0) && (getExp() == (getExpForLevel(getMaxLevel()) - 1))))

View File

@@ -29,6 +29,7 @@ import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.actor.transform.TransformTemplate;
import org.l2jmobius.gameserver.model.effects.EffectType;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLevelChanged;
import org.l2jmobius.gameserver.model.holders.SubClassHolder;
import org.l2jmobius.gameserver.model.quest.QuestState;
@@ -264,7 +265,10 @@ public class PlayerStat extends PlayableStat
}
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLevelChanged(getActiveChar(), getLevel(), getLevel() + value), getActiveChar());
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_LEVEL_CHANGED, getActiveChar()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLevelChanged(getActiveChar(), getLevel(), getLevel() + value), getActiveChar());
}
final boolean levelIncreased = super.addLevel(value);
if (levelIncreased)

View File

@@ -52,6 +52,7 @@ import org.l2jmobius.gameserver.model.SkillLearn;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.clan.OnPlayerClanJoin;
import org.l2jmobius.gameserver.model.events.impl.creature.player.clan.OnPlayerClanLeaderChange;
import org.l2jmobius.gameserver.model.events.impl.creature.player.clan.OnPlayerClanLeft;
@@ -236,7 +237,11 @@ public class Clan implements IIdentifiable, INamable
final Player exLeader = exMember.getPlayer();
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLeaderChange(exMember, member, this));
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_LEADER_CHANGE))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLeaderChange(exMember, member, this));
}
if (exLeader != null)
{
if (exLeader.isFlying())
@@ -369,7 +374,10 @@ public class Clan implements IIdentifiable, INamable
addSkillEffects(player);
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanJoin(member, this));
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_JOIN))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanJoin(member, this));
}
}
/**
@@ -529,7 +537,10 @@ public class Clan implements IIdentifiable, INamable
}
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLeft(exMember, this));
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_LEFT))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLeft(exMember, this));
}
}
public ClanMember[] getMembers()
@@ -2673,7 +2684,11 @@ public class Clan implements IIdentifiable, INamable
changeLevel(_level + 1);
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLvlUp(player, this));
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_LEVELUP))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLvlUp(player, this));
}
return true;
}

View File

@@ -26,7 +26,7 @@ import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener;
import org.l2jmobius.gameserver.model.events.returns.AbstractEventReturn;
/**
* @author UnAfraid
* @author UnAfraid, Mobius
*/
public class EventDispatcher
{
@@ -36,6 +36,47 @@ public class EventDispatcher
{
}
/**
* @param type EventType
* @return {@code true} if global containers have a listener of the given type.
*/
public boolean hasListener(EventType type)
{
return Containers.Global().hasListener(type);
}
/**
* @param type EventType
* @param container ListenersContainer
* @return {@code true} if container has a listener of the given type.
*/
public boolean hasListener(EventType type, ListenersContainer container)
{
return Containers.Global().hasListener(type) || ((container != null) && container.hasListener(type));
}
/**
* @param type EventType
* @param containers ListenersContainer...
* @return {@code true} if containers have a listener of the given type.
*/
public boolean hasListener(EventType type, ListenersContainer... containers)
{
boolean hasListeners = Containers.Global().hasListener(type);
if (!hasListeners)
{
for (ListenersContainer container : containers)
{
if (container.hasListener(type))
{
hasListeners = true;
break;
}
}
}
return hasListeners;
}
/**
* @param <T>
* @param event
@@ -79,7 +120,7 @@ public class EventDispatcher
{
try
{
return Containers.Global().hasListener(event.getType()) || ((container != null) && container.hasListener(event.getType())) ? notifyEventImpl(event, container, callbackClass) : null;
return notifyEventImpl(event, container, callbackClass);
}
catch (Exception e)
{
@@ -88,6 +129,37 @@ public class EventDispatcher
return null;
}
/**
* Scheduling current listener notification asynchronously after specified delay.
* @param event
* @param container
* @param delay
*/
public void notifyEventAsyncDelayed(IBaseEvent event, ListenersContainer container, long delay)
{
if (event == null)
{
throw new NullPointerException("Event cannot be null!");
}
ThreadPool.schedule(() -> notifyEvent(event, container, null), delay);
}
/**
* Executing current listener notification asynchronously
* @param event
* @param container
*/
public void notifyEventAsync(IBaseEvent event, ListenersContainer container)
{
if (event == null)
{
throw new NullPointerException("Event cannot be null!");
}
ThreadPool.execute(() -> notifyEventToSingleContainer(event, container, null));
}
/**
* Executing current listener notification asynchronously
* @param event
@@ -100,37 +172,45 @@ public class EventDispatcher
throw new NullPointerException("Event cannot be null!");
}
boolean hasListeners = Containers.Global().hasListener(event.getType());
if (!hasListeners)
{
for (ListenersContainer container : containers)
{
if (container.hasListener(event.getType()))
{
hasListeners = true;
break;
}
}
}
if (hasListeners)
{
ThreadPool.execute(() -> notifyEventToMultipleContainers(event, containers, null));
}
ThreadPool.execute(() -> notifyEventToMultipleContainers(event, containers, null));
}
/**
* Scheduling current listener notification asynchronously after specified delay.
* @param <T>
* @param event
* @param container
* @param delay
* @param callbackClass
* @return
*/
public void notifyEventAsyncDelayed(IBaseEvent event, ListenersContainer container, long delay)
private <T extends AbstractEventReturn> T notifyEventToSingleContainer(IBaseEvent event, ListenersContainer container, Class<T> callbackClass)
{
if (Containers.Global().hasListener(event.getType()) || container.hasListener(event.getType()))
if (event == null)
{
ThreadPool.schedule(() -> notifyEvent(event, container, null), delay);
throw new NullPointerException("Event cannot be null!");
}
try
{
// Local listener container.
T callback = null;
if (container != null)
{
callback = notifyToListeners(container.getListeners(event.getType()), event, callbackClass, callback);
}
// Global listener container.
if ((callback == null) || !callback.abort())
{
callback = notifyToListeners(Containers.Global().getListeners(event.getType()), event, callbackClass, callback);
}
return callback;
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't notify event " + event.getClass().getSimpleName(), e);
}
return null;
}
/**
@@ -152,7 +232,7 @@ public class EventDispatcher
T callback = null;
if (containers != null)
{
// Local listeners container first.
// Local listener containers.
for (ListenersContainer container : containers)
{
if ((callback == null) || !callback.abort())
@@ -191,8 +271,8 @@ public class EventDispatcher
throw new NullPointerException("Event cannot be null!");
}
// Local listener container.
T callback = null;
// Local listener container first.
if (container != null)
{
callback = notifyToListeners(container.getListeners(event.getType()), event, callbackClass, callback);

View File

@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.conditions.Condition;
import org.l2jmobius.gameserver.model.conditions.ConditionGameChance;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcSkillSee;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.type.WeaponType;
@@ -434,7 +435,13 @@ public class Weapon extends ItemTemplate
target
};
World.getInstance().forEachVisibleObjectInRange(caster, Npc.class, 1000, npc -> EventDispatcher.getInstance().notifyEventAsync(new OnNpcSkillSee(npc, caster.getActingPlayer(), onMagicSkill, targets, false), npc));
World.getInstance().forEachVisibleObjectInRange(caster, Npc.class, 1000, npc ->
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_SKILL_SEE, npc))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcSkillSee(npc, caster.getActingPlayer(), onMagicSkill, targets, false), npc);
}
});
}
if (caster.isPlayer())
{

View File

@@ -52,6 +52,7 @@ import org.l2jmobius.gameserver.model.WorldRegion;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerAugment;
import org.l2jmobius.gameserver.model.events.impl.creature.player.inventory.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.inventory.OnPlayerItemPickup;
@@ -274,9 +275,9 @@ public class Item extends WorldObject
// Remove the Item from the world
World.getInstance().removeVisibleObject(this, oldregion);
if (creature.isPlayer())
// Notify to scripts
if (creature.isPlayer() && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_PICKUP, getTemplate()))
{
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemPickup(creature.getActingPlayer(), this), getTemplate());
}
}
@@ -920,7 +921,11 @@ public class Item extends WorldObject
}
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getTemplate());
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_AUGMENT, getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getTemplate());
}
return true;
}
@@ -950,7 +955,10 @@ public class Item extends WorldObject
}
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augment, false), getTemplate());
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_AUGMENT, getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augment, false), getTemplate());
}
}
public void restoreAttributes()
@@ -1556,7 +1564,10 @@ public class Item extends WorldObject
_owner = null;
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(dropper.getActingPlayer(), this, new Location(x, y, z)), getTemplate());
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_DROP, getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(dropper.getActingPlayer(), this, new Location(x, y, z)), getTemplate());
}
}
}
@@ -2026,9 +2037,12 @@ public class Item extends WorldObject
if (event != null)
{
EventDispatcher.getInstance().notifyEventAsync(new OnItemBypassEvent(this, player, event), getTemplate());
if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_BYPASS_EVENT, getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnItemBypassEvent(this, player, event), getTemplate());
}
}
else
else if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_TALK, getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnItemTalk(this, player), getTemplate());
}

View File

@@ -21,6 +21,7 @@ import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.clanwh.OnPlayerClanWHItemAdd;
import org.l2jmobius.gameserver.model.events.impl.creature.player.clanwh.OnPlayerClanWHItemDestroy;
import org.l2jmobius.gameserver.model.events.impl.creature.player.clanwh.OnPlayerClanWHItemTransfer;
@@ -85,7 +86,11 @@ public class ClanWarehouse extends Warehouse
final Item item = super.addItem(process, itemId, count, actor, reference);
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemAdd(process, actor, item, this), item.getTemplate());
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_WH_ITEM_ADD, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemAdd(process, actor, item, this), item.getTemplate());
}
return item;
}
@@ -93,7 +98,11 @@ public class ClanWarehouse extends Warehouse
public Item addItem(String process, Item item, Player actor, Object reference)
{
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemAdd(process, actor, item, this), item.getTemplate());
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_WH_ITEM_ADD, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemAdd(process, actor, item, this), item.getTemplate());
}
return super.addItem(process, item, actor, reference);
}
@@ -101,7 +110,11 @@ public class ClanWarehouse extends Warehouse
public Item destroyItem(String process, Item item, long count, Player actor, Object reference)
{
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemDestroy(process, actor, item, count, this), item.getTemplate());
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_WH_ITEM_DESTROY, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemDestroy(process, actor, item, count, this), item.getTemplate());
}
return super.destroyItem(process, item, count, actor, reference);
}
@@ -111,7 +124,11 @@ public class ClanWarehouse extends Warehouse
final Item item = getItemByObjectId(objectId);
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemTransfer(process, actor, item, count, target), item.getTemplate());
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_WH_ITEM_TRANSFER, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemTransfer(process, actor, item, count, target), item.getTemplate());
}
return super.transferItem(process, objectId, count, target, actor, reference);
}
}

View File

@@ -38,6 +38,7 @@ import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUnequip;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate;
@@ -1128,7 +1129,7 @@ public abstract class Inventory extends ItemContainer
if (old != null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
if ((owner != null) && owner.isPlayer() && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_UNEQUIP, old.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemUnequip(owner.getActingPlayer(), old), old.getTemplate());
}

View File

@@ -35,6 +35,7 @@ import org.l2jmobius.gameserver.model.TradeItem;
import org.l2jmobius.gameserver.model.TradeList;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.inventory.OnPlayerItemAdd;
import org.l2jmobius.gameserver.model.events.impl.creature.player.inventory.OnPlayerItemDestroy;
import org.l2jmobius.gameserver.model.events.impl.creature.player.inventory.OnPlayerItemDrop;
@@ -446,9 +447,9 @@ public class PlayerInventory extends Inventory
_ancientAdena = addedItem;
}
if (actor != null)
// Notify to scripts
if ((actor != null) && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_ADD, actor))
{
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemAdd(actor, addedItem), actor);
}
}
@@ -499,7 +500,10 @@ public class PlayerInventory extends Inventory
actor.sendPacket(su);
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemAdd(actor, item), actor);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_ADD, actor))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemAdd(actor, item), actor);
}
}
}
return item;
@@ -531,7 +535,11 @@ public class PlayerInventory extends Inventory
}
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemTransfer(actor, item, target), item.getTemplate());
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_TRANSFER, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemTransfer(actor, item, target), item.getTemplate());
}
return item;
}
@@ -573,7 +581,7 @@ public class PlayerInventory extends Inventory
}
// Notify to scripts
if (destroyedItem != null)
if ((destroyedItem != null) && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_DESTROY, destroyedItem.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDestroy(actor, destroyedItem), destroyedItem.getTemplate());
}
@@ -646,7 +654,7 @@ public class PlayerInventory extends Inventory
}
// Notify to scripts
if (droppedItem != null)
if ((droppedItem != null) && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_DROP, droppedItem.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(actor, droppedItem, droppedItem.getLocation()), droppedItem.getTemplate());
}
@@ -679,10 +687,11 @@ public class PlayerInventory extends Inventory
}
// Notify to scripts
if (item != null)
if ((item != null) && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_DROP, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(actor, item, item.getLocation()), item.getTemplate());
}
return item;
}

View File

@@ -31,6 +31,7 @@ import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.olympiad.OnOlympiadMatchResult;
import org.l2jmobius.gameserver.model.zone.type.OlympiadStadiumZone;
import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -435,7 +436,10 @@ public abstract class OlympiadGameNormal extends AbstractOlympiadGame
}
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerOne, _playerTwo, getType()), Olympiad.getInstance());
if (EventDispatcher.getInstance().hasListener(EventType.ON_OLYMPIAD_MATCH_RESULT, Olympiad.getInstance()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerOne, _playerTwo, getType()), Olympiad.getInstance());
}
}
else if (_pOneCrash && !_pTwoCrash)
{
@@ -459,8 +463,12 @@ public abstract class OlympiadGameNormal extends AbstractOlympiadGame
{
LOGGER_OLYMPIAD.info(_playerOne.getName() + " crash," + _playerOne + "," + _playerTwo + ",0,0,0,0," + pointDiff + "," + getType());
}
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerTwo, _playerOne, getType()), Olympiad.getInstance());
if (EventDispatcher.getInstance().hasListener(EventType.ON_OLYMPIAD_MATCH_RESULT, Olympiad.getInstance()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerTwo, _playerOne, getType()), Olympiad.getInstance());
}
}
else if (_pOneCrash && _pTwoCrash)
{
@@ -500,8 +508,11 @@ public abstract class OlympiadGameNormal extends AbstractOlympiadGame
stadium.broadcastPacket(result);
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(null, _playerOne, getType()), Olympiad.getInstance());
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(null, _playerTwo, getType()), Olympiad.getInstance());
if (EventDispatcher.getInstance().hasListener(EventType.ON_OLYMPIAD_MATCH_RESULT, Olympiad.getInstance()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(null, _playerOne, getType()), Olympiad.getInstance());
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(null, _playerTwo, getType()), Olympiad.getInstance());
}
return;
}
catch (Exception e)
@@ -572,7 +583,10 @@ public abstract class OlympiadGameNormal extends AbstractOlympiadGame
rewardParticipant(_playerOne.getPlayer(), getReward());
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerOne, _playerTwo, getType()), Olympiad.getInstance());
if (EventDispatcher.getInstance().hasListener(EventType.ON_OLYMPIAD_MATCH_RESULT, Olympiad.getInstance()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerOne, _playerTwo, getType()), Olympiad.getInstance());
}
}
else if ((_playerOne.getPlayer() == null) || !_playerOne.getPlayer().isOnline() || ((playerOneHp == 0) && (playerTwoHp != 0)) || ((_damageP2 > _damageP1) && (playerOneHp != 0) && (playerTwoHp != 0)))
{
@@ -597,7 +611,10 @@ public abstract class OlympiadGameNormal extends AbstractOlympiadGame
rewardParticipant(_playerTwo.getPlayer(), getReward());
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerTwo, _playerOne, getType()), Olympiad.getInstance());
if (EventDispatcher.getInstance().hasListener(EventType.ON_OLYMPIAD_MATCH_RESULT, Olympiad.getInstance()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerTwo, _playerOne, getType()), Olympiad.getInstance());
}
}
else
{

View File

@@ -52,6 +52,7 @@ import org.l2jmobius.gameserver.model.actor.instance.Door;
import org.l2jmobius.gameserver.model.actor.instance.FortCommander;
import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.sieges.fort.OnFortSiegeFinish;
import org.l2jmobius.gameserver.model.events.impl.sieges.fort.OnFortSiegeStart;
import org.l2jmobius.gameserver.network.NpcStringId;
@@ -293,7 +294,10 @@ public class FortSiege implements Siegable
LOGGER.info("Siege of " + _fort.getName() + " fort finished.");
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnFortSiegeFinish(this), getFort());
if (EventDispatcher.getInstance().hasListener(EventType.ON_FORT_SIEGE_FINISH, getFort()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnFortSiegeFinish(this), getFort());
}
}
/**
@@ -342,7 +346,10 @@ public class FortSiege implements Siegable
LOGGER.info("Siege of " + _fort.getName() + " fort started.");
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnFortSiegeStart(this), getFort());
if (EventDispatcher.getInstance().hasListener(EventType.ON_FORT_SIEGE_START, getFort()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnFortSiegeStart(this), getFort());
}
}
/**

View File

@@ -56,6 +56,7 @@ import org.l2jmobius.gameserver.model.actor.instance.FlameTower;
import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.clan.ClanMember;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.sieges.castle.OnCastleSiegeFinish;
import org.l2jmobius.gameserver.model.events.impl.sieges.castle.OnCastleSiegeOwnerChange;
import org.l2jmobius.gameserver.model.events.impl.sieges.castle.OnCastleSiegeStart;
@@ -334,7 +335,10 @@ public class Siege implements Siegable
_castle.getZone().setSiegeInstance(null);
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeFinish(this), _castle);
if (EventDispatcher.getInstance().hasListener(EventType.ON_CASTLE_SIEGE_FINISH, _castle))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeFinish(this), _castle);
}
}
}
@@ -455,7 +459,10 @@ public class Siege implements Siegable
updatePlayerSiegeStateFlags(false);
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeOwnerChange(this), _castle);
if (EventDispatcher.getInstance().hasListener(EventType.ON_CASTLE_SIEGE_OWNER_CHANGE, _castle))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeOwnerChange(this), _castle);
}
}
}
}
@@ -514,7 +521,10 @@ public class Siege implements Siegable
Broadcast.toAllOnlinePlayers(new PlaySound("systemmsg_e.17"));
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeStart(this), _castle);
if (EventDispatcher.getInstance().hasListener(EventType.ON_CASTLE_SIEGE_START, _castle))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeStart(this), _castle);
}
}
}

View File

@@ -29,6 +29,7 @@ import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.ListenersContainer;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureZoneEnter;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureZoneExit;
@@ -405,7 +406,11 @@ public abstract class ZoneType extends ListenersContainer
if (_characterList.putIfAbsent(creature.getObjectId(), creature) == null)
{
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureZoneEnter(creature, this), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_ZONE_ENTER, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureZoneEnter(creature, this), this);
}
// Notify Zone implementation.
onEnter(creature);
}
@@ -426,7 +431,10 @@ public abstract class ZoneType extends ListenersContainer
if (_characterList.containsKey(creature.getObjectId()))
{
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureZoneExit(creature, this), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_ZONE_EXIT, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureZoneExit(creature, this), this);
}
// Unregister player.
_characterList.remove(creature.getObjectId());

View File

@@ -39,6 +39,7 @@ import org.l2jmobius.gameserver.model.actor.stat.PlayerStat;
import org.l2jmobius.gameserver.model.actor.templates.PlayerTemplate;
import org.l2jmobius.gameserver.model.events.Containers;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerCreate;
import org.l2jmobius.gameserver.model.item.PlayerItemTemplate;
import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -315,7 +316,11 @@ public class CharacterCreate implements IClientIncomingPacket
startTutorialQuest(newChar);
}
EventDispatcher.getInstance().notifyEvent(new OnPlayerCreate(newChar, newChar.getObjectId(), newChar.getName(), client), Containers.Players());
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CREATE, Containers.Players()))
{
EventDispatcher.getInstance().notifyEvent(new OnPlayerCreate(newChar, newChar.getObjectId(), newChar.getName(), client), Containers.Players());
}
newChar.setOnlineStatus(true, false);
Disconnection.of(client, newChar).storeMe().deleteMe();

View File

@@ -20,6 +20,7 @@ import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.gameserver.model.CharSelectInfoPackage;
import org.l2jmobius.gameserver.model.events.Containers;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerDelete;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.PacketLogger;
@@ -63,8 +64,11 @@ public class CharacterDelete implements IClientIncomingPacket
case 0: // Success!
{
client.sendPacket(new CharDeleteSuccess());
final CharSelectInfoPackage charInfo = client.getCharSelection(_charSlot);
EventDispatcher.getInstance().notifyEvent(new OnPlayerDelete(charInfo.getObjectId(), charInfo.getName(), client), Containers.Players());
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_DELETE, Containers.Players()))
{
final CharSelectInfoPackage charInfo = client.getCharSelection(_charSlot);
EventDispatcher.getInstance().notifyEvent(new OnPlayerDelete(charInfo.getObjectId(), charInfo.getName(), client), Containers.Players());
}
break;
}
case 1:

View File

@@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.gameserver.model.CharSelectInfoPackage;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerRestore;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.serverpackets.CharSelectionInfo;
@@ -50,7 +51,11 @@ public class CharacterRestore implements IClientIncomingPacket
final CharSelectionInfo cl = new CharSelectionInfo(client.getAccountName(), client.getSessionId().playOkID1, 0);
client.sendPacket(cl);
client.setCharSelection(cl.getCharInfo());
final CharSelectInfoPackage charInfo = client.getCharSelection(_charSlot);
EventDispatcher.getInstance().notifyEvent(new OnPlayerRestore(charInfo.getObjectId(), charInfo.getName(), client));
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_RESTORE))
{
final CharSelectInfoPackage charInfo = client.getCharSelection(_charSlot);
EventDispatcher.getInstance().notifyEvent(new OnPlayerRestore(charInfo.getObjectId(), charInfo.getName(), client));
}
}
}

View File

@@ -29,6 +29,7 @@ import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.Containers;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSelect;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
@@ -162,11 +163,14 @@ public class CharacterSelect implements IClientIncomingPacket
client.setPlayer(cha);
cha.setOnlineStatus(true, true);
final TerminateReturn terminate = EventDispatcher.getInstance().notifyEvent(new OnPlayerSelect(cha, cha.getObjectId(), cha.getName(), client), Containers.Players(), TerminateReturn.class);
if ((terminate != null) && terminate.terminate())
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SELECT, Containers.Players()))
{
Disconnection.of(cha).defaultSequence(LeaveWorld.STATIC_PACKET);
return;
final TerminateReturn terminate = EventDispatcher.getInstance().notifyEvent(new OnPlayerSelect(cha, cha.getObjectId(), cha.getName(), client), Containers.Players(), TerminateReturn.class);
if ((terminate != null) && terminate.terminate())
{
Disconnection.of(cha).defaultSequence(LeaveWorld.STATIC_PACKET);
return;
}
}
client.sendPacket(new SSQInfo());

View File

@@ -22,6 +22,7 @@ import org.l2jmobius.gameserver.enums.PlayerAction;
import org.l2jmobius.gameserver.handler.AdminCommandHandler;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerDlgAnswer;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.holders.DoorRequestHolder;
@@ -56,10 +57,13 @@ public class DlgAnswer implements IClientIncomingPacket
return;
}
final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnPlayerDlgAnswer(player, _messageId, _answer, _requesterId), player, TerminateReturn.class);
if ((term != null) && term.terminate())
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_DLG_ANSWER, player))
{
return;
final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnPlayerDlgAnswer(player, _messageId, _answer, _requesterId), player, TerminateReturn.class);
if ((term != null) && term.terminate())
{
return;
}
}
if (_messageId == SystemMessageId.S1_3.getId())

View File

@@ -25,6 +25,7 @@ import org.l2jmobius.gameserver.data.xml.DoorData;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.network.GameClient;
@@ -180,11 +181,14 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
if (_movementMode == 1)
{
player.setCursorKeyMovement(false);
final TerminateReturn terminate = EventDispatcher.getInstance().notifyEvent(new OnPlayerMoveRequest(player, new Location(_targetX, _targetY, _targetZ)), player, TerminateReturn.class);
if ((terminate != null) && terminate.terminate())
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_MOVE_REQUEST, player))
{
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
final TerminateReturn terminate = EventDispatcher.getInstance().notifyEvent(new OnPlayerMoveRequest(player, new Location(_targetX, _targetY, _targetZ)), player, TerminateReturn.class);
if ((terminate != null) && terminate.terminate())
{
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
}
}
else // 0

View File

@@ -34,6 +34,7 @@ import org.l2jmobius.gameserver.model.actor.instance.VillageMaster;
import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.clan.ClanPrivilege;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSkillLearn;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
@@ -523,7 +524,10 @@ public class RequestAcquireSkill implements IClientIncomingPacket
}
// Notify scripts of the skill learn.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSkillLearn(trainer, player, skill, _skillType), trainer);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SKILL_LEARN, trainer))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSkillLearn(trainer, player, skill, _skillType), trainer);
}
}
/**

View File

@@ -31,6 +31,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcManorBypass;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBypass;
import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -219,7 +220,7 @@ public class RequestBypassToServer implements IClientIncomingPacket
else if (_command.startsWith("manor_menu_select"))
{
final Npc lastNpc = player.getLastFolkNPC();
if (Config.ALLOW_MANOR && (lastNpc != null) && lastNpc.canInteract(player))
if (Config.ALLOW_MANOR && (lastNpc != null) && lastNpc.canInteract(player) && EventDispatcher.getInstance().hasListener(EventType.ON_NPC_MANOR_BYPASS, lastNpc))
{
final String[] split = _command.substring(_command.indexOf('?') + 1).split("&");
final int ask = Integer.parseInt(split[0].split("=")[1]);
@@ -278,7 +279,10 @@ public class RequestBypassToServer implements IClientIncomingPacket
}
}
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerBypass(player, _command), player);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_BYPASS, player))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerBypass(player, _command), player);
}
}
/**

View File

@@ -28,6 +28,7 @@ import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.effects.EffectType;
import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerChat;
import org.l2jmobius.gameserver.model.events.returns.ChatFilterReturn;
import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -186,10 +187,13 @@ public class Say2 implements IClientIncomingPacket
return;
}
final ChatFilterReturn filter = EventDispatcher.getInstance().notifyEvent(new OnPlayerChat(player, World.getInstance().getPlayer(_target), _text, chatType), ChatFilterReturn.class);
if (filter != null)
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CHAT))
{
_text = filter.getFilteredText();
final ChatFilterReturn filter = EventDispatcher.getInstance().notifyEvent(new OnPlayerChat(player, World.getInstance().getPlayer(_target), _text, chatType), ChatFilterReturn.class);
if (filter != null)
{
_text = filter.getFilteredText();
}
}
// Say Filter implementation