Skip to content

Commit 792913c

Browse files
committed
Refactor world manager methods with better use of streams and option
1 parent e207eb5 commit 792913c

File tree

1 file changed

+42
-53
lines changed

1 file changed

+42
-53
lines changed

src/main/java/org/mvplugins/multiverse/core/world/WorldManager.java

Lines changed: 42 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -174,12 +174,12 @@ private void loadNewWorldConfigs(Collection<WorldConfig> newWorldConfigs) {
174174

175175
private void removeWorldsNotInConfigs(Collection<String> removedWorlds) {
176176
removedWorlds.forEach(worldName -> getWorld(worldName)
177-
.fold(
178-
() -> Attempt.failure(FailureReason.GENERIC, Message.of("world already removed")),
179-
world -> removeWorld(RemoveWorldOptions.world(world))
180-
)
181-
.onFailure(failure -> Logging.severe("Failed to unload world %s: %s", worldName, failure))
182-
.onSuccess(success -> Logging.fine("Unloaded world %s as it was removed from config", worldName)));
177+
.map(world -> removeWorld(RemoveWorldOptions.world(world)))
178+
.getOrElse(() -> worldActionResult(RemoveFailureReason.WORLD_NON_EXISTENT, worldName))
179+
.onFailure(failure ->
180+
Logging.severe("Failed to unload world %s: %s", worldName, failure))
181+
.onSuccess(success ->
182+
Logging.fine("Unloaded world %s as it was removed from config", worldName)));
183183
}
184184

185185
/**
@@ -208,30 +208,29 @@ private void importExistingWorlds() {
208208
}
209209

210210
private void importExistingBukkitWorld(World bukkitWorld) {
211-
if (bukkitWorld == null || isWorld(bukkitWorld.getName())) {
212-
return;
213-
}
214-
importWorld(ImportWorldOptions.worldName(bukkitWorld.getName())
215-
.environment(bukkitWorld.getEnvironment())
216-
.generator(generatorProvider.getDefaultGeneratorForWorld(bukkitWorld.getName())))
217-
.onFailure(failure ->
218-
Logging.severe("Failed to import world %s: %s", bukkitWorld.getName(), failure))
219-
.onSuccess(success ->
220-
Logging.fine("Imported existing world %s", bukkitWorld.getName()));
211+
Option.of(bukkitWorld)
212+
.filter(world -> !isWorld(world.getName()))
213+
.map(world -> importWorld(
214+
ImportWorldOptions.worldName(world.getName())
215+
.environment(world.getEnvironment())
216+
.generator(generatorProvider.getDefaultGeneratorForWorld(world.getName())))
217+
.onFailure(failure ->
218+
Logging.severe("Failed to import world %s: %s", world.getName(), failure))
219+
.onSuccess(newMVWorld ->
220+
Logging.fine("Imported existing world %s", newMVWorld.getName())));
221221
}
222222

223223
/**
224224
* Loads all worlds that are set to autoload.
225225
*/
226226
private void autoLoadWorlds() {
227-
getWorlds().forEach(world -> {
228-
if (isLoadedWorld(world) || !world.isAutoLoad()) {
229-
return;
230-
}
231-
loadWorld(LoadWorldOptions.world(world))
232-
.onFailure(failure ->
233-
Logging.severe("Failed to load world %s: %s", world.getName(), failure));
234-
});
227+
getWorlds().stream()
228+
.filter(world -> !isLoadedWorld(world) && world.isAutoLoad())
229+
.forEach(world -> loadWorld(LoadWorldOptions.world(world))
230+
.onFailure(failure ->
231+
Logging.severe("Failed to autoload world %s: %s", world.getName(), failure))
232+
.onSuccess(newMVWorld ->
233+
Logging.fine("Autoloaded world %s", newMVWorld.getName())));
235234
}
236235

237236
/**
@@ -272,15 +271,12 @@ private Attempt<LoadedMultiverseWorld, CreateFailureReason> doCreateWorld(
272271
.mapAttempt(creator -> addGeneratorToCreator(creator, generatorString))
273272
.mapAttempt(this::createBukkitWorld)
274273
.transform(CreateFailureReason.WORLD_CREATOR_FAILED)
275-
.map(bukkitWorld -> {
276-
LoadedMultiverseWorld loadedWorld = newLoadedMultiverseWorld(
274+
.map(bukkitWorld -> newLoadedMultiverseWorld(
277275
bukkitWorld,
278276
generatorString,
279277
options.biome(),
280-
options.useSpawnAdjust());
281-
pluginManager.callEvent(new MVWorldCreatedEvent(loadedWorld));
282-
return loadedWorld;
283-
});
278+
options.useSpawnAdjust()))
279+
.peek(loadedWorld -> pluginManager.callEvent(new MVWorldCreatedEvent(loadedWorld)));
284280
}
285281

286282
/**
@@ -296,14 +292,9 @@ public Attempt<LoadedMultiverseWorld, ImportFailureReason> importWorld(ImportWor
296292
} else if (isWorld(worldName)) {
297293
return worldActionResult(ImportFailureReason.WORLD_EXIST_UNLOADED, worldName);
298294
}
299-
300-
World bukkitWorld = Bukkit.getWorld(worldName);
301-
if (bukkitWorld != null) {
302-
// World is already loaded, maybe by another plugin
303-
return doImportBukkitWorld(options, bukkitWorld);
304-
}
305-
306-
return validateImportWorldOptions(options).mapAttempt(this::doImportWorld);
295+
return Option.of(Bukkit.getWorld(worldName))
296+
.map(bukkitWorld -> doImportBukkitWorld(options, bukkitWorld))
297+
.getOrElse(() -> validateImportWorldOptions(options).mapAttempt(this::doImportWorld));
307298
}
308299

309300
private Attempt<ImportWorldOptions, ImportFailureReason> validateImportWorldOptions(ImportWorldOptions options) {
@@ -326,15 +317,12 @@ private Attempt<LoadedMultiverseWorld, ImportFailureReason> doImportWorld(
326317
.mapAttempt(creator -> addGeneratorToCreator(creator, generatorString))
327318
.mapAttempt(this::createBukkitWorld)
328319
.transform(ImportFailureReason.WORLD_CREATOR_FAILED)
329-
.map(bukkitWorld -> {
330-
LoadedMultiverseWorld loadedWorld = newLoadedMultiverseWorld(
331-
bukkitWorld,
332-
generatorString,
333-
options.biome(),
334-
options.useSpawnAdjust());
335-
pluginManager.callEvent(new MVWorldImportedEvent(loadedWorld));
336-
return loadedWorld;
337-
});
320+
.map(bukkitWorld -> newLoadedMultiverseWorld(
321+
bukkitWorld,
322+
generatorString,
323+
options.biome(),
324+
options.useSpawnAdjust()))
325+
.peek(loadedWorld -> pluginManager.callEvent(new MVWorldImportedEvent(loadedWorld)));
338326
}
339327

340328
private Attempt<LoadedMultiverseWorld, ImportFailureReason> doImportBukkitWorld(ImportWorldOptions options, World bukkitWorld) {
@@ -701,12 +689,13 @@ private Attempt<String, DeleteFailureReason> doDeleteWorld(@NotNull LoadedMultiv
701689

702690
private Attempt<File, DeleteFailureReason> validateWorldToDelete(
703691
@NotNull LoadedMultiverseWorld world) {
704-
File worldFolder = world.getBukkitWorld().map(World::getWorldFolder).getOrNull();
705-
if (worldFolder == null || !worldNameChecker.isValidWorldFolder(worldFolder)) {
706-
Logging.severe("Failed to get world folder for world: " + world.getName());
707-
return worldActionResult(DeleteFailureReason.WORLD_FOLDER_NOT_FOUND, world.getName());
708-
}
709-
return worldActionResult(worldFolder);
692+
return world.getBukkitWorld().map(World::getWorldFolder)
693+
.filter(worldNameChecker::isValidWorldFolder)
694+
.map(this::<File, DeleteFailureReason>worldActionResult)
695+
.getOrElse(() -> {
696+
Logging.severe("World folder does not exist for world: " + world.getName());
697+
return worldActionResult(DeleteFailureReason.WORLD_FOLDER_NOT_FOUND, world.getName());
698+
});
710699
}
711700

712701
/**

0 commit comments

Comments
 (0)