Client Setup
Client is used to communicate with StarGate server. In Minecraft environment, we know clients as plugin for server. Stargate comes with default implementation of clients for:
- PocketMine-MP 3 (StarGate-Atlantis, PHP)
- NukkitX (StarGate-Universe, Java)
Plugin Configuration
Server clients use same configuration file:
connections
map is used to represent the map of connections. One plugin can create several clients and connect to more different servers.- If debug is enabled
debug
messages will be shown in console. - Each packet can have different level of logging. Packets which have equal or higher log level value
logLevel
option will be logged in console. - When
autoStart
option is enabled all clients will be started and try to connect once plugin enables. - Option
tickInterval
is the interval in ticks between each tick when client will process handled buffer and decode packets. The smaller interval will be given, the faster will packets be handled. This option is used only in StarGate-Atlantis plugin.
# Supports more connections
connections:
lobby1:
address: 192.168.0.50
port: 47007
password: 123456789
# Enable debug logger
debug: true
# Change log level to log packets in debug mode.
logLevel: 0
# Default client will be used if no clientName specified in api functions
defaultClient: "lobby1"
# Start clients after plugin is enabled.
autoStart: true
# Interval in ticks to receive data from connection
tickInterval: 2
Session Events
ClientCreationEvent
: Called once new StarGate Client is created (usually when StarGate-Universe plugin is enabled). It can be used to adjust ProtocolCodec. Note that if your plugin is loaded after StarGate-Universe your event listener won't handle this event.ClientConnectedEvent
: Called once new session is created. At this point session is NOT authenticated.ClientAuthenticatedEvent
: Called once session is successfully authenticated using simple password (ServerHandshakePacket
is received). You can set custom packet handler to session when this event is called.ClientDisconnectedEvent
: Called once session has been disconnected or closed.
Plugin Methods
Plugins for all platforms expose these common methods:
getClient(String) : StarGateClient
returns the client matched by name.getDefaultClient() : StarGateClient
returns default client as set in config.getClientsCopy() : StarGateClient[]
returns list of currently created clients. Modifying this list will not modify an original list. Method is calledgetClients()
in StarGate-Atlantis plugin.setLogLevel(int)
method is used to change log level of all clients.getLogLevel() : int
returns currently used log level.transferPlayer(Player, targetServer, clientName)
is supposed to sendTransferPacket
to StarGate server (and transfer player to another downstream). WhenclientName
is null, default client will be used. IfclientName
does not match any client session, packet won't be sent.serverInfo(serverName, selfMode, clientName : CompletableFuture
method is used to retrive information of another downstream server. IfselfMode = true
response data of whole proxy will be rest beack. IfclientName
does not match any client session, packet won't be sent, null will be returned. Method returns future which is completed once response if received. When using StarGate-AtlantisPacketResponse
is returned. Note that some StarGate server implementations might not support this method.
StarGate-Universe
StarGate Universe contains Java client implementations. Currently supporting only NukkitX client.
NukkitX
Use Maven dependency in your plugin (see below). You should probably include StarGate Common dependency aswell.
<dependency>
<groupId>alemiz.sgu.nukkit</groupId>
<artifactId>sgu-nukkit</artifactId>
<version>2.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
You should also include StarGate-Universe
in plugin.yml
dependencies list.
Latest build can be found on Waterdog jenkins server, artifacts are uploaded to Waterdog repository server.
To access plugin instance we can use StarGateUniverse plugin = StarGate.getInstance()
.
If you have disabled autoStart
option in config, you can start all clients like below:
StarGateUniverse plugin = StarGate.getInstance()
for (StarGateClient client : plugin.getClientsCopy()){
// You can adjust ProtocolCodec here
client.start();
}
StarGate-Atlantis
StarGate Atlantis is client implementation based on PHP created for PocketMine-MP (currently version 3 only). To make your IDE index plugin classes you can use phar
file obtained from Poggit and include it as dependency.
To access plugin instance we can use $plugin = StarGateAtlantis::getInstance()
.
If you have disabled autoStart
option in config, you can start all clients like below:
$plugin = StarGateAtlantis::getInstance()
foreach ($plugin->getClients() as $client){
// You can adjust ProtocolCodec here
$client->connect();
}