JRakNet は、UDP ベースのプロトコル RakNet を実装する Java 用のネットワーク ライブラリです。このライブラリは Minecraft のサーバーとクライアントに使用することを目的としていますが、他のビデオ ゲームのゲーム サーバーとクライアントを簡単に作成するためにも使用できます。 JavaDocs も読むことができます
プロトコル情報 | バージョン |
---|---|
現在のプロトコル | 10 |
サポートされているサーバープロトコル | 10 |
サポートされているクライアント プロトコル | 10 |
リリース バージョンを使用している場合は、次の依存関係を使用します。
< dependency >
< groupId >com.whirvis</ groupId >
< artifactId >jraknet</ artifactId >
< version >2.12.3</ version >
</ dependency >
スナップショット バージョンを使用したい場合は、次のリポジトリと依存関係を使用します。
< 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 >
JRakNet でサーバーを作成するのは非常に簡単です。作成に必要な作業はすべてここで確認できます。
// 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 ();
これは単純な RakNet サーバーであり、サーバーが表示される [フレンド] タブに移動することで、Minecraft を通じてテストできます。サーバーが表示されたら、それをクリックして接続とパケット フックをトリガーできるようになります。
Windows 10 では、デフォルトでユニバーサル Windows プログラム フレームワークを使用するアプリケーションは、同じマシン上で実行されているサーバーに接続できません。この迷惑な機能は、接続したいアプリケーションの ID を最初で唯一のパラメータとしてUniversalWindowsProgram
オブジェクトを作成するだけで無効にできます。例としては、 Microsoft.MicrosoftEdge_8wekyb3d8bbwe
である Microsoft の Edge が挙げられます。したがって、ループバックの除外を有効にするには、これだけで済みます。
UniversalWindowsProgram microsoftEdge = new UniversalWindowsProgram ( "Microsoft.MicrosoftEdge_8wekyb3d8bbwe" );
if (! microsoftEdge . setLoopbackExempt ( true )) {
System . err . println ( "Failed to enable loopback exemption for Microsoft Edge" );
}
シンプルですよね? Windows 10 以外のマシンで実行している場合は、これを自由に実装してください。この実装は、マシンで Windows 10 が実行されていないか、Windows PowerShell がインストールされていない場合でも機能するように特別に作成されました。もちろん、Windows PowerShell がインストールされた Windows 10 マシンを使用していない場合、アプリケーションがループバックを免除されているかどうかを適切に確認する方法はありません。ただし、必要に応じて、Windows 10 と Windows PowerShell を使用しているユーザーの助けを借りて、この問題を解決できると確信しています。
JRakNet でのクライアントの作成も非常に簡単です。クライアントの作成に必要なコードは次のとおりです。
// 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 );
これは、メイン LBSG サーバーへの接続を試みる単純な RakNet クライアントです。接続されている場合は、接続を閉じます。