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