From c49653ebc8770b3a20b593d618006ef7c49a0193 Mon Sep 17 00:00:00 2001 From: Ben Woo <30431861+benwoo1110@users.noreply.github.com> Date: Thu, 16 Jan 2025 11:00:44 +0800 Subject: [PATCH] Add world property toggle allow anchor spawn --- .../core/listeners/MVPlayerListener.java | 9 +++- .../core/world/MultiverseWorld.java | 43 ++++++++++++++----- .../core/world/config/WorldConfig.java | 7 +++ .../core/world/config/WorldConfigNodes.java | 4 ++ 4 files changed, 51 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/mvplugins/multiverse/core/listeners/MVPlayerListener.java b/src/main/java/org/mvplugins/multiverse/core/listeners/MVPlayerListener.java index abdd3942..815959ee 100644 --- a/src/main/java/org/mvplugins/multiverse/core/listeners/MVPlayerListener.java +++ b/src/main/java/org/mvplugins/multiverse/core/listeners/MVPlayerListener.java @@ -126,8 +126,13 @@ public class MVPlayerListener implements CoreListener { return; } - if (mvWorld.getBedRespawn() && (event.isBedSpawn() || event.isAnchorSpawn())) { - Logging.fine("Spawning %s at their %s.", event.getPlayer().getName(), event.isBedSpawn() ? "BED" : "ANCHOR"); + if (mvWorld.getBedRespawn() && event.isBedSpawn()) { + Logging.fine("Spawning %s at their bed.", event.getPlayer().getName()); + return; + } + + if (mvWorld.getAnchorSpawn() && event.isAnchorSpawn()) { + Logging.fine("Spawning %s at their anchor.", event.getPlayer().getName()); return; } diff --git a/src/main/java/org/mvplugins/multiverse/core/world/MultiverseWorld.java b/src/main/java/org/mvplugins/multiverse/core/world/MultiverseWorld.java index ecc22609..b9dcb6e4 100644 --- a/src/main/java/org/mvplugins/multiverse/core/world/MultiverseWorld.java +++ b/src/main/java/org/mvplugins/multiverse/core/world/MultiverseWorld.java @@ -147,6 +147,29 @@ public class MultiverseWorld { return worldConfig.setAllowWeather(allowWeather); } + /** + * Gets whether or not a player who dies in this world will respawn in their + * anchor or follow the normal respawn pattern. + * + * @return True if players dying in this world should respawn at their anchor. + */ + public boolean getAnchorSpawn() { + return worldConfig.getAnchorSpawn(); + } + + /** + * Sets whether or not a player who dies in this world will respawn in their + * anchor or follow the normal respawn pattern. + *
+ * True is default. + * + * @param anchorSpawn True if players dying in this world respawn at their anchor. + * @return Result of setting property. + */ + public Try setAnchorSpawn(boolean anchorSpawn) { + return worldConfig.setAnchorSpawn(anchorSpawn); + } + /** * Gets whether or not a world will auto-heal players if the difficulty is on peaceful. * @@ -197,16 +220,6 @@ public class MultiverseWorld { return worldConfig.getBedRespawn(); } - /** - * Gets the single biome used for this world. This may be null, in which case the biome from the generator will be used. - * If no generator is specified, the "natural" biome behaviour for this environment will be used. - * - * @return The biome used for this world - */ - public @Nullable Biome getBiome() { - return worldConfig.getBiome(); - } - /** * Sets whether or not a player who dies in this world will respawn in their * bed or follow the normal respawn pattern. @@ -220,6 +233,16 @@ public class MultiverseWorld { return worldConfig.setBedRespawn(bedRespawn); } + /** + * Gets the single biome used for this world. This may be null, in which case the biome from the generator will be used. + * If no generator is specified, the "natural" biome behaviour for this environment will be used. + * + * @return The biome used for this world + */ + public @Nullable Biome getBiome() { + return worldConfig.getBiome(); + } + /** * Gets the type of currency that will be used when users enter this world. A value of null indicates a non-item * based currency is used. diff --git a/src/main/java/org/mvplugins/multiverse/core/world/config/WorldConfig.java b/src/main/java/org/mvplugins/multiverse/core/world/config/WorldConfig.java index d8a6e523..8b0aa450 100644 --- a/src/main/java/org/mvplugins/multiverse/core/world/config/WorldConfig.java +++ b/src/main/java/org/mvplugins/multiverse/core/world/config/WorldConfig.java @@ -149,6 +149,13 @@ public final class WorldConfig { public Try setAllowWeather(boolean allowWeather) { return configHandle.set(configNodes.ALLOW_WEATHER, allowWeather); } + public boolean getAnchorSpawn() { + return configHandle.get(configNodes.ANCHOR_RESPAWN); + } + + public Try setAnchorSpawn(boolean anchorSpawn) { + return configHandle.set(configNodes.ANCHOR_RESPAWN, anchorSpawn); + } public boolean getAutoHeal() { return configHandle.get(configNodes.AUTO_HEAL); diff --git a/src/main/java/org/mvplugins/multiverse/core/world/config/WorldConfigNodes.java b/src/main/java/org/mvplugins/multiverse/core/world/config/WorldConfigNodes.java index 845395af..289a38c8 100644 --- a/src/main/java/org/mvplugins/multiverse/core/world/config/WorldConfigNodes.java +++ b/src/main/java/org/mvplugins/multiverse/core/world/config/WorldConfigNodes.java @@ -90,6 +90,10 @@ public class WorldConfigNodes { }) .build()); + final ConfigNode ANCHOR_RESPAWN = node(ConfigNode.builder("anchor-respawn", Boolean.class) + .defaultValue(true) + .build()); + final ConfigNode AUTO_HEAL = node(ConfigNode.builder("auto-heal", Boolean.class) .defaultValue(true) .build());