mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-03 08:39:11 +00:00
Move login and logout listening to the new Event system and update plugins to reflect this move, remove previous listening system, fix minor bug in EventListenerChainSet.
This commit is contained in:
@@ -1,38 +0,0 @@
|
||||
package org.apollo.game.login;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apollo.game.model.entity.Player;
|
||||
|
||||
/**
|
||||
* A class that dispatches {@link Player}s to {@link LoginListener}s.
|
||||
*
|
||||
* @author Major
|
||||
*/
|
||||
public final class LoginDispatcher {
|
||||
|
||||
/**
|
||||
* A {@link List} of login listeners.
|
||||
*/
|
||||
private final List<LoginListener> listeners = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Dispatches a player to the appropriate login listener.
|
||||
*
|
||||
* @param player The player.
|
||||
*/
|
||||
public void dispatch(Player player) {
|
||||
listeners.forEach(listener -> listener.execute(player));
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a listener with this dispatcher.
|
||||
*
|
||||
* @param listener The listener.
|
||||
*/
|
||||
public void register(LoginListener listener) {
|
||||
listeners.add(listener);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
package org.apollo.game.login;
|
||||
|
||||
import org.apollo.game.model.entity.Player;
|
||||
|
||||
/**
|
||||
* A class that should be extended for actions that should be executed when the player logs in.
|
||||
*
|
||||
* @author Major
|
||||
*/
|
||||
@FunctionalInterface
|
||||
public interface LoginListener {
|
||||
|
||||
/**
|
||||
* Executes the action for this listener.
|
||||
*
|
||||
* @param player The player.
|
||||
*/
|
||||
public void execute(Player player);
|
||||
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
package org.apollo.game.login;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apollo.game.model.entity.Player;
|
||||
|
||||
/**
|
||||
* A class that dispatches {@link Player}s to {@link LogoutListener}s.
|
||||
*
|
||||
* @author Major
|
||||
*/
|
||||
public final class LogoutDispatcher {
|
||||
|
||||
/**
|
||||
* A {@link List} of logout listeners.
|
||||
*/
|
||||
private final List<LogoutListener> listeners = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Dispatches a player to the appropriate logout listener.
|
||||
*
|
||||
* @param player The player.
|
||||
*/
|
||||
public void dispatch(Player player) {
|
||||
listeners.forEach(listener -> listener.execute(player));
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a listener with this dispatcher.
|
||||
*
|
||||
* @param listener The listener.
|
||||
*/
|
||||
public void register(LogoutListener listener) {
|
||||
listeners.add(listener);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
package org.apollo.game.login;
|
||||
|
||||
import org.apollo.game.model.entity.Player;
|
||||
|
||||
/**
|
||||
* An interface that should be implemented for actions that should be executed when the player logs out.
|
||||
*
|
||||
* @author Major
|
||||
*/
|
||||
@FunctionalInterface
|
||||
public interface LogoutListener {
|
||||
|
||||
/**
|
||||
* Executes the action for this listener.
|
||||
*
|
||||
* @param player The player.
|
||||
*/
|
||||
public void execute(Player player);
|
||||
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
/**
|
||||
* Contains login and logout listeners.
|
||||
*/
|
||||
package org.apollo.game.login;
|
||||
@@ -15,8 +15,6 @@ import org.apollo.fs.decoder.ItemDefinitionDecoder;
|
||||
import org.apollo.fs.decoder.NpcDefinitionDecoder;
|
||||
import org.apollo.fs.decoder.ObjectDefinitionDecoder;
|
||||
import org.apollo.game.command.CommandDispatcher;
|
||||
import org.apollo.game.login.LoginDispatcher;
|
||||
import org.apollo.game.login.LogoutDispatcher;
|
||||
import org.apollo.game.model.area.Sector;
|
||||
import org.apollo.game.model.area.SectorRepository;
|
||||
import org.apollo.game.model.def.EquipmentDefinition;
|
||||
@@ -27,9 +25,9 @@ import org.apollo.game.model.entity.Entity;
|
||||
import org.apollo.game.model.entity.GameObject;
|
||||
import org.apollo.game.model.entity.Npc;
|
||||
import org.apollo.game.model.entity.Player;
|
||||
import org.apollo.game.model.entity.event.Event;
|
||||
import org.apollo.game.model.entity.event.EventListener;
|
||||
import org.apollo.game.model.entity.event.EventListenerChainSet;
|
||||
import org.apollo.game.model.event.Event;
|
||||
import org.apollo.game.model.event.EventListener;
|
||||
import org.apollo.game.model.event.EventListenerChainSet;
|
||||
import org.apollo.game.scheduling.ScheduledTask;
|
||||
import org.apollo.game.scheduling.Scheduler;
|
||||
import org.apollo.io.EquipmentDefinitionParser;
|
||||
@@ -99,16 +97,6 @@ public final class World {
|
||||
*/
|
||||
private final EventListenerChainSet events = new EventListenerChainSet();
|
||||
|
||||
/**
|
||||
* The login dispatcher.
|
||||
*/
|
||||
private final LoginDispatcher loginDispatcher = new LoginDispatcher();
|
||||
|
||||
/**
|
||||
* The logout dispatcher.
|
||||
*/
|
||||
private final LogoutDispatcher logoutDispatcher = new LogoutDispatcher();
|
||||
|
||||
/**
|
||||
* The {@link MobRepository} of {@link Npc}s.
|
||||
*/
|
||||
@@ -160,24 +148,6 @@ public final class World {
|
||||
return commandDispatcher;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the {@link LoginDispatcher}.
|
||||
*
|
||||
* @return The dispatcher.
|
||||
*/
|
||||
public LoginDispatcher getLoginDispatcher() {
|
||||
return loginDispatcher;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the {@link LogoutDispatcher}.
|
||||
*
|
||||
* @return The dispatcher.
|
||||
*/
|
||||
public LogoutDispatcher getLogoutDispatcher() {
|
||||
return logoutDispatcher;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the npc repository.
|
||||
*
|
||||
@@ -394,8 +364,6 @@ public final class World {
|
||||
|
||||
Sector sector = sectors.fromPosition(player.getPosition());
|
||||
sector.removeEntity(player);
|
||||
|
||||
logoutDispatcher.dispatch(player);
|
||||
} else {
|
||||
logger.warning("Could not find player " + player + " to unregister!");
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ import org.apollo.game.model.Appearance;
|
||||
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.inter.InterfaceConstants;
|
||||
import org.apollo.game.model.inter.InterfaceListener;
|
||||
import org.apollo.game.model.inter.InterfaceSet;
|
||||
@@ -701,7 +702,7 @@ public final class Player extends Mob {
|
||||
bank.forceRefresh();
|
||||
skillSet.forceRefresh();
|
||||
|
||||
World.getWorld().getLoginDispatcher().dispatch(this);
|
||||
World.getWorld().submit(new LoginEvent(this));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.apollo.game.model.entity.event;
|
||||
package org.apollo.game.model.event;
|
||||
|
||||
/**
|
||||
* A type of event that may occur in the game world.
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package org.apollo.game.model.entity.event;
|
||||
package org.apollo.game.model.event;
|
||||
|
||||
/**
|
||||
* The context of an {@link Event}.
|
||||
@@ -15,7 +15,7 @@ final class EventContext {
|
||||
/**
|
||||
* Terminates the Event chain.
|
||||
*/
|
||||
public void terminate() {
|
||||
public void terminateEvent() {
|
||||
terminated = true;
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.apollo.game.model.entity.event;
|
||||
package org.apollo.game.model.event;
|
||||
|
||||
/**
|
||||
* A listener for an {@link Event} that may occur in the game world.
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.apollo.game.model.entity.event;
|
||||
package org.apollo.game.model.event;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
package org.apollo.game.model.entity.event;
|
||||
package org.apollo.game.model.event;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@@ -23,8 +23,8 @@ public final class EventListenerChainSet {
|
||||
*/
|
||||
public <E extends Event> boolean notify(E event) {
|
||||
@SuppressWarnings("unchecked")
|
||||
EventListenerChain<E> chain = (EventListenerChain<E>) chains.get(event);
|
||||
return chain.notify(event);
|
||||
EventListenerChain<E> chain = (EventListenerChain<E>) chains.get(event.getClass());
|
||||
return (chain == null) ? true : chain.notify(event);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -0,0 +1,35 @@
|
||||
package org.apollo.game.model.event;
|
||||
|
||||
import org.apollo.game.model.entity.Player;
|
||||
|
||||
/**
|
||||
* An {@link Event} involving a {@link Player}.
|
||||
*
|
||||
* @author Major
|
||||
*/
|
||||
public abstract class PlayerEvent extends Event {
|
||||
|
||||
/**
|
||||
* The Player.
|
||||
*/
|
||||
private final Player player;
|
||||
|
||||
/**
|
||||
* Creates the PlayerEvent.
|
||||
*
|
||||
* @param player The {@link Player}.
|
||||
*/
|
||||
public PlayerEvent(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the {@link Player}.
|
||||
*
|
||||
* @return The Player.
|
||||
*/
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package org.apollo.game.model.event.impl;
|
||||
|
||||
import org.apollo.game.model.entity.Player;
|
||||
import org.apollo.game.model.event.Event;
|
||||
import org.apollo.game.model.event.PlayerEvent;
|
||||
|
||||
/**
|
||||
* An {@link Event} indicating that a player's open interfaces are about to be closed.
|
||||
*
|
||||
* @author Major
|
||||
*/
|
||||
public final class CloseInterfacesEvent extends PlayerEvent {
|
||||
|
||||
/**
|
||||
* Creates the CloseInterfacesEvent.
|
||||
*
|
||||
* @param player The {@link Player} whose interfaces are being closed.
|
||||
*/
|
||||
public CloseInterfacesEvent(Player player) {
|
||||
super(player);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package org.apollo.game.model.event.impl;
|
||||
|
||||
import org.apollo.game.model.entity.Player;
|
||||
import org.apollo.game.model.event.PlayerEvent;
|
||||
|
||||
/**
|
||||
* A {@link PlayerEvent} that is fired when a {@link Player} logs in.
|
||||
*
|
||||
* @author Major
|
||||
*/
|
||||
public final class LoginEvent extends PlayerEvent {
|
||||
|
||||
/**
|
||||
* Creates the LoginEvent.
|
||||
*
|
||||
* @param player The {@link Player} logging in.
|
||||
*/
|
||||
public LoginEvent(Player player) {
|
||||
super(player);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package org.apollo.game.model.event.impl;
|
||||
|
||||
import org.apollo.game.model.entity.Player;
|
||||
import org.apollo.game.model.event.PlayerEvent;
|
||||
|
||||
/**
|
||||
* A {@link PlayerEvent} that is fired when a {@link Player} logs out.
|
||||
*
|
||||
* @author Major
|
||||
*/
|
||||
public final class LogoutEvent extends PlayerEvent {
|
||||
|
||||
/**
|
||||
* Creates the LogoutEvent.
|
||||
*
|
||||
* @param player The {@link Player} logging out.
|
||||
*/
|
||||
public LogoutEvent(Player player) {
|
||||
super(player);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* Contains Event implementations.
|
||||
*/
|
||||
package org.apollo.game.model.event.impl;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
/**
|
||||
* Contains event-related classes.
|
||||
*/
|
||||
package org.apollo.game.model.entity.event;
|
||||
package org.apollo.game.model.event;
|
||||
@@ -11,7 +11,9 @@ import org.apollo.game.message.impl.OpenInterfaceMessage;
|
||||
import org.apollo.game.message.impl.OpenInterfaceSidebarMessage;
|
||||
import org.apollo.game.message.impl.OpenOverlayMessage;
|
||||
import org.apollo.game.message.impl.OpenSidebarMessage;
|
||||
import org.apollo.game.model.World;
|
||||
import org.apollo.game.model.entity.Player;
|
||||
import org.apollo.game.model.event.impl.CloseInterfacesEvent;
|
||||
import org.apollo.game.model.inter.dialogue.DialogueListener;
|
||||
import org.apollo.game.model.inv.InventoryListener;
|
||||
|
||||
@@ -86,8 +88,11 @@ public final class InterfaceSet {
|
||||
* Closes the current open interface(s).
|
||||
*/
|
||||
public void close() {
|
||||
closeAndNotify();
|
||||
player.send(new CloseInterfaceMessage());
|
||||
CloseInterfacesEvent event = new CloseInterfacesEvent(player);
|
||||
if (World.getWorld().submit(event)) {
|
||||
closeAndNotify();
|
||||
player.send(new CloseInterfaceMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,24 +3,24 @@ package org.apollo.util.plugin;
|
||||
import org.apollo.ServerContext;
|
||||
import org.apollo.game.GameService;
|
||||
import org.apollo.game.command.CommandListener;
|
||||
import org.apollo.game.login.LoginListener;
|
||||
import org.apollo.game.login.LogoutListener;
|
||||
import org.apollo.game.message.Message;
|
||||
import org.apollo.game.message.handler.MessageHandler;
|
||||
import org.apollo.game.message.handler.MessageHandlerChain;
|
||||
import org.apollo.game.message.handler.MessageHandlerChainGroup;
|
||||
import org.apollo.game.model.World;
|
||||
import org.apollo.game.model.event.EventListener;
|
||||
import org.apollo.game.model.event.impl.LoginEvent;
|
||||
import org.apollo.game.model.event.impl.LogoutEvent;
|
||||
|
||||
/**
|
||||
* The {@link PluginContext} contains methods a plugin can use to interface with the server, for example, by adding
|
||||
* {@link MessageHandler}s to {@link MessageHandlerChain}s.
|
||||
*
|
||||
* @author Graham
|
||||
* @author Major
|
||||
*/
|
||||
public final class PluginContext {
|
||||
|
||||
// TODO move listeners to world?
|
||||
|
||||
/**
|
||||
* Adds a {@link CommandListener}.
|
||||
*
|
||||
@@ -32,21 +32,21 @@ public final class PluginContext {
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a {@link LoginListener}.
|
||||
* Adds an {@link EventListener} for a {@link LoginEvent}.
|
||||
*
|
||||
* @param listener The listener.
|
||||
*/
|
||||
public static void addLoginListener(LoginListener listener) {
|
||||
World.getWorld().getLoginDispatcher().register(listener);
|
||||
public static void addLoginListener(EventListener<LoginEvent> listener) {
|
||||
World.getWorld().listenFor(LoginEvent.class, listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a {@link LogoutListener}.
|
||||
* Adds an {@link EventListener} for a {@link LogoutEvent}.
|
||||
*
|
||||
* @param listener The listener.
|
||||
*/
|
||||
public static void addLogoutListener(LogoutListener listener) {
|
||||
World.getWorld().getLogoutDispatcher().register(listener);
|
||||
public static void addLogoutListener(EventListener<LogoutEvent> listener) {
|
||||
World.getWorld().listenFor(LogoutEvent.class, listener);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user