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());