>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
Java

Minecraftの乱数生成を解析して、好きなエンチャントを自在に得る方法

一見、Minecraftはシンプルなブロック積み上げサンドボックスゲームに見えます。しかし実際には、ゲームの内部ではワールド生成、モブスポーン、アイテムドロップを制御する数学的アルゴリズムのスタックが動作しています。長年にわたり、プレイヤーはエンチャントテーブルでのアイテムエンチャントを純粋なルーレットだと考えていました。蓄積した経験値30レベルを使い、「シルクタッチ」や「効率強化V」を得られることを期待しながら、ゲームは「耐久力III」程度の控えめなエンチャントしか提供してくれません。

数学をだますことはできませんが、計算することは可能です。各キャラクターには、ワールドにスポーンした時または各エンチャント後に、非表示の数値——XPシード——が割り当てられます。それがテーブルが提供するエンチャントオプションを決定するPrecisely what determines which enchantment options the table will offer именно это и определяет, какие варианты зачарования предложит стол. EnchantmentCrackerリポジトリは、開発者Earthcomputerによって、この隠れたパラメータをデコードし、運任せの要素を取り除くために作成されました。

エンチャントシード解析の仕組み

Minecraft Java Editionは、疑似乱数生成に標準的な線形合同生成法(LCG)を使用しています。エンチャントテーブルインターフェースを開くと、ゲームは現在のXPシードを取り、算法を通じて処理し、3つの利用可能なオプションを表示します。

各エンチャントオプションは、PRNGの内部状態に関する情報を私たちに提供します。ユーティリティの動作は以下の通りです:

  1. アイテムをエンチャントテーブルに置き、画面に表示されるヒント(必要なレベルとツールチップ内のエンチャント名)をプログラムに入力します。
  2. 安易な1レベルエンチャントを実行するか、アイテムを本に投げてシードをシフトさせます。
  3. 新しい変更されたデータをユーティリティに入力します。
  4. ツールは数学的状態フィルタリングを使用して、キャラクターの正確な32ビットXPシードを計算します。

シードが解析されると、数学的不確実性は消えます。プログラムは将来すべてのエンチャントの正確な順序を知ります。希望するエンチャントが次の試行に含まれていない場合、ユーティリティは正しいエンチャントセットがテーブルの1行目に表示されるまでに「スキップ」する必要がある乱数の数を正確に計算します(例えば、アイテムを投げたり防具立てを操作したりすることで)。

著者による公正な免責事項

リポジトリのREADMEには、著者自身からの予想外の警告が記載されています。Earthcomputerは直接こう書いています:このスタンドアロンプログラムを使用する必要性は、おそらくあなたにはないでしょう。

理由は、ゲームインターフェースから別のウィンドウに数字を手動で入力するプロセスが面倒だからです。1桁でも間違えると、計算全体を最初からやり直す必要があります。そのため、著者はFabricクライアントMODという便利な代替手段を作成しました。MODはクライアントのメモリから直接データを読み取り、コマンド経由でプロセスを自動化します。

では、なぜスタンドアロンのEnchantmentCrackerリポジトリが必要なのでしょうか?

第一に、アルゴリズムのリバースエンジニアリングとPRNG解析をJavaのスタンドアロンデスクトップGUIアプリケーションにパッケージ化する方法の優れた学習例であるためです。第二に、すべてのサーバーが修正済みクライアントでの参加を許可しているわけではありません。あらゆるサードパーティMODがアンチチートによって追跡されている場所でプレイしている場合、外部ユーティリティが唯一の安全なオプションとして残ります。

ソースからのビルドと実行

プロジェクトはJavaで記述されており、Gradleビルドシステムを使用しています。内部には動作するSwingベースのグラフィカルインターフェースがあります。

プレビルドされたリリースを実行するには、Javaのインストールが必要です。releasesセクションからアーカイブをダウンロードし、フォルダ内の実行可能ファイルを実行します:

  • Windowsでは、ファイルです。
  • LinuxおよびmacOSでは、スクリプトです。

ソースからプロジェクトを自分でビルドしたい場合は、手順は標準的です:

実行可能なスクリプトを含む準備完了のzipアーカイブがディレクトリに表示されます。最初にビルドせずにアプリケーションを直接実行することもできます。

コードを詳しく調べたい人のために、プロジェクトはIntelliJ IDEAまたはEclipseに簡単にインポートできます。このプロジェクトは複雑なサードパーティライブラリに依存していないため、構造は透明です。

ローカライゼーションとプロジェクトへの貢献

リポジトリは、フォルダ内の標準的なJavaファイルによる多言語サポートを使用しています。開発者は英語しか知らないことを正直に認めており поэтому翻訳を維持することはできません。

オープンプロジェクトへの最初のプルリクエストを作成する簡単な方法を探しているなら、ローカライゼーションの追加または翻訳の修正が優れたエントリーポイントです。著者は、Gitでの作業経験がない人のために、通常のIssues経由でも翻訳を受け入れる意向です。

ソースコードを勉強すべき人は?

EnchantmentCrackerは、興味深い背景を持つコンパクトですが完全なプロジェクトです。ゲームコードの数学的脆弱性が、プレイヤーや研究者のための実用的なツールに変わる様子を示しています。

プロジェクトのコードは、以下に興味があるなら見る価値があります:

  • ゲーム内の疑似乱数生成子がどのように分析され、非匿名化されるか。
  • Gradle経由でビルドされるクロスプラットフォームJavaアプリケーションの構造がどのように整理されているか。
  • ベースJavaでのローカライゼーション交換可能なデスクトップユーティリティ実装がどのようなものか。

プレイヤー数百万のゲームであっても、乱数メカニックは、どこを見ればよいか知っていれば、厳密な数学的計算の対象となります。

関連プロジェクト