From afe042ef4df76c0346a658d88514420623a22813 Mon Sep 17 00:00:00 2001 From: wizjany Date: Sat, 27 Jul 2019 21:57:49 -0400 Subject: [PATCH] Add option for resetting fall distance when void falling teleport is on. reset-fall-on-void-teleport, defaults to false. (I can't remember if old WG 6 behavior was to do this or not...?) --- .../main/java/com/sk89q/worldguard/bukkit/BukkitPlayer.java | 5 +++++ .../sk89q/worldguard/bukkit/BukkitWorldConfiguration.java | 1 + .../worldguard/bukkit/listener/WorldGuardEntityListener.java | 3 +++ .../src/main/java/com/sk89q/worldguard/LocalPlayer.java | 5 +++++ .../java/com/sk89q/worldguard/config/WorldConfiguration.java | 1 + .../src/test/java/com/sk89q/worldguard/TestPlayer.java | 5 +++++ 6 files changed, 20 insertions(+) diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitPlayer.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitPlayer.java index 9a0c9ff3..df0ca8e3 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitPlayer.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitPlayer.java @@ -173,6 +173,11 @@ public void sendTitle(String title, String subtitle) { getPlayer().sendTitle(title, subtitle, -1, -1, -1); } + @Override + public void resetFallDistance() { + getPlayer().setFallDistance(0); + } + @Override public String[] getGroups() { return plugin.getGroups(getPlayer()); diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.java index 9f242747..b2c6f530 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.java @@ -216,6 +216,7 @@ public void loadConfiguration() { teleportOnSuffocation = getBoolean("player-damage.teleport-on-suffocation", false); disableVoidDamage = getBoolean("player-damage.disable-void-damage", false); teleportOnVoid = getBoolean("player-damage.teleport-on-void-falling", false); + safeFallOnVoid = getBoolean("player-damage.reset-fall-on-void-teleport", false); disableExplosionDamage = getBoolean("player-damage.disable-explosion-damage", false); disableMobDamage = getBoolean("player-damage.disable-mob-damage", false); disableDeathMessages = getBoolean("player-damage.disable-death-messages", false); diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java index 27c49a48..7dd3fcfa 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java @@ -164,6 +164,9 @@ private void onEntityDamageByBlock(EntityDamageByBlockEvent event) { if (wcfg.teleportOnVoid && type == DamageCause.VOID) { localPlayer.findFreePosition(); + if (wcfg.safeFallOnVoid) { + localPlayer.resetFallDistance(); + } event.setCancelled(true); return; } diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/LocalPlayer.java b/worldguard-core/src/main/java/com/sk89q/worldguard/LocalPlayer.java index 52021c91..fcc1ac3c 100644 --- a/worldguard-core/src/main/java/com/sk89q/worldguard/LocalPlayer.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/LocalPlayer.java @@ -207,4 +207,9 @@ default Association getAssociation(List regions) { */ @Beta void sendTitle(String title, String subtitle); + + /** + * Clears fall distance. + */ + void resetFallDistance(); } diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java b/worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java index 6557afe2..f8577095 100644 --- a/worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java @@ -111,6 +111,7 @@ public abstract class WorldConfiguration { public boolean teleportOnSuffocation; public boolean disableVoidDamage; public boolean teleportOnVoid; + public boolean safeFallOnVoid; public boolean disableExplosionDamage; public boolean disableMobDamage; public boolean highFreqFlags; diff --git a/worldguard-core/src/test/java/com/sk89q/worldguard/TestPlayer.java b/worldguard-core/src/test/java/com/sk89q/worldguard/TestPlayer.java index ac6d5136..64873829 100644 --- a/worldguard-core/src/test/java/com/sk89q/worldguard/TestPlayer.java +++ b/worldguard-core/src/test/java/com/sk89q/worldguard/TestPlayer.java @@ -178,6 +178,11 @@ public void sendTitle(String title, String subtitle) { } + @Override + public void resetFallDistance() { + + } + @Override public void printRaw(String msg) { System.out.println("-> TestPlayer{" + this.name + "}: " + msg);