はじめに
突然ですが、皆さんは「ScriptAPI」をご存じでしょうか?
「ScriptAPI」というのは、マインクラフトの統合版において、プログラミング言語(Javascript)を用いてゲームシステムをカスタマイズできる機能のことを指します。Javascriptの知識さえあれば、マインクラフトのシステムをある程度いじることができるんです。以下は、その一例です。
これは、「プレイヤーがジャンプするとkillコマンドを発動する」というスクリプトです。このようにして、ゲームシステムに干渉し、カスタマイズすることができるわけですね。
本記事では、この「ScriptAPI」を記述するための準備段階として、環境構築について詳細に解説します。本記事を読むことで、上記のようにゲームシステムをカスタマイズし、オリジナルのアドオンを制作できるようになります。
手っ取り早くスクリプトを書きたい方へ
「事前準備はイヤだよ」
その気持ち、よく分かります。そのような声にお応えして、先日、「ScriptAPI」のテンプレートを作成いたしました。このテンプレートを用いることで、事前準備の段階を飛ばしてすぐにスクリプトを書き始めることができます。詳細についてはこちらの記事をご覧ください。
ここでは、テンプレートを用いることなく、ゼロから環境構築を進めたい方に向けて必要な情報を提供します。
本題
さて、「ScriptAPI」の制作を始めるにあたって、必要なものがいくつか存在します。それは以下の表に示す通りです。
必要なソフト名 | ダウンロード先 | 備考 |
Minecraft | amazon | 言わずと知れたゲームソフト。Win10版が望ましい。 |
vscode | https://code.visualstudio.com/ | コードの記述に特化したテキストエディタ(無料)。既に別のテキストエディタを持っている場合は不要。 |
node.js | https://nodejs.org/ | javascriptをパソコン上で実行するためのツール(無料)。ダウンロード後、msiファイルを実行。 |
必要なソフトのうち、Minecraftのみ有料で、その他は無料です。テキストエディタ(vscode)はなくても最悪できますが、あったほうが断然望ましいです。また、ScriptAPIはjavascriptに依存するので、このjavascriptをPC上で実行するためのnode.jsは必須です。
node.jsについては、別の方の記事ですが、こちらが非常に参考になりました。一応紹介いたします。
https://qiita.com/non_cal/items/a8fee0b7ad96e67713eb
環境構築
まず、com.mojangフォルダ内のdevelopment_behavior_packs内に移動し、新規にフォルダを作成します(名前は何でもいいです)。これがアドオンの作業フォルダとなります。com.mojangフォルダの場所については以下で説明します。既にご存じの場合は読み飛ばしてください。
com.mojangの場所
フォルダcom.mojangは
C:\Users\(ユーザー名)\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang
に存在します。エクスプローラー上で、「AppData」というファイルは隠しファイルなので、これを選択するためには、エクスプローラーの「表示」設定から隠しファイルのチェックをオンにしてください。または、「ファイル名を指定して実行」というアプリを起動し、
「%LocalAppData%\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang」
と入力することでも開けます。
このcom.mojangの中にdevelopment_behavior_packsフォルダが存在するので、これを開いて新規にフォルダを作成してください。
manifest.jsonの作成
次に、新規に作成したアドオンのフォルダ内に移動し、「manifest.json」というjsonファイルを新規作成してください。右クリックして「新規作成」→「テキストドキュメント」を選択し、作成されるファイルの名前を「manifest.json」に変更すればOKです。
「manifest.json」はこのアドオンの要項(名前やidなど)を記述したファイルで、これによってマインクラフトがアドオンを認識できるようになります。
manifest.jsonの内容
作成したmanifest.jsonは先ほどダウンロードしたvscodeなどを用いて開くことができます。これを開き、以下をコピー&ペーストしてみましょう。
{
"format_version": 2,
"header": {
"name": "スクリプトAPIのテンプレート",
"description": "これはテンプレートです",
"uuid": "b1ef9620-a18e-4fa3-bdca-f5f1d3c71c31",
"version": [0, 1, 0],
"min_engine_version": [1, 20, 0]
},
"modules": [
{
"type": "script",
"language": "javascript",
"uuid": "b1ef9620-a18e-4fa3-bdca-f5f1d3c71c32",
"entry": "scripts/main.js",
"version": [0, 1, 0]
}
],
"capabilities": ["script_eval"],
"dependencies": [
{
"module_name": "@minecraft/server",
"version": "1.10.0"
}
]
}
上のnameやdescriptionはこのアドオンの名前・説明文です。この部分をアレンジしてお使いください。また、2か所あるuuidはアドオン固有の文字列で、重複すると面倒なことになるので以下のジェネレーターを用いて生成・変更することをお勧めします。
最後のminecraft/serverのバージョン(ここでは1.10.0)ですが、以下のページを参考に変更しても良いかもしれません。執筆時点の最新は1.14.0-betaですが、ベータ版は挙動が不安定なので、安定を取る場合は1.13.0を用いることになるでしょうか。なお、ベータ版を使用する際はワールドの起動時に実験的な機能の「ベータAPI」をオンにする必要がある点に留意しましょう(ベータ版不使用時は不要)。
「@minecraft/server」のインストール
続いて、本アドオンでお世話になる「@minecraft/server」モジュールのインストールを行います。タスクバーの検索欄に「cmd」と入力してコマンドプロンプトを起動するか、vscodeのターミナルを起動しましょう。そして、
cd (作業フォルダのパス)
というコマンドを実行した後、
npm install @minecraft/server
とコマンドを打ち込めば完了です。
スクリプトを記述
いよいよ事前準備が完了しました。次に、スクリプトを記述していきましょう。
アドオンの作業フォルダ内でscriptsというフォルダを新規作成し、main.jsというjsファイルを新規作成します。このjsファイル上にスクリプトを記述していくことになります。例にもれず、このjsファイルはvscodeなどのテキストエディタで開けばOKです。
main.jsを開けたら、試しに以下のスクリプトを書いてみてください:
import * as server from '@minecraft/server';
server.system.runInterval(ev => {
server.world.sendMessage("Hello!");
})
これを保存し、マインクラフトを起動してみましょう。そしてこのビヘイビアパックを有効化してワールドに入ると、Hello!というメッセージが常時送信されると思います。これがScriptAPIの効果です。
スクリプトの書き方
前述したように、スクリプトAPIはJavascriptを基本としています。従って、Javascriptを理解しているとスクリプトの記述が容易になります。一応、Javascriptの習熟にあたっての良書を紹介します。
また、スクリプトAPIにおける教科書的存在が公式ドキュメントです。こちらは非常に参考になるので、目を通しておいて損はないでしょう(言語が英語しかない点に注意)。
また、ScriptAPIにおけるよく使うフレーズについては以下でまとめています。これらのフレーズを組み合わせることで効率的にスクリプトを書くことができます。
パックのアイコン
このアドオンのアイコンを設定していない場合、紫と黒のテクスチャーが自動で割り当てられます。これは些か不便ですので、特に配布する場合、パックのアイコンを設定することが望ましいです。
パックのアイコンは、アドオンのフォルダ内にpack_icon.pngという画像ファイルを配置し、その画像を設定することでカスタマイズできます。
さらなる深みへ・・・
APIScriptはここで終わりません。例えば、APIScriptを用いて独自のUIを作成することもできます。詳細についてはこちらが詳しいです。
また、ScriptAPIでアイテムの使用を詳細に制御(クールダウンや条件分岐の実装など)することもできます。こちらも併せてご覧ください。
オリジナルのコマンドを制作することもできます。詳細はこちら: