From e34984513df3215b1ce950b831382a2495a0f78b Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Fri, 17 Jul 2020 17:13:30 -0400 Subject: [PATCH] Add config option to respawn at respawn anchors (#3498) --- Essentials/src/com/earth2me/essentials/ISettings.java | 2 ++ Essentials/src/com/earth2me/essentials/Settings.java | 5 +++++ Essentials/src/config.yml | 3 +++ .../essentials/spawn/EssentialsSpawnPlayerListener.java | 5 +++++ 4 files changed, 15 insertions(+) diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 14c9026bd..61e8d4969 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -107,6 +107,8 @@ public interface ISettings extends IConf { boolean getRespawnAtHome(); + boolean isRespawnAtAnchor(); + Set getMultipleHomes(); int getHomeLimit(String set); diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 6178af091..14dbaba74 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -61,6 +61,11 @@ public class Settings implements net.ess3.api.ISettings { return config.getBoolean("respawn-at-home", false); } + @Override + public boolean isRespawnAtAnchor() { + return config.getBoolean("respawn-at-anchor", false); + } + @Override public boolean getUpdateBedAtDaytime() { return config.getBoolean("update-bed-at-daytime", true); diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 014612aef..54ada8db5 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -1034,6 +1034,9 @@ spawn-join-listener-priority: high # When users die, should they respawn at their first home or bed, instead of the spawnpoint? respawn-at-home: false +# When users die, should EssentialsSpawn respect users' respawn anchors? +respawn-at-anchor: false + # Teleport all joining players to the spawnpoint spawn-on-join: false # The following value of `guests` states that all players in group `guests` will be teleported to spawn when joining. diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java index 469f7cc7b..45f41f802 100644 --- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java +++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java @@ -6,6 +6,7 @@ import com.earth2me.essentials.User; import com.earth2me.essentials.textreader.IText; import com.earth2me.essentials.textreader.KeywordReplacer; import com.earth2me.essentials.textreader.SimpleTextPager; +import com.earth2me.essentials.utils.VersionUtil; import io.papermc.lib.PaperLib; import net.ess3.api.IEssentials; import org.bukkit.Location; @@ -42,6 +43,10 @@ class EssentialsSpawnPlayerListener implements Listener { return; } + if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_16_1_R01) && event.isAnchorSpawn() && ess.getSettings().isRespawnAtAnchor()) { + return; + } + if (ess.getSettings().getRespawnAtHome()) { Location home; final Location bed = user.getBase().getBedSpawnLocation(); // cannot nuke this sync load due to the event being sync so it would hand either way.