diff --git a/data/events.xml b/data/events.xml
index 58a458ff..ae5b4662 100644
--- a/data/events.xml
+++ b/data/events.xml
@@ -48,12 +48,14 @@
org.apollo.game.event.impl.ItemOptionEvent
+ org.apollo.game.event.handler.impl.ItemVerificationHandler
org.apollo.game.event.handler.impl.EquipEventHandler
org.apollo.game.event.impl.ItemActionEvent
+ org.apollo.game.event.handler.impl.ItemVerificationHandler
org.apollo.game.event.handler.impl.RemoveEventHandler
org.apollo.game.event.handler.impl.BankEventHandler
diff --git a/src/org/apollo/game/event/handler/impl/EquipEventHandler.java b/src/org/apollo/game/event/handler/impl/EquipEventHandler.java
index f15e60f9..f177c501 100644
--- a/src/org/apollo/game/event/handler/impl/EquipEventHandler.java
+++ b/src/org/apollo/game/event/handler/impl/EquipEventHandler.java
@@ -26,15 +26,15 @@ public final class EquipEventHandler extends EventHandler {
int inventorySlot = event.getSlot();
Item equipping = player.getInventory().get(inventorySlot);
int equippingId = equipping.getId();
- EquipmentDefinition equippingDef = EquipmentDefinition.lookup(equippingId);
+ EquipmentDefinition equippingDefinition = EquipmentDefinition.lookup(equippingId);
- if (equippingDef == null) {
+ if (equippingDefinition == null) {
ctx.breakHandlerChain();
return;
}
for (int id = 0; id < 5; id++) {
- int requirement = equippingDef.getLevel(id);
+ int requirement = equippingDefinition.getLevel(id);
if (player.getSkillSet().getSkill(id).getMaximumLevel() < requirement) {
String skillName = Skill.getName(id);
@@ -50,14 +50,12 @@ public final class EquipEventHandler extends EventHandler {
Inventory inventory = player.getInventory();
Inventory equipment = player.getEquipment();
- // start
-
- int equipmentSlot = equippingDef.getSlot();
+ int equipmentSlot = equippingDefinition.getSlot();
Item currentlyEquipped = equipment.get(equipmentSlot);
if (equipping.getDefinition().isStackable()
&& (currentlyEquipped == null || currentlyEquipped.getId() == equippingId)) {
- equipment.set(equippingDef.getSlot(), equipping);
+ equipment.set(equippingDefinition.getSlot(), equipping);
inventory.reset(inventorySlot);
ctx.breakHandlerChain();
return;
@@ -66,7 +64,7 @@ public final class EquipEventHandler extends EventHandler {
Item weapon = equipment.get(EquipmentConstants.WEAPON);
Item shield = equipment.get(EquipmentConstants.SHIELD);
- if (equippingDef.isTwoHanded()) {
+ if (equippingDefinition.isTwoHanded()) {
int slotsRequired = weapon != null ? shield != null ? 1 : 0 : 0;
if (inventory.freeSlots() < slotsRequired) {
ctx.breakHandlerChain();
@@ -84,7 +82,7 @@ public final class EquipEventHandler extends EventHandler {
inventory.add(weapon);
}
return;
- } else if (equippingDef.getSlot() == EquipmentConstants.SHIELD && weapon != null
+ } else if (equippingDefinition.getSlot() == EquipmentConstants.SHIELD && weapon != null
&& EquipmentDefinition.lookup(weapon.getId()).isTwoHanded()) {
equipment.set(EquipmentConstants.SHIELD, inventory.reset(inventorySlot));
inventory.add(equipment.reset(EquipmentConstants.WEAPON));
diff --git a/src/org/apollo/game/event/handler/impl/ItemVerificationHandler.java b/src/org/apollo/game/event/handler/impl/ItemVerificationHandler.java
new file mode 100644
index 00000000..d29668cb
--- /dev/null
+++ b/src/org/apollo/game/event/handler/impl/ItemVerificationHandler.java
@@ -0,0 +1,64 @@
+package org.apollo.game.event.handler.impl;
+
+import org.apollo.game.event.handler.EventHandler;
+import org.apollo.game.event.handler.EventHandlerContext;
+import org.apollo.game.event.impl.InventoryItemEvent;
+import org.apollo.game.model.Inventory;
+import org.apollo.game.model.Item;
+import org.apollo.game.model.inter.bank.BankConstants;
+import org.apollo.game.model.inv.SynchronizationInventoryListener;
+import org.apollo.game.model.Player;
+
+/**
+ * An {@link EventHandler} which verifies {@link InventoryItemEvent}s.
+ *
+ * @author Chris Fletcher
+ */
+public final class ItemVerificationHandler extends EventHandler {
+
+ /**
+ * Gets the inventory based on the interface id.
+ *
+ * @param player The player.
+ * @param interfaceId The interface id.
+ * @return The proper inventory.
+ * @throws IllegalArgumentException If the interface id is illegal.
+ */
+ private static Inventory interfaceToInventory(Player player, int interfaceId) {
+ switch (interfaceId) {
+
+ case SynchronizationInventoryListener.INVENTORY_ID:
+ case BankConstants.SIDEBAR_INVENTORY_ID:
+ return player.getInventory();
+
+ case SynchronizationInventoryListener.EQUIPMENT_ID:
+ return player.getEquipment();
+
+ case BankConstants.BANK_INVENTORY_ID:
+ return player.getBank();
+
+ default:
+ throw new IllegalArgumentException("Unknown interface id: " + interfaceId);
+ }
+ }
+
+ /**
+ * Checks if the information provided by the event is valid, breaking the handler chain if it isn't.
+ */
+ @Override
+ public void handle(EventHandlerContext ctx, Player player, InventoryItemEvent event) {
+ Inventory inventory = interfaceToInventory(player, event.getInterfaceId());
+
+ int slot = event.getSlot();
+ if (slot < 0 || slot >= inventory.capacity()) {
+ ctx.breakHandlerChain();
+ return;
+ }
+
+ Item item = inventory.get(slot);
+ if (item == null || item.getId() != event.getId()) {
+ ctx.breakHandlerChain();
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/org/apollo/game/model/inter/bank/BankUtils.java b/src/org/apollo/game/model/inter/bank/BankUtils.java
index 561928fa..66630547 100644
--- a/src/org/apollo/game/model/inter/bank/BankUtils.java
+++ b/src/org/apollo/game/model/inter/bank/BankUtils.java
@@ -32,14 +32,7 @@ public final class BankUtils {
Inventory inventory = player.getInventory();
Inventory bank = player.getBank();
- if (slot < 0 || slot >= inventory.capacity()) {
- return false;
- }
-
Item item = inventory.get(slot);
- if (item.getId() != id) {
- return false;
- }
int newId = ItemDefinition.noteToItem(item.getId());
@@ -105,14 +98,7 @@ public final class BankUtils {
Inventory inventory = player.getInventory();
Inventory bank = player.getBank();
- if (slot < 0 || slot >= bank.capacity()) {
- return false;
- }
-
Item item = bank.get(slot);
- if (item == null || item.getId() != id) {
- return false;
- }
if (amount >= item.getAmount()) {
amount = item.getAmount();