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:
connectionsmap is used to represent the map of connections. One plugin can create several clients and connect to more different servers.- If debug is enabled
debugmessages will be shown in console. - Each packet can have different level of logging. Packets which have equal or higher log level value
logLeveloption will be logged in console. - When
autoStartoption is enabled all clients will be started and try to connect once plugin enables. - Option
tickIntervalis 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 (ServerHandshakePacketis 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) : StarGateClientreturns the client matched by name.getDefaultClient() : StarGateClientreturns 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() : intreturns currently used log level.transferPlayer(Player, targetServer, clientName)is supposed to sendTransferPacketto StarGate server (and transfer player to another downstream). WhenclientNameis null, default client will be used. IfclientNamedoes not match any client session, packet won't be sent.serverInfo(serverName, selfMode, clientName : CompletableFuturemethod is used to retrive information of another downstream server. IfselfMode = trueresponse data of whole proxy will be rest beack. IfclientNamedoes 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-AtlantisPacketResponseis 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();
}