Minecraftのハッククライアントの作り方 (1.12.2) – モジュール編

注意事項

  • ゲームでのチート行為は、時には犯罪となりえます。チートが禁止されているサーバーでは使用せず、自分のワールドや、2B2Tといったチートが許可されているサーバーでのみ使用してください。また、この記事のコードを使用する際に生じた損害について、一切の責任を負いかねます。

こんにちは、Nodokaです。
今回は、前回に引き続きマイクラのハッククライアントを作成していきます。

前回の記事をまだ読んでない方は下記リンクからどうぞ
Minecraftのハッククライアントの作り方 (1.12.2) – 環境構築 | 閑々たるサイト (kankantari.net)

今回は第二回、モジュールということで、モジュールのシステムと簡単なモジュールを作成していきます。

今回のコードもGithubにアップロードしてあります。
リンクは記事の最後にありますので、ぜひ活用ください。

モジュールの基底クラス

すべてのモジュールの親となるクラスを作成します。

まず、メインファイルがあるところから、features.module というパッケージを作成し、Category.java、Module.javaを追加します。

次に、Category.javaを編集していきます。Category.javaは、カテゴリーのenumを記述するだけです。
例↓

次に、Module.javaを編集していきます。これは全てのモジュールの基底クラスとなります。

まずは、必要なメンバ変数として以下を用意します。

nameはモジュール名、categoryはモジュールの属するカテゴリ、istoggledは有効か無効かを表すもの、keybindはモジュールのバインドキーです。

次に、コンストラクタを宣言します。

引数を各変数に代入するだけ。かんたん。

次に、モジュールに有効にした時と、無効にした時の共通の処理を書いていきます。

MinecraftForge.EVENT_BUS.register() は、イベントハンドラの登録で、unregiser は、その逆です。

誤ってメソッド名を大文字から始めてますが、C#の癖です()

次に、有効にした時と無効にした時で、各モジュールで異なる処理を行うためのメソッドを用意しておきます。
これは、各モジュールでオーバーライドします。

次に、モジュールのトグルをする関数を作ります。

モジュールが有効ならば、モジュールを無効にする際の処理を行ってistoggledをfalseにする。
無効ならば、モジュールを有効にする際の処理を行ってistoggledをtrueにするといった感じです。

これでモジュールの基底クラスの最低限ができました。

MyFirstModule

モジュールの基底クラスができたので、それを利用してモジュールを作成していきます。
トグルができているか確認するため、有効にしたら「enabled」と、無効にしたら「disabled」というメッセージをチャットに送信するモジュールを作成します。

先ほどと同じパッケージに、MyFirstModule.javaを追加します。

Moduleクラスを継承して、以下のようにクラスとコンストラクタを宣言します。

キーバインドのキー指定には、lwjglのライブラリを使っています。この場合、「i」キーを押すとこのモジュールが有効になります。

基底クラスのonEnable()とonDisable()をオーバーライドして、有効時と無効時の処理を記述します。


ModuleManagerの実装

全てのモジュールを管理するモジュールマネージャーを実装していきます。

まず、先ほどと同じパッケージ内にModuleManager.javaを追加します。

すべてのモジュールを格納するリストを作成します。

コンストラクタを作り、このリストにモジュールを追加します。

これから新たにモジュールを作成する場合も、ここに追加してください。

これで、ModuleManagerを呼び出すと、全てのモジュールをロードすることができるようになりました。
クライアント起動時にModuleManagerを呼び出すために、メインファイルに下記を追記します。

staticにするのは、何度も同じものを呼び出せるようにするためです。

キーバインドの実装

各モジュールにて設定したキーを押すとtoggleされるように、キーバインドを実装します。

メインファイルのあるところからeventというパッケージを作成し、PlayerKeyInputEvent.javaを追加してください。

入力されたキーを取得するには、MinecraftForgeのKeyInputEventというイベントを使用します。
これを使うことで、プレイヤーが入力したキーを簡単に取得することができます。

staticにしているのはミスです。外すようにお願いします。
関数名は何でもOKです。

そして、ワールドとプレーヤーが存在するか、キー入力がされているか、という条件を指定し、全てのモジュールを参照します。
モジュールの参照には、メインファイルに宣言しておいたModuleManager moduleを使用します。すべてのモジュールがリストに格納されているので、ループを回すだけで簡単に参照することができます。
入力されたキーを取得して、各モジュールにて設定しておいたキーバインドと一致するものがあれば、そのモジュールのtoggle()を実行します。

例↓

複数のモジュールに同じキーバインドを設定したい場合は、returnを外してください。

最後に、再びメインファイルに戻ってイベントハンドラを登録します。


お疲れさまでした!これでモジュールの機構が完成しました!

動作確認

前回の記事同様、Gradleタブのfg_runs/runClientを実行してください。

起動したら、ワールドに入って、MyFirstModuleのキーバインドに指定したキーを押してください。
この記事の場合は、「i」キーです。

このように、チャットにメッセージが送信されたら成功です!

最後に

今回は、マイクラハッククライアント作成の第二回、モジュールの機構について説明しました。
今回作成したモジュールは簡単なものですが、また後の回にてKillAuraなどのモジュールも実装していきます。

次回は、ティックイベント(毎ティック実行されるイベント)を実装します。

今回までのサンプルコードは、下記リンクにあります。
Nodoka4318/OnigiriClient at day2 (github.com)

最後まで読んでいただきありがとうございました!

タイトルとURLをコピーしました