Rename project

This commit is contained in:
2026-09-04 15:21:22 +08:00
parent 9be67f9389
commit 4ed862abd6
37 files changed
+105 -91

No files matched your search

+1 -1
View File
@@ -1,4 +1,4 @@
# mcping
# libmc
A lightweight motd ping / rcon client library for kotlin multiplatform and java,
no dependencies in `jvm` target except `kotlin-stdlib`
+1 -1
View File
@@ -4,7 +4,7 @@ plugins {
}
allprojects {
group = "cn.rtast.mcping"
group = "cn.rtast.libmc"
version = providers.gradleProperty("libVersion").get()
repositories {
@@ -5,7 +5,7 @@
*/
package cn.rtast.mcping.platform
package cn.rtast.libmc.common
@Suppress("CLASSNAME")
public expect class _Buffer {
@@ -24,6 +24,7 @@ public expect class _Buffer {
public fun readLong(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Long
public fun readBytes(length: Int): ByteArray
public fun toByteArray(): ByteArray
public fun hasRemaining(): Boolean
public fun close()
public val size: Int
}
@@ -5,7 +5,7 @@
*/
package cn.rtast.mcping.platform
package cn.rtast.libmc.common
public enum class ByteOrder {
BIG_ENDIAN, LITTLE_ENDIAN
@@ -5,7 +5,7 @@
*/
package cn.rtast.mcping.platform
package cn.rtast.libmc.common
@Suppress("CLASSNAME")
public expect class _ReadChannel {
@@ -5,10 +5,10 @@
*/
package cn.rtast.mcping.platform
package cn.rtast.libmc.common
/**
* An object class used to pass some parameters
* that exists only on native targets
*/
public expect class MCPingContext()
public expect class LibMCContext()
@@ -5,17 +5,17 @@
*/
package cn.rtast.mcping.platform
package cn.rtast.libmc.common
@Suppress("CLASSNAME")
public expect class _Socket public constructor(host: String, port: Int, context: MCPingContext) {
public expect class _Socket public constructor(host: String, port: Int, context: LibMCContext) {
public fun openReadChannel(): _ReadChannel
public fun openWriteChannel(): _WriteChannel
public fun close()
}
@Suppress("CLASSNAME")
public expect class _UdpSocket public constructor(host: String, port: Int, context: MCPingContext) {
public expect class _UdpSocket public constructor(host: String, port: Int, context: LibMCContext) {
public fun sendAndReceive(data: ByteArray): ByteArray
public fun close()
}
@@ -4,7 +4,7 @@
* Date: 2026/9/3
*/
package cn.rtast.mcping.platform
package cn.rtast.libmc.common
import java.io.ByteArrayOutputStream
@@ -21,6 +21,7 @@ public actual class _Buffer {
}
public actual fun writeByte(value: Byte) {
readBuffer = null
outStream.write(value.toInt())
}
@@ -58,6 +59,7 @@ public actual class _Buffer {
}
public actual fun writeBytes(bytes: ByteArray) {
readBuffer = null
outStream.write(bytes)
}
@@ -88,6 +90,7 @@ public actual class _Buffer {
}
public actual fun toByteArray(): ByteArray = outStream.toByteArray()
public actual fun hasRemaining(): Boolean = readOffset < ensureReadArray().size
public actual fun close(): Unit = outStream.close()
public actual val size: Int get() = outStream.size()
@@ -5,7 +5,7 @@
*/
package cn.rtast.mcping.platform
package cn.rtast.libmc.common
import java.io.EOFException
import java.io.InputStream
@@ -4,9 +4,9 @@
* Date: 2026/9/3
*/
package cn.rtast.mcping.platform
package cn.rtast.libmc.common
/**
* No Context for jvm targets
*/
public actual class MCPingContext
public actual class LibMCContext
@@ -5,7 +5,7 @@
*/
package cn.rtast.mcping.platform
package cn.rtast.libmc.common
internal fun ByteArray.toShort(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Short {
val b1 = this[0].toInt() and 0xFF
@@ -4,7 +4,7 @@
* Date: 2026/9/3
*/
package cn.rtast.mcping.platform
package cn.rtast.libmc.common
import java.net.DatagramPacket
import java.net.DatagramSocket
@@ -12,7 +12,7 @@ import java.net.InetSocketAddress
import java.net.Socket as JvmSocket
@Suppress("CLASSNAME")
public actual class _Socket public actual constructor(host: String, port: Int, context: MCPingContext) {
public actual class _Socket public actual constructor(host: String, port: Int, context: LibMCContext) {
private val socket = JvmSocket(host, port)
public actual fun openReadChannel(): _ReadChannel = _ReadChannel(socket.getInputStream())
@@ -21,7 +21,7 @@ public actual class _Socket public actual constructor(host: String, port: Int, c
}
@Suppress("CLASSNAME")
public actual class _UdpSocket public actual constructor(host: String, port: Int, context: MCPingContext) {
public actual class _UdpSocket public actual constructor(host: String, port: Int, context: LibMCContext) {
private val socket = DatagramSocket().apply {
soTimeout = 3000
connect(InetSocketAddress(host, port))
@@ -4,7 +4,7 @@
* Date: 2026/9/3
*/
package cn.rtast.mcping.platform
package cn.rtast.libmc.common
import io.ktor.utils.io.bits.*
import kotlinx.io.Buffer
@@ -56,7 +56,16 @@ public actual class _Buffer {
}
public actual fun readBytes(length: Int): ByteArray = _delegateBuf.readByteArray(length)
public actual fun toByteArray(): ByteArray = _delegateBuf.peek().readByteArray()
public actual fun toByteArray(): ByteArray {
val copy = _delegateBuf.peek()
return try {
copy.readByteArray()
} finally {
copy.close()
}
}
public actual fun hasRemaining(): Boolean = !_delegateBuf.exhausted()
public actual fun close(): Unit = _delegateBuf.close()
public actual val size: Int
@@ -4,7 +4,7 @@
* Date: 2026/9/3
*/
package cn.rtast.mcping.platform
package cn.rtast.libmc.common
import io.ktor.utils.io.*
import io.ktor.utils.io.bits.reverseByteOrder
@@ -6,13 +6,13 @@
@file:Suppress("PropertyName")
package cn.rtast.mcping.platform
package cn.rtast.libmc.common
import io.ktor.network.selector.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
public actual class MCPingContext actual constructor() {
public actual class LibMCContext actual constructor() {
internal var _selectorManager: SelectorManager = SelectorManager(Dispatchers.IO)
internal var _autoCloseSelectorManager: Boolean = false
@@ -4,7 +4,7 @@
* Date: 2026/9/3
*/
package cn.rtast.mcping.platform
package cn.rtast.libmc.common
import io.ktor.network.sockets.*
import io.ktor.utils.io.core.*
@@ -12,7 +12,7 @@ import kotlinx.coroutines.runBlocking
import kotlinx.io.readByteArray
@Suppress("CLASSNAME")
public actual class _Socket public actual constructor(host: String, port: Int, context: MCPingContext) {
public actual class _Socket public actual constructor(host: String, port: Int, context: LibMCContext) {
private val ctx = context
private val socket = runBlocking { aSocket(ctx._selectorManager).tcp().connect(host, port) }
@@ -27,7 +27,7 @@ public actual class _Socket public actual constructor(host: String, port: Int, c
}
@Suppress("CLASSNAME")
public actual class _UdpSocket public actual constructor(host: String, port: Int, context: MCPingContext) {
public actual class _UdpSocket public actual constructor(host: String, port: Int, context: LibMCContext) {
private val ctx = context
// use bind to create an unconnected socket
@@ -5,9 +5,9 @@
*/
package cn.rtast.mcping.bedrock
package cn.rtast.libmc.mcping.bedrock
import cn.rtast.mcping.platform._Buffer
import cn.rtast.libmc.common._Buffer
import kotlin.random.Random
private val rakNetMagic = byteArrayOf(
@@ -5,10 +5,11 @@
*/
package cn.rtast.mcping.bedrock
package cn.rtast.libmc.mcping.bedrock
import cn.rtast.libmc.common._Buffer
import cn.rtast.libmc.common._UdpSocket
import cn.rtast.mcping.platform._Buffer
import cn.rtast.mcping.platform._UdpSocket
internal fun _UdpSocket.sendPacket(packet: MinecraftBedrockPacket): ByteArray {
val buf = _Buffer()
@@ -5,15 +5,15 @@
*/
package cn.rtast.mcping.bedrock
package cn.rtast.libmc.mcping.bedrock
import cn.rtast.mcping.PingResponse
import cn.rtast.mcping.platform.MCPingContext
import cn.rtast.mcping.platform._UdpSocket
import cn.rtast.mcping.platform.wrap
import cn.rtast.libmc.common.LibMCContext
import cn.rtast.libmc.common._UdpSocket
import cn.rtast.libmc.common.wrap
import cn.rtast.libmc.mcping.PingResponse
import kotlin.time.Clock
internal fun pingBedrockServer(host: String, port: Int, context: MCPingContext): PingResponse {
internal fun pingBedrockServer(host: String, port: Int, context: LibMCContext): PingResponse {
val socket = _UdpSocket(host, port, context)
return try {
val sendTime = Clock.System.now().toEpochMilliseconds()
@@ -5,9 +5,9 @@
*/
package cn.rtast.mcping.bedrock
package cn.rtast.libmc.mcping.bedrock
import cn.rtast.mcping.PingResponse
import cn.rtast.libmc.mcping.PingResponse
public enum class BedrockGameMode(public val gameMode: String) {
Survival("Survival"),
@@ -4,10 +4,10 @@
* Date: 2026/9/3
*/
package cn.rtast.mcping.java
package cn.rtast.libmc.mcping.java
import cn.rtast.mcping.platform._Buffer
import cn.rtast.mcping.platform._ReadChannel
import cn.rtast.libmc.common._Buffer
import cn.rtast.libmc.common._ReadChannel
internal fun _Buffer.writeVarInt(value: Int) {
@@ -5,9 +5,9 @@
*/
package cn.rtast.mcping.java
package cn.rtast.libmc.mcping.java
import cn.rtast.mcping.platform._Buffer
import cn.rtast.libmc.common._Buffer
internal interface MinecraftPacket {
val packetId: Int
@@ -5,10 +5,10 @@
*/
package cn.rtast.mcping.java
package cn.rtast.libmc.mcping.java
import cn.rtast.mcping.platform._Buffer
import cn.rtast.mcping.platform._WriteChannel
import cn.rtast.libmc.common._Buffer
import cn.rtast.libmc.common._WriteChannel
internal fun _WriteChannel.sendPacket(packet: MinecraftPacket) {
val bodyBuffer = _Buffer()
@@ -5,14 +5,14 @@
*/
package cn.rtast.mcping.java
package cn.rtast.libmc.mcping.java
import cn.rtast.mcping.PingResponse
import cn.rtast.mcping.platform.MCPingContext
import cn.rtast.mcping.platform._Socket
import cn.rtast.libmc.common.LibMCContext
import cn.rtast.libmc.common._Socket
import cn.rtast.libmc.mcping.PingResponse
import kotlin.time.Clock
internal fun pingJavaServer(host: String, port: Int, context: MCPingContext): PingResponse {
internal fun pingJavaServer(host: String, port: Int, context: LibMCContext): PingResponse {
val socket = _Socket(host, port, context)
val receiveChannel = socket.openReadChannel()
val sendChannel = socket.openWriteChannel()
@@ -7,11 +7,11 @@
@file:JvmName("McPing")
package cn.rtast.mcping
package cn.rtast.libmc.mcping
import cn.rtast.mcping.bedrock.pingBedrockServer
import cn.rtast.mcping.java.pingJavaServer
import cn.rtast.mcping.platform.MCPingContext
import cn.rtast.libmc.common.LibMCContext
import cn.rtast.libmc.mcping.bedrock.pingBedrockServer
import cn.rtast.libmc.mcping.java.pingJavaServer
import kotlin.jvm.JvmName
import kotlin.jvm.JvmOverloads
@@ -20,7 +20,7 @@ public fun mcping(
host: String,
port: Int,
type: ServerType = ServerType.Java,
context: MCPingContext = MCPingContext(),
context: LibMCContext = LibMCContext(),
): PingResponse = when (type) {
ServerType.Java -> pingJavaServer(host, port, context)
ServerType.Bedrock -> pingBedrockServer(host, port, context)
@@ -5,10 +5,10 @@
*/
package cn.rtast.mcping
package cn.rtast.libmc.mcping
import cn.rtast.mcping.bedrock.BedrockPingResponse
import cn.rtast.mcping.bedrock.parseBedrockPingResponse
import cn.rtast.libmc.mcping.bedrock.BedrockPingResponse
import cn.rtast.libmc.mcping.bedrock.parseBedrockPingResponse
public data class PingResponse(
/**
@@ -5,7 +5,7 @@
*/
package cn.rtast.mcping
package cn.rtast.libmc.mcping
public enum class ServerType {
Java, Bedrock
@@ -7,8 +7,8 @@
package test
import cn.rtast.mcping.ServerType
import cn.rtast.mcping.mcping
import cn.rtast.libmc.mcping.ServerType
import cn.rtast.libmc.mcping.mcping
import kotlinx.coroutines.test.runTest
import kotlin.test.Test
@@ -7,9 +7,9 @@
package test;
import cn.rtast.mcping.McPing;
import cn.rtast.mcping.PingResponse;
import cn.rtast.mcping.ServerType;
import cn.rtast.libmc.mcping.McPing;
import cn.rtast.libmc.mcping.PingResponse;
import cn.rtast.libmc.mcping.ServerType;
import org.junit.Test;
@@ -7,9 +7,9 @@
package test
import cn.rtast.mcping.ServerType
import cn.rtast.mcping.mcping
import cn.rtast.mcping.platform.MCPingContext
import cn.rtast.libmc.common.LibMCContext
import cn.rtast.libmc.mcping.ServerType
import cn.rtast.libmc.mcping.mcping
import io.ktor.network.selector.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
@@ -22,7 +22,7 @@ class TestMingwPing {
fun `test ping java on mingw with selectorManager`() = runTest {
val sm = SelectorManager(Dispatchers.IO)
val response =
mcping(host = "org.mc-complex.com", port = 25565, type = ServerType.Java, context = MCPingContext(sm))
mcping(host = "org.mc-complex.com", port = 25565, type = ServerType.Java, context = LibMCContext(sm))
println(response)
}
@@ -30,7 +30,7 @@ class TestMingwPing {
fun `test ping bedrock on mingw with selectorManager`() = runTest {
val sm = SelectorManager(Dispatchers.IO)
val response =
mcping(host = "play.wildnetwork.net", port = 19132, type = ServerType.Bedrock, context = MCPingContext(sm))
mcping(host = "play.wildnetwork.net", port = 19132, type = ServerType.Bedrock, context = LibMCContext(sm))
println(response)
println(response.toBedrockResponse())
}
@@ -5,8 +5,8 @@
*/
package cn.rtast.mcping.rconlib
package cn.rtast.libmc.mcping.rconlib
import cn.rtast.mcping.platform._Buffer
import cn.rtast.libmc.common._Buffer
internal fun _Buffer.writeNull() = writeByte(0x00)
@@ -5,12 +5,12 @@
*/
package cn.rtast.mcping.rconlib
package cn.rtast.libmc.mcping.rconlib
import cn.rtast.mcping.platform.ByteOrder
import cn.rtast.mcping.platform._Buffer
import cn.rtast.mcping.platform._ReadChannel
import cn.rtast.mcping.platform._WriteChannel
import cn.rtast.libmc.common.ByteOrder
import cn.rtast.libmc.common._Buffer
import cn.rtast.libmc.common._ReadChannel
import cn.rtast.libmc.common._WriteChannel
internal abstract class Packet {
abstract val requestId: Int
@@ -5,7 +5,7 @@
*/
package cn.rtast.mcping.rconlib
package cn.rtast.libmc.mcping.rconlib
internal object PacketType {
const val AUTH = 3
@@ -6,19 +6,19 @@
@file:JvmName("Rconlib")
package cn.rtast.mcping.rconlib
package cn.rtast.libmc.mcping.rconlib
import cn.rtast.mcping.platform.MCPingContext
import cn.rtast.mcping.platform._ReadChannel
import cn.rtast.mcping.platform._Socket
import cn.rtast.mcping.platform._WriteChannel
import cn.rtast.libmc.common.LibMCContext
import cn.rtast.libmc.common._ReadChannel
import cn.rtast.libmc.common._Socket
import cn.rtast.libmc.common._WriteChannel
import kotlin.jvm.JvmName
import kotlin.jvm.JvmOverloads
public class RCONClient internal constructor(
private val host: String,
private val port: Int,
private val context: MCPingContext,
private val context: LibMCContext,
) : AutoCloseable {
private var socket: _Socket? = null
private var readChannel: _ReadChannel? = null
@@ -50,5 +50,5 @@ public class RCONClient internal constructor(
}
@JvmOverloads
public fun rconClient(host: String, port: Int, context: MCPingContext = MCPingContext()): RCONClient =
public fun rconClient(host: String, port: Int, context: LibMCContext = LibMCContext()): RCONClient =
RCONClient(host, port, context)
@@ -7,7 +7,7 @@
package test
import cn.rtast.mcping.rconlib.rconClient
import cn.rtast.libmc.mcping.rconlib.rconClient
import kotlin.test.Test
class TestRCON {
@@ -7,8 +7,8 @@
package test;
import cn.rtast.mcping.rconlib.RCONClient;
import cn.rtast.mcping.rconlib.Rconlib;
import cn.rtast.libmc.mcping.rconlib.RCONClient;
import cn.rtast.libmc.mcping.rconlib.Rconlib;
import org.junit.Test;
public class TestRconClientOnJava {
+2 -2
View File
@@ -1,8 +1,8 @@
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}
rootProject.name = "mcping"
rootProject.name = "libmc"
include(":common")
include(":mcping")
include(":rconlib")
include(":common")