64
64
import org .mvplugins .multiverse .core .world .options .DeleteWorldOptions ;
65
65
import org .mvplugins .multiverse .core .world .options .ImportWorldOptions ;
66
66
import org .mvplugins .multiverse .core .world .options .KeepWorldSettingsOptions ;
67
+ import org .mvplugins .multiverse .core .world .options .LoadWorldOptions ;
67
68
import org .mvplugins .multiverse .core .world .options .RegenWorldOptions ;
68
69
import org .mvplugins .multiverse .core .world .options .RemoveWorldOptions ;
69
70
import org .mvplugins .multiverse .core .world .options .UnloadWorldOptions ;
@@ -226,8 +227,9 @@ private void autoLoadWorlds() {
226
227
if (isLoadedWorld (world ) || !world .isAutoLoad ()) {
227
228
return ;
228
229
}
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 ));
231
233
});
232
234
}
233
235
@@ -403,10 +405,14 @@ private void setDefaultEnvironmentScale(MultiverseWorld world) {
403
405
*
404
406
* @param worldName The name of the world to load.
405
407
* @return The result of the load.
408
+ *
409
+ * @deprecated Use {@link #loadWorld(LoadWorldOptions)} instead.
406
410
*/
411
+ @ Deprecated (since = "5.2" , forRemoval = true )
412
+ @ ApiStatus .ScheduledForRemoval (inVersion = "6.0" )
407
413
public Attempt <LoadedMultiverseWorld , LoadFailureReason > loadWorld (@ NotNull String worldName ) {
408
414
return getWorld (worldName )
409
- .map (this :: loadWorld )
415
+ .map (world -> loadWorld ( LoadWorldOptions . world ( world )) )
410
416
.getOrElse (() -> worldNameChecker .isValidWorldFolder (worldName )
411
417
? worldActionResult (LoadFailureReason .WORLD_EXIST_FOLDER , worldName )
412
418
: worldActionResult (LoadFailureReason .WORLD_NON_EXISTENT , worldName ));
@@ -417,12 +423,30 @@ public Attempt<LoadedMultiverseWorld, LoadFailureReason> loadWorld(@NotNull Stri
417
423
*
418
424
* @param world The world to load.
419
425
* @return The result of the load.
426
+ *
427
+ * @deprecated Use {@link #loadWorld(LoadWorldOptions)} instead.
420
428
*/
429
+ @ Deprecated (since = "5.2" , forRemoval = true )
430
+ @ ApiStatus .ScheduledForRemoval (inVersion = "6.0" )
421
431
public Attempt <LoadedMultiverseWorld , LoadFailureReason > loadWorld (@ NotNull MultiverseWorld world ) {
422
- return validateWorldToLoad ( world ). mapAttempt ( this :: doLoadWorld );
432
+ return loadWorld ( LoadWorldOptions . world ( world ) );
423
433
}
424
434
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 ();
426
450
if (loadTracker .contains (mvWorld .getName ())) {
427
451
// This is to prevent recursive calls by WorldLoadEvent
428
452
Logging .fine ("World already loading: " + mvWorld .getName ());
@@ -431,21 +455,19 @@ private Attempt<MultiverseWorld, LoadFailureReason> validateWorldToLoad(@NotNull
431
455
Logging .severe ("World already loaded: " + mvWorld .getName ());
432
456
return worldActionResult (LoadFailureReason .WORLD_EXIST_LOADED , mvWorld .getName ());
433
457
}
434
- return worldActionResult (mvWorld );
458
+ return worldActionResult (options );
435
459
}
436
460
437
- private Attempt <LoadedMultiverseWorld , LoadFailureReason > doLoadWorld (@ NotNull MultiverseWorld mvWorld ) {
461
+ private Attempt <LoadedMultiverseWorld , LoadFailureReason > doLoadWorld (@ NotNull LoadWorldOptions options ) {
462
+ MultiverseWorld mvWorld = options .world ();
463
+
438
464
World bukkitWorld = Bukkit .getWorld (mvWorld .getName ());
439
465
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 ());
449
471
}
450
472
451
473
WorldCreator worldCreator = WorldCreator .name (mvWorld .getName ())
@@ -458,6 +480,18 @@ private Attempt<LoadedMultiverseWorld, LoadFailureReason> doLoadWorld(@NotNull M
458
480
.mapAttempt (newBukkitWorld -> newLoadedMultiverseWorld (mvWorld , newBukkitWorld ));
459
481
}
460
482
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
+
461
495
private Attempt <LoadedMultiverseWorld , LoadFailureReason > newLoadedMultiverseWorld (MultiverseWorld mvWorld , World bukkitWorld ) {
462
496
WorldConfig worldConfig = worldsConfigManager .getWorldConfig (mvWorld .getName ()).get (); //TODO: null check here, but logically it should never be null.
463
497
LoadedMultiverseWorld loadedWorld = new LoadedMultiverseWorld (
@@ -615,7 +649,7 @@ private Attempt<String, RemoveFailureReason> removeWorldFromConfig(@NotNull Mult
615
649
*/
616
650
public Attempt <String , DeleteFailureReason > deleteWorld (@ NotNull DeleteWorldOptions options ) {
617
651
return getLoadedWorld (options .world ()).fold (
618
- () -> loadWorld (options .world ())
652
+ () -> loadWorld (LoadWorldOptions . world ( options .world () ))
619
653
.transform (DeleteFailureReason .LOAD_FAILED )
620
654
.mapAttempt (world -> doDeleteWorld (world , options )),
621
655
world -> doDeleteWorld (world , options ));
0 commit comments