【統合版マイクラ】ビヘイビアーパックでコマンドを常時実行する方法とブタさんの飛ぶころに

![ブタさんの飛ぶころに](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3053778/5f5b2273-d0f2-6872-67b1-29e6d143ade0.png)


すーみそー  
sumiso_c0db8c だ。  

統合版マイクラのビヘイビアーパックで**乗って空を飛べるブタ**を作成しました。  

ダウンロードはこちら  

https://minecraft-mcworld.com/111722/


`tick.json`を利用して、コマンドを常時実行し  
マルチプレイ対応、どのブタに乗っても空を飛べるようにします。 

:::note info
統合版マイクラ1.21.44で動作確認を行っています。 
:::


## 本記事で分かること  

- ビヘイビアーパックの作り方  
- 統合版マイクラでのmcfunctionの使い方  
- executeコマンドの使用例  
- コマンドを常時実行するtick.json利用方法  

## ブタさんの飛ぶ頃に  
統合版マイクラの実績には`ブタさんの飛ぶ頃に`というものがあります。  

![ブタさんの飛ぶ頃に実績詳細画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3053778/aba2f94c-880f-bc2e-342e-5813cf04e185.png)

> 鞍を使って豚に乗り、乗っている最中に豚に落下ダメージを与えよう。  

**飛んでなくない？？？**  

ブタさん飛んでいません。**落ちています。**  
なので、ブタが飛べるようにコマンドを組みます。  
ワールドのどのブタでも飛べるように、コマンドを常時実行するようにします。  

> 飛ばねぇ豚はただの豚だ  
-- ポルコ・ロッソ  

https://dic.pixiv.net/a/%E9%A3%9B%E3%81%B0%E3%81%AD%E3%81%87%E8%B1%9A%E3%81%AF%E3%81%9F%E3%81%A0%E3%81%AE%E8%B1%9A%E3%81%A0  

## 構成  
以下のようなファイル構成でビヘイビアーパックを作成します。  
ビヘイビアーパックは、統合版マイクラ専用データパックのようなものです。  
コマンドをまとめて実行する`mcfunction`を利用します。  


開発環境としてはVScodeがオススメです。  

```:ファイル構成
  /
  ├ manifest.json ビヘイビアーパックの定義ファイル
  ├ pack_icon.png アイコン画像
  └ functions/
    ├ tick.json 常時実行するmcfunctionを指定
    └ c0db8c 名前空間
      └ main.mcfunction コマンド本体
```

`pack_icon.png`は無くても問題ありません。  

c0db8cは筆者の名前です。  
適宜変更してください。  

https://learn.microsoft.com/ja-jp/minecraft/creator/documents/behaviorpack

## manifest.json  

ビヘイビアーパックの定義ファイルです。  
ビヘイビアーパックの  

- 名前(name)  
- 説明(description)  
- 対応バージョン(min_engine_version)  

などを指定します。  

```json:manifest.json
{
    "format_version": 2,
    "header": {
      "description": "ブタに乗って上を向くと飛ぶぞ",
      "name": "ブタさんの飛ぶ頃に",
      "uuid":"4c053163-378c-4f35-abdb-93de365b2076",
      "version": [1, 0, 0],
      "min_engine_version": [1, 21, 44]
    },
    "modules":
      [
        {
            "type": "data",
            "uuid": "ad53febf-31fb-479c-9a87-5750fffeb1e4",
            "version": [1, 0, 0]
        }
      ]
}
```

uuidはビヘイビアーパックの識別IDです。    

https://www.uuidgenerator.net/  

などで生成できます。  

![uuid生成画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3053778/b8958a27-4b94-ec2e-d36e-5887e70c5fa8.png)

Copyボタンで取得し、manifestに貼り付けてください。  

header部分とmodules部分で2つ必要になります。  
画面更新で再生成できます。  

## pack_icon.png  
ビヘイビアーパックのアイコンとして表示される画像を指定します。  
正方形の画像を指定します。  

![pack_icon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3053778/5ce7e463-f5a4-45cb-4b65-4223bf360161.png)

スクリーンショットをとって540x540pxにトリミングしました。  
~~飛んでいる感が全然ない。~~  

## main.mcfunction  
実行するコマンドを1行1コマンドで記載します。  
先頭の`/`は不要です。  
ファイル名は任意です。  


```mcfunction:main.mcfunction  
execute at @a run effect @e[type=pig, r=1] slow_falling 3 0 true

execute at @a[rx=-5, rxm=-25] run effect @e[type=pig, r=1] levitation 3 0 true
execute at @a[rx=-26, rxm=-50] run effect @e[type=pig, r=1] levitation 3 1 true
execute at @a[rx=-51, rxm=-90] run effect @e[type=pig, r=1] levitation 3 2 true

execute at @a[rx=-5, rxm=-90] run effect @e[type=pig, r=1] speed 3 10 true
```

プレイヤーがブタに乗ったときに  

- 低速落下  
- 浮遊  
- 移動速度上昇  

をかけて飛翔効果を与えるコマンドを組みます。  

:::note
統合版マイクラ1.21.44で動作確認を行っています。  
:::

:::note alert
Java版マイクラはeffectの文法が異なるのでマネしないでください。  
:::

### 基本構造  

```mcfunction  
execute at @a[プレイヤーの状態] run effect @e[type=pig, r=1] [エフェクトの効果] [効果時間] [エフェクトのレベル] true
```

それぞれのコマンドの意味は下記の通りです。    

```mcfunction:プレイヤーの近くのブタに低速落下を付与する  
execute at @a run effect @e[type=pig, r=1] slow_falling 3 0 true
```

  

```mcfunction: プレイヤーが上を向いているときに、プレイヤーの近くのブタに浮遊を付与する  
execute at @a[rx=-5, rxm=-25] run effect @e[type=pig, r=1] levitation 3 0 true
execute at @a[rx=-26, rxm=-50] run effect @e[type=pig, r=1] levitation 3 1 true
execute at @a[rx=-51, rxm=-90] run effect @e[type=pig, r=1] levitation 3 2 true
```

上を向いている角度に合わせて3パターン用意しています。  

```mcfunction:プレイヤーが上を向いているときに、プレイヤーの近くのブタに移動速度上昇を付与する  
execute at @a[rx=-5, rxm=-90] run effect @e[type=pig, r=1] speed 3 10 true
```

モブが浮いているときは移動速度が低下するため、快適に動けるように移動速度上昇を加えています。  
プレイヤーが下を向いて、下降するときにはかからないので、ゆっくり降りることができます。~~ゆっくりしていってね~~

コマンドの構文について解説します。  

#### execute at @a[プレイヤーの状態]  

始めに`execute at`コマンドでコマンドの実行基準を`位置を基準`にします。  
プレイヤーの**近く**のブタにのみ飛翔効果をかけるためです。  

セレクターは`@a`を使用し、`すべてのプレイヤー`を対象とします。  
マルチプレイ対応です。

```mcfunction
@a[rx=-25, rxm=-50]
```

の部分では、プレイヤーの視点の向きを指定しています。  
if文のような役割です。  

![角度の範囲指定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3053778/f5ca5d50-38b2-5c8f-ed70-28cfcb441f54.png)


rxは上下方向の視点  
rx(下限) ～ rxm(上限)の範囲指定を行っています。  
一番上が-90になるので注意。  

`上を向いているプレイヤー`を検知したときに  
ブタに対してエフェクトをかけます。  

#### run effect @e[type=pig, r=1]  

executeコマンドで変更したプレイヤーの位置を基準に  
ブタに対してエフェクトをかけます。  

`type`でモブの種類を指定します。  
今回はブタを対象にしています。  

`r=1`で**コマンド実行基準点からの距離**を指定します。  
`execute at`でプレイヤーの位置が基準になっているため  
プレイヤーから1ブロック以内のブタ  
つまり、プレイヤーが乗っているブタが対象になります。  

#### effect [エフェクトの効果] [効果時間] [エフェクトのレベル] true  

effectコマンドでブタに

- 低速落下(slow_falling)  
- 浮遊(levitation)  
- 移動速度上昇(speed)  

の効果を与えて、空が飛べるようにします。  

効果時間の指定は**秒**です。  
統合版マイクラ1.21.44現在、ログの表示がtick単位になっていて、指定した秒数x20の値が表示されますが、効果時間は正しく指定秒数になっています。~~おそらく表示バグ~~  

エフェクトのレベルで効果の強さを指定します。  
上を向くほど上昇効果が強くなるように、`levitation`は3段階に分けて指定しています。  

```mcfunction
execute at @a[rx=-5, rxm=-25] run effect @e[type=pig, r=1] levitation 3 0 true
execute at @a[rx=-26, rxm=-50] run effect @e[type=pig, r=1] levitation 3 1 true
execute at @a[rx=-51, rxm=-90] run effect @e[type=pig, r=1] levitation 3 2 true
```

最後の`true`はもやもやの**非表示**設定です。  

![もやもや](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3053778/7d80520d-964b-e8d0-669f-f49decda618c.png)


|設定|もやもやの表示|
|----|----|
|false(デフォルト)|表示|
|true|非表示|

デフォルトは**非**表示の**否定**で、もやもやが表示されます。  

## tick.json  

常時実行したい`mcfunction`を指定します。  
リピートのコマンドブロックのように、指定したmcfunctionが繰り返し実行されます。  

```json:tick.json
{
    "values": [
        "c0db8c/main"
    ]
}
```

valuesにファイル名を指定します。  
複数のmcfunctionを指定できます。  
拡張子は付けません。  

ここで指定したmcfunctionはワールドで常に実行状態となります。  
`main.mcfunction`を指定し、世界のどこでも実行されるようにします。    

~~これがメインのはずがコマンドの説明の方が分量が多いっていう。~~ 簡単ですね。

https://learn.microsoft.com/ja-jp/minecraft/creator/documents/tickjsonintroduction

## パッケージ化とインストール    

作成したファイルを`.mcpack`の形式にまとめ、統合版マイクラにインストールできるようにします。  

```:ファイル構成(再掲)
  /
  ├ manifest.json ビヘイビアーパックの定義ファイル
  └ functions/
    ├ tick.json 常時実行するmcfunctionを指定
    └ c0db8c 名前空間
      └ main.mcfunction コマンド本体
```

![zipファイルに圧縮する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3053778/2a3270c4-a7b5-e735-e57f-0f2636039cfc.png)


作成したファイルをすべて選択し  
zipファイルに圧縮します。ファイル名は任意で指定してください。  

![名前を変更する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3053778/cc03c3eb-d954-b67b-41c1-1091be51d6d0.png)

![マイクラのアイコン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3053778/a6e29fed-8ed0-3a0d-52f4-5ea32e78b867.png)

zipファイルの拡張子を`.mcpack`に書き換えるとアイコンがマイクラに変わります。  
ダブルクリックで統合版マイクラが起動しインストールされます。  

![インポート完了.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3053778/07ee58cf-54d6-1e5e-b5e0-5e4c8c2428f0.jpeg)


### こんなときは  

####  有効なパックではないとエラーが表示された  
manifest.jsonの階層が深すぎる可能性があります。  
フォルダではなく、ファイルを選択してzipを作成してください。  

#### プレビュー版のマイクラが起動した  
`.mcpack`を右クリックし、プログラムから開くを選択  
任意のマイクラを選択してください。  

#### アンインストールしたい  
設定の`ストレージ`→`ビヘイビアーパック`から削除ができます。  

![アンインストール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3053778/0593865e-e35d-097d-22a4-322c7455fa2d.png)


## ワールド導入  
新規ワールドを作成して、ビヘイビアーパックを有効化します。  
既存のワールドに入れることもできますが、バックアップをとることをオススメします。  

![ビヘイビアーパック有効化.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3053778/7dfd4739-8f8e-cff4-8886-1dc28afb917e.png)
ワールド新規作成画面で、チートよりチートを有効化  
ビヘイビアーパックの項目より有効化を選択します。  

![みんなでブタに乗る](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3053778/b499972a-f80b-837a-2a01-c5c3e86634e6.jpeg)

動作イメージです。

<iframe width="480" height="270" src="https://www.youtube.com/embed/cPUvQpsq4dg?si=11GsZ6GMuUyGzZ8t" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>


## あとがき  
本記事ははてなブログに投稿した記事のリメイク版です。  

https://sumiso-c0db8c.hatenablog.com/entry/2021/05/24/073000  

最新のexecuteコマンドに対応、ついでにビヘイビアーパック化しました。