@@ -7,12 +7,12 @@ import kotlinx.serialization.json.JsonElement
77import kotlinx.serialization.serializer
88import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacyAmpersand
99import org.bukkit.Bukkit
10+ import org.bukkit.entity.Player
1011import org.crashvibe.fGateClient.FGateClient
1112import org.crashvibe.fGateClient.service.websocket.JsonRpcRequest
1213import org.crashvibe.fGateClient.service.websocket.JsonRpcResponse
1314import java.util.*
1415
15-
1616class 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