From 2bd6ebd2b18e957369b9164208a4f8a99745d464 Mon Sep 17 00:00:00 2001 From: mink Date: Thu, 23 Apr 2020 11:13:19 -0400 Subject: [PATCH] Config option to toggle disabling flight / speed on world change (#2546) Closes #2141. This PR adds the option to toggle whether or not EssentialsX should handle disabling player flight / speed when they switch to a new world, in case server administrators are handling that via a third party plugin. --- .../essentials/EssentialsPlayerListener.java | 42 ++++++++++--------- .../com/earth2me/essentials/ISettings.java | 4 ++ .../src/com/earth2me/essentials/Settings.java | 10 +++++ Essentials/src/config.yml | 12 ++++++ 4 files changed, 49 insertions(+), 19 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index e55286810..c86097073 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -581,27 +581,31 @@ public class EssentialsPlayerListener implements Listener { @EventHandler(priority = EventPriority.NORMAL) public void onPlayerChangedWorldFlyReset(final PlayerChangedWorldEvent event) { final User user = ess.getUser(event.getPlayer()); - if (user.getBase().getGameMode() != GameMode.CREATIVE - // COMPAT: String compare for 1.7.10 - && !user.getBase().getGameMode().name().equals("SPECTATOR") - && !user.isAuthorized("essentials.fly")) { - user.getBase().setFallDistance(0f); - user.getBase().setAllowFlight(false); - } - if (!user.isAuthorized("essentials.speed")) { - user.getBase().setFlySpeed(0.1f); - user.getBase().setWalkSpeed(0.2f); - } else { - if (user.getBase().getFlySpeed() > ess.getSettings().getMaxFlySpeed() && !user.isAuthorized("essentials.speed.bypass")) { - user.getBase().setFlySpeed((float) ess.getSettings().getMaxFlySpeed()); - } else { - user.getBase().setFlySpeed(user.getBase().getFlySpeed() * 0.99999f); - } - if (user.getBase().getWalkSpeed() > ess.getSettings().getMaxWalkSpeed() && !user.isAuthorized("essentials.speed.bypass")) { - user.getBase().setWalkSpeed((float) ess.getSettings().getMaxWalkSpeed()); + if (ess.getSettings().isWorldChangeFlyResetEnabled()) { + if (user.getBase().getGameMode() != GameMode.CREATIVE + // COMPAT: String compare for 1.7.10 + && !user.getBase().getGameMode().name().equals("SPECTATOR") + && !user.isAuthorized("essentials.fly")) { + user.getBase().setFallDistance(0f); + user.getBase().setAllowFlight(false); + } + } + + if (ess.getSettings().isWorldChangeSpeedResetEnabled()) { + if (!user.isAuthorized("essentials.speed")) { + user.getBase().setFlySpeed(0.1f); + user.getBase().setWalkSpeed(0.2f); } else { - user.getBase().setWalkSpeed(user.getBase().getWalkSpeed() * 0.99999f); + if (user.getBase().getFlySpeed() > ess.getSettings().getMaxFlySpeed() && !user.isAuthorized("essentials.speed.bypass")) { + user.getBase().setFlySpeed((float) ess.getSettings().getMaxFlySpeed()); + } else { + user.getBase().setFlySpeed(user.getBase().getFlySpeed() * 0.99999f); + } + + if (user.getBase().getWalkSpeed() > ess.getSettings().getMaxWalkSpeed() && !user.isAuthorized("essentials.speed.bypass")) { + user.getBase().setWalkSpeed((float) ess.getSettings().getMaxWalkSpeed()); + } } } } diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 70d732c85..c1bedb99b 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -294,6 +294,10 @@ public interface ISettings extends IConf { boolean isCommandCooldownsEnabled(); + boolean isWorldChangeFlyResetEnabled(); + + boolean isWorldChangeSpeedResetEnabled(); + long getCommandCooldownMs(String label); Entry getCommandCooldownEntry(String label); diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 17266e503..5cf20d33f 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -1498,6 +1498,16 @@ public class Settings implements net.ess3.api.ISettings { return config.getBoolean("allow-direct-hat", true); } + @Override + public boolean isWorldChangeFlyResetEnabled() { + return config.getBoolean("world-change-fly-reset", true); + } + + @Override + public boolean isWorldChangeSpeedResetEnabled() { + return config.getBoolean("world-change-speed-reset", true); + } + private List defaultEnabledConfirmCommands; private List _getDefaultEnabledConfirmCommands() { diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index a7f4524a2..cb59c3f0c 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -196,6 +196,18 @@ socialspy-commands: # If so, they will be differentiated from those sent by normal players. socialspy-listen-muted-players: true +# The following settings listen for when a player changes worlds. +# If you use another plugin to control speed and flight, you should change these to false. + +# When a player changes world, should EssentialsX reset their flight? +# This will disable flight if the player does not have essentials.fly. +world-change-fly-reset: true + +# When a player changes world, should we reset their speed according to their permissions? +# This resets the player's speed to the default if they don't have essentials.speed. +# If the player doesn't have essentials.speed.bypass, this resets their speed to the maximum specified above. +world-change-speed-reset: true + # Mute Commands # These commands will be disabled when a player is muted. # Use '*' to disable every command.