diff --git a/src/main/java/org/mvplugins/multiverse/core/commands/TeleportCommand.java b/src/main/java/org/mvplugins/multiverse/core/commands/TeleportCommand.java index 149e9652..70426d15 100644 --- a/src/main/java/org/mvplugins/multiverse/core/commands/TeleportCommand.java +++ b/src/main/java/org/mvplugins/multiverse/core/commands/TeleportCommand.java @@ -1,6 +1,6 @@ package org.mvplugins.multiverse.core.commands; -import java.util.Arrays; +import java.util.List; import co.aikar.commands.CommandIssuer; import co.aikar.commands.annotation.CommandAlias; @@ -22,7 +22,6 @@ import org.mvplugins.multiverse.core.destination.ParsedDestination; import org.mvplugins.multiverse.core.permissions.CorePermissionsChecker; import org.mvplugins.multiverse.core.teleportation.AsyncSafetyTeleporter; import org.mvplugins.multiverse.core.utils.MVCorei18n; -import org.mvplugins.multiverse.core.utils.result.AsyncAttempt; @Service @CommandAlias("mv") @@ -72,10 +71,8 @@ class TeleportCommand extends MultiverseCommand { issuer.sendInfo(MVCorei18n.TELEPORT_SUCCESS, "{player}", playerName, "{destination}", destination.toString()); - AsyncAttempt.allOf(Arrays.stream(players) - .map(player -> safetyTeleporter.teleportSafely(issuer.getIssuer(), player, destination)) - .toList()) - .thenRun(() -> Logging.fine("Async teleport result: %s")) + safetyTeleporter.teleportSafely(issuer.getIssuer(), List.of(players), destination) + .thenAccept(attempts -> Logging.fine("Async teleport completed: %s", attempts)) .exceptionally(throwable -> { Logging.severe("Error while teleporting %s to %s: %s", playerName, destination, throwable.getMessage()); diff --git a/src/main/java/org/mvplugins/multiverse/core/teleportation/AsyncSafetyTeleporter.java b/src/main/java/org/mvplugins/multiverse/core/teleportation/AsyncSafetyTeleporter.java index dc49301e..4ee84d1a 100644 --- a/src/main/java/org/mvplugins/multiverse/core/teleportation/AsyncSafetyTeleporter.java +++ b/src/main/java/org/mvplugins/multiverse/core/teleportation/AsyncSafetyTeleporter.java @@ -144,16 +144,15 @@ public class AsyncSafetyTeleporter { Logging.warning("Failed to teleport %s to %s: %s", teleportee.getName(), location, exception.getMessage()); return Attempt.failure(TeleportResult.Failure.TELEPORT_FAILED_EXCEPTION); - }).mapAsyncAttempt(result -> { + }).mapAttempt(result -> { Logging.finer("Teleported async %s to %s", teleportee.getName(), location); if (result) { if (shouldAddToQueue) { teleportQueue.popFromQueue(teleportee.getName()); } - return AsyncAttempt.success(); - } else { - return AsyncAttempt.failure(TeleportResult.Failure.TELEPORT_FAILED); + return Attempt.success(null); } + return Attempt.failure(TeleportResult.Failure.TELEPORT_FAILED); }); } } diff --git a/src/main/java/org/mvplugins/multiverse/core/utils/result/AsyncAttempt.java b/src/main/java/org/mvplugins/multiverse/core/utils/result/AsyncAttempt.java index 1bde2779..67b8a9a0 100644 --- a/src/main/java/org/mvplugins/multiverse/core/utils/result/AsyncAttempt.java +++ b/src/main/java/org/mvplugins/multiverse/core/utils/result/AsyncAttempt.java @@ -21,19 +21,15 @@ public final class AsyncAttempt { public static AsyncAttempt of( CompletableFuture future, BiFunction> completionHandler) { - return new AsyncAttempt<>(future.handleAsync(completionHandler)); + return new AsyncAttempt<>(future.handle(completionHandler)); } public static AsyncAttempt of( CompletableFuture future, Function> exceptionHandler) { - BiFunction> completionHandler = (result, exception) -> { - if (exception != null) { - return exceptionHandler.apply(exception); - } else { - return Attempt.success(result); - } - }; + BiFunction> completionHandler = (result, exception) -> exception != null + ? exceptionHandler.apply(exception) + : Attempt.success(result); return of(future, completionHandler); } @@ -58,6 +54,10 @@ public final class AsyncAttempt { return new AsyncAttempt<>(future.thenApply(attempt -> attempt.map(mapper))); } + public AsyncAttempt mapAttempt(Function> mapper) { + return new AsyncAttempt<>(future.thenApply(attempt -> attempt.mapAttempt(mapper))); + } + public AsyncAttempt mapAsyncAttempt(Function> mapper) { return new AsyncAttempt<>(future.thenApplyAsync( attempt -> attempt.mapAttempt(rasult -> mapper.apply(rasult).toAttempt())));