現代、やらなきゃいけないことをやらずに逃げれる道が多すぎる。どうもすのえです。
今回は、主にコマンドやProcedureなどの発展的な要素に多く触れていきます。
変わらずほぼMCreator内で済むので難しくはなりませんが、設定が多く複雑になってきます。
要素を作ろう5
これまでの要素以上に、今回解説する要素はProcedureと強い関係性があります。
今回解説する順序としては、とりあえずProcedureを利用する新しい要素を軽く紹介し、
その後Procedureによりどのようなことができるのかをある程度詳しく解説を行います。
それぞれの概要が把握出来たら、最後にProcedureを実際に使った要素の作例を紹介します。
しかし変わらず作るのは要素であることに変わりありません。コンプリートを目指しましょう。
コマンド
コマンドは、チャット欄でスラッシュから始まる指定の文字列入力で実行可能な特殊な挙動です。
デフォルトでのコマンドは通常、チートモードがオンでないと使えない設定になっていますね。
Modオリジナルのコマンドを作りましょう。+マークから「Command」で編集をします。
設定項目はたったの三つです。
「Command name (without /)」スラッシュを除いたコマンド実行時の名称を決定。空白厳禁。
「Execution permission level」実行に最低限必要な「権限レベル」を指定します。通常2。
[No requirement]:チートモードオフでも実行可能 (tellコマンド、wisperコマンド等)
1:チートモードオンの時の最低権限 (例該当なし、通常は利用しない)
2:シングルプレイで利用可能なほとんどのコマンドが利用可能 (clear, fill, kill 等)
3:マルチプレイで他のプレイヤーの権限に影響を与える (kick, ban, op等)
4:最高権限、サーバーに影響を与える (stopコマンド)
「Command executed procedure trigger」Procedureでコマンドで実行する動作を設定。
コマンドでは様々な設定を組むことができます。その分、Procedure設定が必要になるわけです。
エンチャント
エンチャントは、ツールなどのアイテムにエンチャント台を用いて付与できる追加能力です。
オリジナルのエンチャントを作成しましょう。 +マークから「Enchantments」で始めます。
設定項目は結構多めです。
「Enchantment name」ゲーム内で表示されるエンチャントの名称を決定。
「Enchantment type」このエンチャントを付与させるツールの種類を選択します。
基本は名前通りの種類にのみ付与可能になり、その他の名称に関しては以下の通り。
BREAKABLE:耐久力が減るすべてのツールに対して付与可能。耐久力や修繕など。
VANISHABLE:詳細不明。検証したところ、恐らくエンチャント可能なすべての物が対象。
DIGGER:おそらく、ブロックを破壊するすべてのツール(ピッケル・シャベル・斧・クワ)?
WEARABLE:着ることのできるすべてのアイテム。束縛の呪いや、ダメージ軽減など。
「Enchantment rarity」出現確立に影響し、レア度が高いほど低頻度でしか見られなくなる。
「Minimal supported level」通常の方法で付与できる最低レベル。通常は1である。
「Maximal supported level」通常の方法で付与できる最高レベル。
「Damage reduction modifier」ダメージを受ける際に軽減率に関わる防御倍率を指定。
ダメージ減少関係でないエンチャントなら基本的にデフォルトの0で放置すればよい。
「Is this treasure enchantment?」エンチャント台で付与ができない場合チェックを入れる。
チェストや村人からエンチャント付きのものを入手するか、金床で合成しなければいけない。
「Is this enchantment cruse?」呪いなど、悪い影響があるエンチャントならチェック。
「Is this enchantment allowed on books?」本に付与可能なエンチャントならチェック。
「Can … generate in loot tables?」生成される宝箱から入手可能ならばチェックを入れる。
「Can … appear in villager trades?」村人との取引で入手可能ならばチェックを入れる。
「Can be combined with」この要素と競合しない他のエンチャントを全て登録する。
他のエンチャントとの競合が存在しないなら何も登録しなければよい。
「Can be applied to」このエンチャントが付与可能な固有のアイテムを全て登録する。
[Enchantment type]で設定した種類よりもエンチャント付与可能アイテムを絞ることができる。
エンチャントにより発生する挙動はエンチャントの項で設定はせず、Procedureにて設定します。
Procedureにより「手に持った/装備したアイテムのエンチャントレベル」を取得可能なので、
それを利用して設定を組むことになり、エンチャントの項目だけでは何もできないのです。
進捗
オリジナルの進捗・目標・挑戦、それが掲載されるページを追加することができます。
様々な進捗を追加することは、疑似的なModの指標・チュートリアルになりますし、
多くの目標・挑戦を追加することはModの要素をより深く楽しんでもらうきっかけになります。
沢山の独自進捗を作成しましょう! +マークから「Advancements」で編集をします。
Advancement display parameters
「Advancement GUI name」進捗一覧にて表示される進捗名。
「Advancement description」進捗一覧にて進捗名の下に表示される説明文章。
「Advancement icon」この進捗に使われるアイコンを既存のアイテムから選択。
「Advancement background」この進捗の親進捗が存在しないの時のみ設定。(後述)
Other texturesから背景画像を選択。
「Advancement type」これが 進捗(task)/目標(goal)/挑戦(challenge) のどれかを設定。
「Advancement parent」この進捗の親進捗を設定。進捗に取得順を付けることができる。
バニラの進捗を設定すればバニラの進捗ページに追加の独自進捗を作成できる。
また、設定で[No parent: root]を選択すればその目標が独自進捗ページの最初の進捗になる。
「Show toast when completed」達成後に右上に達成したことを通知するかどうか。
「Announce to chat when completed」達成時にチャット欄に表示されるかどうか。
「Hide if not completed yet」未達成時に存在が隠されるかどうか。いわゆる隠し進捗になる。
「Hide advancement display」未達成時にその進捗ページが隠されるかどうか。
データパック作成者はこの機能を応用するとかどうとか…
Advancement logic
「Reward XP」進捗達成時に入手できる経験値量を指定。
「Reward function」進捗達成時に実行される、後述のfunctionを指定。
「Reward loot tables」進捗達成時にアイテムを入手させる場合に独自のルートテーブルを指定。
「Reward recipes」進捗達成時に解放されるレシピを指定。
Advancement trigger builder
ここではProcedureのようなものを利用して簡易的に進捗達成の条件を設定可能。
左の「triggers」系タブから条件達成のためのブロックをドラッグアンドドロップで引っ張り、
最初からある「Grant this advancement to the player」に繋げて設定を行う。
「If {□”] is placed」あるブロックを設置した際に取得。
「If {□*”] is consumed」あるアイテムを消費(食事等)した際に取得。
「If {□*”] is damaged, damage between {x] and {y]」
あるアイテムを使い耐久値を消費した際に、その耐久値消費度が{x]以上{y]以下なら取得。
「If player has from {x] and {y] {□*”] in inventory」
プレイヤーが、{x]個以上{y]個以下のあるアイテムを所持していた際に取得。
「Custom trigger …」Procedureやコマンドでの呼び出しでのみ取得。
取得条件が複雑になりここで設定しきれない際に利用して、あとでProcedureを組む。
「Each tick」すべてのtickで取得。
一見意味不明に思えるかもしれないが、前述の[Reward function]と組み合わせることで
「ワールド内で一番最初に一度しか実行されないコマンド」を作ることができる。
「If player enters/leaves …」特定のバイオームやディメンションに出入りした際に取得。
解説のプロットを組んでいる時はProcedureの設定必須だったのに更新が来てほぼいらなくなった
進捗の解除にProcedureと似たトリガーが必要なためProcedure回と絡めました。
進捗に関しては比較的Procedure設定が簡易ですね。
Function
Functionという設定をModで作り追加することができます。Procedureとの関係は薄いです。
Functionとは
Functionを簡単に説明すると、主にデータパックなどで使われる、「コマンドの集合体」です。
Functionでは、基本的にMinecraftに指定された方法でコマンドを並べていくことになります。
基本的にModを作る場合、FunctionではなくProcedureを利用する方が便利かつ軽量です。
Modではなくデータパックの領域なので、Functionのコードを書く方法は別で調べてください。
それでも一応説明はします。+マークから「Function」で作成。
「Function registry name」Functionのレジストリネームを決定。
「Function namespace」このFunctionが管理される管轄を設定、基本は「mod」で良い。
「Enter the function code」mcfunction codeを書こう。Modで作ったコマンドは使用不可。
通常ModでFunctionはほぼ使いませんが、コマンドを複数呼び出し可能な点で優れています。
MCreatorで一部出来ない動作を、呼び出したコマンドで補うこともできますし、その他
チャット欄やタイトル表示、操作するものがスコアボードやnbtタグな場合に重宝します。
Procedureからも呼び出し可能なので、覚えておくと使える時に割と使えるかもしれません。
Procedureを使おう
さあ、複雑なタスク実行の設計・条件設定が可能な「Procedure」を作りましょう。
ほぼすべての要素においてProcedureが絡んでくることは今までの解説からもお分かりの通り、
これを使うことができるようになることで、多くの要素をより本格的にすることが可能です。
下の画像はProcedureによる作例です。
様々なブロックを組み合わせ、一連の動作の流れ「フロー」を作れるようになりましょう!
名称・用法
その前に、解説するにあたってブロックたちの名称や、用法を解説していきます。
他のプログラミングでも稀に見かける形式なので、分かる人は飛ばしても大丈夫です。→ 設計
Procedureの使用例を見るか、自由に自分の作りたいものを作ってみましょう。
フローを構成するには、「フローブロック」と「補助ブロック」を組み合わせる必要があります。
これらブロックは画面左側にある「ブロックパレット」からドラッグして持ち出せます。
数が多すぎて最初は探すのに苦労するでしょう。英語である程度の分類がされてはいますが、
基本は色々な場所を開きながら大体の場所を覚えていくことになります。慣れましょう。
以降では「フローブロック」、「補助ブロック」、「その他情報」を軽く説明していきます。
フローブロック
フローブロックは、Procedureにおいてフロー自体を構成するブロックを指します。
このブロックは主にProcedureによって行われる動作を管理し、実行する役目を持ちます。
ブロックの上か下、またはその両方に前後のフローブロックと連結する凹凸を持っており、
ドラッグして近づけて離すことでフローブロック同士を連結させることが可能です。
また大抵のフローブロックは、右側又は内部に「補助ブロック」を受ける凹部を持ちます。
フローブロックもまた、大まかに四種類に分類することができます。解説していきましょう。
① トリガーブロック
トリガーブロックは、Procedureの編集画面に最初から置いてあるフローの開始地点です。
緑色で他より縦に大きく下側にのみ凸部を持ち、内部にトリガー設定があります。
全てのフローはここから開始されるので、そこに繋がってないフローブロックは実行されません。
ブロック内部のトリガー設定では、このProcedureのフローが実行される条件を決定します。
「No additional trigger」だと、このProcedureは他の設定に呼び出された時のみ実行されます。
他のトリガーを選択すると、呼び出されていなくても条件を満たすと実行されます。
「呼び出された時に実行するかどうかを確かめる追加条件」ではないのでご注意を。
② 動作ブロック
動作ブロックは、そのブロックに指定された動作を実行する、主要なフローブロックです。
実行する動作の種類により様々な色があり、上に凹部、下に凸部を持ちます。
右側や内部に情報ブロック又は変換ブロックと連結する凹部が存在する場合があります。
外部変化も内部変化も、全てこの動作ブロックで行うので一番よく使います。
しかし、情報/変換ブロックと連結する凹部にブロックが無いと正しく実行されません。
③ 制御ブロック
制御ブロックは、フローの流れを制御して実行順番を操作するブロックです。
動作ブロックと同様上下に凹凸を持ちますが、内部にも下方向へ連結する凸部を持ちます。
この凸部は独自の内部フローの開始点であり、動作系ブロックを繋げて伸ばすことができます。
実行順番が制御ブロックに来ると、条件によって内部フローを実行したりしなかったりします。
例えば、「if」と「do」が書かれている青色の制御ブロックの場合では、
ifの右側に繋がった条件ブロックが条件を満たした場合内部フローを実行します。
しかし、そうでない場合は何もせず次のブロックへ移る、といったフローの制御を行います。
他にも、「指定された回数だけ内部フローを繰り返し実行する」などの制御が存在します。
④ 終止ブロック
終止ブロックは、フローの終了を行うブロックです。
フローに対しては上側に凸部を持つのみであり、内容は「return」か「break」しかありません。
「return」は、フローをそこで終了させ、そのProcedureを呼んだものに対し情報を渡します。
例えば条件のProcedureではこれが最後でなければいけません。[true]か[false]を返しましょう。
「break」はそのフローが制御ブロックの内部フローの時のみ最後に接続することが可能であり、
そこで必ずその内部フローを終了し、制御ブロック外の次のブロックを実行することができます。
補助ブロック
次に、フローブロックの実行を補助する補助ブロックの説明に移ります。
補助ブロックは名の通り、フローブロックの動作を補助する役割を持つブロックです!
フローブロックに空いた穴を埋め、動作に必要な情報や条件を与えるのに使用します。
上下に凸凹は存在せず、全ての補助ブロックは左側に凸部を持ちます。
⑤ 情報ブロック
情報ブロックは、単体で取得するものが確定されている情報を取得するブロックです。
左側に凸部を持つのみであり、大多数のフローブロックや変換ブロックに連結可能です。
しかし、情報ブロックにもそれが扱う情報の種類によって分類が存在します。
求められる情報と同じ規格の情報しか接続できないため、しっかりと種類を確認しましょう!
⑥ 変換ブロック
変換ブロックは、情報ブロックから受け取った情報を別の情報へと変換するブロックです。
左側に凸部を持ち、内側又は右側に情報ブロックと接続する凹部を持ちます。
これにも情報の種類があるため、接続できるかどうかはこのブロックの種類に依存します。
数字を文字列に変換したり、変数の中身を変更したり、様々な用途が存在します。
⑦ 条件ブロック
条件ブロックは、環境に応じて常に「真」と「偽」のどちらかの情報を持つブロックです。
基本的に変換ブロックと見た目に相違はなく、変換ブロックの亜種と思って大丈夫です。
ブロック内に書かれている文章が必ず疑問形になっているので、英語を読んで見分けましょう。
そのブロックの特性より、主に条件分岐系の制御ブロックの右側などにのみ接続を行います。
その他情報
ブロック系の情報の他に、Procedureを構成するにあたり必要になる情報について解説します。
⑧ ゴミ箱
ゴミ箱は、邪魔なブロックをどかしておくことのできる別の空間です。
フローを作成していると、必ず邪魔になったブロックや使わなくなったブロックが発生します。
数が増えて画面に描画され続けていると邪魔なので、そういうものはドラッグアンドドロップで
ゴミ箱に持っていき、捨てましょう。間違えて捨ててしまってもダブルクリックで中を漁れます。
⑨ ローカル変数
ローカル変数とは、今開いているProcedure内のみで利用する情報の格納場所の事です。
プログラムを作成していると、必ず「変数」というものの必要性にかられます。
変数にはいくつかの種類が存在し、種類によって数字や文字列、ブロック情報などを保管でき、
それを情報ブロックを用いて呼び出すことで記述の短縮や情報の使い回しが可能になります。
編集画面右上にある「local variables」右の+をクリックし、ローカル変数を新規追加できます。
追加したら、変数名と種類を決定する必要があります。特に種類は間違えないようにしましょう!
ローカル変数とは対になる「グローバル変数」については第七回で解説します。
⑩ 必須外部情報
必須外部情報とは、そのProcedureが正しくフローを実行するのに必要な情報の事です。
何個かのフローブロックにはまるで普通かのようにx, y, zなどの情報ブロックが入っていますが、
それら座標の情報は、座標を持つブロックやプレイヤーが呼び出すからこそ実行できるのであり、
Procedure単体ではどこの座標を参照して動作を行えばいいのか分からないのです。
先ほどの座標値のような「曖昧な」情報ブロックを追加するほど必須外部情報は増えます。
作っているProcedureにはどんな情報が与えられるのか、確認しながら設計を行いましょう。
フローの設計
名称と用法をある程度把握したら、Procedureを用いて複雑なアクションを実行しましょう。
フローブロックで説明した通り、様々なブロックを組み合わせて順に動作をさせていきます。
させたい動作に対応するブロックは基本、探して英語を読んで近いものを選ぶことになります。
ですが一応ある程度のジャンル分けがされていますし、作り方にもある程度パターンがあります。
左のブロックパレットからブロックを選ぶ際には、まずパレットのタブの名前を読みましょう。
「~ data」は情報/変換ブロック系、「~ management」は動作ブロックが入っています。
また、すべての制御ブロックは「Flow control」内にあり、大抵の条件ブロックは「Logic」に、
よく使う変換ブロックは「Math」に、多くの情報ブロックは「Minecraft components」内です。
ではこれらを使って基礎的なフローについて考えてみましょう。
例えば「受け取ったy座標の1つ上を指定」する場合、補助ブロックをこのように組み合わせます。
「y」はMinecraft components、「+」と「1」はMathにあります。これで指定できますね。
ちなみに+の部分をクリックすると他の演算も選択可能です。
「a ^ b」:aのb乗 「a MOD b」:aをbで割った余り 「a Min/Max b」aとbの小さい/大きい方
「Bitwise AND/OR/XOR」:両方を2進法で表記した時の ビット積/ビット和/排他的論理和
頻繁に使う「ローカル変数」も開設しましょう。できればProcedure初級編は完璧です。
ローカル変数は上で説明した通り、「今回のフローのみで使う一時的な情報倉庫」的な何かです。
Custom variablesの動作ブロックから、変数の中身の読み込み、変数の中身更新を行えます。
右上の+マークから新規作成をし、名称と変数が保管する情報の種類を選択して変数を用意。
一つの変数には一種類の情報しか保管できません。そのため、情報の種類は覚えておきましょう。
「blockstate」ブロックの状態 「itemstack」アイテムの数量 「number」数 (実数)
「direction」ブロックなどの方向 「logic」True/False (真か偽) 「string」文章
また、同じ名前のローカル変数を作ることはできません。分かりやすい名前にすると良いですね。
このサイトでの見本は大抵「[適当なアルファベット一文字]_[用途]」という名前にしています。
これも頻出、「ループ機構」を知らないと冗長なフローを書くことになってしまいます。
ループには、指定回数ループする「repeat」と、条件でループし続ける「while」があります。
並んでいる複数のブロックに対してアクションを行うときなどにお世話になるので、
座標だけを変えた似たようなブロックを並べずに、ループを使って賢くフローを組みましょう。
上は、「与えられた座標」とその上下合計3ブロックを破壊するフローです。
先ほど出てきた加算とループを活用すれば、破壊の動作ブロックを三つ並べなくていいのです。
またrepeatとは違い、whileでは右側の条件ブロックが満たされている間永遠にループします。
上は、「与えられた座標」の真下にダイヤモンド鉱石があればログを残すフローです。
(※注意 このまま使おうとすると、XZ方向の座標が負の時にうまくいきません。工夫しよう。)
動作フローのprintは、ログを残すだけでチャットをするフローではないので注意して下さい。
breakを使うとループから強制的に抜け出すことができるのでこれも使えると便利ですね。
最後に、情報/変換ブロックについて良く勘違いを起こしやすい、この下の二つがあります。
これは、左の黄色い情報ブロックが「設置された状態のブロック」を意味し、
右側の赤い情報ブロックが「アイテム」を意味します。混同しないようにしましょう。
例えば同じ土でも、「この座標に設置する」時は黄色を、「人にn個渡す」時は赤色を使います。
条件設計
では、様々な設定に登場する、Procedureによる複雑な条件も設計しましょう。
ブロックの生成やアイテムの発光など、Procedureによる条件設定は時々出てきました。
そこに組み込む条件設定となるProcedureを作る場合は、フローの終着点に必ず
「true(真)」もしくは「false(偽)」を「Return」で返してあげる必要があります。
上は、天候が雨か雷雨でなく、時間が13700~22300で、満月の時にTrueを返すフローです。
例えばこれをItemの〔Make item glow〕に入れれば、満月の見える夜だけ輝くようになります。
条件を作成する場合は、必ずtrueかfalseのどちらがかフローの最後に来るようにしてください。
また、真偽を返す「Return」は終止フローなので、Returnに到達した時点でフローは終了します。
また、Returnには多種多様な色があります。条件を作る場合は水色のReturnを使いましょう。
エラーが無くかつ条件を正しく組めていれば、右下に「Return type LOGIC」と出るはずです。
こんな感じで、Procedureの使用用途である動作と条件について軽く知れたと思います。
この要素は自由度がとても高く、「すべて解説!」なんてやろうものならこのページが
とんでもない長さになってしまうので、Procedureについての解説はここまでとします。
実際に自分で様々なものを見て学んだり試したりして、経験を積んでいくのが良いでしょう!
ということで、何をどうやって作るのかという具体例を見るためにも以下で作例を紹介します。
具体例より下の記事内容は特にないので、それが要らない人は閲覧を終えても大丈夫です。
使用例:Procedure
この解説をご覧の方々がProcedureを利用した様々な要素を作れるようになるために、
参考になるかも!しれない?Procedureの簡単な使用例を合計13個用意しました。
動作系Procedure 11例
斧で右クリックすると樹皮が剥がれる原木
樹皮を剥ぐ前の原木のTriggersから、〔On block right clicked〕を選び新規作成。
上の図のようにProcedure組みましょう。条件ブロックはItem proceduresの上から七番目。
[Item in main-hand …]はEntity dataの真ん中あたりにあり、利き手のアイテムを指定します。
[Play at …]はWorld managementの上から四番目。音 [item.axe.strip]は相当下の方です。
レッドストーン信号を受けて変化するブロック
まず変化前のブロックと変化後のブロックを用意します。
変化前のブロックは〔Redstone on〕、変化後のブロックには〔Redstone off〕を新規作成し、
上のようにそれぞれお互いのブロックで[Replace block …]できるようブロックを指定しましょう。
右クリックで別のアイテムに変化するアイテム
変化前のアイテムと変化後のアイテムを用意しましょう。
〔When right clicked in air (player loc.)〕からProcedureを新規作成します。
上のように設定すると、手に持ったアイテムがすべて一括で変換されます。
また、次のように設定すると手元のアイテムが右クリックのたびに一個ずつ変換されていきます。
上では、「プレイヤーの利き手スロットに、[所持数-1]個の変化前アイテムを代入」しています。
「インベントリから変化前のアイテムを1個減らす」を使うと単純ですが、正確に動きません。
ホットバーに複数の同じアイテムがあった時、必ず左側から順に変換されてしまうのです。
食べるとエフェクトが付与される食べ物
エフェクトを付与するための食べ物と、付与されるエフェクトを用意しましょう。
エフェクトはバニラの物でも大丈夫です。食べ物のTriggerで〔When food eaten〕から新規作成。
AmbientやHideParticlesの真偽も必要なら上の動作ブロック、不要なら下のを使いましょう。
levelは、[付与したい効果レベル – 1]の値を、時間(ticks)は、付けたい秒数の20倍を指定します。
また、[ambient]=trueでパーティクルが目立ちにくく、[particles]=falseで見えなくなります。
クラフト時に(稀に)副産物が得られるレシピ
主産物がアイテム系、かつ副産物が生まれない製錬レシピが存在しない時に使えます。
副産物を生成するレシピの元の完成品(主産物)と、生産される副産物を用意しましょう。
主産物のTriggerから、〔When item is crafted/smelted〕で新規作成します。
条件ブロック部にある、「Random [0,1) < 0.3」という部分が確率を設定しています。
これは、「0以上1未満のランダムな実数を生成し、それが0.3未満なら真」という条件。
つまり、この制御フローに来るたびに30%の確率で内部フローが実行されます。
[0.3]の部分を変更して確率を変更できますし、確定で副産物を生成するなら分岐を消しましょう。
上で紹介したTrigger〔When item is crafted/smelted〕は、ブロック系には存在しません。
また、製錬して生成できる別レシピが存在するときにも反応してしまいます。
そのため、ブロック系又は副産物を生まない製錬レシピがある場合は別手順を利用します。
主産物・副産物を用意したら、Workspaceの+マークからProcedureを新規作成します。
上の図のように、トリガーブロックのトリガー部分を「Item is crafted」にします。
こうすると何かのアイテムがクラフトされるたびにこのProcedureが呼ばれるので、
呼ばれた際に作られたアイテムが主産物かどうか確認し、副産物を用意しています。
※副産物が生成されるクラフトレシピと、生成されないクラフトレシピがある場合※
この場合は、現状としては普通の手段では実装することができません。
副産物が生成されるクラフトレシピの主産物を一旦ダミーアイテムに置き換えて、
ダミーがクラフトされたら即時に消して、主産物と副産物をプレイヤーに直接加える…
というようなゴリ押しなどの方法が考えられます。自分でも自然な実装を考えてみてね。
死亡時にランダムなアイテムをドロップするMob
※本来はブロックと同じように、ランダムなアイテム要素にはLoot table(第七回)を利用しますが、
2021年11月現在、MobドロップにLoot tableを設定できないのでProcedureで実装しています。
将来のアップデートにより実装される可能性があるのでその際はLoot tableを使いましょう。
まずは元になるMob、ドロップするアイテムを用意しましょう。
アイテムをドロップするMob内のTriggerの〔When entity dies〕から新規作成。
このようにすることで、0~3個のうちそれぞれ等しい確率でアイテムドロップ数が確定します。
それかアイテムのドロップ数の偏り具合が気になるなら、下のようにしても良いでしょう。
50%の確率でアイテムが1個ドロップするというフローを三回繰り返しています。単純で良い。
また、複数のアイテムをドロップさせたかったら同じ機構を縦に積み重ねればできます。
確率やドロップ数をどう取るかは、製作者の気分次第です。好きに決めましょう。
攻撃した相手の所持アイテムを剥ぎ取る武器
剥ぎ取り効果を付ける特殊武器を用意しましょう。
武器のTriggersから、〔When living entity is hit with tool〕でProcedureを新規作成。
対象が利き手に持っているアイテムを召喚した後、手のアイテムを消しています。
「利き手に持つアイテムを消す」という動作ブロックが無いので、利き手スロットに空気を代入。
Minecraft componentsの「Empty itemstack」でも同じ挙動なので、好きな方を使いましょう。
眠れなくなる状態異常(エフェクト)
元になるエフェクトを用意しましょう。名前も適当に… 不眠症(Insomnia)とか。
エフェクトがかかっているときに常時発生する効果ならエフェクト内のTriggerを使いますが、
今回影響する行動の起点はベッドを使うことなので、Procedureを一から新規作成します。
上のように、トリガーブロックのトリガーを「Player right clicks block」に変更しましょう。
すると、右側に「Cancelable」という文字が出ていると思います。Cancelableなトリガーは、
Procedure内でそのトリガーとなった行動を中止させることができます。非常に重要です。
あとは、エフェクトを持っているか確認し、右クリックしたブロックがベッドだったら中止。
条件ブロックのANDは、Logicの「=」が書かれたブロックを変更して得られます。
さらにブロックを右クリックし「External Inputs」を選択すると縦に展開され読みやすく!
そしてトリガーをキャンセルするブロックは、Advancedに入っています。
眠れない事をチャット欄に出力するfunctionを一緒に実行してみるとより分かりやすいかも。
自身の状態を完全にリセットするコマンド
コマンドを用意しましょう。設定から、「When command executed」で新規作成します。
コマンドから作成したProcedureは、「cmdparams」という文字情報を最初から持っています。
これはコマンドを実行された時に、空白で区切られた文章が0から順に格納されている変数です。
Advancedにある「command parameter with index *」によって文字を取り出すことができます。
この作例の他にもいろいろ作れると思うので、自由にやってみてください。
耐久力が減るほど攻撃力が上がるエンチャント
この効果の元になるオリジナルのエンチャントを用意しましょう。
今回もエンチャントの影響する起点は攻撃なので、通常のProcedureを新規作成しましょう。
トリガーブロックのトリガー部は「Entity attacked」に変更します。
この時、[Event/ …]は敵、[Source entity]は攻撃者、[amount]は与えたダメージになります。
[amount]ブロックは右側の「amount」と書いてある部分をダブルクリックすると出現します。
ダメージ倍率計算や攻撃力調整部分は各自好きなようにバランス調整を行いましょう。
重要なのは、最後のダメージを与えている「Set health of…」の部分です。
ダメージを与える方法は「Deal [*] damage …」などもありますが、それだと上手くいきません。
通常の方法でダメージを与えてしまうと、被ダメージ時の無敵時間が発生してしまうからです。
またDealブロックではノックバックも発生せず他のエンチャント効果も付与されないので、
無敵時間を発生させずダメージを与えられるようなフローを組むにはこうするしかありません。
特殊な条件で取得できる進捗
進捗の項で軽く説明したProcedureを利用した進捗取得も例を挙げましょう。
進捗を作成しておき、Advancement trigger builderにはCustom triggerを設定しておきます。
適当に、ウィザーの真似をする進捗(?w)を作ってみました。
進捗が達成されているか確認しないといけないため、トリガーは「On player tick update」に。
もちろん毎tick更新されるため、複雑すぎるProcedureを組むのは控えましょう!
条件系Procedure 2例
明るさレベルが一定以下の時に消滅する植物ブロック
大抵の作物は明るさ7以下だと植えられないし、植わっていても勝手に消滅するらしいですよ。
今回の条件は、Advanced propertiesの〔Additional placing/growth condition〕から作ります。
このように設定すると、明るさ7以下の土地には置くことも育つこともできなくなります。
また、この「Get the light level at x y z」というブロックはWorld dataから取れます。
非常に似た「Get light level of a block at …」がBlock dataにあるので気を付けてください。
普通のブロックでは〔Block valid placement condition〕の設定で似たようなことができます。
y座標が80未満の土地には自然生成されない植物ブロック
通常のブロックには鉱石生成と同様に自然生成時に高さ制限をかけられますが、
その他の植物系ブロックはProcedureを利用しないとバイオーム制限しかかけられません。
ということで制限しましょう。Generationの〔Additional generation condition〕から新規作成。
簡単ですね。これ以外にも様々な条件ブロックがあるのでいろいろ試してください。
これで第六回の解説は以上です!
ここで紹介した使用例の他にも、Procedure編集画面右上の「Procedure templates」から
MCreator側が用意してくれた様々なテンプレートが存在します!
第六回ではまだ紹介していない要素を利用したProcedureのフローや、他の要素と結びつかない
単独で動くフローなども作れるので、次回以降も最後に作例紹介をしていこうと思います。
ではいつ出るか分からない第七回まで、のんびりお待ちください。
第一回:【準備編】MCreatorで簡単MOD制作! その1【Minecraft】
解説内容:ダウンロード・インストール・開始・再開
第二回:【基本編1】MCreatorで簡単MOD制作! その2【Minecraft】
解説内容:クリエイティブタブ・ブロック[固体・液体・植物]・言語設定
第三回:【基本編2】MCreatorで簡単MOD制作! その3【Minecraft】
解説内容:アイテム[アイテム・食べ物・燃料・レコード・絵画]・レシピ・タグ
第四回:【武具編】MCreatorで簡単MOD制作! その4【Minecraft】
解説内容:道具・防具・遠距離武器・ポーション・パーティクル
第五回:【3Dモデル編】MCreatorで簡単MOD制作! その5【Minecraft】
解説内容:非立方体ブロック設定・3Dモデルの制作と導入・エンティティ
第六回: ここ
解説内容:コマンド・エンチャント・進捗・Function・Procedure-1
第七回:【応用編2】MCreatorで簡単MOD制作! その7【Minecraft】
解説内容:GUI・Loot table・Key binding・オーバーレイ・Gamerule・Procedure-2
第八回:【上級者編】MCreatorで簡単MOD制作! その8【Minecraft】
解説内容:Code edit・バイオーム・ストラクチャー・ディメンション・Custom Element
コメント
第7回はいつ出来ますか?
面白くてわかりやすいです
第7回が楽しみです!
第7回はいつ出ますか?