mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-26 19:07:40 +01:00
Expand world key API
This commit is contained in:
parent
bcd78c9bf2
commit
07c1829d7f
@ -865,6 +865,29 @@ 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the world from the given Key
|
||||
*
|
||||
* @param worldKey the Key of the world to retrieve
|
||||
* @return a world with the given Key, or null if none exists
|
||||
*/
|
||||
@Nullable
|
||||
public static World getWorld(@NotNull net.kyori.adventure.key.Key worldKey) {
|
||||
return server.getWorld(worldKey);
|
||||
}
|
||||
// Paper end
|
||||
|
||||
/**
|
||||
* Create a new virtual {@link WorldBorder}.
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -726,6 +726,28 @@ 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
|
||||
default World getWorld(@NotNull NamespacedKey worldKey) {
|
||||
return getWorld((net.kyori.adventure.key.Key) worldKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the world from the given Key
|
||||
*
|
||||
* @param worldKey the Key of the world to retrieve
|
||||
* @return a world with the given Key, or null if none exists
|
||||
*/
|
||||
@Nullable
|
||||
World getWorld(@NotNull net.kyori.adventure.key.Key worldKey);
|
||||
// Paper end
|
||||
|
||||
/**
|
||||
* Create a new virtual {@link WorldBorder}.
|
||||
* <p>
|
||||
|
@ -175,5 +175,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
|
||||
}
|
||||
|
@ -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,12 +31,81 @@ 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");
|
||||
|
||||
this.name = name;
|
||||
this.seed = (new Random()).nextLong();
|
||||
// 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(" ", "_"));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user