From 936715494440464d19390659413ec5c473abfd51 Mon Sep 17 00:00:00 2001
From: Rumen Nikiforov <unafraid89@gmail.com>
Date: Thu, 21 Aug 2014 15:42:22 +0000
Subject: [PATCH] BETA: DP-Part for [L6625] 	* Also moving ListenersTest to
 custom/listeners.

---
 .../listeners}/ListenerTest.java              | 67 +++++++++++++++++--
 .../punishmenthandlers/JailHandler.java       |  4 +-
 2 files changed, 63 insertions(+), 8 deletions(-)
 rename L2J_DataPack_BETA/dist/game/data/scripts/{ai/npc => custom/listeners}/ListenerTest.java (61%)

diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/ListenerTest.java b/L2J_DataPack_BETA/dist/game/data/scripts/custom/listeners/ListenerTest.java
similarity index 61%
rename from L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/ListenerTest.java
rename to L2J_DataPack_BETA/dist/game/data/scripts/custom/listeners/ListenerTest.java
index a8e6257807..bef39fd847 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/ListenerTest.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/custom/listeners/ListenerTest.java
@@ -16,22 +16,30 @@
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
-package ai.npc;
+package custom.listeners;
 
 import java.util.logging.Level;
 
+import ai.npc.AbstractNpcAI;
+
 import com.l2jserver.gameserver.model.actor.L2Attackable;
+import com.l2jserver.gameserver.model.events.Containers;
 import com.l2jserver.gameserver.model.events.EventType;
 import com.l2jserver.gameserver.model.events.ListenerRegisterType;
 import com.l2jserver.gameserver.model.events.annotations.Id;
 import com.l2jserver.gameserver.model.events.annotations.NpcLevelRange;
+import com.l2jserver.gameserver.model.events.annotations.Priority;
 import com.l2jserver.gameserver.model.events.annotations.Range;
 import com.l2jserver.gameserver.model.events.annotations.RegisterEvent;
 import com.l2jserver.gameserver.model.events.annotations.RegisterType;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureKill;
 import com.l2jserver.gameserver.model.events.impl.character.npc.attackable.OnAttackableAttack;
+import com.l2jserver.gameserver.model.events.impl.character.player.OnPlayerDlgAnswer;
+import com.l2jserver.gameserver.model.events.impl.character.player.OnPlayerLogin;
 import com.l2jserver.gameserver.model.events.impl.item.OnItemCreate;
 import com.l2jserver.gameserver.model.events.impl.sieges.castle.OnCastleSiegeStart;
+import com.l2jserver.gameserver.model.events.listeners.ConsumerEventListener;
+import com.l2jserver.gameserver.model.events.returns.TerminateReturn;
 import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.util.Rnd;
 
@@ -51,8 +59,15 @@ public class ListenerTest extends AbstractNpcAI
 	{
 		super(ListenerTest.class.getSimpleName(), "ai/npc");
 		
+		// Method preset listener registration
 		// An set function which is a Consumer it has one parameter and doesn't returns anything!
 		setAttackableAttackId(this::onAttackableAttack, ELPIES);
+		
+		// Manual listener registration
+		Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_DLG_ANSWER, (OnPlayerDlgAnswer event) ->
+		{
+			_log.log(Level.INFO, ListenerTest.class.getSimpleName() + ": " + event.getActiveChar() + " OnPlayerDlgAnswer: Answer: " + event.getAnswer() + " MessageId: " + event.getMessageId());
+		}, this));
 	}
 	
 	/**
@@ -65,9 +80,11 @@ public class ListenerTest extends AbstractNpcAI
 	}
 	
 	/**
-	 * This method will be invoked as soon as L2Attackable (Rabbits 20432 and 22228) are being killed by L2PcInstance (a player)
+	 * This method will be invoked as soon as L2Attackable (Rabbits 20432 and 22228) are being killed by L2PcInstance (a player)<br>
+	 * This listener is registered into individual npcs container.
 	 * @param event
 	 */
+	// Annotation listener registration
 	@RegisterEvent(EventType.ON_CREATURE_KILL)
 	@RegisterType(ListenerRegisterType.NPC)
 	@Id(20432)
@@ -78,7 +95,8 @@ public class ListenerTest extends AbstractNpcAI
 	}
 	
 	/**
-	 * This method will be invoked as soon as Siege of castle ids 1-9 starts
+	 * This method will be invoked as soon as Siege of castle ids 1-9 starts<br>
+	 * This listener is registered into individual castle container.
 	 * @param event
 	 */
 	@RegisterEvent(EventType.ON_CASTLE_SIEGE_START)
@@ -90,7 +108,8 @@ public class ListenerTest extends AbstractNpcAI
 	}
 	
 	/**
-	 * This method will be invoked as soon as Ancient Adena (5575) item is created on player's inventory (As new item!).
+	 * This method will be invoked as soon as Ancient Adena (5575) item is created on player's inventory (As new item!).<br>
+	 * This listener is registered into individual items container.
 	 * @param event
 	 */
 	@RegisterEvent(EventType.ON_ITEM_CREATE)
@@ -102,12 +121,15 @@ public class ListenerTest extends AbstractNpcAI
 	}
 	
 	/**
-	 * This method will be invoked as soon as creature from level range between 1 and 10 dies.
+	 * Prioritized event notification <br>
+	 * This method will be invoked as soon as creature from level range between 1 and 10 dies.<br>
+	 * This listener is registered into individual npcs container.
 	 * @param event
 	 */
 	@RegisterEvent(EventType.ON_CREATURE_KILL)
 	@RegisterType(ListenerRegisterType.NPC)
 	@NpcLevelRange(from = 1, to = 10)
+	@Priority(100)
 	public void OnCreatureKill(OnCreatureKill event)
 	{
 		// 70% chance to drop
@@ -124,8 +146,41 @@ public class ListenerTest extends AbstractNpcAI
 		}
 	}
 	
+	/**
+	 * This method will be invoked as soon a a player logs into the game.<br>
+	 * This listener is registered into global players container.
+	 * @param event
+	 */
+	@RegisterEvent(EventType.ON_PLAYER_LOGIN)
+	@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
+	public void onPlayerLogin(OnPlayerLogin event)
+	{
+		_log.log(Level.INFO, getClass().getSimpleName() + ": Player: " + event.getActiveChar() + " has logged in!");
+	}
+	
+	/**
+	 * Prioritized event notification - Ensuring that this listener will be the first to receive notification.<br>
+	 * Also this method interrupts notification to other listeners and taking over return if somehow it wasn't the first one to set.<br>
+	 * This method will be invoked as soon a a creature dies.<br>
+	 * This listener is registered into global players container.
+	 * @param event
+	 * @return termination return preventing the base code execution if needed.
+	 */
+	@RegisterEvent(EventType.ON_CREATURE_KILL)
+	@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
+	@Priority(Integer.MAX_VALUE)
+	public TerminateReturn onPlayerDeath(OnCreatureKill event)
+	{
+		if (event.getTarget().isGM())
+		{
+			_log.log(Level.INFO, getClass().getSimpleName() + ": Player: " + event.getTarget() + " was prevented from dying!");
+			return new TerminateReturn(true, true, true);
+		}
+		return null;
+	}
+	
 	public static void main(String[] args)
 	{
 		new ListenerTest();
 	}
-}
+}
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 34914f4798..112008c61a 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -26,7 +26,7 @@ import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.tasks.player.TeleportTask;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
-import com.l2jserver.gameserver.model.events.EventDispatcher;
+import com.l2jserver.gameserver.model.events.Containers;
 import com.l2jserver.gameserver.model.events.EventType;
 import com.l2jserver.gameserver.model.events.impl.character.player.OnPlayerLogin;
 import com.l2jserver.gameserver.model.events.listeners.ConsumerEventListener;
@@ -47,7 +47,7 @@ public class JailHandler implements IPunishmentHandler
 	public JailHandler()
 	{
 		// Register global listener
-		EventDispatcher.getInstance().addListener(new ConsumerEventListener(EventDispatcher.getInstance(), EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
+		Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
 	}
 	
 	public void onPlayerLogin(OnPlayerLogin event)
-- 
GitLab