aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0260-Expand-world-key-API.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/api/0260-Expand-world-key-API.patch')
-rw-r--r--patches/api/0260-Expand-world-key-API.patch189
1 files changed, 189 insertions, 0 deletions
diff --git a/patches/api/0260-Expand-world-key-API.patch b/patches/api/0260-Expand-world-key-API.patch
new file mode 100644
index 0000000000..f419d2cbd1
--- /dev/null
+++ b/patches/api/0260-Expand-world-key-API.patch
@@ -0,0 +1,189 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Wed, 6 Jan 2021 00:34:10 -0800
+Subject: [PATCH] Expand world key API
+
+
+diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
+index 7be6710d28dea19bd0f9054c1c2e32dacd355c45..8fd1de659777595d9d8198e7ee638ad5500a6317 100644
+--- a/src/main/java/org/bukkit/Bukkit.java
++++ b/src/main/java/org/bukkit/Bukkit.java
+@@ -864,6 +864,18 @@ public final class Bukkit {
+ public static World getWorld(@NotNull UUID uid) {
+ return server.getWorld(uid);
+ }
++ // Paper start
++ /**
++ * Gets the world from the given NamespacedKey
++ *
++ * @param worldKey the NamespacedKey of the world to retrieve
++ * @return a world with the given NamespacedKey, or null if none exists
++ */
++ @Nullable
++ public static World getWorld(@NotNull NamespacedKey worldKey) {
++ return server.getWorld(worldKey);
++ }
++ // Paper end
+
+ /**
+ * Create a new virtual {@link WorldBorder}.
+diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java
+index 27eff0826d5b5b48697fefd9571886e7bbce74b1..d8b1fa79dc24138dc71e32c14bda71c1d570ed88 100644
+--- a/src/main/java/org/bukkit/RegionAccessor.java
++++ b/src/main/java/org/bukkit/RegionAccessor.java
+@@ -18,7 +18,7 @@ import org.jetbrains.annotations.Nullable;
+ * A RegionAccessor gives access to getting, modifying and spawning {@link Biome}, {@link BlockState} and {@link Entity},
+ * as well as generating some basic structures.
+ */
+-public interface RegionAccessor {
++public interface RegionAccessor extends Keyed { // Paper
+
+ /**
+ * Gets the {@link Biome} at the given {@link Location}.
+@@ -452,5 +452,14 @@ public interface RegionAccessor {
+ */
+ @NotNull
+ io.papermc.paper.world.MoonPhase getMoonPhase();
++
++ /**
++ * Get the world's key
++ *
++ * @return the world's key
++ */
++ @NotNull
++ @Override
++ NamespacedKey getKey();
+ // Paper end
+ }
+diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
+index 5644af8154373923791e3ed5f8b01c3f5d357b9c..efd612c1df363bd9c8f1ae0ea70c884af532efc3 100644
+--- a/src/main/java/org/bukkit/Server.java
++++ b/src/main/java/org/bukkit/Server.java
+@@ -722,6 +722,17 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
+ @Nullable
+ public World getWorld(@NotNull UUID uid);
+
++ // Paper start
++ /**
++ * Gets the world from the given NamespacedKey
++ *
++ * @param worldKey the NamespacedKey of the world to retrieve
++ * @return a world with the given NamespacedKey, or null if none exists
++ */
++ @Nullable
++ public World getWorld(@NotNull NamespacedKey worldKey);
++ // Paper end
++
+ /**
+ * Create a new virtual {@link WorldBorder}.
+ * <p>
+diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
+index 5e817e3372edc381bc1d3b993686cbeaa5daac34..0bd07a92614e39385859d74a016184d78b8f58e3 100644
+--- a/src/main/java/org/bukkit/UnsafeValues.java
++++ b/src/main/java/org/bukkit/UnsafeValues.java
+@@ -165,5 +165,10 @@ public interface UnsafeValues {
+ * Use this when sending custom packets, so that there are no collisions on the client or server.
+ */
+ public int nextEntityId();
++
++ /**
++ * Just don't use it.
++ */
++ @org.jetbrains.annotations.NotNull String getMainLevelName();
+ // Paper end
+ }
+diff --git a/src/main/java/org/bukkit/WorldCreator.java b/src/main/java/org/bukkit/WorldCreator.java
+index 27537aeabd3bd1b5383e6ecf775aa89e033aa2bc..afc0ce2eaa7cf48d1255fec7377103b1f7a99734 100644
+--- a/src/main/java/org/bukkit/WorldCreator.java
++++ b/src/main/java/org/bukkit/WorldCreator.java
+@@ -13,6 +13,7 @@ import org.jetbrains.annotations.Nullable;
+ * Represents various types of options that may be used to create a world.
+ */
+ public class WorldCreator {
++ private final NamespacedKey key; // Paper
+ private final String name;
+ private long seed;
+ private World.Environment environment = World.Environment.NORMAL;
+@@ -30,11 +31,80 @@ public class WorldCreator {
+ * @param name Name of the world that will be created
+ */
+ public WorldCreator(@NotNull String name) {
+- Preconditions.checkArgument(name != null, "World name cannot be null");
++ // Paper start
++ this(name, getWorldKey(name));
++ }
++
++ private static NamespacedKey getWorldKey(String name) {
++ final String mainLevelName = Bukkit.getUnsafe().getMainLevelName();
++ if (name.equals(mainLevelName)) {
++ return NamespacedKey.minecraft("overworld");
++ } else if (name.equals(mainLevelName + "_nether")) {
++ return NamespacedKey.minecraft("the_nether");
++ } else if (name.equals(mainLevelName + "_the_end")) {
++ return NamespacedKey.minecraft("the_end");
++ } else {
++ return NamespacedKey.minecraft(name.toLowerCase(java.util.Locale.ENGLISH).replace(" ", "_"));
++ }
++ }
+
+- this.name = name;
++ /**
++ * Creates an empty WorldCreator for the given world name and key
++ *
++ * @param levelName LevelName of the world that will be created
++ * @param worldKey NamespacedKey of the world that will be created
++ */
++ public WorldCreator(@NotNull String levelName, @NotNull NamespacedKey worldKey) {
++ if (levelName == null || worldKey == null) {
++ throw new IllegalArgumentException("World name and key cannot be null");
++ }
++ this.name = levelName;
+ this.seed = (new Random()).nextLong();
++ this.key = worldKey;
++ }
++
++ /**
++ * Creates an empty WorldCreator for the given key.
++ * LevelName will be the Key part of the NamespacedKey.
++ *
++ * @param worldKey NamespacedKey of the world that will be created
++ */
++ public WorldCreator(@NotNull NamespacedKey worldKey) {
++ this(worldKey.getKey(), worldKey);
++ }
++
++ /**
++ * Gets the key for this WorldCreator
++ *
++ * @return the key
++ */
++ @NotNull
++ public NamespacedKey key() {
++ return key;
++ }
++
++ /**
++ * Creates an empty WorldCreator for the given world name and key
++ *
++ * @param levelName LevelName of the world that will be created
++ * @param worldKey NamespacedKey of the world that will be created
++ */
++ @NotNull
++ public static WorldCreator ofNameAndKey(@NotNull String levelName, @NotNull NamespacedKey worldKey) {
++ return new WorldCreator(levelName, worldKey);
++ }
++
++ /**
++ * Creates an empty WorldCreator for the given key.
++ * LevelName will be the Key part of the NamespacedKey.
++ *
++ * @param worldKey NamespacedKey of the world that will be created
++ */
++ @NotNull
++ public static WorldCreator ofKey(@NotNull NamespacedKey worldKey) {
++ return new WorldCreator(worldKey);
+ }
++ // Paper end
+
+ /**
+ * Copies the options from the specified world