mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-22 08:57:35 +01:00
4cdbb0c86c
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 044d4ee9 SPIGOT-7283, SPIGOT-7318: Add AsyncStructureGenerateEvent and BlockState cloning 57b73d57 PR-913: Deprecate Projectile#doesBounce() and #setBounce() 43373c44 PR-904: Update FeatureFlag for 1.20.2 a7bbbf0c PR-911: Expand DataPack API with 1.20.2 pack version methods 0341e3a0 SPIGOT-7489: Add TeleportDuration to Display Entity bcd8d2aa PR-912: Update Minecraft Wiki URLs CraftBukkit Changes: 99aafc222 Increase outdated build delay dab849f08 SPIGOT-7283, SPIGOT-7318: Add AsyncStructureGenerateEvent and BlockState cloning 041b29ae3 Upgrade specialsource-maven-plugin 851a32cff PR-1263: Remove unused implementation of AbstractProjectile#doesBounce() and #setBounce() 251af0da3 PR-1261: Expand DataPack API with 1.20.2 pack version methods 46e4ba627 Upgrade specialsource-maven-plugin df3738a24 SPIGOT-7489: Add TeleportDuration to Display Entity 8d0fea457 PR-1262: Update Minecraft Wiki URLs e62905aab SPIGOT-7490: Fix entity equipment updates Spigot Changes: a0f3d486 Rebuild patches
191 lines
7.0 KiB
Diff
191 lines
7.0 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 2acb1e1e7a865596d0a0535717bc9d5dd49669c3..369fc041f3203da7d367423ac74cb3eba88becc9 100644
|
|
--- a/src/main/java/org/bukkit/Bukkit.java
|
|
+++ b/src/main/java/org/bukkit/Bukkit.java
|
|
@@ -831,6 +831,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 c8a312bf6cef6ba62114d4f46555f517f53c7576..2bfb1cfb4d669f4bb5a4ef540683bcee409fc49e 100644
|
|
--- a/src/main/java/org/bukkit/Server.java
|
|
+++ b/src/main/java/org/bukkit/Server.java
|
|
@@ -695,6 +695,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 591cc561f6e60bcab3e45fd56f1a50e43e728f4c..1c07e3ef0b7bf3bc0bfe234434114cb6c2f18d42 100644
|
|
--- a/src/main/java/org/bukkit/UnsafeValues.java
|
|
+++ b/src/main/java/org/bukkit/UnsafeValues.java
|
|
@@ -136,5 +136,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 f9fa287d25a0243de8d8d7b0d13144ce919750b0..29f0bb4d5bb1d5ef1b6bd64726ca84c25091f9e4 100644
|
|
--- a/src/main/java/org/bukkit/WorldCreator.java
|
|
+++ b/src/main/java/org/bukkit/WorldCreator.java
|
|
@@ -12,6 +12,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;
|
|
@@ -28,13 +29,80 @@ public class WorldCreator {
|
|
* @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
|
|
+ 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
|