Minecraft Java版 に MCreator Link を入れて Raspberry Pi とやりとりしてkintoneにPOSTする

Minecraft Java版 と Raspberry Pi に MCreator Link を入れて、 Minecraft と Raspberry Pi で通信できるようにする方法です。
（最後におまけで、Minecraftの操作でkintoneにPOSTできるようなコードもあるよ。）

MCreator Link の環境構築の手順としてはコチラに書いてある通りに進めます。

https://mcreator.net/wiki/minecraft-link-installation

# Minecraft (Java版) 側の設定

PC側の設定からやっていきましょう👀

## MCreator Link をダウンロードする

↓コチラからお好みのMinecraft Java版のバージョンに合った MCreator Linkをダウンロードします。

https://mcreator.net/download/link

バージョン1.16.5 ならこのDownloadボタン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/b36cfa22-a54f-0e16-768e-bcd9cf8acdea.png)


## Forgeをインストールする

↓コチラの手順通りにインストールしました。

https://artisan-select.com/system_mods/minecraft_forge

## MCreator Link（MCreator Link 1.3 [1.16.5].jar） を mods フォルダに移動する

↓ダウンロードした`MCreator Link 1.3 [1.16.5].jar`をコチラを参考に移動させました。

https://www.conoha.jp/vps/media/mine-semi/mod/#section03-02


# Raspberry Pi の設定

## MCreator Link のインストール
Java8がインストールされていない場合は、こちらでのコマンドでJava8をインストールします。
`$ sudo apt-get install openjdk-8-jdk`

Rassberry Pi に ssh接続して下記のコマンドを実行します。
`$ curl -sL https://mcreator.net/linkpi | sudo bash`
 
しばらく待つとMCreator Linkがインストールされます。
インストールが終わったら、Ctrl + Cなどを押してbashに戻ります。

## Python

RPi.GPIOパッケージをインストールします。

`$sudo pip install rpi.gpio`

コードを書きます。
1秒ごとに Raspberry Pi の18番ピン（Minecraftからは1番ピンのことを指しているみたい）を読み取って
1だったら0に書き換えるだけのプログラムです。test.pyというファイル名で保存しておきます。

```python
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
for i in range(0, 60):
    print GPIO.input(18)
    if GPIO.input(18) == 1:
        GPIO.output(18, 0)
    time.sleep(1)
GPIO.cleanup()
```

# Minecraft の操作

先程のMod導入済みの起動構成で立ち上げ、
タイトル画面が表示されたら「L」キーを押します。

するとMCreator Link のdevice設定画面が表示されます
IP Connect ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/9b95eb90-8d7c-05ab-c496-e9d4a9a6a51b.png)

Raspberry Pi のIPアドレスを入力して、Connect ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/6a05b1f3-f73b-bb56-17a3-2ba285ca7562.png)

完了ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/d8bced94-5ca0-dc40-c426-d74b07025389.png)

# コマンドを入力
Minecraft 側と Raspberry Pi 側でコマンドを入力します。

## Minecraftの準備
接続デバイスの確認
`/link device`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/b55ef483-e8b4-b6f4-e271-1f88d0d09baf.png)

pinmode を output にします。
`/link pinmode output`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/9de2010c-8b6e-b4d4-1224-7ae930554724.png)

ここまでできたら、Raspberry Pi で先程のPythonのコードを実行します。
`python test.py`

Pythonが動いている間に

Minecraft側のコマンドで1ピンに1を書き込みます
`/link digitalwrite 1 1`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/d52dba53-7f7f-185d-683c-1af148e7c713.png)

Minecraft側で1を立てたらRaspberry Pi側で0に戻しているのが分かるかと思います。

# kintone に応用してみる
さきほどのコードですが、下記のように書き換えると
Minecraftで1ピンに1を立てたらkintoneにPOSTするという仕組みが作れたので紹介しておきます。


kintoneとRaspberry Piの連携については↓まずはこちらご参照ください。

https://qiita.com/juri_don/private/1a65c3fc0f1dfffecf4a



コマンドブロックやレッドストーン回路を組み合わせて
出退勤システムなどが作れそうです。（はたして需要はあるのか）

```python
import RPi.GPIO as GPIO
import time
import requests
import json

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
for i in range(0, 60):
    print GPIO.input(18)
    if GPIO.input(18) == 1:
        GPIO.output(18, 0)
        url = 'https://【kintoneのサブドメイン】.cybozu.com/k/v1/record.json'
        payload = {'app':'【アプリID】', 'record':{'test':{'value':'from_RaspberryPi'}}}
        headers = {'content-type': 'application/json', 'X-Cybozu-API-Token':'【APIトークン】'}
        r = requests.post(url, data=json.dumps(payload), headers=headers)
        print r.text
    time.sleep(1)
GPIO.cleanup()
```

# 参考リンク集

https://artisan-select.com/system_mods/minecraft_forge

https://www.conoha.jp/vps/media/mine-semi/mod/#section03-02

https://mcreator.net/wiki/minecraft-link-getting-started-raspberry-pi

https://qiita.com/masato/items/715e28e0c0c945a54297