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
|
2024-04-12 21:14:06 +02:00
|
|
|
index e832c6a8a10bc29d9ab20cbdf394cf836eb2f6a5..4b3c91575f2609ad1b1177384f6f21151a535054 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
|
Updated Upstream (Bukkit/CraftBukkit) (#10242)
* Updated Upstream (Bukkit/CraftBukkit)
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:
a6a9d2a4 Remove some old ApiStatus.Experimental annotations
be72314c SPIGOT-7300, PR-829: Add new DamageSource API providing enhanced information about entity damage
b252cf05 SPIGOT-7576, PR-970: Add methods in MushroomCow to change stew effects
b1c689bd PR-902: Add Server#isLoggingIPs to get log-ips configuration
08f86d1c PR-971: Add Player methods for client-side potion effects
2e3024a9 PR-963: Add API for in-world structures
a23292a7 SPIGOT-7530, PR-948: Improve Resource Pack API with new 1.20.3 functionality
1851857b SPIGOT-3071, PR-969: Add entity spawn method with spawn reason
cde4c52a SPIGOT-5553, PR-964: Add EntityKnockbackEvent
CraftBukkit Changes:
38fd4bd50 Fix accidentally renamed internal damage method
80f0ce4be SPIGOT-7300, PR-1180: Add new DamageSource API providing enhanced information about entity damage
7e43f3b16 SPIGOT-7581: Fix typo in BlockMushroom
ea14b7d90 SPIGOT-7576, PR-1347: Add methods in MushroomCow to change stew effects
4c687f243 PR-1259: Add Server#isLoggingIPs to get log-ips configuration
22a541a29 Improve support for per-world game rules
cb7dccce2 PR-1348: Add Player methods for client-side potion effects
b8d6109f0 PR-1335: Add API for in-world structures
4398a1b5b SPIGOT-7577: Make CraftWindCharge#explode discard the entity
e74107678 Fix Crafter maximum stack size
0bb0f4f6a SPIGOT-7530, PR-1314: Improve Resource Pack API with new 1.20.3 functionality
4949f556d SPIGOT-3071, PR-1345: Add entity spawn method with spawn reason
20ac73ca2 PR-1353: Fix Structure#place not working as documented with 0 palette
3c1b77871 SPIGOT-6911, PR-1349: Change max book length in CraftMetaBook
333701839 SPIGOT-7572: Bee nests generated without bees
f48f4174c SPIGOT-5553, PR-1336: Add EntityKnockbackEvent
2024-02-11 22:28:00 +01:00
|
|
|
@@ -862,6 +862,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-12-05 18:33:18 +01:00
|
|
|
index 27eff0826d5b5b48697fefd9571886e7bbce74b1..d8b1fa79dc24138dc71e32c14bda71c1d570ed88 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
|
2023-11-25 23:34:42 +01:00
|
|
|
@@ -18,7 +18,7 @@ import org.jetbrains.annotations.Nullable;
|
2022-06-05 22:51:44 +02:00
|
|
|
* 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-12-05 18:33:18 +01:00
|
|
|
@@ -452,5 +452,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
|
2024-04-12 21:14:06 +02:00
|
|
|
index 9477563308adc64fff065eb0a50654baa0d22b84..5bb94245c33105e57131b3d0867ef707c4aed79c 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
|
Updated Upstream (Bukkit/CraftBukkit) (#10242)
* Updated Upstream (Bukkit/CraftBukkit)
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:
a6a9d2a4 Remove some old ApiStatus.Experimental annotations
be72314c SPIGOT-7300, PR-829: Add new DamageSource API providing enhanced information about entity damage
b252cf05 SPIGOT-7576, PR-970: Add methods in MushroomCow to change stew effects
b1c689bd PR-902: Add Server#isLoggingIPs to get log-ips configuration
08f86d1c PR-971: Add Player methods for client-side potion effects
2e3024a9 PR-963: Add API for in-world structures
a23292a7 SPIGOT-7530, PR-948: Improve Resource Pack API with new 1.20.3 functionality
1851857b SPIGOT-3071, PR-969: Add entity spawn method with spawn reason
cde4c52a SPIGOT-5553, PR-964: Add EntityKnockbackEvent
CraftBukkit Changes:
38fd4bd50 Fix accidentally renamed internal damage method
80f0ce4be SPIGOT-7300, PR-1180: Add new DamageSource API providing enhanced information about entity damage
7e43f3b16 SPIGOT-7581: Fix typo in BlockMushroom
ea14b7d90 SPIGOT-7576, PR-1347: Add methods in MushroomCow to change stew effects
4c687f243 PR-1259: Add Server#isLoggingIPs to get log-ips configuration
22a541a29 Improve support for per-world game rules
cb7dccce2 PR-1348: Add Player methods for client-side potion effects
b8d6109f0 PR-1335: Add API for in-world structures
4398a1b5b SPIGOT-7577: Make CraftWindCharge#explode discard the entity
e74107678 Fix Crafter maximum stack size
0bb0f4f6a SPIGOT-7530, PR-1314: Improve Resource Pack API with new 1.20.3 functionality
4949f556d SPIGOT-3071, PR-1345: Add entity spawn method with spawn reason
20ac73ca2 PR-1353: Fix Structure#place not working as documented with 0 palette
3c1b77871 SPIGOT-6911, PR-1349: Change max book length in CraftMetaBook
333701839 SPIGOT-7572: Bee nests generated without bees
f48f4174c SPIGOT-5553, PR-1336: Add EntityKnockbackEvent
2024-02-11 22:28:00 +01:00
|
|
|
@@ -720,6 +720,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
|
2024-04-06 21:53:39 +02:00
|
|
|
index 241cb853476ea35dad73d0234b2d030e9af23476..5de86f8cd3cc7f7e8ebc4a22d3921273378704f2 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
|
2024-04-06 21:53:39 +02:00
|
|
|
@@ -164,5 +164,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
|
2023-10-26 23:56:40 +02:00
|
|
|
index 27537aeabd3bd1b5383e6ecf775aa89e033aa2bc..afc0ce2eaa7cf48d1255fec7377103b1f7a99734 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
|
2023-10-26 23:56:40 +02:00
|
|
|
@@ -13,6 +13,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-10-26 23:56:40 +02:00
|
|
|
@@ -30,11 +31,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) {
|
2023-10-26 23:56:40 +02:00
|
|
|
- Preconditions.checkArgument(name != null, "World name cannot be null");
|
2021-06-11 14:02:28 +02:00
|
|
|
+ // 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-10-26 23:56:40 +02: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
|