SOCKETS

Данный модуль позволяет серверам под контролем прокси сервера обмениваться информацией через сокеты.

Для работы модуля необходимо установить Skcrew на прокси сервер ( Velocity или Bungeecord ). В файле конфигурации на прокси сервере указать порт для открытия сокет сервера, на игровом сервере указать адрес прокси сервера и порт открытого сокет сервера.

Конфигурация на прокси сервере

socket-server-port: 1337

Конфигурация на игровом сервере

sockets:
  enabled: false
  server-address: "127.0.0.1"
  server-port: 1337
  client-autoreconnect-time: 5

client-autoreconnect-time - описывает время, через которое игровой сервер попробует переподключиться в случае отключения прокси сервера.

EXPRESSIONS
CONDITIONS
EFFECTS
EVENTS
SIGNALS
WEB API

Подразделы Sockets

EXPRESSIONS

Получить текущий сервер

Вовзращает текущий игровой сервер

(current|this) server

Получить сервер по названию

Возвращает сервер по названию, под которым он записан в конфигурации прокси сервера.
Если данный сервер не числится в конфигурации прокси сервера - будет возвращено <none>

server %string%

Получить название сервера

server[ ]name of %server%
%server%'s server[ ]name

Получить список серверов

Выражение ниже возвращает список всех серверов описанных в конфигурации прокси сервера.

[all] servers

Получить только те сервера, которые включены. Чтобы сервер был определен как включенный - он должен быть подключен к сокет серверу.

[all] online servers

Получить игроков с сервера

Возвращает список игроков в виде сетевых игроков.

players (from|of|on) %servers%
%servers%'s players

Получить игрока на прокси сервере

Принимает ник игрока или его UUID , возвращает сетевого игрока, или <none>, если игрока нет онлайн

network[ ]player %string%

Серверный игрок автоматически конвертируется в OfflinePlayer, если используется в каких-либо выражениях при необходимости

Получить сервер игрока

server of %networkplayer%
%networkplayer%'s server

CONDITIONS

Проверить, что сервер онлайн

%servers% is (online|connected)
%servers% is(n't| not) (online|connected)

Проверить, что игрок онлайн

Позволяет сменить сервер игрока, если он находится на сервере, который подключен к прокси серверу

%offlineplayers% is ([online ]on|connected to) proxy
%offlineplayers% (does|is)(n't| not) ([online ]on|connected to) proxy

EFFECTS

Кикнуть игрока с прокси сервера

Позволяет указать причину. Причина может быть простым текстом, или компонентом AdventureAPI ( Velocity ) или ChatComponentAPI ( Bungeecord ) в формате JSON.

kick %offlineplayers% from proxy [(by reason of|because [of]|on account of|due to) %string%]

Переместить игрока на сервер

Позволяет сменить сервер игрока, если он находится на сервере, который подключен к прокси серверу

switch %offlineplayers% to %server%

EVENTS

Игрок подключился к прокси серверу

Вызывается, когда игрок еще не подключился к какому-либо серверу

on player (join|connect)[(ed|s)] [to] proxy [server]

Событие имеет встроенные данные, при помощи event-player можно получить подключенного игрока в виде OfflinePlayer

Игрок отключился с прокси сервера

on player (leave|disconnect)[(ed|s)] [from] proxy [server]

Событие имеет встроенные данные, при помощи event-player можно получить подключенного игрока в виде OfflinePlayer

Текущий сервер подключился к прокси

Вызывается после того, как сервер был подключен к прокси.

on connect(ed|s) [to] proxy [server]
on proxy connect

Текущий сервер отключился от прокси

Вызывается после того, как сервер был отключен от прокси.

on disconnect(ed|s) [from] proxy [server]
on proxy disconnect

Попытка переподключения к прокси

Вызывается когда сервер пытается переподключиться к прокси.

on reconnect(ing|s) [to] proxy [server]
on proxy reconnect

Сервер подключился к прокси

Вызывается после того, как какой-либо сервер подключился к прокси

on server connect(ed|s) [to] proxy [server]

Событие имеет встроенные данные, при помощи event-server можно получить подключенный сервер

Сервер был отключен от прокси

Вызывается после того, как какой-либо сервер отключился от прокси

on server disconnect(ed|s) [from] proxy [server]

Событие имеет встроенные данные, при помощи event-server можно получить отключенный сервер

Игрок подключился к игровому серверу

Вызывается после того, как игрок подключен к игровому серверу, который подключен к прокси.

on player (join|connect)[(ed|s)] [to] (proxied|network) server

Выражение ниже позволяет отслеживать подключения только к определенному серверу по его названию.

on player (join|connect)[(ed|s)] [to] (proxied|network) server %string%

Событие имеет встроенные данные, при помощи event-server можно получить сервер игрока, а при помощи event-player можно получить игрока в виде OfflinePlayer

Игрок отключился от игрового сервера

Вызывается после того, как игрок отключается от игрового сервера, который подключен к прокси.

on player (leave|disconnect[e])[(d|s)] [from] (proxied|network) server

Выражение ниже позволяет отслеживать отключения только от определенного сервера по его названию.

on player (leave|disconnect[e])[(d|s)] [from] (proxied|network) server %string%

Событие имеет встроенные данные, при помощи event-server можно получить сервер игрока, с которого он вышел, а при помощи event-player можно получить игрока в виде OfflinePlayer

SIGNALS

Сигналы позволяют передавать необходимую вам информацию между серверами.

Создать сигнал

Сигнал имеет вид ключ : значения, позволяет передать любые данные, которые могут быть сериализованны.

signal [(with key|keyed)|(with name|named)] %string% (and|with) [data] %objects%
set {_signal} to signal named "broadcast" with data "Hello world!","My name is Bjork."

Получить ключ сигнала.

(key|signal name) of %signal%
%signal%'s (signal name|key)

Получить данные сигнала

Возвращает список объектов

data of %signal%
%signal%'s data

Отправить сигнал

Позволяет отправить сигнал на какой-либо подключенный сервер

send signal %signals% to %servers%
set {_signal} to signal named "broadcast" with data "Hello world!","My name is Bjork."
send signal {_signal} to all servers

Событие получения сигнала

Позволяет так же отслеживать сигналы по ключу.

signal [(with key|keyed) %string%]

Событие имеет встроенные данные, при помощи event-signal можно получить пришедший сигнал.

on load:
  set {_signal} to signal named "broadcast" with data "Hello world!","My name is Bjork."
  send signal {_signal} to all servers
  
on signal with key "broadcast":
  send data of event-signal to all players, console

WEB API

API позволяет получить информацию с серверов, а так же отправить сигналы из вне.
Убедитесь, что web-сервер включен в настройках Skcrew вашего прокси сервера.

web-server-enabled: true
web-server-port: 1338
web-server-user: admin
web-server-password: admin

Тут вы так же можете конфигурировать порт web-сервера и данные для авторизации, чтобы получить доступ к API.
Авторизация происходит путем передачи логина и пароля в base64 в заголовке запроса:

Authorization: Basic base64_encode("login:password")
curl localhost:1338/players -H "Authorization: Basic YWRtaW46YWRtaW4="

Доступные маршруты для запросов.

GET    /players

Позволяет получить список всех игроков с названием сервера, на котором они находятся.
Возможные параметры:

  • server:string - позволяет получить игроков с определенных серверов

curl localhost:1338/players -H "Authorization: Basic YWRtaW46YWRtaW4="
{
  "data": [
    {
      "name": "Lotzy",
      "uuid": "a0970e26-b9f4-3f73-bd06-ede16c390d34",
      "join_date": 1706008310,
      "time_played": 1089,
      "server_name": "lobby"
    }
  ]
}

GET    /players/{UUID/NICKNAME}

Позволяет получить игрока, если он онлайн, по его нику или UUID. А также сервер целиком, на котором он находится.

curl localhost:1338/players/Lotzy -H "Authorization: Basic YWRtaW46YWRtaW4="
{
  "data": {
    "name": "Lotzy",
    "uuid": "a0970e26-b9f4-3f73-bd06-ede16c390d34",
    "join_date": 1706008310,
    "time_played": 2335,
    "server_name": "lobby",
    "server": {
      "name": "lobby",
      "address": "127.0.0.1",
      "port": 25565,
      "hostname": "127.0.0.1",
      "online": true,
      "connection_date": 1706008017,
      "uptime": 2628,
      "players_count": 1,
      "players": [
        {
          "name": "Lotzy",
          "uuid": "a0970e26-b9f4-3f73-bd06-ede16c390d34",
          "join_date": 1706008310,
          "time_played": 2335,
          "server_name": "lobby"
        }
      ]
    }
  }
}

GET  POST    /players/{UUID/NICKNAME}/kick

Позволяет кикнуть игрока с прокси сервера, по его нику или UUID.
При использовании POST запроса можно указать причину кика. Причина может быть указана как обычным текстом, так и компонентом AdventureAPI ( Velocity ) или ChatComponentAPI ( Bungeecord ) в формате JSON.

curl localhost:1338/players/Lotzy/kick -X POST -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "Content-Type: application/json" -d '"GO OUT FROM SERVER"'
{ 
  "data":
    "Player Lotzy kicked"
}

GET    /players/{UUID/NICKNAME}/connect/{SERVER}

Позволяет переместить игрока на другой сервер, по его нику или UUID.

curl localhost:1338/players/Lotzy/connect/lobby -H "Authorization: Basic YWRtaW46YWRtaW4="
{ 
  "data":
    "Player Lotzy connected to server lobby"
}

GET    /servers

Получить список всех серверов и игроков на них.
Возможные параметры:

  • online:boolean - позволяет получить только те сервера, которые включены

curl localhost:1338/servers?online=true -H "Authorization: Basic YWRtaW46YWRtaW4="
{
  "data": [
    {
      "name": "lobby",
      "address": "127.0.0.1",
      "port": 25565,
      "hostname": "127.0.0.1",
      "online": true,
      "connection_date": 1706008017,
      "uptime": 2132,
      "players_count": 1,
      "players": [
        {
          "name": "Lotzy",
          "uuid": "a0970e26-b9f4-3f73-bd06-ede16c390d34",
          "join_date": 1706008310,
          "time_played": 1839,
          "server_name": "lobby"
        }
      ]
    }
  ]
}

POST    /servers/{SERVER}/signal

Позволяет отправить сигнал на подключенный сервер.
В теле запроса передается сам сигнал.

curl localhost:1338/servers/lobby/signal -X POST -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "Content-Type: application/json" -d "{'signals':[{'key':'broadcast','data':['Hello world!']}]}"
{ 
  "data": {
    "response": "Signals successfully sended to servers" 
  } 
}

POST    /signal

Позволяет отправить сигнал на подключенные сервера.
В теле запроса передается сам сигнал и список серверов.

curl localhost:1338/servers/lobby/signal -X POST -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "Content-Type: application/json" -d "{'servers':['lobby'],'signals':[{'key':'broadcast','data':['Hello world!']}]}"
{ 
  "data": {
    "response": "Signals successfully sended to servers" 
  } 
}

Пример реализации доступа к API на языке Python вы можете посмотреть по этой ссылке