diff --git a/data/plugins/bootstrap.rb b/data/plugins/bootstrap.rb index 9f90a4c5..6d759fa2 100644 --- a/data/plugins/bootstrap.rb +++ b/data/plugins/bootstrap.rb @@ -19,6 +19,7 @@ java_import 'org.apollo.game.message.handler.MessageHandler' java_import 'org.apollo.game.model.World' java_import 'org.apollo.game.model.entity.Player' java_import 'org.apollo.game.model.event.EventListener' +java_import 'org.apollo.game.model.event.PlayerEvent' java_import 'org.apollo.game.model.setting.PrivilegeLevel' java_import 'org.apollo.game.scheduling.ScheduledTask' java_import 'org.apollo.util.plugin.PluginContext' @@ -66,8 +67,10 @@ class ProcEventListener end # Executes the block handling the Event. - def handle(event, context) - @block.call(event, context) + def handle(event) + args = [ event ] + args << event.player if event.kind_of?(PlayerEvent) + @block.call(*args) end end diff --git a/data/plugins/chat/private-messaging/friend.rb b/data/plugins/chat/private-messaging/friend.rb index ea4e0be3..6d1085e6 100644 --- a/data/plugins/chat/private-messaging/friend.rb +++ b/data/plugins/chat/private-messaging/friend.rb @@ -42,8 +42,7 @@ on :message, :remove_friend do |ctx, player, message| end # Update the friend server status and send the friend/ignore lists of the player logging in. -on :login do |event, context| - player = event.player +on :login do |event, player| player.send(FriendServerStatusMessage.new(ServerStatus::CONNECTING)) player.send(IgnoreListMessage.new(player.ignored_usernames)) if player.ignored_usernames.size > 0 @@ -63,8 +62,8 @@ on :login do |event, context| end # Notifies the player's friends that the player has logged out. -on :logout do |event, context| - update_friends(event.player, 0) +on :logout do |event, player| + update_friends(player, 0) end diff --git a/data/plugins/skill/runecraft/tiara.rb b/data/plugins/skill/runecraft/tiara.rb index 9bcfe4f0..9e1559f9 100644 --- a/data/plugins/skill/runecraft/tiara.rb +++ b/data/plugins/skill/runecraft/tiara.rb @@ -44,14 +44,14 @@ end # Appends a tiara to the list. def append_tiara(hash) - raise 'Hash must contain a tiara id, altar id, talisman id, a bitshift number, and experience.' unless hash.has_key?(:tiara_id) && hash.has_key?(:altar) && hash.has_key?(:talisman) && hash.has_key?(:bitshift) && hash.has_key?(:experience) + raise 'Hash must contain a tiara id, altar id, talisman id, a bitshift number, and experience.' unless hash.has_keys?(:altar, :bitshift, :experience, :talisman, :tiara_id) tiara_id = hash[:tiara_id]; altar = hash[:altar]; talisman = hash[:talisman]; bitshift = hash[:bitshift]; experience = hash[:experience] TIARAS_BY_TALISMAN[talisman] = TIARAS_BY_ID[tiara_id] = TIARAS_BY_ALTAR[altar] = Tiara.new(tiara_id, altar, talisman, bitshift, experience) end # Sets the correct config upon login, if the player is wearing a tiara. -on :login do |event, context| +on :login do |event, player| player = event.player hat = player.equipment.get(EquipmentConstants::HAT) diff --git a/src/org/apollo/game/model/entity/Player.java b/src/org/apollo/game/model/entity/Player.java index 0004434d..578dfecd 100644 --- a/src/org/apollo/game/model/entity/Player.java +++ b/src/org/apollo/game/model/entity/Player.java @@ -20,6 +20,7 @@ import org.apollo.game.model.Position; import org.apollo.game.model.World; import org.apollo.game.model.area.Sector; import org.apollo.game.model.event.impl.LoginEvent; +import org.apollo.game.model.event.impl.LogoutEvent; import org.apollo.game.model.inter.InterfaceConstants; import org.apollo.game.model.inter.InterfaceListener; import org.apollo.game.model.inter.InterfaceSet; @@ -600,7 +601,9 @@ public final class Player extends Mob { * Logs the player out, if possible. */ public void logout() { - send(new LogoutMessage()); + if (World.getWorld().submit(new LogoutEvent(this))) { + send(new LogoutMessage()); + } } /** diff --git a/src/org/apollo/game/model/event/Event.java b/src/org/apollo/game/model/event/Event.java index 90d9e5b9..8d71d84e 100644 --- a/src/org/apollo/game/model/event/Event.java +++ b/src/org/apollo/game/model/event/Event.java @@ -6,5 +6,26 @@ package org.apollo.game.model.event; * @author Major */ public abstract class Event { + + /** + * Indicates whether or not the Event chain has been terminated. + */ + private boolean terminated; + /** + * Terminates the Event chain. + */ + public final void terminate() { + terminated = true; + } + + /** + * Returns whether or not the Event chain has been terminated. + * + * @return {@code true} if the Event chain has been terminated, otherwise {@code false}. + */ + public final boolean terminated() { + return terminated; + } + } \ No newline at end of file diff --git a/src/org/apollo/game/model/event/EventContext.java b/src/org/apollo/game/model/event/EventContext.java deleted file mode 100644 index ad07c72c..00000000 --- a/src/org/apollo/game/model/event/EventContext.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.apollo.game.model.event; - -/** - * The context of an {@link Event}. - * - * @author Major - */ -final class EventContext { - - /** - * Indicates whether or not the Event chain has been terminated. - */ - private boolean terminated; - - /** - * Terminates the Event chain. - */ - public void terminateEvent() { - terminated = true; - } - - /** - * Returns whether or not the Event chain has been terminated. - * - * @return {@code true} if the Event chain has been terminated, otherwise {@code false}. - */ - public boolean terminated() { - return terminated; - } - -} \ No newline at end of file diff --git a/src/org/apollo/game/model/event/EventListener.java b/src/org/apollo/game/model/event/EventListener.java index 8a4392a7..7a5306b8 100644 --- a/src/org/apollo/game/model/event/EventListener.java +++ b/src/org/apollo/game/model/event/EventListener.java @@ -14,8 +14,7 @@ public interface EventListener { * Handles the {@link Event} that occurred. * * @param event The Event. - * @param context The {@link EventContext}. */ - public void handle(E event, EventContext context); + public void handle(E event); } \ No newline at end of file diff --git a/src/org/apollo/game/model/event/EventListenerChain.java b/src/org/apollo/game/model/event/EventListenerChain.java index 724dbae9..a2fbca2d 100644 --- a/src/org/apollo/game/model/event/EventListenerChain.java +++ b/src/org/apollo/game/model/event/EventListenerChain.java @@ -48,16 +48,15 @@ final class EventListenerChain { * @return {@code true} if the Event should continue on with its outcome, {@code false} if not. */ public boolean notify(E event) { - EventContext context = new EventContext(); for (EventListener listener : listeners) { - listener.handle(event, context); + listener.handle(event); - if (context.terminated()) { + if (event.terminated()) { return false; } } - return false; + return true; } @Override