2021-06-11 14:02:28 +02:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
|
|
Date: Wed, 6 Jan 2021 00:34:10 -0800
|
2022-06-05 22:51:44 +02:00
|
|
|
Subject: [PATCH] Expand world key API
|
2021-06-11 14:02:28 +02:00
|
|
|
|
|
|
|
|
|
|
|
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
|
2023-07-04 10:22:56 +02:00
|
|
|
index 68e39ed5a80d6d2d26366122d8d09395d38434dd..4521a0142f2d824d57d753cd41512a3264764a0d 100644
|
2021-06-11 14:02:28 +02:00
|
|
|
--- a/src/main/java/org/bukkit/Bukkit.java
|
|
|
|
+++ b/src/main/java/org/bukkit/Bukkit.java
|
2023-07-04 10:22:56 +02:00
|
|
|
@@ -831,6 +831,18 @@ public final class Bukkit {
|
2021-06-11 14:02:28 +02:00
|
|
|
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
|
|
|
|
|
|
|
|
/**
|
2022-04-16 10:29:50 +02:00
|
|
|
* Create a new virtual {@link WorldBorder}.
|
2022-06-05 22:51:44 +02:00
|
|
|
diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java
|
2023-05-12 13:10:08 +02:00
|
|
|
index 501dd5a26c27294420821b3d75f8938596afb1a8..71ef9b479888aa83455757560b60745572c7196d 100644
|
2022-06-05 22:51:44 +02:00
|
|
|
--- a/src/main/java/org/bukkit/RegionAccessor.java
|
|
|
|
+++ b/src/main/java/org/bukkit/RegionAccessor.java
|
|
|
|
@@ -19,7 +19,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}.
|
2023-05-12 13:10:08 +02:00
|
|
|
@@ -428,5 +428,14 @@ public interface RegionAccessor {
|
2022-06-05 22:51:44 +02:00
|
|
|
*/
|
|
|
|
@NotNull
|
|
|
|
io.papermc.paper.world.MoonPhase getMoonPhase();
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Get the world's key
|
|
|
|
+ *
|
|
|
|
+ * @return the world's key
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ @Override
|
|
|
|
+ NamespacedKey getKey();
|
|
|
|
// Paper end
|
|
|
|
}
|
2021-06-11 14:02:28 +02:00
|
|
|
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
|
2023-07-04 10:22:56 +02:00
|
|
|
index 87c617edb7259932de48606c4931ec69086d2bee..37a73fb1c275bae05f53746a608e76e23839e729 100644
|
2021-06-11 14:02:28 +02:00
|
|
|
--- a/src/main/java/org/bukkit/Server.java
|
|
|
|
+++ b/src/main/java/org/bukkit/Server.java
|
2023-07-04 10:22:56 +02:00
|
|
|
@@ -695,6 +695,17 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
|
2021-06-11 14:02:28 +02:00
|
|
|
@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
|
|
|
|
+
|
|
|
|
/**
|
2022-04-16 10:29:50 +02:00
|
|
|
* Create a new virtual {@link WorldBorder}.
|
|
|
|
* <p>
|
2022-05-27 17:42:36 +02:00
|
|
|
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
|
2023-06-06 11:09:19 +02:00
|
|
|
index eabbe1cd18316948f70e7b56fb80827fdd3672f0..a00d93eee9710bb0fdf0fb791ef1a9262f89ef60 100644
|
2022-05-27 17:42:36 +02:00
|
|
|
--- a/src/main/java/org/bukkit/UnsafeValues.java
|
|
|
|
+++ b/src/main/java/org/bukkit/UnsafeValues.java
|
2023-06-06 11:09:19 +02:00
|
|
|
@@ -137,5 +137,10 @@ public interface UnsafeValues {
|
2023-02-28 17:36:01 +01:00
|
|
|
* Use this when sending custom packets, so that there are no collisions on the client or server.
|
2022-05-27 17:42:36 +02:00
|
|
|
*/
|
2023-02-28 17:36:01 +01:00
|
|
|
public int nextEntityId();
|
2022-05-27 17:42:36 +02:00
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Just don't use it.
|
|
|
|
+ */
|
|
|
|
+ @org.jetbrains.annotations.NotNull String getMainLevelName();
|
|
|
|
// Paper end
|
|
|
|
}
|
2021-06-11 14:02:28 +02:00
|
|
|
diff --git a/src/main/java/org/bukkit/WorldCreator.java b/src/main/java/org/bukkit/WorldCreator.java
|
2022-05-27 17:42:36 +02:00
|
|
|
index cbe6b3a1ba7b04826d97c3558e8eb4e5ba11f92f..cbdcac688afb7c13dd7058fa522bbd2c5adc445e 100644
|
2021-06-11 14:02:28 +02:00
|
|
|
--- a/src/main/java/org/bukkit/WorldCreator.java
|
|
|
|
+++ b/src/main/java/org/bukkit/WorldCreator.java
|
2021-08-25 09:59:26 +02:00
|
|
|
@@ -12,6 +12,7 @@ import org.jetbrains.annotations.Nullable;
|
2021-06-11 14:02:28 +02:00
|
|
|
* 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;
|
2023-03-23 22:57:03 +01:00
|
|
|
@@ -28,13 +29,80 @@ public class WorldCreator {
|
2021-06-11 14:02:28 +02:00
|
|
|
* @param name Name of the world that will be created
|
|
|
|
*/
|
|
|
|
public WorldCreator(@NotNull String name) {
|
|
|
|
- if (name == null) {
|
|
|
|
- throw new IllegalArgumentException("World name cannot be null");
|
|
|
|
+ // Paper start
|
2022-05-27 17:42:36 +02:00
|
|
|
+ this(name, getWorldKey(name));
|
2023-03-23 22:57:03 +01:00
|
|
|
+ }
|
|
|
|
+
|
2022-05-27 17:42:36 +02:00
|
|
|
+ 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(" ", "_"));
|
2023-03-23 22:57:03 +01:00
|
|
|
}
|
2021-06-11 14:02:28 +02:00
|
|
|
+ }
|
2023-03-23 22:57:03 +01:00
|
|
|
|
|
|
|
- this.name = name;
|
2021-06-11 14:02:28 +02:00
|
|
|
+ /**
|
|
|
|
+ * 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;
|
2023-03-23 22:57:03 +01:00
|
|
|
this.seed = (new Random()).nextLong();
|
2021-06-11 14:02:28 +02:00
|
|
|
+ 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);
|
2023-03-23 22:57:03 +01:00
|
|
|
}
|
2021-06-11 14:02:28 +02:00
|
|
|
+ // Paper end
|
2023-03-23 22:57:03 +01:00
|
|
|
|
2021-06-11 14:02:28 +02:00
|
|
|
/**
|
|
|
|
* Copies the options from the specified world
|