Skip to content

Commit a004ac3

Browse files
committed
♻️ 减少 kick player 的处理复杂度
1 parent bc81822 commit a004ac3

File tree

1 file changed

+75
-62
lines changed
  • src/main/kotlin/org/crashvibe/fGateClient/service/websocket/impl

1 file changed

+75
-62
lines changed

src/main/kotlin/org/crashvibe/fGateClient/service/websocket/impl/KickPlayer.kt

Lines changed: 75 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ import kotlinx.serialization.json.JsonElement
77
import kotlinx.serialization.serializer
88
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacyAmpersand
99
import org.bukkit.Bukkit
10+
import org.bukkit.entity.Player
1011
import org.crashvibe.fGateClient.FGateClient
1112
import org.crashvibe.fGateClient.service.websocket.JsonRpcRequest
1213
import org.crashvibe.fGateClient.service.websocket.JsonRpcResponse
1314
import java.util.*
1415

15-
1616
class KickPlayer : RequestHandler() {
1717
override val method: String = "kick.player"
1818

@@ -31,73 +31,86 @@ class KickPlayer : RequestHandler() {
3131

3232
override fun handle(request: JsonRpcRequest<JsonElement>) {
3333
try {
34-
val kickParams = request.params?.let {
35-
Json.decodeFromJsonElement(serializer<KickPlayerParams>(), it)
36-
}
34+
val kickParams = parseParams(request) ?: return
35+
logger.info("踢出玩家: ${kickParams.playerName ?: kickParams.playerUUID}, 原因: ${kickParams.reason}")
3736

38-
if (kickParams != null) {
39-
logger.info("踢出玩家: ${kickParams.playerName ?: kickParams.playerUUID}, 原因: ${kickParams.reason}")
37+
Bukkit.getScheduler().runTask(FGateClient.instance, Runnable {
38+
executeKick(request, kickParams)
39+
})
40+
} catch (e: Exception) {
41+
sendInvalidParamsError(request.id, "参数解析失败: ${e.message}")
42+
}
43+
}
4044

41-
Bukkit.getScheduler().runTask(FGateClient.instance, Runnable {
42-
val player = if (kickParams.playerUUID != null) {
43-
try {
44-
Bukkit.getPlayer(UUID.fromString(kickParams.playerUUID))
45-
} catch (_: IllegalArgumentException) {
46-
sendError<String>(
47-
request.id, JsonRpcResponse.JsonRpcError(
48-
code = -32602,
49-
message = "Invalid params",
50-
data = "无效的 UUID 格式: ${kickParams.playerUUID}"
51-
)
52-
)
53-
return@Runnable
54-
}
55-
} else if (kickParams.playerName != null) {
56-
Bukkit.getPlayerExact(kickParams.playerName)
57-
} else {
58-
sendError<String>(
59-
request.id, JsonRpcResponse.JsonRpcError(
60-
code = -32602,
61-
message = "Invalid params",
62-
data = "缺少 playerUUID 或 playerName 参数"
63-
)
64-
)
65-
return@Runnable
66-
}
45+
private fun parseParams(request: JsonRpcRequest<JsonElement>): KickPlayerParams? {
46+
val params = request.params?.let {
47+
Json.decodeFromJsonElement(serializer<KickPlayerParams>(), it)
48+
}
6749

68-
if (player != null) {
69-
player.kick(legacyAmpersand().deserialize(kickParams.reason))
70-
sendResponse(
71-
request.id,
72-
KickPlayerResponse(success = true, message = "玩家 ${player.name} 已被踢出, 原因: ${kickParams.reason}")
73-
)
74-
} else {
75-
sendResponse(
76-
request.id,
77-
KickPlayerResponse(
78-
success = false,
79-
message = "无法找到玩家: ${kickParams.playerName ?: kickParams.playerUUID}"
80-
)
81-
)
82-
}
83-
})
84-
} else {
85-
sendError<String>(
86-
request.id, JsonRpcResponse.JsonRpcError(
87-
code = -32602,
88-
message = "Invalid params",
89-
data = "Missing parameters"
90-
)
91-
)
50+
if (params == null) {
51+
sendInvalidParamsError(request.id, "Missing parameters")
52+
return null
53+
}
54+
55+
return params
56+
}
57+
58+
private fun executeKick(request: JsonRpcRequest<JsonElement>, params: KickPlayerParams) {
59+
val player = findPlayer(request, params) ?: return
60+
61+
player.kick(legacyAmpersand().deserialize(params.reason))
62+
sendResponse(
63+
request.id,
64+
KickPlayerResponse(
65+
success = true,
66+
message = "玩家 ${player.name} 已被踢出, 原因: ${params.reason}"
67+
)
68+
)
69+
}
70+
71+
private fun findPlayer(request: JsonRpcRequest<JsonElement>, params: KickPlayerParams): Player? {
72+
return when {
73+
params.playerUUID != null -> findPlayerByUUID(request, params.playerUUID)
74+
params.playerName != null -> findPlayerByName(request, params)
75+
else -> {
76+
sendInvalidParamsError(request.id, "缺少 playerUUID 或 playerName 参数")
77+
null
9278
}
93-
} catch (e: Exception) {
94-
sendError<String>(
95-
request.id, JsonRpcResponse.JsonRpcError(
96-
code = -32602,
97-
message = "Invalid params",
98-
data = "参数解析失败: ${e.message}"
79+
}
80+
}
81+
82+
private fun findPlayerByUUID(request: JsonRpcRequest<JsonElement>, playerUUID: String): Player? {
83+
return try {
84+
val uuid = UUID.fromString(playerUUID)
85+
Bukkit.getPlayer(uuid)
86+
} catch (_: IllegalArgumentException) {
87+
sendInvalidParamsError(request.id, "无效的 UUID 格式: $playerUUID")
88+
null
89+
}
90+
}
91+
92+
private fun findPlayerByName(request: JsonRpcRequest<JsonElement>, params: KickPlayerParams): Player? {
93+
val player = Bukkit.getPlayerExact(params.playerName!!)
94+
if (player == null) {
95+
sendResponse(
96+
request.id,
97+
KickPlayerResponse(
98+
success = false,
99+
message = "无法找到玩家: ${params.playerName}"
99100
)
100101
)
101102
}
103+
return player
104+
}
105+
106+
private fun sendInvalidParamsError(requestId: String?, data: String) {
107+
sendError<String>(
108+
requestId,
109+
JsonRpcResponse.JsonRpcError(
110+
code = -32602,
111+
message = "Invalid params",
112+
data = data
113+
)
114+
)
102115
}
103116
}

0 commit comments

Comments
 (0)