呪いのMinecraftの作り方 Part1 バージョン名を決めよう、タイトルやボタンを改造しよう 

前回→ https://qiita.com/Yon4800/items/2c0ad02032bfe1349f93

はいどうもよんぱちさんです。
今回は、バージョン名決めと、タイトルの一部を作っていきます。
タイトルはいろいろいじり方があるのですが、(昔のバージョン風にしたり、色を変えたりなど)今回はパノラマをいかしたいじり方をしてみましょう。
タイトルとバージョン名は実は一番重要な部分です。この呪いのMinecraftの雰囲気を出すのに重要な要素です。一緒に頑張っていきましょう
~~伝わるか不安です...:neko_cry:あとこの時夜に書いてたから疲れてる:neko_tired2:~~

とその前に...
## ディレクトリ構造
まずはディレクトリ構造について知りましょう。
* `./minecraft/src/net/minecraft/client/` ←メイン関数(主の部分)
* `./minecraft/src/net/minecraft/isom/` ←わかんない(おい)
* `./minecraft/src/net/minecraft/src/` ←マイクラのエンティティやGUI、動作などを設定したり動かしている部分
* `./minecraft/src/` にある `./minecraft/src/net/*` `./minecraft/src/net/argo/*` **以外**のディレクトリ ←画像とかGUIや設定ファイルとかいろいろ入っているところ

こんな感じです。
今回は
* `./minecraft/src/net/minecraft/src/`
* `./minecraft/src/title/`
* `./minecraft/src/gui/`
あたりをいじるかもです。~~自信持とう()~~

## 1. バージョン名を決める
まず、バージョン名を決めましょう。これを決めないと何も始まりません:neko_tired2:(初めに書き忘れてたのは内緒)
※注意: VSCodeでプロジェクトを開いている場合は、フォルダ名を変えるのでもしVSCodeに何も表示されなくなったらもう一度フォルダを入れなおしてください。
### バージョン名の例として、どういうのがある？
~~正直私は詳しくないので適当なことしか言えませんが、~~
例えば、
* 存在しないバージョン
    * 1.7.20
    * Beta 1.8.2
    * Beta 1.10

※こちらは、公開されなかったバージョンとして名前を付けられることが多いです。
* Error系
    * Error 422
    * Error 437
    * Error 845
    * など

※こちらはいろいろおかしくなってしまったバージョンとして名前を付けられることが多いです。
* その他系
    * Delta 0.0.0
    * 6.6.6
    * Chaos Edition
    * 1.1.0 Multi Player Fix

※こちらは謎のバージョンやテストのバージョンなどにつけられることがありますが、正直基準はよくわかりません。
という感じで、いろいろありますが、個人的には自由に決めていいと思います。
例を挙げると、私のバージョンは
* Beta1.2_78 (謎のバージョン~~いろいろ適当でやばすぎる~~)
* Beta1.8.1 Pre-Release 4 (存在しないバージョン)
* Java.4444.VoidException (謎のエラーにより生まれたバージョン~~正直微妙~~)
* 1.2.3 Entity Fix (エンティティのテストのバージョン？)
* Error 888 (ネット上で見つかった謎のバージョン)
* Error 283 (まだ決めてない)

みたいな感じで決めています。
例えば、存在しないバージョンであれば、``1.2.XX``の`XX`のこれある？とほかの方に聞いてみて作るか、もしくは数字を盛ってしまうのもありだと思います。1桁はもう埋まっているかもしれませんが、2桁であればまだ空きはあると思います。もしくは``1.2.X_X``みたいにしてしまうのもありかもです。
Error系であれば、`Error XXX`の`XXX`の部分が被らなければいいですし、4桁であればまだかなり空きはありそうです。
また、その他であれば、本当に自由に決められると思います。
という感じで、いろいろあるので、自分好みの名前を付ければいいです。
かぶっているかは、他の方に聞いたり、調べたりしてください。

名前が決まったら、RetroMCPが入っているフォルダ名を変えましょう。(RetroMCPはいったん閉じましょう。)
間違えてダウンロードフォルダとかでやってしまった方はRetroMCPをフォルダに移動してもう一度やってみてください。
名前を変えたらVSCodeで再度読み込んでください。

## 2. タイトル画面を作ろう
はい、長らくお待たせしました。
タイトル画面を作りましょう。
タイトル画面をいじるクラスファイルは、
* `./minecraft/src/net/minecraft/src/GuiMainMenu.java`
* `./minecraft/src/net/minecraft/src/GuiButton.java`
* `./minecraft/src/net/minecraft/src/GuiScreen.java`

です。
GuiScreenは全体的なGUIをいじるクラスファイルです。(今回はいじりません！)
GuiButtonは全体的なボタンをいじるクラスです。(ほかのすべてのボタンが変わります。)
GuiMainMenuはメインメニューのクラスで、GuiScreenクラスが**継承**されています。(Javaの継承については調べれば出ると思います。)

というわけで、そこをいじるわけですが、ソースをここに出してしまうと、普通にあまりよくないです。
なので、ソースは出さずに、この関数はなにかを書いておきますね(関数も調べてください。)

**※Javaが初めての方へ:** 必ず変数の最後に`;`を忘れずに！(`}`とかの関数やクラスの閉じカッコのところには付けませんが...(配列宣言のときとか1行のときはつける))
if文(条件分岐)やfor文(ループ)についても調べてみてください。ここではその文の説明は紹介しません。質問されても答えませんのでよろしくです。
`*`はすべて当てはまるという意味です。

* GuiMainMenu: 
    * `GuiMainMenu`
        * グローバル変数設定です。特にいじる必要はないです
    * `updateScreen`
        * 画面を更新するときに変える値
    * `initGui`
        * スプラッシュテキストを変えたり、ボタンを宣言、変更したりできます(ボタンをなくしたりもできると思います。)
    * `actionPerformed`
        * ボタンを押したときの動作を変えることができます。どのボタン化は`initGui`を見ればわかると思います
    * `drawPanorama`
        * ここでパノラマをいじることができます
    * `rotateAndBlurSkybox`
        * パノラマのぼかしや回る部分です
    * `renderSkybox`
        * 背景の描画のメイン関数です
    * `drawScreen`
        * タイトルを描画するメインの関数です。ここでバージョン名やCopyrightなどの文章を設定できます
* GuiButton
    * `GuiButton`
        * グローバル変数設定です、いじる必要はないです
    * `getHoverState`
        * ボタンを押したときやかざしたときに変わる変数です。ここはいじらないほうがいいです
    * `drawButton`
        * ボタンを描画するメインの関数です。ここでボタンの描画方法などを変更できます
    * `mouseDragged` `mouseReleased` `mousePressed`
        * マウスを何かしたときのイベント関数です。ここも特にいじる必要はないと思います

こんな感じです。
はじめはソースを見て、ここをいじればこうなるんだなみたいな感じにやればいいと思います。
ただ、これだけ見てもわかんない！という方もいると思うので、ここをいじればこうなるというのを紹介します。
* `GuiMainMenu`
    * `updateScreen`
        * `++this.panoramaTimer;`→`this.panoramaTimer += 20;`
        * パノラマが早くなります。20という値は随時いじってください
    * `initGui`
        * `this.controlList.add(new GuiButton(*)` のどれかをコメントアウト(`//`と文の先頭に入れる。)
        * 今回は`menu.mods`を消します
        * ボタンが消えます
    * `actionPerformed`
        * `if(var1.id == 4) {*}`の中(`*`)の文をコメントアウト
        * ボタンを押しても何も起きなくなります
    * `drawPanorama`
        * `var4.setColorRGBA_I(16777215, *)` の`16777215`という値を変えると
        * パノラマの色が変わります。どの色になるかは、ChatGPTで調べてください。例えば赤であれば、`16711680`です
    * `drawScreen`
        * `this.drawString(this.fontRenderer, "Minecraft 1.2.5", 2, this.height - 10, 16777215);` の`Minecraft 1.2.5`の文を変える
        * タイトルのバージョン名が変わります
* `GuiButton`
    * 五行目あたりに`import java.util.Random;`を追加(ランダムな値を出す変数を使えるようにするもの)
    * `drawButton`
        * `GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);` を `GL11.glColor4f(new Random().nextFloat(), new Random().nextFloat(), new Random().nextFloat(), 1.0F);` に
        * ボタンの色が変わる

そして、出来上がったら、ファイルを保存して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2718984/71cdd6a6-85af-4717-9c93-e12e49e2d233.png)
というボタンを押します。
このボタンを押すことにより、先ほどの変更が適用されます。


これをした結果がこちらです。
![2025-05-04_09.36.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2718984/9e9a9555-4924-4e88-87ac-7eb6566e0b49.png)
だいぶ呪いのMinecraftぽくなりましたね！

あと、ロゴ画像を変えたい場合は、
`./minecraft/src/title/mclogo.png` を画像編集してください。
画像編集に関しては何も言いません。自分で調べてやってください。
関係ないところではありますが、`./minecraft/src/title/mojang.png` を編集すると起動したときの画面をいじることができます。

慣れてきたら、
タイトル以外にも、

`./minecraft/src/net/minecraft/src/GuiScreen.java`の`drawBackground`の`var2.setColorOpaque_I(4210752);`の`4210752`の値を変えることにより、バックグラウンドの色を変えることができます。当然Random値も使えます。Random関数の使い方は自分で調べてください。
また、`./minecraft/src/gui/background.png`の画像を編集することにより、ほかの背景にすることも可能です。例えばの話、`this.mc.renderEngine.getTexture("/gui/background" + new Random().nextInt(4) + ".png")`という感じにして、バックグラウンドの画像を4つ作って、`background0.png`、`background1.png`、...`background3.png`みたいな画像を作って、そうしてコンパイルすると、バックグラウンドがすごいことになるのでチャレンジャーはやってみてください:thinking:(難しいですが)

今回はここまでです。次回もよろしくです。
次回はゲーム内のGUIを作っていきます。

※こちらの記事はこの改造を推進するものではありません。何があってもすべて自己責任です。私は何があっても一切保証しません