Add Minecraft server lookups to the Java SDK

This commit is contained in:
Braydon 2024-04-24 14:29:37 -04:00
parent cf5ee56b64
commit 10669f1b4a
5 changed files with 75 additions and 10 deletions

@ -24,9 +24,14 @@
package cc.restfulmc.sdk.command; package cc.restfulmc.sdk.command;
import cc.restfulmc.sdk.client.ClientConfig; import cc.restfulmc.sdk.client.ClientConfig;
import cc.restfulmc.sdk.exception.RESTfulMCAPIException;
import cc.restfulmc.sdk.request.APIWebRequest; import cc.restfulmc.sdk.request.APIWebRequest;
import cc.restfulmc.sdk.response.Player; import cc.restfulmc.sdk.response.Player;
import lombok.*; import cc.restfulmc.sdk.response.server.MinecraftServer;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NonNull;
/** /**
* An executor to make * An executor to make
@ -46,11 +51,29 @@ public abstract class ClientCommands {
* *
* @param query the player uuid or username * @param query the player uuid or username
* @return the found player * @return the found player
* @throws RESTfulMCAPIException if an api error occurs
*/ */
@NonNull @SneakyThrows @NonNull
protected final Player sendGetPlayerRequest(@NonNull String query) { protected final Player sendGetPlayerRequest(@NonNull String query) throws RESTfulMCAPIException {
return APIWebRequest.builder() return APIWebRequest.builder()
.endpoint(config.getApiEndpoint() + "/player/" + query) .endpoint(config.getApiEndpoint() + "/player/" + query)
.build().execute(Player.class); .build().execute(Player.class);
} }
/**
* Get a Minecraft server by its platform and hostname.
*
* @param platform the platform of the server
* @param hostname the hostname of the server
* @return the server
* @param <T> the server type
* @throws RESTfulMCAPIException if an api error occurs
*/
@NonNull @SuppressWarnings("unchecked")
protected final <T extends MinecraftServer> T sendGetMinecraftServerRequest(@NonNull MinecraftServer.Platform platform,
@NonNull String hostname) throws RESTfulMCAPIException {
return (T) APIWebRequest.builder()
.endpoint(config.getApiEndpoint() + "/server/" + platform.name() + "/" + hostname)
.build().execute(platform.getServerClass());
}
} }

@ -26,7 +26,9 @@ package cc.restfulmc.sdk.command.impl;
import cc.restfulmc.sdk.client.ClientConfig; import cc.restfulmc.sdk.client.ClientConfig;
import cc.restfulmc.sdk.client.RESTfulMCClient; import cc.restfulmc.sdk.client.RESTfulMCClient;
import cc.restfulmc.sdk.command.ClientCommands; import cc.restfulmc.sdk.command.ClientCommands;
import cc.restfulmc.sdk.exception.RESTfulMCAPIException;
import cc.restfulmc.sdk.response.Player; import cc.restfulmc.sdk.response.Player;
import cc.restfulmc.sdk.response.server.MinecraftServer;
import lombok.NonNull; import lombok.NonNull;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
@ -46,9 +48,24 @@ public final class AsyncClientCommands extends ClientCommands {
* *
* @param query the player uuid or username * @param query the player uuid or username
* @return the found player * @return the found player
* @throws RESTfulMCAPIException in the future if an api error occurs
*/ */
@NonNull @NonNull
public CompletableFuture<Player> getPlayer(@NonNull String query) { public CompletableFuture<Player> getPlayer(@NonNull String query) {
return CompletableFuture.supplyAsync(() -> sendGetPlayerRequest(query)); return CompletableFuture.supplyAsync(() -> sendGetPlayerRequest(query));
} }
/**
* Get a Minecraft server by its platform and hostname.
*
* @param platform the platform of the server
* @param hostname the hostname of the server
* @return the server
* @param <T> the server type
* @throws RESTfulMCAPIException in the future if an api error occurs
*/
@NonNull
public <T extends MinecraftServer> CompletableFuture<T> getMinecraftServer(@NonNull MinecraftServer.Platform platform, @NonNull String hostname) {
return CompletableFuture.supplyAsync(() -> sendGetMinecraftServerRequest(platform, hostname));
}
} }

@ -26,7 +26,9 @@ package cc.restfulmc.sdk.command.impl;
import cc.restfulmc.sdk.client.ClientConfig; import cc.restfulmc.sdk.client.ClientConfig;
import cc.restfulmc.sdk.client.RESTfulMCClient; import cc.restfulmc.sdk.client.RESTfulMCClient;
import cc.restfulmc.sdk.command.ClientCommands; import cc.restfulmc.sdk.command.ClientCommands;
import cc.restfulmc.sdk.exception.RESTfulMCAPIException;
import cc.restfulmc.sdk.response.Player; import cc.restfulmc.sdk.response.Player;
import cc.restfulmc.sdk.response.server.MinecraftServer;
import lombok.NonNull; import lombok.NonNull;
/** /**
@ -44,9 +46,24 @@ public final class SyncClientCommands extends ClientCommands {
* *
* @param query the player uuid or username * @param query the player uuid or username
* @return the found player * @return the found player
* @throws RESTfulMCAPIException if an api error occurs
*/ */
@NonNull @NonNull
public Player getPlayer(@NonNull String query) { public Player getPlayer(@NonNull String query) throws RESTfulMCAPIException {
return sendGetPlayerRequest(query); return sendGetPlayerRequest(query);
} }
/**
* Get a Minecraft server by its platform and hostname.
*
* @param platform the platform of the server
* @param hostname the hostname of the server
* @return the server
* @param <T> the server type
* @throws RESTfulMCAPIException if an api error occurs
*/
@NonNull
public <T extends MinecraftServer> T getMinecraftServer(@NonNull MinecraftServer.Platform platform, @NonNull String hostname) throws RESTfulMCAPIException {
return sendGetMinecraftServerRequest(platform, hostname);
}
} }

@ -37,7 +37,7 @@ import lombok.ToString;
* @author Braydon * @author Braydon
*/ */
@Getter @ToString @Getter @ToString
public final class RestfulMCAPIException extends Exception { public final class RESTfulMCAPIException extends RuntimeException {
/** /**
* The status code of this error. * The status code of this error.
*/ */
@ -53,11 +53,11 @@ public final class RestfulMCAPIException extends Exception {
*/ */
@NonNull private final String timestamp; @NonNull private final String timestamp;
public RestfulMCAPIException(@NonNull String json) { public RESTfulMCAPIException(@NonNull String json) {
this(RESTfulMCClient.GSON.fromJson(json, JsonObject.class)); this(RESTfulMCClient.GSON.fromJson(json, JsonObject.class));
} }
private RestfulMCAPIException(@NonNull JsonObject jsonObject) { private RESTfulMCAPIException(@NonNull JsonObject jsonObject) {
super(jsonObject.get("message").getAsString()); super(jsonObject.get("message").getAsString());
status = jsonObject.get("status").getAsString(); status = jsonObject.get("status").getAsString();
code = jsonObject.get("code").getAsInt(); code = jsonObject.get("code").getAsInt();

@ -24,7 +24,7 @@
package cc.restfulmc.sdk.request; package cc.restfulmc.sdk.request;
import cc.restfulmc.sdk.client.RESTfulMCClient; import cc.restfulmc.sdk.client.RESTfulMCClient;
import cc.restfulmc.sdk.exception.RestfulMCAPIException; import cc.restfulmc.sdk.exception.RESTfulMCAPIException;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
@ -45,8 +45,16 @@ public final class APIWebRequest {
*/ */
@NonNull private final String endpoint; @NonNull private final String endpoint;
/**
* Execute this request.
*
* @param responseType the response type class
* @return the response
* @param <T> the response type
* @throws RESTfulMCAPIException if an api error occurs
*/
@SneakyThrows @NonNull @SneakyThrows @NonNull
public <T> T execute(@NonNull Class<T> responseType) { public <T> T execute(@NonNull Class<T> responseType) throws RESTfulMCAPIException {
Request request = new Request.Builder() Request request = new Request.Builder()
.url(endpoint) .url(endpoint)
.build(); // Build the request .build(); // Build the request
@ -54,7 +62,7 @@ public final class APIWebRequest {
int status = response.code(); // The response status code int status = response.code(); // The response status code
String json = response.body().string(); // The json response String json = response.body().string(); // The json response
if (status != 200) { // Not 200 (OK), throw an exception if (status != 200) { // Not 200 (OK), throw an exception
throw new RestfulMCAPIException(json); throw new RESTfulMCAPIException(json);
} }
return RESTfulMCClient.GSON.fromJson(json, responseType); // Return the response return RESTfulMCClient.GSON.fromJson(json, responseType); // Return the response
} }