SOCKETS

This module allows servers under the control of a proxy server to exchange information via sockets.

For the module to work, you need to install Skcrew on a proxy server ( Velocity or Bungeecord ). In the configuration file on the proxy server, specify the port for opening the server socket, on the game server specify the address of the proxy server and the port of the open server socket.

Configuration on the proxy server

socket-server-port: 1337

Configuration on the game server

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

client-autoreconnect-time - describes the time after which the game server will try to reconnect if the proxy server is disabled.

EXPRESSIONS
CONDITIONS
EFFECTS
EVENTS
SIGNALS
WEB API

Subsections of Sockets

EXPRESSIONS

Get the current server

Returns the current game server

(current|this) server

Get the server by name

Returns the server by the name under which it is written in the proxy server configuration.
If this server is not listed in the proxy server configuration, <none> will be returned

server %string%

Get the name of the server

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

Get a list of servers

The expression below returns a list of all servers described in the proxy server configuration.

[all] servers

Get only those servers that are enabled. In order for the server to be defined as enabled, it must be connected to a socket server.

[all] online servers

Get players from the server

Returns a list of players in the form of online players.

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

Get a player on a proxy server

Accepts the player’s nickname or UUID, returns the online player, or <none> if the player is not online

network[ ]player %string%

The server player is automatically converted to OfflinePlayer if used in any expressions if necessary.

Get the player’s server

server of %networkplayer%
%networkplayer%'s server

CONDITIONS

Check that the server is online

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

Check that the player is online

Allows you to change the player’s server if it is located on a server that is connected to a proxy server

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

EFFECTS

Kick a player from a proxy server

Allows you to specify the reason. The reason may be plain text, or an AdventureAPI component ( Velocity ) or ChatComponentAPI ( Bungeecord ) in JSON format.

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

Move the player to the server

Allows you to change the player’s server if it is located on a server that is connected to a proxy server

switch %offlineplayers% to %server%

EVENTS

The player has connected to the proxy server

Called when the player has not yet connected to any server

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

The event has built-in data, using the event-player you can get the connected player in the form of an OfflinePlayer

The player disconnected from the proxy server

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

The event has built-in data, using the event-player you can get the connected player in the form of an OfflinePlayer

The current server has connected to the proxy

Called after the server has been connected to the proxy.

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

The current server has disconnected from the proxy

Called after the server has been disconnected from the proxy.

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

Attempt to reconnect to the proxy

Called when the server tries to reconnect to the proxy.

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

The server has connected to the proxy

Called after any server has connected to the proxy

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

The event has built-in data, using the event-server you can get a connected server

The server was disconnected from the proxy

Called after any server has disconnected from the proxy

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

The event has embedded data, using the event-server you can get a disconnected server

The player has connected to the game server

It is called after the player is connected to the game server, which is connected to the proxy.

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

The expression below allows you to track connections only to a specific server by its name.

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

The event has built-in data, using the event-server you can get the player’s server, and using the event-player you can get the player in the form of an OfflinePlayer

The player disconnected from the game server

It is called after the player disconnects from the game server that is connected to the proxy.

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

The expression below allows you to track disconnections only from a specific server by its name.

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

The event has built-in data, using the event-server you can get the server of the player from which he left, and using the event-player you can get the player in the form of an OfflinePlayer

SIGNALS

Signals allow you to transfer the information you need between servers.

Create a signal

The signal has the form key : values, which allows you to transfer any data that can be serialized.

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."

Get the signal key.

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

Get signal data

Returns a list of objects

data of %signal%
%signal%'s data

Send a signal

Allows you to send a signal to any connected server

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 receiving event

It also allows you to track signals by key.

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

The event has built-in data, using the event-signal you can receive the incoming 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 allows you to get information from servers, as well as send signals from outside.
Make sure that the web server is enabled in the Skcrew settings of your proxy server.

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

Here you can also configure the web server port and authorization data to access the API.
Authorization is performed by passing the username and password to base64 in the request header:

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

Available routes for requests.

GET    /players

Allows you to get a list of all players with the name of the server they are on.
Possible parameters:

  • server:string - allows you to get players from certain servers

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}

Allows you to get a player, if he is online, by his nickname or UUID. As well as the entire server on which it is located.

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

Allows you to kick a player from a proxy server, by his nickname or UUID.
When using a POST request, you can specify the reason for the kick. The reason can be specified either in plain text or by the AdventureAPI component ( Velocity ) or ChatComponentAPI ( Bungeecord ) in JSON format.

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}

Allows you to move a player to another server, by his nickname or UUID.

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

GET    /servers

Get a list of all servers and players on them.
Possible parameters:

  • online:boolean - allows you to get only those servers that are enabled

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

Allows you to send a signal to the connected server.
The signal itself is transmitted in the request body.

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

Allows you to send a signal to the connected servers.
The signal itself and the list of servers are transmitted in the request body.

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" 
  } 
}

You can see an example of implementing API access in Python at this link