JRakNet ist eine Netzwerkbibliothek für Java, die das UDP-basierte Protokoll RakNet implementiert. Diese Bibliothek sollte für Minecraft-Server und -Clients verwendet werden, kann aber dennoch problemlos zum Erstellen von Spielservern und Clients für andere Videospiele verwendet werden. Sie können auch die JavaDocs lesen
Protokollinformationen | Version |
---|---|
Aktuelles Protokoll | 10 |
Unterstütztes Serverprotokoll | 10 |
Unterstütztes Client-Protokoll | 10 |
Wenn Sie eine Release-Version verwenden, verwenden Sie diese Abhängigkeit:
< dependency >
< groupId >com.whirvis</ groupId >
< artifactId >jraknet</ artifactId >
< version >2.12.3</ version >
</ dependency >
Wenn Sie eine Snapshot-Version verwenden möchten, verwenden Sie dieses Repository und diese Abhängigkeit:
< 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 >
Das Erstellen eines Servers in JRakNet ist äußerst einfach. Alles, was zum Erstellen eines Servers erforderlich ist, finden Sie hier:
// 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 ();
Dies ist ein einfacher RakNet-Server, der über Minecraft getestet werden kann, indem man auf die Registerkarte „Freunde“ geht, wo der Server erscheinen sollte. Sobald der Server angezeigt wird, sollten Sie darauf klicken können, um die Verbindung und die Paket-Hooks auszulösen.
Unter Windows 10 können Anwendungen, die standardmäßig das Universal Windows Program Framework verwenden, keine Verbindung zu Servern herstellen, die auf demselben Computer wie sie ausgeführt werden. Diese lästige Funktion kann durch einfaches Erstellen eines UniversalWindowsProgram
Objekts deaktiviert werden, wobei der erste und einzige Parameter die ID der Anwendung ist, mit der Sie eine Verbindung herstellen möchten. Ein Beispiel wäre Microsoft Edge, nämlich Microsoft.MicrosoftEdge_8wekyb3d8bbwe
. Um die Loopback-Ausnahme zu aktivieren, wäre also nur Folgendes erforderlich:
UniversalWindowsProgram microsoftEdge = new UniversalWindowsProgram ( "Microsoft.MicrosoftEdge_8wekyb3d8bbwe" );
if (! microsoftEdge . setLoopbackExempt ( true )) {
System . err . println ( "Failed to enable loopback exemption for Microsoft Edge" );
}
Ganz einfach, oder? Sie können dies gerne implementieren, wenn Sie auf einem Nicht-Windows 10-Computer arbeiten. Diese Implementierung wurde speziell dafür entwickelt, dass sie auch dann funktioniert, wenn auf Ihrem Computer nicht Windows 10 ausgeführt wird oder Windows PowerShell nicht installiert ist. Wenn Sie nicht auf einem Windows 10-Computer mit installierter Windows PowerShell arbeiten, gibt es natürlich keine Möglichkeit, richtig zu überprüfen, ob Ihre Anwendung von der Loopback-Ausnahme ausgenommen ist. Ich bin mir jedoch sicher, dass das Problem bei Bedarf mit der Hilfe eines Benutzers gelöst werden kann, der Windows 10 mit Windows PowerShell hat.
Auch das Erstellen eines Clients in JRakNet ist sehr einfach. Der zum Erstellen eines Clients erforderliche Code ist hier zu sehen:
// 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 );
Dies ist ein einfacher RakNet-Client, der versucht, eine Verbindung zum Haupt-LBSG-Server herzustellen. Wenn es verbunden ist, wird die Verbindung geschlossen.