JRakNet é uma biblioteca de rede para Java que implementa o protocolo RakNet baseado em UDP. Esta biblioteca foi projetada para ser usada em servidores e clientes do Minecraft, mas ainda pode ser usada para criar servidores e clientes de jogos para outros videogames com facilidade. Você também pode ler os JavaDocs
Informações do protocolo | Versão |
---|---|
Protocolo atual | 10 |
Protocolo de servidor compatível | 10 |
Protocolo de cliente compatível | 10 |
Se você estiver usando uma versão de lançamento, use esta dependência:
< dependency >
< groupId >com.whirvis</ groupId >
< artifactId >jraknet</ artifactId >
< version >2.12.3</ version >
</ dependency >
Se você deseja usar uma versão de snapshot, use este repositório e dependência:
< repository >
< id >codemc-repo</ id >
< url >https://repo.codemc.org/repository/maven-public/</ url >
</ repository >
< dependency >
< groupId >com.whirvis</ groupId >
< artifactId >jraknet</ artifactId >
< version >2.12.4-SNAPSHOT</ version >
</ dependency >
Criar um servidor no JRakNet é extremamente fácil, tudo o que é necessário para criar um pode ser visto aqui:
// Add loopback exemption for Minecraft
if (! UniversalWindowsProgram . MINECRAFT . setLoopbackExempt ( true )) {
System . err . println ( "Failed to add loopback exemption for Minecraft" );
}
// Create server
RakNetServer server = new RakNetServer ( 19132 , 10 );
server . setIdentifier ( new MinecraftIdentifier ( "JRakNet Example Server" , 354 , "1.11" , 0 , 10 ,
server . getGloballyUniqueId (), "New World" , "Survival" ));
// Add listener
server . addListener ( new RakNetServerListener () {
// Client connected
@ Override
public void onConnect ( RakNetServer server , InetSocketAddress address , ConnectionType connectionType ) {
System . out . println ( "Client from address " + address + " has connected to the server" );
}
// Client logged in
@ Override
public void onLogin ( RakNetServer server , RakNetClientPeer peer ) {
System . out . println ( "Client from address " + peer . getAddress () + " has logged in" );
}
// Client disconnected
@ Override
public void onDisconnect ( RakNetServer server , InetSocketAddress address , RakNetClientPeer peer , String reason ) {
System . out . println ( "Client from address " + address
+ " has disconnected from the server for reason " " + reason + " " " );
}
// Packet received
@ Override
public void handleMessage ( RakNetServer server , RakNetClientPeer peer , RakNetPacket packet , int channel ) {
System . out . println ( "Client from address " + peer . getAddress () + " sent packet with ID "
+ RakNet . toHexStringId ( packet ) + " on channel " + channel );
}
});
// Start server
server . start ();
Este é um servidor RakNet simples que pode ser testado através do Minecraft acessando a aba “Amigos” onde o servidor deve aparecer. Assim que o servidor aparecer, você poderá clicar nele para acionar a conexão e os ganchos de pacotes.
No Windows 10, os aplicativos que usam a estrutura do Programa Universal do Windows por padrão não conseguem se conectar a servidores em execução na mesma máquina que eles. Esse recurso irritante pode ser desativado simplesmente criando um objeto UniversalWindowsProgram
com o primeiro e único parâmetro sendo o ID do aplicativo ao qual você deseja se conectar. Um exemplo seria o Edge da Microsoft, que é Microsoft.MicrosoftEdge_8wekyb3d8bbwe
. Portanto, para permitir a isenção de loopback, seria necessário apenas o seguinte:
UniversalWindowsProgram microsoftEdge = new UniversalWindowsProgram ( "Microsoft.MicrosoftEdge_8wekyb3d8bbwe" );
if (! microsoftEdge . setLoopbackExempt ( true )) {
System . err . println ( "Failed to enable loopback exemption for Microsoft Edge" );
}
Simples, certo? Sinta-se à vontade para implementar isso se estiver executando em uma máquina que não seja Windows 10. Esta implementação foi feita especificamente para funcionar mesmo que sua máquina não execute o Windows 10 ou não tenha o Windows PowerShell instalado. Obviamente, se você não estiver em uma máquina Windows 10 com o Windows PowerShell instalado, não há como verificar adequadamente se seu aplicativo está isento de loopback. No entanto, tenho certeza de que isso pode ser resolvido com a ajuda de um usuário que possua Windows 10 com Windows PowerShell, se necessário.
Criar um cliente no JRakNet também é muito fácil. O código necessário para criar um cliente pode ser visto aqui:
// Create client
RakNetClient client = new RakNetClient ();
// Add listener
client . addListener ( new RakNetClientListener () {
// Connected to server
@ Override
public void onConnect ( RakNetClient client , InetSocketAddress address , ConnectionType connectionType ) {
System . out . println ( "Successfully connected to server with address " + address );
}
// Logged into server
@ Override
public void onLogin ( RakNetClient client , RakNetServerPeer peer ) {
System . out . println ( "Successfully logged into server" );
client . disconnect ();
}
// Disconnected from server
@ Override
public void onDisconnect ( RakNetClient client , InetSocketAddress address , RakNetServerPeer peer , String reason ) {
System . out . println ( "Successfully disconnected from server with address " + address + " for reason " " + reason + " " " );
}
});
// Connect to server
client . connect ( "sg.lbsg.net" , 19132 );
Este é um cliente RakNet simples que tenta se conectar ao servidor LBSG principal. Quando está conectado, ele fecha a conexão.