package net.scapeemulator.game.plugin;
import java.util.LinkedList;
import java.util.List;
import net.scapeemulator.game.dispatcher.button.ButtonDispatcher;
import net.scapeemulator.game.dispatcher.button.ButtonHandler;
import net.scapeemulator.game.dispatcher.command.CommandDispatcher;
import net.scapeemulator.game.dispatcher.command.CommandHandler;
import net.scapeemulator.game.dispatcher.item.ItemDispatcher;
import net.scapeemulator.game.dispatcher.item.ItemHandler;
import net.scapeemulator.game.dispatcher.item.ItemOnItemDispatcher;
import net.scapeemulator.game.dispatcher.item.ItemOnItemHandler;
import net.scapeemulator.game.dispatcher.item.ItemOnObjectDispatcher;
import net.scapeemulator.game.dispatcher.item.ItemOnObjectHandler;
import net.scapeemulator.game.dispatcher.npc.NPCDispatcher;
import net.scapeemulator.game.dispatcher.npc.NPCHandler;
import net.scapeemulator.game.dispatcher.object.ObjectDispatcher;
import net.scapeemulator.game.dispatcher.object.ObjectHandler;
import net.scapeemulator.game.dispatcher.player.PlayerDispatcher;
import net.scapeemulator.game.dispatcher.player.PlayerHandler;
/**
* @author Hadyn Richard
*/
public final class ScriptContext {
/**
* The list of button handlers.
*/
private List<ButtonHandler> buttonHandlers = new LinkedList<>();
/**
* The list of command handlers.
*/
private List<CommandHandler> commandHandlers = new LinkedList<>();
/**
* The list of item on item handlers.
*/
private List<ItemOnItemHandler> itemOnItemHandlers = new LinkedList<>();
/**
* The list of item handlers.
*/
private List<ItemHandler> itemHandlers = new LinkedList<>();
/**
* The list of item on object handlers.
*/
private List<ItemOnObjectHandler> itemOnObjectHandlers = new LinkedList<>();
/**
* The list of object handlers.
*/
private List<ObjectHandler> objectHandlers = new LinkedList<>();
/**
* The list of player handlers.
*/
private List<PlayerHandler> playerHandlers = new LinkedList<>();
/**
* The list of NPC handlers.
*/
private List<NPCHandler> npcHandlers = new LinkedList<>();
/**
* Constructs a new {@link ScriptContext};
*/
public ScriptContext() {
}
/**
* Adds a button dispatcher handler to the list of handlers.
*
* @param handler The button handler to add.
*/
public void addButtonHandler(ButtonHandler handler) {
buttonHandlers.add(handler);
}
/**
* Decorates a button dispatcher with all the button handlers registered to the context.
*
* @param dispatcher The dispatcher to decorate.
*/
public void decorateButtonDispatcher(ButtonDispatcher dispatcher) {
for (ButtonHandler handler : buttonHandlers) {
dispatcher.bind(handler);
}
}
/**
* Adds a button dispatcher handler to the list of decorators.
*
* @param handler The button handler to add.
*/
public void addCommandHandler(CommandHandler handler) {
commandHandlers.add(handler);
}
/**
* Decorates a button dispatcher with all the button handlers registered to the context.
*
* @param dispatcher The dispatcher to decorate.
*/
public void decorateCommandDispatcher(CommandDispatcher dispatcher) {
for (CommandHandler handler : commandHandlers) {
dispatcher.bind(handler);
}
}
/**
* Adds an item on item handler to the list of handlers.
*
* @param handler The handler to add.
*/
public void addItemOnItemHandler(ItemOnItemHandler handler) {
itemOnItemHandlers.add(handler);
}
/**
* Decorates a item on item dispatcher with all the item on item handlers registered to the
* context.
*
* @param dispatcher The dispatcher to decorate.
*/
public void decorateItemOnItemDispatcher(ItemOnItemDispatcher dispatcher) {
for (ItemOnItemHandler handler : itemOnItemHandlers) {
dispatcher.bind(handler);
}
}
/**
* Adds an item handler to the list of handlers.
*
* @param handler The handler to add.
*/
public void addItemHandler(ItemHandler handler) {
itemHandlers.add(handler);
}
/**
* Decorates an item dispatcher with all the item handlers registered to the context.
*
* @param dispatcher The dispatcher to decorate.
*/
public void decorateItemDispatcher(ItemDispatcher dispatcher) {
for (ItemHandler handler : itemHandlers) {
dispatcher.bind(handler);
}
}
/**
* Adds an item on object handler to the list of handlers.
*
* @param handler The handler to add.
*/
public void addItemOnObjectHandler(ItemOnObjectHandler handler) {
itemOnObjectHandlers.add(handler);
}
/**
* Decorates an item on object dispatcher with all the item on object handlers registered to the
* context.
*
* @param dispatcher The dispatcher to decorate.
*/
public void decorateItemOnObjectDispatcher(ItemOnObjectDispatcher dispatcher) {
for (ItemOnObjectHandler handler : itemOnObjectHandlers) {
dispatcher.bind(handler);
}
}
/**
* Adds an object handler to the list of handlers.
*
* @param handler The handler to add.
*/
public void addObjectHandler(ObjectHandler handler) {
objectHandlers.add(handler);
}
/**
* Decorates an object dispatcher with all the object handlers registered to the context.
*
* @param dispatcher The dispatcher to decorate.
*/
public void decorateObjectDispatcher(ObjectDispatcher dispatcher) {
for (ObjectHandler handler : objectHandlers) {
dispatcher.bind(handler);
}
}
/**
* Adds an player handler to the list of handlers.
*
* @param handler The handler to add.
*/
public void addPlayerHandler(PlayerHandler handler) {
playerHandlers.add(handler);
}
/**
* Decorates an player dispatcher with all the player handlers registered to the context.
*
* @param dispatcher The dispatcher to decorate.
*/
public void decoratePlayerDispatcher(PlayerDispatcher dispatcher) {
for (PlayerHandler handler : playerHandlers) {
dispatcher.bind(handler);
}
}
/**
* Adds an NPC handler to the list of handlers.
*
* @param handler The handler to add.
*/
public void addNPCHandler(NPCHandler handler) {
npcHandlers.add(handler);
}
/**
* Decorates an player dispatcher with all the player handlers registered to the context.
*
* @param dispatcher The dispatcher to decorate.
*/
public void decorateNPCDispatcher(NPCDispatcher dispatcher) {
for (NPCHandler handler : npcHandlers) {
dispatcher.bind(handler);
}
}
/**
* Purges all the handlers from the context.
*/
public void purge() {
buttonHandlers.clear();
commandHandlers.clear();
itemHandlers.clear();
itemOnItemHandlers.clear();
itemOnObjectHandlers.clear();
objectHandlers.clear();
playerHandlers.clear();
npcHandlers.clear();
}
}