マイクラでボーリング調査【統合版Minecraft】

すーみそー  
sumiso_c0db8c だ  

本記事は [クソアプリ Advent Calendar 2022 11日目](https://qiita.com/advent-calendar/2022/kuso-app) の記事です  
枠が空いていたので、初投稿ですが参加してみます  

今回は統合版マイクラ対応  
ボーリング調査AddOnを作成します  

アプリではなくアドオンですが  
**機能**なのでセーフ、たぶん    

地質調査用コマンドをまとめた  
functionを用意し  
どんな地質でも正確に**ボーリング調査**できることを目指します  

## ボーリング調査とは  
地面に細長く穴を掘り、地質を調べることです  

ボールを投げてピンを倒すゲームは**ボウリング**と表記します  

## 環境  
本アドオンは**統合版 Bedrock Edition**で動作します  
Java版には対応していません  

- windows11  
- 統合版Minecraft 1.19.50  

https://feedback.minecraft.net/hc/en-us/articles/10833168748557-Minecraft-1-19-50-Bedrock-  

帰ってきた経験値無限かまどに、アイテム無限増殖  
リリースログには修正とあるが直ってないドーピング馬  
ここ数回稀にみるバグりバージョンです    
統合版マイクラにはバージョン指定する方法が無いので  
執筆時最新のこのバージョンを使用します  


## ファイル構成  

```:ファイル構成
/boring_survey ← 任意の名前
　├ manifest.json
　├ pack_icon.png
　└ functions/
　　 └ c0db8c ← 名前空間
         └ boring.mcfunction
```

functionsの下には任意のフォルダを作成できます  
他のビヘイビアーパックとの重複を防ぐため  
名前を付けておきます  

ちなみに筆者の名前が16進数なだけであって  
6桁の16進数を指定する必要はありません  

それぞれのファイルを説明します  

## manifest.json  

アドオンの設定ファイルです

公式ドキュメントはこちら    
MinecraftはMicrosoftに買収されたのでMicrosoft Docsに公式ドキュメントがあります  

https://learn.microsoft.com/en-us/minecraft/creator/reference/content/addonsreference/examples/addonmanifest  
  

```json:manifest.json 
{
    "format_version": 1,
    "header": {
        "description": "/function c0db8c/boring で実行点から地下64ブロックを3ブロック上にコピーします",
        "name": "ボーリング調査アドオン",
        "uuid": "57eead48-1b57-4516-ad70-a2842e76b55e",
        "version": [1, 0, 0]
    },
    "modules": [
        {
            "type": "data",
            "uuid": "87e557e2-3df2-4281-b742-8eadca94e2ce",
            "version": [1, 0, 0]
        }
    ],
    "metadata": {
        "authors": ["sumiso_c0db8c"],
        "url": "https://www.youtube.com/@sumiso_craft"
    }
}
```  

**header**の内容がゲーム内に表示されます  
metadataはゲーム内で表示を確認できませんが  
一応チャンネルの宣伝をしておきます  

uuidは下記サイトなどを利用して生成します  

https://www.uuidgenerator.net/  

## pack_icon.png  

ゲーム内に表示されるアイコン画像です  
正方形ならサイズは不問です  

今回は1200 x 1200 で作成しました  

![pack_icon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3053778/7be33ef8-82d4-ed36-68cf-0bb69c5f2641.png)

画力はないです  
そして画像無くても問題ありません  

## boring.mcfunction  
アドオンの本体です  
マイクラで実行するコマンドをまとめて記述できます  

テキストファイルを作成し  
1行に1コマンドを記述  
拡張子をmcfunctionに書き換えます  

cloneコマンドを中心に  
ボーリング調査用コマンドを組み立てていきます  

各コマンドの説明をします  

### clone  

https://learn.microsoft.com/ja-jp/minecraft/creator/documents/commandspopularcommands#setblockfillclone  

指定範囲のブロックを指定箇所にコピーします  

```:ボーリング調査本体
/clone <begin:x y z> <end:x y z> <destination: x y z>
/clone ~~-64~ ~~-1~ ~~4~
```

実行基準点の64ブロック下から、実行基準点の1ブロック下を  
実行場所の3ブロック上にコピーします  

~は実行基準点からの相対座標を示します  

コピー元のx,y,zの最も値が小さい場所が  
destinationで指定した座標にコピーされます  

beginとendは逆にしても  
結果は変わりません  

beginの方を小さい座標にしておく方が  
結果が予測しやすいです  

このアドオンのクソポイント  
cloneコマンド1つだけで  
ボーリング調査が出来ます    

アドオンは**必要ない**です  

### fill  

しかし、cloneコマンド1つでは出来ないことがあります  

例えば、ボーリング調査範囲に**水ブロック**が含まれていた場合です  
マインクラフト物理学によると水は8ブロック流れます  

水がボーリング調査範囲に含まれていた場合  
周辺が水浸しになります  

地質にコンクリートパウダーが含まれていた場合  
コンクリートに変化するため  
正しい地質調査ができません  

水がこぼれないように周囲を**バリアブロック**で囲います   

```:水漏れ防止処理
/fill <from:x y z> <to:x y z> <tileName: Block>
/fill ~1~4~ ~1~67~ barrier
/fill ~-1~4~ ~-1~67~ barrier
/fill ~~4~1 ~~67~1 barrier
/fill ~~4~-1 ~~67~-1 barrier
```

fromとtoは逆になっても動作に影響はありません  


また、ボーリング調査範囲に**浮いた落下するブロック**がある場合  
具体的には、砂利、砂ブロックです  
動作が予測できません  

マインクラフト物理学によると  
ブロックは**空中に浮く**ことができます  
この現象は大乱闘スマッシュブラザーズでも観測することができます  

ただし、砂利と砂は落下するブロックです  
ですが、地形生成時に設置された砂利と砂は浮いた状態で存在します  

浮いた状態の砂利と砂は不安定であり  
何らかの刺激、ブロックアップデートが入ると落下します  

地形生成時の地質調査のために  
ブロックの落下を防ぐ必要があります  

そこで、ブロックが落下可能な空間  
調査範囲に空気ブロックがあった場合  
バリアブロックに置換する処理を行います  

```:ブロック落下防止処理
/fill <from:x y z> <to:x y z> <tileName: Block> <tileData: int> replace [replaceTileName: Block] [replaceDataValue: int]
/fill ~~-65~ ~~-1~ barrier 0 replace air 0
```

調査範囲一番下が砂利と空気だった場合を想定し  
範囲-1ブロック下までバリア保護を行っています  

#### 余談ですが  

チャット画面に表示されるコマンドのヒントには  

- tileData: int  
- blockStates: block states  

の2種類が表示されています  


- ブロックの色の情報  
コンクリートの色など  
- ブロックの方角  
フェンスゲートの設置する向き  

だと思われますが  
どっちがどっちか分かりません  

指定するときは0以上の整数値で  
見た目に違いがありません  

有識者の方いましたら**コメントください**  

また数値で色や方角を指定するため  
人類に対して非常に不親切です  

一方のJava版マイクラは文字列で指定できるので親切です   

本記事は統合版アドオンの紹介です  


### setblock  

ボーリング調査範囲の一番下が砂利だった場合も考えられます   
落下防止のため  
ボーリング調査結果の1ブロック下にもバリアブロックを1つ設置します  

```
/setblock <position: x y z> <tileName: Block>
/setblock ~~3~ barrier
```

### boring.mcfunction  
最終的に`boring.mcfunction`の中身は以下のように記述します  
上から順に実行されます  

```:boring.mcfunction
fill ~~-65~ ~~-1~ barrier 0 replace air 0

setblock ~~3~ barrier

fill ~1~4~ ~1~67~ barrier
fill ~-1~4~ ~-1~67~ barrier
fill ~~4~1 ~~67~1 barrier
fill ~~4~-1 ~~67~-1 barrier

clone ~~-64~ ~~-1~ ~~4~
```

## パッケージ化  
作成したファイルをzip化し拡張子を書き換えます  

今一度ファイル構成を紹介します  

```:ファイル構成
/boring_survey ← 任意の名前
　├ manifest.json
　├ pack_icon.png
　└ functions/
　　 └ c0db8c ← 名前空間
         └ boring.mcfunction
```

boring_surveyを選択してzipに圧縮し  
拡張子を`.mcpack`に書き換えます  

警告が表示されますがそのままOKを押します  

フォルダのアイコンがマイクラの土ブロックになるので  
ダブルクリックでマイクラにインストールできます  

## 使用方法  

1. ワールドの設定で本ビヘイビアーパックを有効化します  
2. ボーリング調査したい場所に立ちます  
3. チャット欄に`/function c0db8c/boring`と入力します  
funぐらいまで入力すると予測が表示されますので  
tabで入力できます  
4. コマンドを実行します  
5. 頭上にボーリング調査結果ができます  

![Minecraft 2022_12_11 18_14_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3053778/85f5df90-25c7-9dd8-8741-2baabcd3f61e.png)


## まとめ  
マイクラでボーリング調査を行いました  

最後に本アドオンのクソポイントを紹介します  

:::note
使いどころが分からない 
:::

地下を透視したいならスペクテイターモードがあります  
しかし、スペクテイターモードでは地下のブロックが透明化するため  
ブロックは何が存在するか  
調べるには使えるかもしれません  

最後までご視聴、ありがとうございました