JRakNet est une bibliothèque réseau pour Java qui implémente le protocole RakNet basé sur UDP. Cette bibliothèque était destinée à être utilisée pour les serveurs et les clients Minecraft, mais peut toujours être utilisée pour créer facilement des serveurs de jeu et des clients pour d'autres jeux vidéo. Vous pouvez également lire les JavaDocs
Informations sur le protocole | Version |
---|---|
Protocole actuel | 10 |
Protocole de serveur pris en charge | 10 |
Protocole client pris en charge | 10 |
Si vous utilisez une version release, utilisez cette dépendance :
< dependency >
< groupId >com.whirvis</ groupId >
< artifactId >jraknet</ artifactId >
< version >2.12.3</ version >
</ dependency >
Si vous souhaitez utiliser une version instantanée, utilisez ce référentiel et cette dépendance :
< 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 >
Créer un serveur dans JRakNet est extrêmement simple, tout ce qu'il faut pour en créer un peut être vu ici :
// 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 ();
Il s'agit d'un simple serveur RakNet qui peut être testé via Minecraft en accédant à l'onglet "Amis" où le serveur devrait apparaître. Une fois que le serveur apparaît, vous devriez pouvoir cliquer dessus pour déclencher la connexion et les hooks de paquets.
Sous Windows 10, les applications qui utilisent par défaut le framework Universal Windows Program ne peuvent pas se connecter aux serveurs qui s'exécutent sur la même machine qu'elles. Cette fonctionnalité ennuyeuse peut être désactivée en créant simplement un objet UniversalWindowsProgram
dont le premier et unique paramètre est l'ID de l'application à laquelle vous souhaitez pouvoir vous connecter. Un exemple serait Microsoft Edge qui est Microsoft.MicrosoftEdge_8wekyb3d8bbwe
. Ainsi, pour activer l'exemption de bouclage, il suffirait de ceci :
UniversalWindowsProgram microsoftEdge = new UniversalWindowsProgram ( "Microsoft.MicrosoftEdge_8wekyb3d8bbwe" );
if (! microsoftEdge . setLoopbackExempt ( true )) {
System . err . println ( "Failed to enable loopback exemption for Microsoft Edge" );
}
Simple, non ? N'hésitez pas à l'implémenter si vous utilisez une machine non Windows 10. Cette implémentation a été spécialement conçue pour fonctionner même si votre ordinateur n'exécute pas Windows 10 ou si Windows PowerShell n'est pas installé. Bien sûr, si vous n'êtes pas sur une machine Windows 10 sur laquelle Windows PowerShell est installé, il n'y a vraiment aucun moyen de vérifier correctement si votre application est exemptée de bouclage. Cependant, je suis sûr que cela peut être résolu avec l'aide d'un utilisateur disposant de Windows 10 avec Windows PowerShell si nécessaire.
Créer un client dans JRakNet est également très simple. Le code requis pour créer un client peut être vu ici :
// 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 );
Il s'agit d'un simple client RakNet qui tente de se connecter au serveur LBSG principal. Lorsqu'il est connecté, il ferme la connexion.