From 87870c96f75ee27cef04bbe4c2233d0719427f02 Mon Sep 17 00:00:00 2001 From: lars Date: Fri, 27 Sep 2024 23:32:28 +0200 Subject: [PATCH] added snowball knockback --- ...ustomAdvancementsDamageEntityListener.java | 15 +++++++-------- .../snowballKnockback/SnowballKnockback.java | 15 +++++++++++++++ .../SnowballKnockbackListener.java | 19 +++++++++++++++++++ 3 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/snowballKnockback/SnowballKnockback.java create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/snowballKnockback/SnowballKnockbackListener.java 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 { @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 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 { + @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()); + } +}