55
55
import org .mvplugins .multiverse .core .world .helpers .WorldNameChecker ;
56
56
import org .mvplugins .multiverse .core .world .options .CloneWorldOptions ;
57
57
import org .mvplugins .multiverse .core .world .options .CreateWorldOptions ;
58
+ import org .mvplugins .multiverse .core .world .options .DeleteWorldOptions ;
58
59
import org .mvplugins .multiverse .core .world .options .ImportWorldOptions ;
59
60
import org .mvplugins .multiverse .core .world .options .KeepWorldSettingsOptions ;
60
61
import org .mvplugins .multiverse .core .world .options .RegenWorldOptions ;
@@ -211,7 +212,7 @@ private Attempt<CreateWorldOptions, CreateFailureReason> validateCreateWorldOpti
211
212
return worldActionResult (CreateFailureReason .WORLD_EXIST_LOADED , options .worldName ());
212
213
} else if (getWorld (options .worldName ()).isDefined ()) {
213
214
return worldActionResult (CreateFailureReason .WORLD_EXIST_UNLOADED , options .worldName ());
214
- } else if (worldNameChecker .hasWorldFolder (options .worldName ())) {
215
+ } else if (options . doFolderCheck () && worldNameChecker .hasWorldFolder (options .worldName ())) {
215
216
return worldActionResult (CreateFailureReason .WORLD_EXIST_FOLDER , options .worldName ());
216
217
}
217
218
return worldActionResult (options );
@@ -506,28 +507,15 @@ private Attempt<String, RemoveFailureReason> removeWorldFromConfig(@NotNull Mult
506
507
* Deletes an existing multiverse world entirely. World will be loaded if it is not already loaded.
507
508
* Warning: This will delete all world files.
508
509
*
509
- * @param worldName The name of the world to delete .
510
+ * @param options The options for customizing the deletion of a world .
510
511
* @return The result of the delete action.
511
512
*/
512
- public Attempt <String , DeleteFailureReason > deleteWorld (@ NotNull String worldName ) {
513
- return getWorld (worldName )
514
- .map (this ::deleteWorld )
515
- .getOrElse (() -> worldActionResult (DeleteFailureReason .WORLD_NON_EXISTENT , worldName ));
516
- }
517
-
518
- /**
519
- * Deletes an existing multiverse world entirely. World will be loaded if it is not already loaded.
520
- * Warning: This will delete all world files.
521
- *
522
- * @param world The world to delete.
523
- * @return The result of the delete action.
524
- */
525
- public Attempt <String , DeleteFailureReason > deleteWorld (@ NotNull MultiverseWorld world ) {
526
- return getLoadedWorld (world ).fold (
527
- () -> loadWorld (world )
513
+ public Attempt <String , DeleteFailureReason > deleteWorld (@ NotNull DeleteWorldOptions options ) {
514
+ return getLoadedWorld (options .world ()).fold (
515
+ () -> loadWorld (options .world ())
528
516
.transform (DeleteFailureReason .LOAD_FAILED )
529
- .mapAttempt (this :: deleteWorld ),
530
- this :: deleteWorld );
517
+ .mapAttempt (world -> doDeleteWorld ( world , options ) ),
518
+ world -> doDeleteWorld ( world , options ) );
531
519
}
532
520
533
521
/**
@@ -536,7 +524,7 @@ public Attempt<String, DeleteFailureReason> deleteWorld(@NotNull MultiverseWorld
536
524
* @param world The multiverse world to delete.
537
525
* @return The result of the delete action.
538
526
*/
539
- public Attempt <String , DeleteFailureReason > deleteWorld (@ NotNull LoadedMultiverseWorld world ) {
527
+ private Attempt <String , DeleteFailureReason > doDeleteWorld (@ NotNull LoadedMultiverseWorld world , @ NotNull DeleteWorldOptions options ) {
540
528
AtomicReference <File > worldFolder = new AtomicReference <>();
541
529
return validateWorldToDelete (world )
542
530
.peek (worldFolder ::set )
@@ -548,7 +536,7 @@ public Attempt<String, DeleteFailureReason> deleteWorld(@NotNull LoadedMultivers
548
536
: Attempt .success (null );
549
537
})
550
538
.mapAttempt (() -> removeWorld (world ).transform (DeleteFailureReason .REMOVE_FAILED ))
551
- .mapAttempt (() -> fileUtils .deleteFolder (worldFolder .get ()).fold (
539
+ .mapAttempt (() -> fileUtils .deleteFolder (worldFolder .get (), options . keepFiles () ).fold (
552
540
exception -> worldActionResult (DeleteFailureReason .FAILED_TO_DELETE_FOLDER ,
553
541
world .getName (), exception ),
554
542
success -> worldActionResult (world .getName ())));
@@ -665,9 +653,10 @@ public Attempt<LoadedMultiverseWorld, RegenFailureReason> regenWorld(@NotNull Re
665
653
.generator (world .getGenerator ())
666
654
.seed (options .seed ())
667
655
.useSpawnAdjust (!shouldKeepSpawnLocation && world .getAdjustSpawn ())
668
- .worldType (world .getWorldType ().getOrElse (WorldType .NORMAL ));
656
+ .worldType (world .getWorldType ().getOrElse (WorldType .NORMAL ))
657
+ .doFolderCheck (options .keepFiles ().isEmpty ());
669
658
670
- return deleteWorld (world )
659
+ return deleteWorld (DeleteWorldOptions . world ( world ). keepFiles ( options . keepFiles ()) )
671
660
.transform (RegenFailureReason .DELETE_FAILED )
672
661
.mapAttempt (() -> createWorld (createWorldOptions ).transform (RegenFailureReason .CREATE_FAILED ))
673
662
.onSuccess (newWorld -> {
0 commit comments