pls work first try
This commit is contained in:
commit
ecde2bb2a7
21
.gitea/workflows/publish.yml
Normal file
21
.gitea/workflows/publish.yml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
name: Publish package to the Maven Central Repository
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
-
|
||||||
|
jobs:
|
||||||
|
publish:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Set up Maven Central Repository
|
||||||
|
uses: actions/setup-java@v4
|
||||||
|
with:
|
||||||
|
java-version: '17'
|
||||||
|
distribution: 'adopt'
|
||||||
|
- name: Publish package
|
||||||
|
run: mvn --batch-mode deploy
|
||||||
|
env:
|
||||||
|
MAVEN_USERNAME: ${{ secrets.REPO_USERNAME }}
|
||||||
|
MAVEN_PASSWORD: ${{ secrets.REPO_PASSWORD }}
|
31
.gitignore
vendored
Normal file
31
.gitignore
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
### ME template
|
||||||
|
*.class
|
||||||
|
*.log
|
||||||
|
*.ctxt
|
||||||
|
.mtj.tmp/
|
||||||
|
*.jar
|
||||||
|
*.war
|
||||||
|
*.nar
|
||||||
|
*.ear
|
||||||
|
*.zip
|
||||||
|
*.tar.gz
|
||||||
|
*.rar
|
||||||
|
hs_err_pid*
|
||||||
|
replay_pid*
|
||||||
|
.idea
|
||||||
|
cmake-build-*/
|
||||||
|
.idea/**/mongoSettings.xml
|
||||||
|
*.iws
|
||||||
|
out/
|
||||||
|
build/
|
||||||
|
work/
|
||||||
|
.idea_modules/
|
||||||
|
atlassian-ide-plugin.xml
|
||||||
|
com_crashlytics_export_strings.xml
|
||||||
|
crashlytics.properties
|
||||||
|
crashlytics-build.properties
|
||||||
|
fabric.properties
|
||||||
|
git.properties
|
||||||
|
pom.xml.versionsBackup
|
||||||
|
application.yml
|
||||||
|
target/
|
3
.idea/.gitignore
generated
vendored
Normal file
3
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
7
.idea/encodings.xml
generated
Normal file
7
.idea/encodings.xml
generated
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding">
|
||||||
|
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
|
||||||
|
</component>
|
||||||
|
</project>
|
14
.idea/misc.xml
generated
Normal file
14
.idea/misc.xml
generated
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
|
<component name="MavenProjectsManager">
|
||||||
|
<option name="originalFiles">
|
||||||
|
<list>
|
||||||
|
<option value="$PROJECT_DIR$/pom.xml" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="azul-17" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
67
pom.xml
Normal file
67
pom.xml
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>xyz.mcutils</groupId>
|
||||||
|
<artifactId>mcutils-java-library</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<distributionManagement>
|
||||||
|
<repository>
|
||||||
|
<id>mcutils-java-library</id>
|
||||||
|
<url>https://repo.fascinated.cc/public/mcutils-java-library/</url>
|
||||||
|
</repository>
|
||||||
|
</distributionManagement>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<!-- Libraries -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.32</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.gson</groupId>
|
||||||
|
<artifactId>gson</artifactId>
|
||||||
|
<version>2.10.1</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Web Client -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-web</artifactId>
|
||||||
|
<version>6.1.6</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.httpcomponents.client5</groupId>
|
||||||
|
<artifactId>httpclient5</artifactId>
|
||||||
|
<version>5.3</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Tests -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-engine</artifactId>
|
||||||
|
<version>5.10.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-api</artifactId>
|
||||||
|
<version>5.10.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
112
src/main/java/xyz/mcutils/McUtilsAPI.java
Normal file
112
src/main/java/xyz/mcutils/McUtilsAPI.java
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
package xyz.mcutils;
|
||||||
|
|
||||||
|
import xyz.mcutils.common.WebRequest;
|
||||||
|
import xyz.mcutils.exception.ErrorResponse;
|
||||||
|
import xyz.mcutils.models.mojang.CachedMojangEndpointStatus;
|
||||||
|
import xyz.mcutils.models.player.CachedPlayer;
|
||||||
|
import xyz.mcutils.models.player.CachedPlayerSkinPart;
|
||||||
|
import xyz.mcutils.models.player.CachedUsernameToUuid;
|
||||||
|
import xyz.mcutils.models.player.Skin;
|
||||||
|
import xyz.mcutils.models.server.*;
|
||||||
|
|
||||||
|
public class McUtilsAPI {
|
||||||
|
private static final String API_ENDPOINT = "https://api.mcutils.xyz";
|
||||||
|
private static final String MOJANG_API_STATUS_ENDPOINT = API_ENDPOINT + "/mojang/status";
|
||||||
|
private static final String PLAYER_ENDPOINT = API_ENDPOINT + "/player/%s";
|
||||||
|
private static final String USERNAME_TO_UUID_ENDPOINT = API_ENDPOINT + "/player/uuid/%s";
|
||||||
|
private static final String PLAYER_SKIN_PART_ENDPOINT = API_ENDPOINT + "/player/%s/%s";
|
||||||
|
private static final String SERVER_ENDPOINT = API_ENDPOINT + "/server/%s/%s";
|
||||||
|
private static final String SERVER_ICON_ENDPOINT = API_ENDPOINT + "/server/icon/%s";
|
||||||
|
private static final String SERVER_BLOCKED_STATUS_ENDPOINT = API_ENDPOINT + "/server/blocked/%s";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the status of the Mojang APIs.
|
||||||
|
*
|
||||||
|
* @return The status of the Mojang API.
|
||||||
|
* @throws ErrorResponse If an error occurs.
|
||||||
|
*/
|
||||||
|
public static CachedMojangEndpointStatus getMojangApiStatus() throws ErrorResponse {
|
||||||
|
return WebRequest.get(MOJANG_API_STATUS_ENDPOINT, CachedMojangEndpointStatus.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a player from the API.
|
||||||
|
*
|
||||||
|
* @param id The id of the player to get.
|
||||||
|
* @return The player.
|
||||||
|
* @throws ErrorResponse If an error occurs.
|
||||||
|
*/
|
||||||
|
public static CachedPlayer getPlayer(String id) throws ErrorResponse {
|
||||||
|
return WebRequest.get(PLAYER_ENDPOINT.formatted(id), CachedPlayer.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a player from the API.
|
||||||
|
*
|
||||||
|
* @param username The username of the player to get.
|
||||||
|
* @return The player.
|
||||||
|
* @throws ErrorResponse If an error occurs.
|
||||||
|
*/
|
||||||
|
public static CachedUsernameToUuid getUsernameToUuid(String username) throws ErrorResponse {
|
||||||
|
return WebRequest.get(USERNAME_TO_UUID_ENDPOINT.formatted(username), CachedUsernameToUuid.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a player skin part from the API.
|
||||||
|
*
|
||||||
|
* @param part The part of the skin to get.
|
||||||
|
* @param id The id of the player to get.
|
||||||
|
* @return The player skin part.
|
||||||
|
* @throws ErrorResponse If an error occurs.
|
||||||
|
*/
|
||||||
|
public static CachedPlayerSkinPart getPlayerSkinPart(Skin.SkinPart part, String id) throws ErrorResponse {
|
||||||
|
byte[] partBytes = WebRequest.get(PLAYER_SKIN_PART_ENDPOINT.formatted(part, id), byte[].class);
|
||||||
|
return new CachedPlayerSkinPart(partBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a Bedrock server from the API.
|
||||||
|
*
|
||||||
|
* @param id The id of the server to get.
|
||||||
|
* @return The server.
|
||||||
|
* @throws ErrorResponse If an error occurs.
|
||||||
|
*/
|
||||||
|
public static CachedBedrockMinecraftServer getBedrockServer(String id) throws ErrorResponse {
|
||||||
|
return WebRequest.get(SERVER_ENDPOINT.formatted(ServerPlatform.BEDROCK.name(), id), CachedBedrockMinecraftServer.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a Java server from the API.
|
||||||
|
*
|
||||||
|
* @param id The id of the server to get.
|
||||||
|
* @return The server.
|
||||||
|
* @throws ErrorResponse If an error occurs.
|
||||||
|
*/
|
||||||
|
public static CachedJavaMinecraftServer getJavaServer(String id) throws ErrorResponse {
|
||||||
|
return WebRequest.get(SERVER_ENDPOINT.formatted(ServerPlatform.JAVA.name(), id), CachedJavaMinecraftServer.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the icon of a Java server from the API.
|
||||||
|
*
|
||||||
|
* @param id The id of the server to get the icon of.
|
||||||
|
* @return The server icon.
|
||||||
|
* @throws ErrorResponse If an error occurs.
|
||||||
|
*/
|
||||||
|
public static CachedServerIcon getServerIcon(String id) throws ErrorResponse {
|
||||||
|
byte[] bytes = WebRequest.get(SERVER_ICON_ENDPOINT.formatted(id), byte[].class);
|
||||||
|
return new CachedServerIcon(bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the blocked status of a Java server from the API.
|
||||||
|
*
|
||||||
|
* @param id The id of the server to get the blocked status of.
|
||||||
|
* @return The server blocked status.
|
||||||
|
* @throws ErrorResponse If an error occurs.
|
||||||
|
*/
|
||||||
|
public static CachedServerBlockedStatus getServerBlockedStatus(String id) throws ErrorResponse {
|
||||||
|
return WebRequest.get(SERVER_BLOCKED_STATUS_ENDPOINT.formatted(id), CachedServerBlockedStatus.class);
|
||||||
|
}
|
||||||
|
}
|
22
src/main/java/xyz/mcutils/common/DateUtils.java
Normal file
22
src/main/java/xyz/mcutils/common/DateUtils.java
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
package xyz.mcutils.common;
|
||||||
|
|
||||||
|
import lombok.SneakyThrows;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
public class DateUtils {
|
||||||
|
private static final SimpleDateFormat FORMATTER = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.ENGLISH);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a string to a date.
|
||||||
|
*
|
||||||
|
* @param date The date to convert
|
||||||
|
* @return The date
|
||||||
|
*/
|
||||||
|
@SneakyThrows
|
||||||
|
public static Date stringToDate(String date) {
|
||||||
|
return FORMATTER.parse(date);
|
||||||
|
}
|
||||||
|
}
|
58
src/main/java/xyz/mcutils/common/WebRequest.java
Normal file
58
src/main/java/xyz/mcutils/common/WebRequest.java
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
package xyz.mcutils.common;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import lombok.experimental.UtilityClass;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
||||||
|
import org.springframework.web.client.HttpClientErrorException;
|
||||||
|
import org.springframework.web.client.RestClient;
|
||||||
|
import xyz.mcutils.exception.ErrorResponse;
|
||||||
|
|
||||||
|
@UtilityClass
|
||||||
|
public class WebRequest {
|
||||||
|
private static final Gson GSON = new GsonBuilder()
|
||||||
|
.setPrettyPrinting()
|
||||||
|
.create();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The web client.
|
||||||
|
*/
|
||||||
|
private static final RestClient CLIENT;
|
||||||
|
|
||||||
|
static {
|
||||||
|
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
|
||||||
|
requestFactory.setConnectTimeout(2500); // 2.5 seconds
|
||||||
|
CLIENT = RestClient.builder()
|
||||||
|
.requestFactory(requestFactory)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a response from the given URL.
|
||||||
|
*
|
||||||
|
* @param url the url
|
||||||
|
* @return the response
|
||||||
|
* @param <T> the type of the response
|
||||||
|
*/
|
||||||
|
public static <T> T get(String url, Class<T> clazz) throws ErrorResponse {
|
||||||
|
try {
|
||||||
|
ResponseEntity<T> responseEntity = CLIENT.get()
|
||||||
|
.uri(url)
|
||||||
|
.retrieve()
|
||||||
|
.toEntity(clazz);
|
||||||
|
|
||||||
|
return responseEntity.getBody();
|
||||||
|
} catch (HttpClientErrorException ex) {
|
||||||
|
JsonObject json = GSON.fromJson(ex.getResponseBodyAsString(), JsonObject.class);
|
||||||
|
throw new ErrorResponse(
|
||||||
|
HttpStatus.valueOf(ex.getStatusCode().value()),
|
||||||
|
json.get("code").getAsInt(),
|
||||||
|
json.get("message").getAsString(),
|
||||||
|
DateUtils.stringToDate(json.get("timestamp").getAsString())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
34
src/main/java/xyz/mcutils/exception/ErrorResponse.java
Normal file
34
src/main/java/xyz/mcutils/exception/ErrorResponse.java
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package xyz.mcutils.exception;
|
||||||
|
|
||||||
|
import io.micrometer.common.lang.NonNull;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.ToString;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@ToString @AllArgsConstructor
|
||||||
|
public class ErrorResponse extends RuntimeException {
|
||||||
|
/**
|
||||||
|
* The status code of this error.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
private final HttpStatus status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The HTTP code of this error.
|
||||||
|
*/
|
||||||
|
private final int code;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The message of this error.
|
||||||
|
*/
|
||||||
|
@NonNull private final String message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The timestamp this error occurred.
|
||||||
|
*/
|
||||||
|
@NonNull private final Date timestamp;
|
||||||
|
}
|
58
src/main/java/xyz/mcutils/models/CachedResponse.java
Normal file
58
src/main/java/xyz/mcutils/models/CachedResponse.java
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
package xyz.mcutils.models;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
public class CachedResponse {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The cache information for this response.
|
||||||
|
*/
|
||||||
|
private Cache cache;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public static class Cache {
|
||||||
|
/**
|
||||||
|
* Whether this request is cached.
|
||||||
|
*/
|
||||||
|
private boolean cached;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The unix timestamp of when this was cached.
|
||||||
|
*/
|
||||||
|
private long cachedTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new cache information object with the default values.
|
||||||
|
* <p>
|
||||||
|
* The default values are:
|
||||||
|
* <br>
|
||||||
|
* <ul>
|
||||||
|
* <li>cached: true</li>
|
||||||
|
* <li>cachedAt: {@link System#currentTimeMillis()}</li>
|
||||||
|
* </ul>
|
||||||
|
* <br>
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @return the default cache information object
|
||||||
|
*/
|
||||||
|
public static Cache defaultCache() {
|
||||||
|
return new Cache(true, System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets if this request is cached.
|
||||||
|
*
|
||||||
|
* @param cached the new value of if this request is cached
|
||||||
|
*/
|
||||||
|
public void setCached(boolean cached) {
|
||||||
|
this.cached = cached;
|
||||||
|
if (!cached) {
|
||||||
|
cachedTime = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
29
src/main/java/xyz/mcutils/models/dns/DNSRecord.java
Normal file
29
src/main/java/xyz/mcutils/models/dns/DNSRecord.java
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
package xyz.mcutils.models.dns;
|
||||||
|
|
||||||
|
import io.micrometer.common.lang.NonNull;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Setter @Getter
|
||||||
|
@NoArgsConstructor @AllArgsConstructor
|
||||||
|
public class DNSRecord {
|
||||||
|
/**
|
||||||
|
* The type of this record.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
private Type type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The TTL (Time To Live) of this record.
|
||||||
|
*/
|
||||||
|
private long ttl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Types of a record.
|
||||||
|
*/
|
||||||
|
public enum Type {
|
||||||
|
A, SRV
|
||||||
|
}
|
||||||
|
}
|
15
src/main/java/xyz/mcutils/models/dns/impl/ARecord.java
Normal file
15
src/main/java/xyz/mcutils/models/dns/impl/ARecord.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package xyz.mcutils.models.dns.impl;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import xyz.mcutils.models.dns.DNSRecord;
|
||||||
|
|
||||||
|
@Setter @Getter
|
||||||
|
@NoArgsConstructor
|
||||||
|
public final class ARecord extends DNSRecord {
|
||||||
|
/**
|
||||||
|
* The address of this record, null if unresolved.
|
||||||
|
*/
|
||||||
|
private String address;
|
||||||
|
}
|
31
src/main/java/xyz/mcutils/models/dns/impl/SRVRecord.java
Normal file
31
src/main/java/xyz/mcutils/models/dns/impl/SRVRecord.java
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package xyz.mcutils.models.dns.impl;
|
||||||
|
|
||||||
|
import io.micrometer.common.lang.NonNull;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import xyz.mcutils.models.dns.DNSRecord;
|
||||||
|
|
||||||
|
@Setter @Getter
|
||||||
|
@NoArgsConstructor
|
||||||
|
public final class SRVRecord extends DNSRecord {
|
||||||
|
/**
|
||||||
|
* The priority of this record.
|
||||||
|
*/
|
||||||
|
private int priority;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The weight of this record.
|
||||||
|
*/
|
||||||
|
private int weight;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The port of this record.
|
||||||
|
*/
|
||||||
|
private int port;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The target of this record.
|
||||||
|
*/
|
||||||
|
@NonNull private String target;
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
package xyz.mcutils.models.mojang;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import xyz.mcutils.models.CachedResponse;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
|
public class CachedMojangEndpointStatus extends CachedResponse {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The list of endpoints and their status.
|
||||||
|
*/
|
||||||
|
private Map<String, Status> endpoints;
|
||||||
|
|
||||||
|
public enum Status {
|
||||||
|
/**
|
||||||
|
* The service is online and operational.
|
||||||
|
*/
|
||||||
|
ONLINE,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The service is online, but may be experiencing issues.
|
||||||
|
* This could be due to high load or other issues.
|
||||||
|
*/
|
||||||
|
DEGRADED,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The service is offline and not operational.
|
||||||
|
*/
|
||||||
|
OFFLINE
|
||||||
|
}
|
||||||
|
}
|
62
src/main/java/xyz/mcutils/models/player/CachedPlayer.java
Normal file
62
src/main/java/xyz/mcutils/models/player/CachedPlayer.java
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
package xyz.mcutils.models.player;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import xyz.mcutils.models.CachedResponse;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public class CachedPlayer extends CachedResponse {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The UUID of the player
|
||||||
|
*/
|
||||||
|
private UUID uniqueId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The trimmed UUID of the player
|
||||||
|
*/
|
||||||
|
private String trimmedUniqueId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The username of the player
|
||||||
|
*/
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The skin of the player, null if the
|
||||||
|
* player does not have a skin
|
||||||
|
*/
|
||||||
|
private Skin skin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The cape of the player, null if the
|
||||||
|
* player does not have a cape
|
||||||
|
*/
|
||||||
|
private Cape cape;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The raw properties of the player
|
||||||
|
*/
|
||||||
|
private ProfileProperty[] rawProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A profile property for the player.
|
||||||
|
*/
|
||||||
|
private static class ProfileProperty {
|
||||||
|
/**
|
||||||
|
* The name of the property.
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The base64 value of the property.
|
||||||
|
*/
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the property is signed.
|
||||||
|
*/
|
||||||
|
private boolean signed;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package xyz.mcutils.models.player;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@AllArgsConstructor @Getter
|
||||||
|
public class CachedPlayerSkinPart {
|
||||||
|
/**
|
||||||
|
* The bytes for the skin part
|
||||||
|
*/
|
||||||
|
private byte[] partBytes;
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package xyz.mcutils.models.player;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import xyz.mcutils.models.CachedResponse;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public class CachedUsernameToUuid extends CachedResponse {
|
||||||
|
/**
|
||||||
|
* The username of the player.
|
||||||
|
*/
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The unique id of the player.
|
||||||
|
*/
|
||||||
|
private UUID uniqueId;
|
||||||
|
}
|
8
src/main/java/xyz/mcutils/models/player/Cape.java
Normal file
8
src/main/java/xyz/mcutils/models/player/Cape.java
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
package xyz.mcutils.models.player;
|
||||||
|
|
||||||
|
public class Cape {
|
||||||
|
/**
|
||||||
|
* The URL of the cape
|
||||||
|
*/
|
||||||
|
private String url;
|
||||||
|
}
|
51
src/main/java/xyz/mcutils/models/player/Skin.java
Normal file
51
src/main/java/xyz/mcutils/models/player/Skin.java
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package xyz.mcutils.models.player;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class Skin {
|
||||||
|
/**
|
||||||
|
* The URL for the skin
|
||||||
|
*/
|
||||||
|
private String url;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The model for the skin
|
||||||
|
*/
|
||||||
|
private Model model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The legacy status of the skin
|
||||||
|
*/
|
||||||
|
private boolean legacy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The part URLs of the skin
|
||||||
|
*/
|
||||||
|
private Map<String, String> parts = new HashMap<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The model of the skin.
|
||||||
|
*/
|
||||||
|
public enum Model {
|
||||||
|
DEFAULT,
|
||||||
|
SLIM
|
||||||
|
}
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
|
public enum SkinPart {
|
||||||
|
HEAD("head"),
|
||||||
|
FACE("face"),
|
||||||
|
BODY("body");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the skin part
|
||||||
|
*/
|
||||||
|
private final String name;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,75 @@
|
|||||||
|
package xyz.mcutils.models.server;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public class CachedBedrockMinecraftServer extends MinecraftServer {
|
||||||
|
/**
|
||||||
|
* The unique ID of this server.
|
||||||
|
*/
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The edition of this server.
|
||||||
|
*/
|
||||||
|
private Edition edition;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The version information of this server.
|
||||||
|
*/
|
||||||
|
private Version version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The gamemode of this server.
|
||||||
|
*/
|
||||||
|
private GameMode gamemode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The edition of a Bedrock server.
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public enum Edition {
|
||||||
|
/**
|
||||||
|
* Minecraft: Pocket Edition.
|
||||||
|
*/
|
||||||
|
MCPE,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Minecraft: Education Edition.
|
||||||
|
*/
|
||||||
|
MCEE
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Version information for a server.
|
||||||
|
*/
|
||||||
|
@Getter @ToString
|
||||||
|
public static class Version {
|
||||||
|
/**
|
||||||
|
* The protocol version of the server.
|
||||||
|
*/
|
||||||
|
private int protocol;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The version name of the server.
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The gamemode of a server.
|
||||||
|
*/
|
||||||
|
@Getter @ToString
|
||||||
|
public static class GameMode {
|
||||||
|
/**
|
||||||
|
* The name of this gamemode.
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The numeric of this gamemode.
|
||||||
|
*/
|
||||||
|
private int numericId;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,181 @@
|
|||||||
|
package xyz.mcutils.models.server;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public class CachedJavaMinecraftServer extends MinecraftServer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The version of the server.
|
||||||
|
*/
|
||||||
|
private Version version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The favicon of the server.
|
||||||
|
*/
|
||||||
|
private Favicon favicon;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The mods running on this server.
|
||||||
|
*/
|
||||||
|
private ForgeModInfo modInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The mods running on this server.
|
||||||
|
* <p>
|
||||||
|
* This is only used for servers
|
||||||
|
* running 1.13 and above.
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
private ForgeData forgeData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the server prevents chat reports.
|
||||||
|
*/
|
||||||
|
private boolean preventsChatReports;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the server enforces secure chat.
|
||||||
|
*/
|
||||||
|
private boolean enforcesSecureChat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the server has previews chat enabled.
|
||||||
|
* <p>
|
||||||
|
* Chat Preview sends chat messages to the server as they are typed, even before they're sent.
|
||||||
|
* <a href="https://www.minecraft.net/es-mx/article/minecraft-snapshot-22w19a">More information</a>
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
private boolean previewsChat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The mojang blocked status for the server.
|
||||||
|
*/
|
||||||
|
private boolean mojangBlocked;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public static class Version {
|
||||||
|
/**
|
||||||
|
* The version name of the server.
|
||||||
|
*/
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The server platform.
|
||||||
|
*/
|
||||||
|
private String platform;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The protocol version.
|
||||||
|
*/
|
||||||
|
private int protocol;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the protocol, null if not found.
|
||||||
|
*/
|
||||||
|
private String protocolName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public static class Favicon {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The raw base64 of the favicon.
|
||||||
|
*/
|
||||||
|
private String base64;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The url to the favicon.
|
||||||
|
*/
|
||||||
|
private String url;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Forge mod information for a server.
|
||||||
|
*/
|
||||||
|
@Getter @ToString
|
||||||
|
public static class ForgeModInfo {
|
||||||
|
/**
|
||||||
|
* The type of modded server this is.
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The list of mods on this server, null or empty if none.
|
||||||
|
*/
|
||||||
|
private ForgeMod[] modList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A forge mod for a server.
|
||||||
|
*/
|
||||||
|
@Getter @ToString
|
||||||
|
private static class ForgeMod {
|
||||||
|
/**
|
||||||
|
* The id of this mod.
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The version of this mod.
|
||||||
|
*/
|
||||||
|
private String version;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public static class ForgeData {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The list of mod channels on this server, null or empty if none.
|
||||||
|
*/
|
||||||
|
private Channel[] channels;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The list of mods on this server, null or empty if none.
|
||||||
|
*/
|
||||||
|
private Mod[] mods;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the mod list is truncated.
|
||||||
|
*/
|
||||||
|
private boolean truncated;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The version of the FML network.
|
||||||
|
*/
|
||||||
|
private int fmlNetworkVersion;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public static class Channel {
|
||||||
|
/**
|
||||||
|
* The id of this mod channel.
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The version of this mod channel.
|
||||||
|
*/
|
||||||
|
private String version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether this mod channel is required to join.
|
||||||
|
*/
|
||||||
|
private boolean required;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public static class Mod {
|
||||||
|
/**
|
||||||
|
* The id of this mod.
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The version of this mod.
|
||||||
|
*/
|
||||||
|
private String version;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package xyz.mcutils.models.server;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@AllArgsConstructor @Getter
|
||||||
|
public class CachedServerBlockedStatus {
|
||||||
|
/**
|
||||||
|
* Whether the server is Mojang blocked.
|
||||||
|
*/
|
||||||
|
private boolean blocked;
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package xyz.mcutils.models.server;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@AllArgsConstructor @Getter
|
||||||
|
public class CachedServerIcon {
|
||||||
|
/**
|
||||||
|
* The bytes for the server icon.
|
||||||
|
*/
|
||||||
|
private byte[] bytes;
|
||||||
|
}
|
97
src/main/java/xyz/mcutils/models/server/MinecraftServer.java
Normal file
97
src/main/java/xyz/mcutils/models/server/MinecraftServer.java
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
package xyz.mcutils.models.server;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.ToString;
|
||||||
|
import xyz.mcutils.models.dns.DNSRecord;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public class MinecraftServer {
|
||||||
|
/**
|
||||||
|
* The hostname of the server.
|
||||||
|
*/
|
||||||
|
private String hostname;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The IP address of the server.
|
||||||
|
*/
|
||||||
|
private String ip;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The port of the server.
|
||||||
|
*/
|
||||||
|
private int port;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The DNS records for the server.
|
||||||
|
*/
|
||||||
|
private DNSRecord[] records;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The motd for the server.
|
||||||
|
*/
|
||||||
|
private MOTD motd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The players on the server.
|
||||||
|
*/
|
||||||
|
private Players players;
|
||||||
|
|
||||||
|
@AllArgsConstructor @Getter
|
||||||
|
private static class MOTD {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The raw motd lines
|
||||||
|
*/
|
||||||
|
private String[] raw;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The clean motd lines
|
||||||
|
*/
|
||||||
|
private String[] clean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The html motd lines
|
||||||
|
*/
|
||||||
|
private String[] html;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Player count data for a server.
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
private static class Players {
|
||||||
|
/**
|
||||||
|
* The online players on this server.
|
||||||
|
*/
|
||||||
|
private int online;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The maximum allowed players on this server.
|
||||||
|
*/
|
||||||
|
private int max;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A sample of players on this server, null or empty if no sample.
|
||||||
|
*/
|
||||||
|
private Sample[] sample;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A sample player.
|
||||||
|
*/
|
||||||
|
@Getter @ToString
|
||||||
|
private static class Sample {
|
||||||
|
/**
|
||||||
|
* The unique id of this player.
|
||||||
|
*/
|
||||||
|
private UUID id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of this player.
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
20
src/main/java/xyz/mcutils/models/server/ServerPlatform.java
Normal file
20
src/main/java/xyz/mcutils/models/server/ServerPlatform.java
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package xyz.mcutils.models.server;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public enum ServerPlatform {
|
||||||
|
/**
|
||||||
|
* The platform is Java Edition.
|
||||||
|
*/
|
||||||
|
JAVA,
|
||||||
|
/**
|
||||||
|
* The platform is Bedrock Edition.
|
||||||
|
*/
|
||||||
|
BEDROCK;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the platform.
|
||||||
|
*/
|
||||||
|
private final String name = name().toLowerCase();
|
||||||
|
}
|
15
src/test/java/xyz/mcutils/MojangTests.java
Normal file
15
src/test/java/xyz/mcutils/MojangTests.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package xyz.mcutils;
|
||||||
|
|
||||||
|
import lombok.SneakyThrows;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import xyz.mcutils.models.mojang.CachedMojangEndpointStatus;
|
||||||
|
|
||||||
|
public class MojangTests {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void ensureMojangApiStatusSuccess() {
|
||||||
|
CachedMojangEndpointStatus status = McUtilsAPI.getMojangApiStatus();
|
||||||
|
assert !status.getEndpoints().isEmpty();
|
||||||
|
}
|
||||||
|
}
|
77
src/test/java/xyz/mcutils/PlayerTests.java
Normal file
77
src/test/java/xyz/mcutils/PlayerTests.java
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
package xyz.mcutils;
|
||||||
|
|
||||||
|
import lombok.SneakyThrows;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import xyz.mcutils.exception.ErrorResponse;
|
||||||
|
import xyz.mcutils.models.player.CachedPlayer;
|
||||||
|
import xyz.mcutils.models.player.CachedPlayerSkinPart;
|
||||||
|
import xyz.mcutils.models.player.CachedUsernameToUuid;
|
||||||
|
import xyz.mcutils.models.player.Skin;
|
||||||
|
|
||||||
|
public class PlayerTests {
|
||||||
|
|
||||||
|
private final String testPlayerUuid = "eeab5f8a-18dd-4d58-af78-2b3c4543da48";
|
||||||
|
private final String testPlayer = "ImFascinated";
|
||||||
|
private final String testInvalidPlayer = "invalidplayeromgyeswow";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void ensurePlayerLookupUuidSuccess() {
|
||||||
|
CachedPlayer player = McUtilsAPI.getPlayer(testPlayerUuid);
|
||||||
|
assert player.getUsername().equals(testPlayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void ensurePlayerLookupUuidFailure() {
|
||||||
|
try {
|
||||||
|
McUtilsAPI.getPlayer(testInvalidPlayer);
|
||||||
|
} catch (ErrorResponse ex) {
|
||||||
|
assert ex.getCode() == 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void ensurePlayerLookupUsernameSuccess() {
|
||||||
|
CachedPlayer player = McUtilsAPI.getPlayer(testPlayer);
|
||||||
|
assert player.getUsername().equals(testPlayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void ensurePlayerLookupUsernameFailure() {
|
||||||
|
try {
|
||||||
|
McUtilsAPI.getPlayer(testInvalidPlayer);
|
||||||
|
} catch (ErrorResponse ex) {
|
||||||
|
assert ex.getCode() == 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void ensurePlayerUsernameToUuidLookupSuccess() {
|
||||||
|
CachedUsernameToUuid player = McUtilsAPI.getUsernameToUuid(testPlayer);
|
||||||
|
assert player.getUsername().equals(testPlayer);
|
||||||
|
assert player.getUniqueId().toString().equals(testPlayerUuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void ensurePlayerUsernameToUuidLookupFailure() {
|
||||||
|
try {
|
||||||
|
McUtilsAPI.getUsernameToUuid(testInvalidPlayer);
|
||||||
|
} catch (ErrorResponse ex) {
|
||||||
|
assert ex.getCode() == 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void ensurePlayerSkinPartsLookupSuccess() {
|
||||||
|
for (Skin.SkinPart part : Skin.SkinPart.values()) {
|
||||||
|
CachedPlayerSkinPart partBytes = McUtilsAPI.getPlayerSkinPart(part, testPlayer);
|
||||||
|
assert partBytes.getPartBytes() != null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
74
src/test/java/xyz/mcutils/ServerTests.java
Normal file
74
src/test/java/xyz/mcutils/ServerTests.java
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
package xyz.mcutils;
|
||||||
|
|
||||||
|
import lombok.SneakyThrows;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import xyz.mcutils.exception.ErrorResponse;
|
||||||
|
import xyz.mcutils.models.server.CachedBedrockMinecraftServer;
|
||||||
|
import xyz.mcutils.models.server.CachedJavaMinecraftServer;
|
||||||
|
import xyz.mcutils.models.server.CachedServerBlockedStatus;
|
||||||
|
import xyz.mcutils.models.server.CachedServerIcon;
|
||||||
|
|
||||||
|
public class ServerTests {
|
||||||
|
|
||||||
|
private final String testJavaServer = "play.hypixel.net";
|
||||||
|
private final String testBedrockServer = "geo.hivebedrock.network";
|
||||||
|
private final String testInvalidServer = "invalidhostnamehahahahahayesslmaooo";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void ensureJavaServerLookupSuccess() {
|
||||||
|
CachedJavaMinecraftServer server = McUtilsAPI.getJavaServer(testJavaServer);
|
||||||
|
assert server.getHostname().equals(testJavaServer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void ensureJavaServerLookupFailure() {
|
||||||
|
try {
|
||||||
|
McUtilsAPI.getJavaServer(testInvalidServer);
|
||||||
|
} catch (ErrorResponse ex) {
|
||||||
|
assert ex.getCode() == 400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void ensureJavaServerIconLookupSuccess() {
|
||||||
|
CachedServerIcon icon = McUtilsAPI.getServerIcon(testJavaServer);
|
||||||
|
assert icon.getBytes() != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void ensureJavaServerIconLookupFailure() {
|
||||||
|
try {
|
||||||
|
McUtilsAPI.getServerIcon(testInvalidServer);
|
||||||
|
} catch (ErrorResponse ex) {
|
||||||
|
assert ex.getCode() == 400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void ensureJavaServerBlockedLookupSuccess() {
|
||||||
|
CachedServerBlockedStatus status = McUtilsAPI.getServerBlockedStatus(testJavaServer);
|
||||||
|
assert !status.isBlocked();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void ensureBedrockServerLookupSuccess() {
|
||||||
|
CachedBedrockMinecraftServer server = McUtilsAPI.getBedrockServer(testBedrockServer);
|
||||||
|
assert server.getHostname().equals(testBedrockServer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void ensureBedrockServerLookupFailure() {
|
||||||
|
try {
|
||||||
|
McUtilsAPI.getBedrockServer(testInvalidServer);
|
||||||
|
} catch (ErrorResponse ex) {
|
||||||
|
assert ex.getCode() == 400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user