diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancementsDamageEntityListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancementsDamageEntityListener.java
index 0b890ef..047d34a 100644
--- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancementsDamageEntityListener.java
+++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancementsDamageEntityListener.java
@@ -1,7 +1,7 @@
 package eu.mhsl.craftattack.spawn.appliances.customAdvancements;
 
 import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
-import org.bukkit.entity.Entity;
+import org.bukkit.Material;
 import org.bukkit.entity.Player;
 import org.bukkit.event.EventHandler;
 import org.bukkit.event.entity.EntityDamageByEntityEvent;
@@ -9,12 +9,11 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
 public class CustomAdvancementsDamageEntityListener extends ApplianceListener<CustomAdvancements> {
     @EventHandler
     public void onEntityDamageEntity(EntityDamageByEntityEvent event) {
-        Entity damaged = event.getEntity();
-        if(!(damaged instanceof Player)) return;
-        Entity damager = event.getDamager();
-        if(!(damager instanceof Player)) return;
-        if(damaged.hasPermission("admin")) {
-            getAppliance().grantAdvancement("search_trouble", (Player) damager);
-        }
+        if(!(event.getEntity() instanceof Player damaged)) return;
+        if(!(event.getDamager() instanceof Player damager)) return;
+        if(!damager.getInventory().getItemInMainHand().getType().equals(Material.AIR)) return;
+        if(!damaged.hasPermission("admin")) return;
+
+        getAppliance().grantAdvancement("search_trouble", damager);
     }
 }
diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/snowballKnockback/SnowballKnockback.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/snowballKnockback/SnowballKnockback.java
new file mode 100644
index 0000000..dccf065
--- /dev/null
+++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/snowballKnockback/SnowballKnockback.java
@@ -0,0 +1,15 @@
+package eu.mhsl.craftattack.spawn.appliances.snowballKnockback;
+
+import eu.mhsl.craftattack.spawn.appliance.Appliance;
+import org.bukkit.event.Listener;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+
+public class SnowballKnockback extends Appliance {
+    @Override
+    @NotNull
+    protected List<Listener> listeners() {
+        return List.of(new SnowballKnockbackListener());
+    }
+}
diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/snowballKnockback/SnowballKnockbackListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/snowballKnockback/SnowballKnockbackListener.java
new file mode 100644
index 0000000..98e390a
--- /dev/null
+++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/snowballKnockback/SnowballKnockbackListener.java
@@ -0,0 +1,19 @@
+package eu.mhsl.craftattack.spawn.appliances.snowballKnockback;
+
+import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
+import org.bukkit.entity.*;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.entity.ProjectileHitEvent;
+
+public class SnowballKnockbackListener extends ApplianceListener<SnowballKnockback> {
+    @EventHandler
+    public void onSnowballHit(ProjectileHitEvent event) {
+        if(!event.getEntityType().equals(EntityType.SNOWBALL)) return;
+        if(event.getHitEntity() == null) return;
+        if(!(event.getHitEntity() instanceof LivingEntity hitEntity)) return;
+
+        Entity snowball = event.getEntity();
+        hitEntity.damage(0.0001);
+        hitEntity.knockback(0.4, -snowball.getVelocity().getX(), -snowball.getVelocity().getZ());
+    }
+}