Основные концепции API
Основные концепции API
Классы находятся в модуле Core плагина Pano MC Plugin, в пакете com.panomc.plugins.pano.core.platform. Каждое сообщение — это JSON с именем event и идентификатором eventId, зашифрованный AES-256-GCM.
1. PlatformRequest
Сообщение от сервера Minecraft к Pano — это класс, наследующий PlatformRequest:
package com.panomc.plugins.pano.core.platform
abstract class PlatformRequest(val eventId: UUID = UUID.randomUUID()) {
open fun encode(): String
}Переопределять ничего не нужно. Имя события — это имя класса без Request в верхнем snake case (MyPlayerJoinRequest становится MY_PLAYER_JOIN), а каждое публичное свойство становится полем JSON:
import com.panomc.plugins.pano.core.platform.PlatformRequest
// Sent as {"event":"MY_PLAYER_JOIN","eventId":"...","player":"Steve","uuid":"..."}
class MyPlayerJoinRequest(
val player: String,
val uuid: String
) : PlatformRequest()Если ответ не нужен, отправьте его через platformManager.sendMessage(request).
2. PlatformMessageResponse
Если вы ожидаете ответ от Pano, опишите его классом, реализующим PlatformMessageResponse:
package com.panomc.plugins.pano.core.platform
interface PlatformMessageResponse : PlatformMessageИмя класса без Message в верхнем snake case должно совпадать с именем события запроса (MyPlayerStatsMessage отвечает на MY_PLAYER_STATS). Pano заполняет его через Gson, поэтому задайте каждому свойству значение по умолчанию.
import com.panomc.plugins.pano.core.platform.PlatformMessageResponse
import com.panomc.plugins.pano.core.platform.PlatformRequest
class MyPlayerStatsRequest(val uuid: String) : PlatformRequest()
// Answers the event MY_PLAYER_STATS
data class MyPlayerStatsMessage(
val kills: Int = 0,
val deaths: Int = 0
) : PlatformMessageResponse
suspend fun fetchStats(platformManager: PlatformManager, uuid: String): MyPlayerStatsMessage =
platformManager.sendMessageAwaitResponse<MyPlayerStatsMessage>(
MyPlayerStatsRequest(uuid),
MyPlayerStatsMessage::class.java,
10_000
)sendMessageAwaitResponse — это suspend-функция. Она бросает исключение, если сервер не подключён к Pano, если ответ другого типа или если ответ не пришёл вовремя (по умолчанию 15 секунд).
3. PlatformMessageHandler
Сообщение, которое Pano отправляет само, обрабатывает PlatformMessageHandler<R : PlatformMessage>:
package com.panomc.plugins.pano.core.platform
abstract class PlatformMessageHandler<R : PlatformMessage> {
abstract suspend fun handle(response: R)
fun getHandlerName(): String
}Имя обработчика — это имя класса без Handler в верхнем snake case.
// From the Pano MC Plugin itself: handles the message POWER
class PowerHandler(
private val pluginMain: PanoPluginMain,
private val logger: Logger
) : PlatformMessageHandler<PowerMessage>() {
override suspend fun handle(response: PowerMessage) {
when (response.action?.trim()?.uppercase()) {
"STOP" -> pluginMain.shutdown()
"RESTART" -> pluginMain.restart()
}
}
}WARNING
Обработчики — это фиксированный список внутри Pano MC Plugin; другой плагин не может зарегистрировать свой. Чтобы получить что-то от Pano, отправьте запрос и дождитесь ответа (например, по таймеру), как в примерах на странице Создание плагина.