diff --git a/src/main/java/net/Indyuce/mmoitems/comp/RealDualWieldHook.java b/src/main/java/net/Indyuce/mmoitems/comp/RealDualWieldHook.java
index 000e7158..5a1bd404 100644
--- a/src/main/java/net/Indyuce/mmoitems/comp/RealDualWieldHook.java
+++ b/src/main/java/net/Indyuce/mmoitems/comp/RealDualWieldHook.java
@@ -22,13 +22,19 @@ public class RealDualWieldHook implements Listener {
 	@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
 	public void a(PlayerDamageEntityWithOffhandEvent event) {
 
-		// check for npc
-		// safety checks
-		if (event.getEntity().hasMetadata("NPC") || !(event.getEntity() instanceof LivingEntity) || event.getDamage() == 0)
+		/*
+		 * Citizens and Sentinels NPC support; damage = 0 check to ignore safety
+		 * checks; check for entity attack
+		 */
+		if (event.getDamage() == 0 || !(event.getEntity() instanceof LivingEntity) || event.getEntity().hasMetadata("NPC"))
 			return;
 
+		// custom damage check
 		LivingEntity target = (LivingEntity) event.getEntity();
-		Player player = (Player) event.getPlayer();
+		if (MMOItems.plugin.getDamage().findInfo(target) != null)
+			return;
+
+		Player player = event.getPlayer();
 		TemporaryStats stats = null;
 
 		/*
@@ -36,8 +42,10 @@ public class RealDualWieldHook implements Listener {
 		 * be cancelled before anything is applied
 		 */
 		PlayerData playerData = PlayerData.get(player);
-		NBTItem item = MMOItems.plugin.getNMS().getNBTItem(event.getItemInOffhand());
+		NBTItem item = MMOItems.plugin.getNMS().getNBTItem(player.getInventory().getItemInMainHand());
+		NBTItem offhandItem = MMOItems.plugin.getNMS().getNBTItem(player.getInventory().getItemInOffHand());
 		AttackResult result = new AttackResult(event.getDamage(), DamageType.WEAPON, DamageType.PHYSICAL);
+
 		if (item.hasType()) {
 			Weapon weapon = new Weapon(playerData, item, item.getType());
 
@@ -57,6 +65,19 @@ public class RealDualWieldHook implements Listener {
 				return;
 			}
 		}
+		if (offhandItem.hasType()) {
+			Weapon weapon = new Weapon(playerData, offhandItem, offhandItem.getType());
+
+			if (weapon.getMMOItem().getType().getItemSet() == TypeSet.RANGE) {
+				event.setCancelled(true);
+				return;
+			}
+
+			if (!weapon.canBeUsed()) {
+				event.setCancelled(true);
+				return;
+			}
+		}
 
 		/*
 		 * cast on-hit abilities and add the extra damage to the damage event