ModPE Scriptとは?
ModPE Scriptとは、Zhuowei Zhangの開発したAndroidデバイス向けアプリケーション、BlockLauncherで利用可能なスクリプトである。
これは、Minecraft PEへのブロックやアイテムの追加は勿論のこと、一部システムへの干渉も可能であり、JavaScriptという比較的容易な言語で、しかも視覚的に扱えるため、プログラミング入門にはうってつけだと思っている。
さて、今後このModPE Scriptについての解説紛いの投稿を続けるわけだが、予め言っておく事がある。
それは何か、私が作業している環境について、だ。
何せMinecraft PEの更新が重なるにつれ、BlockLauncher側で正常に処理されない増え、最新の環境では満足に作れないと言っても過言ではないからである。
さて、そんな事を言う私の作業環境だが、以下を参照してほしい。
- Android 7.0
- Minecraft ver.0.14.1
- BlockLauncher ver.1.12.6
現在Minecraft PEを利用しているユーザーであれば、この環境がどれだけ古いかがわかるだろう。
エンド?
ありませんよ?
森の館?
知らない子ですね()
と、かなり古いバージョンを前提とした話を進めたいと思っている。
Hello, world
さて、誰のせいか話が大きく外れたが、ModPE Scriptは先述のようにJavaScriptである。
JavaScriptが前提だから、言語の解説は触れない。
ってか触れたくない。
で、このModPE Scriptだが、私個人では以下のような解釈をしている。
- 何かしらのイベントが発火する。
- BlockLauncherがイベントを検知、登録された関数を呼び出す。
- ModPE Script内の指定の関数が呼び出される。
- やったぜ☆
正直こんな適当な解釈で十分だと思うし、実際これまで悩んだ事がない。
じゃあこんな解釈の上で早速プログラミングの入門オブ入門なHello, worldを作るわけだが、ぶっちゃけこいつも説明不要なレベル。
Web API環境では以下を読み込ませておけば十分Hello, worldになる。
console.log("Hello, world");
ModPE Scriptも大概同じである。
強いて言えば関数が違うだけ。
以下がModPE ScriptでのHello, worldである。
print("Hello, world");
これを読み込ませれば、Hello, worldと表示される。
フック関数の使用
でもあれだけじゃイベント発火時の処理には使われない。
ModPE Scriptでは、先述のようにイベントが発火する度に関数が呼び出される。
Hello, worldの次の段階として、プレーヤーがワールドに入ったときに、チャット欄に出力されるように組み換えてみよう。
function newLevel(hasLevel){
clientMessage("Hello, world");
}
プレーヤーがワールドに入ったことを検知する関数はnewLevel
である。
引数にはBoolean型のhasLevel
が渡される。
この引数のhasLevel
だが、何者なのか知らない。
ってかぶっちゃけ使わない。
だから書かない人がほとんど。
続いて、チャット欄に出力する関数だが、こちらはclientMessage
である。
実行すれば画面左上に白い文字が表示される。
フック関数という概念が、Web API環境でのJavaScriptとの大きな違いだと思う。
ってかそれ以外の違いがいまいちわかんない。
最後に
ModPE ScriptはES5ベースにES6を混合した仕様のようで、アロー関数は使える、let
/const
は使えるが、class
は使えない、for
/while
内でconst
を使用すると値が変えられないなど、実際にプログラマーしてる人達には理解に苦しむ仕様になっている。
まぁこの程度は序の口で、もっと面白い仕様ではあるので、今後もこの辺含めた話をしていければなと思っている。