6464import org .mvplugins .multiverse .core .world .options .DeleteWorldOptions ;
6565import org .mvplugins .multiverse .core .world .options .ImportWorldOptions ;
6666import org .mvplugins .multiverse .core .world .options .KeepWorldSettingsOptions ;
67+ import org .mvplugins .multiverse .core .world .options .LoadWorldOptions ;
6768import org .mvplugins .multiverse .core .world .options .RegenWorldOptions ;
6869import org .mvplugins .multiverse .core .world .options .RemoveWorldOptions ;
6970import org .mvplugins .multiverse .core .world .options .UnloadWorldOptions ;
@@ -226,8 +227,9 @@ private void autoLoadWorlds() {
226227 if (isLoadedWorld (world ) || !world .isAutoLoad ()) {
227228 return ;
228229 }
229- loadWorld (world ).onFailure (failure -> Logging .severe ("Failed to load world %s: %s" ,
230- world .getName (), failure ));
230+ loadWorld (LoadWorldOptions .world (world ))
231+ .onFailure (failure ->
232+ Logging .severe ("Failed to load world %s: %s" , world .getName (), failure ));
231233 });
232234 }
233235
@@ -403,10 +405,14 @@ private void setDefaultEnvironmentScale(MultiverseWorld world) {
403405 *
404406 * @param worldName The name of the world to load.
405407 * @return The result of the load.
408+ *
409+ * @deprecated Use {@link #loadWorld(LoadWorldOptions)} instead.
406410 */
411+ @ Deprecated (since = "5.2" , forRemoval = true )
412+ @ ApiStatus .ScheduledForRemoval (inVersion = "6.0" )
407413 public Attempt <LoadedMultiverseWorld , LoadFailureReason > loadWorld (@ NotNull String worldName ) {
408414 return getWorld (worldName )
409- .map (this :: loadWorld )
415+ .map (world -> loadWorld ( LoadWorldOptions . world ( world )) )
410416 .getOrElse (() -> worldNameChecker .isValidWorldFolder (worldName )
411417 ? worldActionResult (LoadFailureReason .WORLD_EXIST_FOLDER , worldName )
412418 : worldActionResult (LoadFailureReason .WORLD_NON_EXISTENT , worldName ));
@@ -417,12 +423,30 @@ public Attempt<LoadedMultiverseWorld, LoadFailureReason> loadWorld(@NotNull Stri
417423 *
418424 * @param world The world to load.
419425 * @return The result of the load.
426+ *
427+ * @deprecated Use {@link #loadWorld(LoadWorldOptions)} instead.
420428 */
429+ @ Deprecated (since = "5.2" , forRemoval = true )
430+ @ ApiStatus .ScheduledForRemoval (inVersion = "6.0" )
421431 public Attempt <LoadedMultiverseWorld , LoadFailureReason > loadWorld (@ NotNull MultiverseWorld world ) {
422- return validateWorldToLoad ( world ). mapAttempt ( this :: doLoadWorld );
432+ return loadWorld ( LoadWorldOptions . world ( world ) );
423433 }
424434
425- private Attempt <MultiverseWorld , LoadFailureReason > validateWorldToLoad (@ NotNull MultiverseWorld mvWorld ) {
435+ /**
436+ * Loads an existing world in config.
437+ *
438+ * @param options The options for customizing the loading of a world.
439+ * @return The result of the load.
440+ *
441+ * @since 5.2
442+ */
443+ @ ApiStatus .AvailableSince ("5.2" )
444+ public Attempt <LoadedMultiverseWorld , LoadFailureReason > loadWorld (@ NotNull LoadWorldOptions options ) {
445+ return validateWorldToLoad (options ).mapAttempt (this ::doLoadWorld );
446+ }
447+
448+ private Attempt <LoadWorldOptions , LoadFailureReason > validateWorldToLoad (@ NotNull LoadWorldOptions options ) {
449+ MultiverseWorld mvWorld = options .world ();
426450 if (loadTracker .contains (mvWorld .getName ())) {
427451 // This is to prevent recursive calls by WorldLoadEvent
428452 Logging .fine ("World already loading: " + mvWorld .getName ());
@@ -431,21 +455,19 @@ private Attempt<MultiverseWorld, LoadFailureReason> validateWorldToLoad(@NotNull
431455 Logging .severe ("World already loaded: " + mvWorld .getName ());
432456 return worldActionResult (LoadFailureReason .WORLD_EXIST_LOADED , mvWorld .getName ());
433457 }
434- return worldActionResult (mvWorld );
458+ return worldActionResult (options );
435459 }
436460
437- private Attempt <LoadedMultiverseWorld , LoadFailureReason > doLoadWorld (@ NotNull MultiverseWorld mvWorld ) {
461+ private Attempt <LoadedMultiverseWorld , LoadFailureReason > doLoadWorld (@ NotNull LoadWorldOptions options ) {
462+ MultiverseWorld mvWorld = options .world ();
463+
438464 World bukkitWorld = Bukkit .getWorld (mvWorld .getName ());
439465 if (bukkitWorld != null ) {
440- if (bukkitWorld .getEnvironment () != mvWorld .getEnvironment ()) {
441- return Attempt .failure (LoadFailureReason .BUKKIT_ENVIRONMENT_MISMATCH ,
442- Replace .WORLD .with (mvWorld .getName ()),
443- replace ("{bukkitEnvironment}" ).with (bukkitWorld .getEnvironment ().name ()),
444- replace ("{mvEnvironment}" ).with (mvWorld .getEnvironment ().name ()));
445- }
446- // World already loaded, maybe by another plugin
447- Logging .finer ("World already loaded in bukkit: " + mvWorld .getName ());
448- return newLoadedMultiverseWorld (mvWorld , bukkitWorld );
466+ return doLoadBukkitWorld (bukkitWorld , mvWorld );
467+ }
468+
469+ if (options .doFolderCheck () && !worldNameChecker .isValidWorldFolder (mvWorld .getName ())) {
470+ return worldActionResult (LoadFailureReason .WORLD_FOLDER_INVALID , mvWorld .getName ());
449471 }
450472
451473 WorldCreator worldCreator = WorldCreator .name (mvWorld .getName ())
@@ -458,6 +480,18 @@ private Attempt<LoadedMultiverseWorld, LoadFailureReason> doLoadWorld(@NotNull M
458480 .mapAttempt (newBukkitWorld -> newLoadedMultiverseWorld (mvWorld , newBukkitWorld ));
459481 }
460482
483+ private @ NotNull Attempt <LoadedMultiverseWorld , LoadFailureReason > doLoadBukkitWorld (World bukkitWorld , MultiverseWorld mvWorld ) {
484+ if (bukkitWorld .getEnvironment () != mvWorld .getEnvironment ()) {
485+ return Attempt .failure (LoadFailureReason .BUKKIT_ENVIRONMENT_MISMATCH ,
486+ Replace .WORLD .with (mvWorld .getName ()),
487+ replace ("{bukkitEnvironment}" ).with (bukkitWorld .getEnvironment ().name ()),
488+ replace ("{mvEnvironment}" ).with (mvWorld .getEnvironment ().name ()));
489+ }
490+ // World already loaded, maybe by another plugin
491+ Logging .finer ("World already loaded in bukkit: " + mvWorld .getName ());
492+ return newLoadedMultiverseWorld (mvWorld , bukkitWorld );
493+ }
494+
461495 private Attempt <LoadedMultiverseWorld , LoadFailureReason > newLoadedMultiverseWorld (MultiverseWorld mvWorld , World bukkitWorld ) {
462496 WorldConfig worldConfig = worldsConfigManager .getWorldConfig (mvWorld .getName ()).get (); //TODO: null check here, but logically it should never be null.
463497 LoadedMultiverseWorld loadedWorld = new LoadedMultiverseWorld (
@@ -615,7 +649,7 @@ private Attempt<String, RemoveFailureReason> removeWorldFromConfig(@NotNull Mult
615649 */
616650 public Attempt <String , DeleteFailureReason > deleteWorld (@ NotNull DeleteWorldOptions options ) {
617651 return getLoadedWorld (options .world ()).fold (
618- () -> loadWorld (options .world ())
652+ () -> loadWorld (LoadWorldOptions . world ( options .world () ))
619653 .transform (DeleteFailureReason .LOAD_FAILED )
620654 .mapAttempt (world -> doDeleteWorld (world , options )),
621655 world -> doDeleteWorld (world , options ));
0 commit comments