diff --git a/data/plugins/consumables/plugin.xml b/data/plugins/consumables/plugin.xml
index 85c2535a..50f2ea90 100644
--- a/data/plugins/consumables/plugin.xml
+++ b/data/plugins/consumables/plugin.xml
@@ -6,7 +6,7 @@
Adds support for consumables (e.g. potions, food).
Major
- Ryley Kimmel
+ Ryley
diff --git a/src/org/apollo/game/message/handler/MessageHandlerChain.java b/src/org/apollo/game/message/handler/MessageHandlerChain.java
index c3c9942c..96e20db5 100644
--- a/src/org/apollo/game/message/handler/MessageHandlerChain.java
+++ b/src/org/apollo/game/message/handler/MessageHandlerChain.java
@@ -1,5 +1,9 @@
package org.apollo.game.message.handler;
+import java.util.ArrayDeque;
+import java.util.Arrays;
+import java.util.Deque;
+
import org.apollo.game.message.Message;
import org.apollo.game.model.entity.Player;
@@ -7,6 +11,7 @@ import org.apollo.game.model.entity.Player;
* A chain of message handlers.
*
* @author Graham
+ * @author Ryley
* @param The type of message handled by this chain.
*/
public final class MessageHandlerChain {
@@ -14,7 +19,7 @@ public final class MessageHandlerChain {
/**
* The handlers.
*/
- private MessageHandler[] handlers;
+ private final Deque> handlers;
/**
* Creates the message handler chain.
@@ -23,7 +28,7 @@ public final class MessageHandlerChain {
*/
@SafeVarargs
public MessageHandlerChain(MessageHandler... handlers) {
- this.handlers = handlers;
+ this.handlers = new ArrayDeque<>(Arrays.asList(handlers));
}
/**
@@ -31,36 +36,24 @@ public final class MessageHandlerChain {
*
* @param handler The handler.
*/
- @SuppressWarnings("unchecked")
public void addLast(MessageHandler handler) {
- MessageHandler[] old = handlers;
- handlers = new MessageHandler[old.length + 1];
- System.arraycopy(old, 0, handlers, 0, old.length);
- handlers[old.length] = handler;
+ handlers.addLast(handler);
}
/**
- * Handles the message, passing it down the chain until the chain is broken or the message reaches the end of the
- * chain.
+ * Handles the message, passing it down the chain until the chain is broken
+ * or the message reaches the end of the chain.
*
* @param player The player.
* @param message The message.
*/
public void handle(Player player, M message) {
- final boolean[] running = new boolean[1];
- running[0] = true;
-
- MessageHandlerContext ctx = new MessageHandlerContext() {
-
- @Override
- public void breakHandlerChain() {
- running[0] = false;
- }
- };
+ MessageHandlerContext context = new MessageHandlerContext();
for (MessageHandler handler : handlers) {
- handler.handle(ctx, player, message);
- if (!running[0]) {
+ handler.handle(context, player, message);
+
+ if (context.isBroken()) {
break;
}
}
diff --git a/src/org/apollo/game/message/handler/MessageHandlerContext.java b/src/org/apollo/game/message/handler/MessageHandlerContext.java
index 8658e1fa..6660d1e2 100644
--- a/src/org/apollo/game/message/handler/MessageHandlerContext.java
+++ b/src/org/apollo/game/message/handler/MessageHandlerContext.java
@@ -1,15 +1,34 @@
package org.apollo.game.message.handler;
/**
- * Provides operations specific to a {@link MessageHandler} in a {@link MessageHandlerChain}.
+ * Provides operations specific to a {@link MessageHandler} in a
+ * {@link MessageHandlerChain}.
*
* @author Graham
+ * @author Ryley
*/
-public abstract class MessageHandlerContext {
+public final class MessageHandlerContext {
+
+ /**
+ * Denotes whether or not this handler chain is broken.
+ */
+ private boolean broken;
/**
* Breaks the handler chain.
*/
- public abstract void breakHandlerChain();
+ public void breakHandlerChain() {
+ broken = true;
+ }
+
+ /**
+ * Returns whether or not this handler chain is broken.
+ *
+ * @return {@code true} if this handler chain is broken, otherwise
+ * {@code false}.
+ */
+ public boolean isBroken() {
+ return broken;
+ }
}
\ No newline at end of file
diff --git a/src/org/apollo/game/message/handler/impl/EquipItemHandler.java b/src/org/apollo/game/message/handler/impl/EquipItemHandler.java
index 8142f89d..a3628e6b 100644
--- a/src/org/apollo/game/message/handler/impl/EquipItemHandler.java
+++ b/src/org/apollo/game/message/handler/impl/EquipItemHandler.java
@@ -17,7 +17,7 @@ import org.apollo.util.LanguageUtil;
*
* @author Major
* @author Graham
- * @author Ryley Kimmel
+ * @author Ryley
*/
public final class EquipItemHandler extends MessageHandler {