From 0ab9f04ea4a648b7d02c3ef76b9db4913db7f37e Mon Sep 17 00:00:00 2001 From: Ali Moghnieh Date: Tue, 12 Jul 2016 00:03:08 +0100 Subject: [PATCH] Document no-god-in-worlds feature usage in code. --- .../essentials/EssentialsPlayerListener.java | 2 ++ .../src/com/earth2me/essentials/User.java | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) 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() {