From 3e63a58dba76ab0720711f6c5c602848f606d903 Mon Sep 17 00:00:00 2001 From: Myles <43725835+MylesAndMore@users.noreply.github.com> Date: Fri, 9 Dec 2022 17:00:43 +0000 Subject: remove snowball knockback in game --- README.md | 2 +- .../java/com/MylesAndMore/tumble/EventListener.java | 20 ++++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 04a4a38..e3135c0 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ once this list is complete and all bugs are fixed, we *should* be ready for rele - [ ] set some limits on the spectator mode in-game; make it so they can't fly outside of the map - [ ] make it so rounds end in a draw after 5m - [ ] make it so that players get snowballs instead of shovels in shovels rounds after 2m 30s -- [ ] remove snowball knockback +- [x] remove snowball knockback ## game logic diff --git a/src/main/java/com/MylesAndMore/tumble/EventListener.java b/src/main/java/com/MylesAndMore/tumble/EventListener.java index a5169c5..dd42ea2 100644 --- a/src/main/java/com/MylesAndMore/tumble/EventListener.java +++ b/src/main/java/com/MylesAndMore/tumble/EventListener.java @@ -14,6 +14,7 @@ import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; import org.bukkit.event.player.*; import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; public class EventListener implements Listener { @EventHandler @@ -145,12 +146,23 @@ public class EventListener implements Listener { // then check if the projectile was a snowball, if (event.getEntity() instanceof Snowball) { // then check if a player threw it, - if (event.getEntity().getShooter() instanceof Player player) { - // then check if that block is within the game area, - if (event.getHitBlock().getLocation().distanceSquared( - Bukkit.getWorld(TumbleManager.getGameWorld()).getSpawnLocation()) < 402) { + if (event.getEntity().getShooter() instanceof Player shooterPlayer) { + // then check to see if it hit a player or a block + if (event.getHitBlock() != null) { + // if it was a block, check if that block is within the game area, + if (event.getHitBlock().getLocation().distanceSquared(Bukkit.getWorld(TumbleManager.getGameWorld()).getSpawnLocation()) < 402) { // then remove that block. event.getHitBlock().setType(Material.AIR); + } + } + else if (event.getHitEntity() != null) { + // if it was an entity, check if it hit a player, + if (event.getHitEntity() instanceof Player hitPlayer) { + // then cancel the knockback (has to be delayed by a tick for some reason) + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + hitPlayer.setVelocity(new Vector()); + }, 1); + } } } } -- cgit v1.2.3