Skip to content

Commit f964790

Browse files
committed
readme
1 parent 67ceefe commit f964790

File tree

5 files changed

+30
-45
lines changed

5 files changed

+30
-45
lines changed

README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,15 @@ dependencies {
2222
runBlocking {
2323
var status
2424
status = JavaServer.getStatus("mc.hypixel.net")
25+
26+
// More options
2527
status = JavaServer.getStatus(
2628
host = "wdsj.net",
2729
port = 25565,
2830
enableSrv = true
2931
)
32+
33+
// Bedrock servers
3034
status = BedrockServer.getStatus("play.easecation.net")
3135

3236
println(status)
@@ -38,16 +42,16 @@ runBlocking {
3842
```kotlin
3943
runBlocking {
4044
var pl
41-
pl = Player.getProfileByName("Aliorpse")
42-
pl = Player.getProfile("ec042e1200ac4a249cc83eb1fab0bd88")
45+
pl = Player.getProfile("Aliorpse", Player.IDType.NAME)
46+
pl = Player.getProfile("ec042e1200ac4a249cc83eb1fab0bd88", Player.IDType.UUID)
4347

4448
println(pl)
4549
}
4650
```
4751

4852
## Java Usage
4953

50-
All asynchronous methods also provide a blocking variant (running on `Dispatchers.IO`),
54+
All asynchronous methods also provide a blocking variant,
5155
allowing you to call them directly from Java without dealing with coroutines.
5256

5357
```java
Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,38 @@
11
package tech.aliorpse.mcutils.modules.player
22

3-
import kotlinx.coroutines.Dispatchers
43
import kotlinx.coroutines.runBlocking
54
import tech.aliorpse.mcutils.model.player.PlayerProfile
65

76
object Player {
87
/**
9-
* Retrieves the player's profile from the Mojang session server based on the provided UUID.
10-
*
11-
* @param uuid The player's uuid.
12-
* @return `PlayerProfile` containing detailed player information including id, name, skin, cape, and model type.
8+
* UUID or NAME.
139
*/
14-
suspend fun getProfile(uuid: String): PlayerProfile =
15-
PlayerClient.sessionService.getProfile(uuid)
16-
17-
/**
18-
* Blocking method of [getProfile].
19-
*/
20-
@JvmStatic
21-
fun getProfileBlocking(uuid: String): PlayerProfile = runBlocking(Dispatchers.IO) {
22-
PlayerClient.sessionService.getProfile(uuid)
10+
enum class IDType {
11+
UUID, NAME
2312
}
2413

2514
/**
26-
* Another version of [getProfile].
15+
* Retrieves the player's profile from the Mojang session server.
2716
*
28-
* @param username The player's username.
17+
* @param id Either UUID or name.
2918
* @return `PlayerProfile` containing detailed player information including id, name, skin, cape, and model type.
3019
*/
31-
suspend fun getProfileByName(username: String): PlayerProfile {
32-
val uuid = PlayerClient.profileService.getUUID(username).id
33-
return PlayerClient.sessionService.getProfile(uuid)
20+
suspend fun getProfile(id: String, type: IDType): PlayerProfile {
21+
return when (type) {
22+
IDType.UUID -> PlayerClient.sessionService.getProfile(id)
23+
24+
IDType.NAME -> {
25+
val id = PlayerClient.profileService.getUUID(id).id
26+
PlayerClient.sessionService.getProfile(id)
27+
}
28+
}
3429
}
3530

3631
/**
37-
* Blocking method of [getProfileByName]
32+
* Blocking method of [getProfile].
3833
*/
3934
@JvmStatic
40-
fun getProfileByNameBlocking(username: String): PlayerProfile = runBlocking(Dispatchers.IO) {
41-
getProfileByName(username)
35+
fun getProfileBlocking(id: String, type: IDType): PlayerProfile = runBlocking {
36+
getProfile(id, type)
4237
}
4338
}

src/main/kotlin/tech/aliorpse/mcutils/modules/server/BedrockServer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ object BedrockServer {
117117
host: String,
118118
port: Int = 19132,
119119
timeout: Int = 2000
120-
) = runBlocking(Dispatchers.IO) {
120+
) = runBlocking {
121121
getStatus(host, port, timeout)
122122
}
123123
}

src/main/kotlin/tech/aliorpse/mcutils/modules/server/JavaServer.kt

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,6 @@ import java.nio.charset.StandardCharsets
3131

3232
/**
3333
* Provides functionality to fetch and parse the status of a Java Minecraft server.
34-
*
35-
* The object supports asynchronous and blocking methods to retrieve server details such as
36-
* server description, version, players, and ping latency. It also includes support for SRV record
37-
* resolution and Unicode domains.
38-
*
39-
* Internal constants and helper methods handle Minecraft's communication protocol, including
40-
* packet construction and parsing.
4134
*/
4235
@Suppress("MagicNumber", "TooManyFunctions")
4336
object JavaServer {
@@ -52,7 +45,7 @@ object JavaServer {
5245
private val motdAdapter = MOTDTextComponentAdapter(colorAdapter)
5346
private val descAdapter = DescriptionAdapter(motdAdapter)
5447

55-
val moshi: Moshi = Moshi.Builder()
48+
internal val moshi: Moshi = Moshi.Builder()
5649
.add(colorAdapter)
5750
.add(motdAdapter)
5851
.add(descAdapter)
@@ -74,23 +67,17 @@ object JavaServer {
7467
* @param host Host
7568
* @param port Port (25565)
7669
* @param timeout Timeout (2000ms)
77-
* @param enableSrv Srv (true)
7870
*
7971
* @throws IOException
8072
*/
8173
suspend fun getStatus(
8274
host: String,
8375
port: Int = 25565,
8476
timeout: Int = 2000,
85-
enableSrv: Boolean = true
8677
): JavaServerStatus = withContext(Dispatchers.IO) {
8778
val asciiHost = IDN.toASCII(host)
8879

89-
val (srvTarget, srvPort) = if (enableSrv) {
90-
resolveSrvRecord(asciiHost) ?: (asciiHost to port)
91-
} else {
92-
asciiHost to port
93-
}
80+
val (srvTarget, srvPort) = resolveSrvRecord(asciiHost) ?: (asciiHost to port)
9481

9582
val resolvedHost = resolveToIpOrHost(srvTarget) ?: srvTarget
9683

@@ -136,9 +123,8 @@ object JavaServer {
136123
host: String,
137124
port: Int = 25565,
138125
timeout: Int = 2000,
139-
enableSrv: Boolean = true
140-
) = runBlocking(Dispatchers.IO) {
141-
getStatus(host, port, timeout, enableSrv)
126+
) = runBlocking {
127+
getStatus(host, port, timeout)
142128
}
143129

144130
@Suppress("ReturnCount")

src/test/kotlin/tech/aliorpse/mcutils/player/PlayerProfileTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class PlayerProfileTest {
99
*/
1010
@Test
1111
fun getProfileTest() {
12-
val result = Player.getProfileByNameBlocking("Aliorpse")
12+
val result = Player.getProfileBlocking("Aliorpse", Player.IDType.NAME)
1313
println(result)
1414
assert(result.name.isNotEmpty())
1515
}

0 commit comments

Comments
 (0)