Minecraftのハッククライアントの作り方 (1.12.2) – HUD編

注意事項

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

お久しぶりです。
ブログの更新が途絶えていましたが、今回もMinecraftのクライアント制作の続きをやっていきます。
自分がどんなコードを書いたか忘れたなんて言えない

前回の記事をまだ読んでないという方はコチラから↓
マイクラのハッククライアントの作り方 (1.12.2) – ティックイベント編 | 閑々たるサイト (kankantari.net)

今回は簡単なGUIとして、クライアント名の表示と有効化されたモジュールのリスト表示(ArrayList)を作っていきます。
完成形はこんな感じ↓

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

実装

まずは、featuresパッケージに新しくuiパッケージを追加し、Hudクラスを作成してください。

minecraftのGuiScreenを継承し、そのクラスにSubscribeEvent属性を付与したhudメソッドを追加します。これで、minecraftの描画処理が行われる際にこのメソッドも実行されます。

GuiScreenを継承したHudクラス
SubscribeEvent属性を付けたhudメソッド

この記事で実装するHUDの描画に関する処理は全てこのメソッドに書いていきます。

クライアント名の表示

まずは、画面左上のクライアント名の表示を作っていきます。

ScaledResolution, FontRendererを変数に置きます。

ScaledResolutionは画面の解像度を得るために使い、FontRendererは画面上に文字を描画するために使います。
ScaledResolutionは、この次にArrayListを作るときに利用します。

右上にクライアント名を表示する処理を書きます。
テキスト描画イベントが呼び出された際に実行されます。

クライアント名描画

表示させたいテキストは適宜変更してください。
第二引数はx座標、第三引数はy座標、第四引数は文字色を指定しています。

ちゃんと動作するか確認してみましょう。

メインファイル(OnigiriClient.java)に新しくHudのインスタンスを作成し、eventbusに結び付けます。

メインファイルにインスタンス追加

正しく実装できていれば、下の画像のようになるはずです。↓

クライアント名が正しく表示されている
ArrayList

次にArrayListを作っていきます。
ArrayListは有効化されたモジュールのリストです。

基本的にはやることは先ほどと変わりません。
モジュールのリストから現在有効化されているものだけを取り出して、それぞれy座標をずらして描画します。

ArrayList描画処理
  • ちょっとだけ解説

int y = 1; : y座標初期値
for (Module m : OnigiriClient.module.modules) { : モジュールの参照
if (m.istoggled) { : 有効化されているか確認
renderer.drawString() : 文字描画
resolution.getScaledWidth() - renderer.getStringWidth(m.name) : (現在の画面の幅) – (文字の幅)を計算して、文字がちょうど画面の右端に来るようにしています
y += renderer.FONT_HEIGHT + 1; : y座標を文字の高さ分ずらす

x, y座標を変えることで、ArrayListを右上だけでなく右下、左上、左下にも移動させることができます。
やってみたい人はぜひ試してみてください。

正しく実装できていれば、下の画像のように表示されるはずです。

ArrayListが正しく表示されている

モジュールをトグルしてみて画面が更新されるかも確認してください。

おまけ

このままだと、モジュール数が多くなった時にArrayListの表示が煩雑になってしまうので、モジュールの名前の長さでソートしていきます。

まずは準備として、Module.javaに下のメソッドを追加してください。

Module.javaを編集

働きは名前の通りです。

ArrayListの描画処理のプログラムに下の処理を付け加えてください。

文字列長でソート処理

モジュールのリストをモジュールの名前の長さでソートする処理です。
少し強引ですが、今のところモジュールのリストの並び順は動作に影響しないので許してください()
それが気になる人は、モジュールの名前を一度別のリストに置いてから処理をするのがいいかもしれません。

最後に

今回もグダってしまった

今回は、マイクラハッククライアント作成の第四回、簡単なHUDを作りました。

次回は、コマンドの機構を実装していきます!

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

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

お知らせ

本来はモジュールの例として簡単なKillAuraまで作成する予定でしたが、もしかするとクライアント作成についての記事は次回で最後になるかもしれないです。
というのも、このコード自体かなり前に書いたもので自分が何をやったか覚えていない

また気が向いたら書きます()

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