From b673630a7e692782784817e339a407eaa993aaa4 Mon Sep 17 00:00:00 2001 From: Ali Moghnieh Date: Sun, 19 Jun 2016 21:07:45 +0100 Subject: [PATCH] Implement spawn-on-join configuration. Admins can now specify whether all joining players should be teleported to the user's group spawn when joining the server. Players can be assigned the essentials.spawn-on-join.exempt permission to become exempt from this feature. --- .../com/earth2me/essentials/ISettings.java | 2 ++ .../src/com/earth2me/essentials/Settings.java | 5 +++++ Essentials/src/config.yml | 3 +++ .../spawn/EssentialsSpawnPlayerListener.java | 20 ++++++++++++++++++- EssentialsSpawn/src/plugin.yml | 6 +++++- 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index c736ad5c2..34b56094d 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -243,4 +243,6 @@ public interface ISettings extends IConf { boolean isSendFlyEnableOnJoin(); boolean isWorldTimePermissions(); + + boolean isSpawnOnJoin(); } diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 413809e26..4ae59a067 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -1163,4 +1163,9 @@ public class Settings implements net.ess3.api.ISettings { public boolean isWorldTimePermissions() { return config.getBoolean("world-time-permissions", false); } + + @Override + public boolean isSpawnOnJoin() { + return config.getBoolean("spawn-on-join", false); + } } diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 5004d8360..a0101c18e 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -801,4 +801,7 @@ respawn-listener-priority: high # When users die, should they respawn at their first home or bed, instead of the spawnpoint? respawn-at-home: false +# Teleport all joining players to the spawnpoint +spawn-on-join: false + # End of file <-- No seriously, you're done with configuration. diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java index 7553f095d..db929674a 100644 --- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java +++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java @@ -68,9 +68,27 @@ public class EssentialsSpawnPlayerListener implements Listener { }); } - public void delayedJoin(Player player) { + public void delayedJoin(final Player player) { if (player.hasPlayedBefore()) { LOGGER.log(Level.FINE, "Old player join"); + + if (ess.getSettings().isSpawnOnJoin()) { + final User user = ess.getUser(player); + if (!user.isAuthorized("essentials.spawn-on-join.exempt")) { + ess.scheduleSyncDelayedTask(new Runnable() { + @Override + public void run() { + Location spawn = spawns.getSpawn(user.getGroup()); + try { + user.getTeleport().now(spawn, false, TeleportCause.PLUGIN); + } catch (Exception e) { + ess.showError(user.getSource(), e, "spawn-on-join"); + } + } + }); + } + } + return; } diff --git a/EssentialsSpawn/src/plugin.yml b/EssentialsSpawn/src/plugin.yml index 7e9bf3b26..79d37e669 100644 --- a/EssentialsSpawn/src/plugin.yml +++ b/EssentialsSpawn/src/plugin.yml @@ -15,4 +15,8 @@ commands: spawn: description: Teleport to the spawnpoint. usage: / [player] - aliases: [espawn] \ No newline at end of file + aliases: [espawn] +permissions: + essentials.spawn-on-join.exempt: + default: false + description: "Bypass spawn teleportation on join when spawn-on-join is true."