diff --git a/common/src/main/java/org/geysermc/floodgate/link/DisabledPlayerLink.java b/common/src/main/java/org/geysermc/floodgate/link/DisabledPlayerLink.java index 88c209af..c6ffa14a 100644 --- a/common/src/main/java/org/geysermc/floodgate/link/DisabledPlayerLink.java +++ b/common/src/main/java/org/geysermc/floodgate/link/DisabledPlayerLink.java @@ -27,10 +27,12 @@ package org.geysermc.floodgate.link; import java.util.UUID; import java.util.concurrent.CompletableFuture; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.floodgate.api.FloodgateApi; import org.geysermc.floodgate.api.link.LinkRequestResult; import org.geysermc.floodgate.api.link.PlayerLink; import org.geysermc.floodgate.util.LinkedPlayer; +import org.geysermc.floodgate.util.Utils; /** * Simple class used when PlayerLinking is disabled. This class has been made because Floodgate @@ -42,45 +44,50 @@ final class DisabledPlayerLink implements PlayerLink { public void load() { } - //todo don't return null - @Override - public CompletableFuture getLinkedPlayer(UUID bedrockId) { - return null; + @NonNull + public CompletableFuture getLinkedPlayer(@NonNull UUID bedrockId) { + return failedFuture(); } @Override - public CompletableFuture isLinkedPlayer(UUID bedrockId) { - return null; + @NonNull + public CompletableFuture isLinkedPlayer(@NonNull UUID bedrockId) { + return failedFuture(); } @Override - public CompletableFuture linkPlayer(UUID bedrockId, UUID javaId, String username) { - return null; + @NonNull + public CompletableFuture linkPlayer( + @NonNull UUID bedrockId, + @NonNull UUID javaId, + @NonNull String username) { + return failedFuture(); } @Override - public CompletableFuture unlinkPlayer(UUID javaId) { - return null; + @NonNull + public CompletableFuture unlinkPlayer(@NonNull UUID javaId) { + return failedFuture(); } @Override + @NonNull public CompletableFuture createLinkRequest( - UUID javaId, - String javaUsername, - String bedrockUsername - ) { - return null; + @NonNull UUID javaId, + @NonNull String javaUsername, + @NonNull String bedrockUsername) { + return failedFuture(); } @Override + @NonNull public CompletableFuture verifyLinkRequest( - UUID bedrockId, - String javaUsername, - String bedrockUsername, - String code - ) { - return null; + @NonNull UUID bedrockId, + @NonNull String javaUsername, + @NonNull String bedrockUsername, + @NonNull String code) { + return failedFuture(); } @Override @@ -101,4 +108,9 @@ final class DisabledPlayerLink implements PlayerLink { @Override public void stop() { } + + private CompletableFuture failedFuture() { + return Utils.failedFuture(new IllegalStateException( + "Cannot perform this action when PlayerLinking is disabled")); + } } diff --git a/common/src/main/java/org/geysermc/floodgate/link/GlobalPlayerLinking.java b/common/src/main/java/org/geysermc/floodgate/link/GlobalPlayerLinking.java index c5c220d5..8f96ec15 100644 --- a/common/src/main/java/org/geysermc/floodgate/link/GlobalPlayerLinking.java +++ b/common/src/main/java/org/geysermc/floodgate/link/GlobalPlayerLinking.java @@ -28,6 +28,7 @@ package org.geysermc.floodgate.link; import com.google.gson.JsonObject; import java.util.UUID; import java.util.concurrent.CompletableFuture; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.floodgate.api.link.LinkRequestResult; import org.geysermc.floodgate.util.HttpUtils; import org.geysermc.floodgate.util.HttpUtils.HttpResponse; @@ -35,14 +36,15 @@ import org.geysermc.floodgate.util.LinkedPlayer; import org.geysermc.floodgate.util.Utils; public class GlobalPlayerLinking extends CommonPlayerLink { - private static final String GET_BEDROCK_LINK = "http://localhost:4000/api/link/bedrock?xuid="; + private static final String GET_BEDROCK_LINK = "https://api.geysermc.org/v1/link/bedrock?xuid="; @Override public void load() { } @Override - public CompletableFuture getLinkedPlayer(UUID bedrockId) { + @NonNull + public CompletableFuture getLinkedPlayer(@NonNull UUID bedrockId) { return CompletableFuture.supplyAsync( () -> { HttpResponse response = @@ -73,7 +75,8 @@ public class GlobalPlayerLinking extends CommonPlayerLink { } @Override - public CompletableFuture isLinkedPlayer(UUID bedrockId) { + @NonNull + public CompletableFuture isLinkedPlayer(@NonNull UUID bedrockId) { return CompletableFuture.supplyAsync( () -> { HttpResponse response = @@ -99,32 +102,42 @@ public class GlobalPlayerLinking extends CommonPlayerLink { // player linking and unlinking now goes through the global player linking server. // so individual servers can't register nor unlink players. - //todo don't return null - @Override - public CompletableFuture linkPlayer(UUID bedrockId, UUID javaId, String username) { - return null; + @NonNull + public CompletableFuture linkPlayer( + @NonNull UUID bedrockId, + @NonNull UUID javaId, + @NonNull String username) { + return failedFuture(); } @Override - public CompletableFuture unlinkPlayer(UUID javaId) { - return null; + @NonNull + public CompletableFuture unlinkPlayer(@NonNull UUID javaId) { + return failedFuture(); } @Override + @NonNull public CompletableFuture createLinkRequest( - UUID javaId, - String javaUsername, - String bedrockUsername) { - return null; + @NonNull UUID javaId, + @NonNull String javaUsername, + @NonNull String bedrockUsername) { + return failedFuture(); } @Override + @NonNull public CompletableFuture verifyLinkRequest( - UUID bedrockId, - String javaUsername, - String bedrockUsername, - String code) { - return null; + @NonNull UUID bedrockId, + @NonNull String javaUsername, + @NonNull String bedrockUsername, + @NonNull String code) { + return failedFuture(); + } + + private CompletableFuture failedFuture() { + return Utils.failedFuture(new IllegalStateException( + "Cannot perform this action when Global Linking is enabled")); } } diff --git a/common/src/main/java/org/geysermc/floodgate/util/Utils.java b/common/src/main/java/org/geysermc/floodgate/util/Utils.java index bb4b2f5e..881e1ea7 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/Utils.java +++ b/common/src/main/java/org/geysermc/floodgate/util/Utils.java @@ -39,6 +39,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.UUID; +import java.util.concurrent.CompletableFuture; import java.util.regex.Pattern; public class Utils { @@ -101,4 +102,18 @@ public class Utils { public static boolean isValidDatabaseName(String databaseName) { return DATABASE_NAME.matcher(databaseName).matches(); } + + /** + * Returns a new CompletableFuture that is already completed exceptionally with the given + * exception. + * + * @param ex the exception + * @param the type of the value + * @return the exceptionally completed CompletableFuture + */ + public static CompletableFuture failedFuture(Throwable ex) { + CompletableFuture future = new CompletableFuture<>(); + future.completeExceptionally(ex); + return future; + } }