96d5e6ca48
Currently includes generated key holder classes for types used in the Registry Modification API
190 Zeilen
6.9 KiB
Diff
190 Zeilen
6.9 KiB
Diff
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
|
|
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 102f1ac7c2fde48be4c7e582019b8601dcf361e4..def2ea036536d0e15bc3b35bb69e99a9bcba1d60 100644
|
|
--- a/src/main/java/org/bukkit/Bukkit.java
|
|
+++ b/src/main/java/org/bukkit/Bukkit.java
|
|
@@ -832,6 +832,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 f587a529e4d7b097b3f204a34c636da0bbac6747..58b81f30f9e29ab481ae96c7eea40ad976a4b192 100644
|
|
--- 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}.
|
|
@@ -428,5 +428,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 2864bf08aacedbbfdaa507838d42441b88953786..11be12a66bbc660221760d857daf78cdb18d77f0 100644
|
|
--- a/src/main/java/org/bukkit/Server.java
|
|
+++ b/src/main/java/org/bukkit/Server.java
|
|
@@ -696,6 +696,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 96b66f4f6fb8637ab3ad275ddd980d5b71711a6c..27d5f37a9b2da92307e5b505e3b31cca8a067018 100644
|
|
--- a/src/main/java/org/bukkit/UnsafeValues.java
|
|
+++ b/src/main/java/org/bukkit/UnsafeValues.java
|
|
@@ -145,5 +145,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
|