diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 30cbe8658..3fc966c36 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -484,6 +484,8 @@ public class EssentialsPlayerListener implements Listener { user.setDisplayNick(); updateCompass(user); if (ess.getSettings().getNoGodWorlds().contains(newWorld) && user.isGodModeEnabledRaw()) { + // Player god mode is never disabled in order to retain it when changing worlds once more. + // With that said, players will still take damage as per the result of User#isGodModeEnabled() user.sendMessage(tl("noGodWorldWarning")); } diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index d329a41c1..69eee9f60 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -550,7 +550,22 @@ public class User extends UserData implements Comparable, IMessageRecipien @Override public boolean isGodModeEnabled() { - return (super.isGodModeEnabled() && !ess.getSettings().getNoGodWorlds().contains(this.getLocation().getWorld().getName())) || (isAfk() && ess.getSettings().getFreezeAfkPlayers()); + if (super.isGodModeEnabled()) { + // This enables the no-god-in-worlds functionality where the actual player god mode state is never modified in disabled worlds, + // but this method gets called every time the player takes damage. In the case that the world has god-mode disabled then this method + // will return false and the player will take damage, even though they are in god mode (isGodModeEnabledRaw()). + if (ess.getSettings().getNoGodWorlds().contains(this.getLocation().getWorld().getName())) { + return false; + } + return true; + } + if (isAfk()) { + // Protect AFK players by representing them in a god mode state to render them invulnerable to damage. + if (ess.getSettings().getFreezeAfkPlayers()) { + return true; + } + } + return false; } public boolean isGodModeEnabledRaw() {