PyCraft
Multiplay server of Minecraft Pocket Edition
I plan to replace this project with PyMineHub. PyMineHub will be working with Raspberry Pi.
Support version:
- Python 3.5
- Minecraft Pocket Edition 0.13.1
- Scratch 1.4
(Written in Japanese)
使用方法
- Python 3.5 をインストールする
- PyCraft を展開する
$ cd PyCraft
$ export PYTHONPATH=src
$ python3.5 src/pycraft/main.py
を実行するbash
では$ source bashrc
とした後に$ pycraft
とすれば起動します。
(誰か起動スクリプト書いてくれないかな...)
設定
src/pycraft/service/config.py
で設定を変えられます。
(いずれ設定ファイルで設定するようにする予定)
できること
- マルチプレイヤー ログイン/ログアウト (同時 2 人までしか試してないけど...)
- ワールド生成 (最低限...)
- 樹木 : 1 種類
- 鉱石 : ない
- 草花 : ない
- 諸々 : ない...
- ブロック破壊 (出現するアイテムの種類は違うけど...)
- 砂、砂利 : 落下します。
- アイテム拾得 (できて当たり前?)
- アイテム作成 (そこそこ作れるはず)
- 動作確認済 : 作業台、ストーンカッター、チェスト、かまど、ドア、看板、松明
- ツルハシ、シャベル、斧、クワ、剣 : 壊れます。
- 生物スポーン (明るさに関係なく出現します...)
- 当たり判定に失敗しており、壁に埋まります。
- 真っ直ぐに寄ってきます。
- コウモリ : 羽を閉じたまま飛びます。
- Scratch 1.4 remote sensor connections を使用して操作できます。
- 攻撃 (できちゃう)
- 倒すとアイテムを落とします。
できないこと
他、たくさん。
何もできないじゃん。 という方には Pocket Mine MP をお勧めします。
Scratch 1.4 連携
Scratch 1.4 には remote sensor connections という機能があります。 この機能を使い Scratch から Minecraft の生物を操作できるようにしています。 remote sensor connections は Scratch 2.0 にはありません。
使用方法
- Scratch 1.4 を用意する
- Scratch で remote sensor connections を有効にする
- Scratch が起動している PC の IP アドレスを調べる
- PyCraft の設定を変更する
src/pycraft/service/config.py
のscratch_network
を変更する192.168.197.149
なのでscratch_network = '192.168.197.0/24'
192.168.20.15
ならばscratch_network = '192.168.20.0/24'
- PyCraft を起動する
- 自動的に
scratch_network
で指定したネットワークをスキャンします - 接続に成功すると PyCraft を起動した画面に
new scratch agent
と表示されます - Scratch には
enabled
がおくられ(broadcast され)ます。
- 自動的に
- Scratch でプログラムをつくる
- メッセージがおくられて(broadcast されて)くるときには、 『センサーのあたい(sensor value)』に値が設定されます
- メッセージをおくる(broadcast する)ときには、 『へんすう(variable)』に値を設定してからおくります
- PyCraft からおくられる(broadcast される)メッセージと
設定される『センサーのあたい(sensor value)』
enabled
: PyCraft と接続が成功したときmob found
:search mob
をおくり、 生物が見つかったときmob_id
: 生物の番号
mob not found
:search mob
をおくり、 生物が見つからなかったときstatus found
:show status
をおくり、 生物の状態がわかった(生きていた)ときhead_yaw
: 頭の水平向き(-180度〜180度、体の向きとの差)pitch
: 頭の垂直向き(-90度〜90度)
status not found
:show status
をおくり、 生物の状態がわからなかった(死亡していた)ときplayer found
:search player
をおくり、 生物がプレイヤーを発見したときplayer_id
: プレイヤーの番号distance
: 生物とプレイヤーの距離angle_h
: 頭の水平向きとプレイヤーの位置の差(-180度〜180度)angle_v
: 頭の垂直向きとプレイヤーの位置の差(-90度〜90度)
player not found
:search player
をおくり、 生物がプレイヤーを発見できなかったとき
- Scratch からおくる(broadcast する)メッセージと
設定する『へんすう(variable)』
search mob
: 生物を探すmob_type
: 探す生物の種類(整数)
control
: 生物を支配するmob_id
: 支配する生物の番号(mob_found
で得たmob_id
)mob_name
: 生物につける名前(日本語可)
free
: 生物を解放するmob_id
: 解放する生物の番号(control
で指定したmob_id
)
show status
: 生物の状態を見るmob_id
: 対象の生物の番号(control
で指定したmob_id
)
search player
: 生物に周囲のプレイヤーを探させるmob_id
: 対象の生物の番号(control
で指定したmob_id
)
move
: 生物を移動させるmob_id
: 対象の生物の番号(control
で指定したmob_id
)yaw
: 体の向き(-360度〜360度、現在の向きとの差)head_yaw
: 頭の水平向き(-180度〜180度、体の向きとの差)pitch
: 頭の垂直向き(-180度〜180度、現在の向きとの差)movement
: 前後の移動量(-1.0〜1.0)
mob_type |
種類 |
---|---|
10 | ニワトリ |
11 | 牛 |
12 | 豚 |
13 | 羊 |
14 | オオカミ |
15 | 村人 |
16 | ムーシュルーム |
17 | イカ |
19 | コウモリ |
32 | ゾンビ |
33 | クリーパー |
34 | スケルトン |
35 | クモ |
36 | ゾンビピッグマン |
37 | スライム |
38 | エンダーマン |
39 | シルバーフィッシュ |
40 | 洞窟グモ |
41 | ガスト |
42 | マグマキューブ |
このプロジェクトについて
PyCraft は Python を学習するための題材として開発をはじめたプロジェクトです。 scratchpy という Scratch 1.4 と連携する Python ライブラリを発見し、 ほんの思いつきから Scratch 1.4 連携機能を実装しました。
PyCraft は Pocket Mine MP のソースコードを元に書かれています。 はじめは Pocket Mine MP のソースコードの一部を Python 2.7 に移植しました。 途中で Python 3.5 に移植しています。 Pocket Mine MP から移植した時点では Minecraft のバージョンは 0.11 でした。 プロトコルを解析しながら 0.13 で動くようにしましたが、多くの機能は未実装です。
時間に余裕があるときに開発を継続する予定です。