From 27ab90ab2af6158f13914abb51d822385bf375fe Mon Sep 17 00:00:00 2001 From: Ali Moghnieh Date: Sun, 30 Oct 2016 13:29:21 +0000 Subject: [PATCH] Improve spawn-on-join with ability to specify groups. --- .../com/earth2me/essentials/ISettings.java | 4 ++ .../src/com/earth2me/essentials/Settings.java | 37 ++++++++++++++++++- .../spawn/EssentialsSpawnPlayerListener.java | 8 ++-- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 4060a28b0..05aba3b66 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -250,6 +250,10 @@ public interface ISettings extends IConf { boolean isSpawnOnJoin(); + List getSpawnOnJoinGroups(); + + boolean isUserInSpawnOnJoinGroup(IUser user); + boolean isTeleportToCenterLocation(); boolean isCommandCooldownsEnabled(); diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 14ec9e5d0..7aafd7ed8 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -546,6 +546,7 @@ public class Settings implements net.ess3.api.ISettings { customQuitMessage = _getCustomQuitMessage(); isCustomQuitMessage = !customQuitMessage.equals("none"); muteCommands = _getMuteCommands(); + spawnOnJoinGroups = _getSpawnOnJoinGroups(); commandCooldowns = _getCommandCooldowns(); npcsInBalanceRanking = _isNpcsInBalanceRanking(); currencyFormat = _getCurrencyFormat(); @@ -1184,7 +1185,41 @@ public class Settings implements net.ess3.api.ISettings { @Override public boolean isSpawnOnJoin() { - return config.getBoolean("spawn-on-join", false); + return !this.spawnOnJoinGroups.isEmpty(); + } + + private List spawnOnJoinGroups; + + public List _getSpawnOnJoinGroups() { + List def = Collections.emptyList(); + if (config.isSet("spawn-on-join")) { + if (config.isList("spawn-on-join")) { + return new ArrayList<>(config.getStringList("spawn-on-join")); + } else if (config.isBoolean("spawn-on-join")) { // List of [*] to make all groups go to spawn on join. + // This also maintains backwards compatibility with initial impl of single boolean value. + return config.getBoolean("spawn-on-join") ? Collections.singletonList("*") : def; + } + // Take whatever the value is, convert to string and add it to a list as a single value. + String val = config.get("spawn-on-join").toString(); + return !val.isEmpty() ? Collections.singletonList(val) : def; + } else { + return def; + } + } + + @Override + public List getSpawnOnJoinGroups() { + return this.spawnOnJoinGroups; + } + + @Override + public boolean isUserInSpawnOnJoinGroup(IUser user) { + for (String group : this.spawnOnJoinGroups) { + if (group.equals("*") || user.inGroup(group)) { + return true; + } + } + return false; } @Override diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java index 34dd6d8f8..6a2cb3a24 100644 --- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java +++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java @@ -15,6 +15,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import java.util.List; import java.util.Locale; import java.util.logging.Level; import java.util.logging.Logger; @@ -71,10 +72,11 @@ public class EssentialsSpawnPlayerListener implements Listener { public void delayedJoin(final Player player) { if (player.hasPlayedBefore()) { LOGGER.log(Level.FINE, "Old player join"); - - if (ess.getSettings().isSpawnOnJoin()) { + List spawnOnJoinGroups = ess.getSettings().getSpawnOnJoinGroups(); + if (!spawnOnJoinGroups.isEmpty()) { final User user = ess.getUser(player); - if (!user.isAuthorized("essentials.spawn-on-join.exempt")) { + + if (ess.getSettings().isUserInSpawnOnJoinGroup(user) && !user.isAuthorized("essentials.spawn-on-join.exempt")) { ess.scheduleSyncDelayedTask(new Runnable() { @Override public void run() {