https://github.com/toshia/miku_craft
Teocraft ではmikumikuworldブランチを使っている
Minecraftサーバープログラム を使いつつ、以下のことを実現するためのデーモン。
公式に配布されているMinecraftサーバープログラム は、標準入力に改行区切りでMinecraftコマンド を入力すると、ゲーム内でそのコマンドが実行されるようになっている。また、標準出力にはコマンドの結果やゲーム内チャットログなどが出力される。
この仕様を利用して、標準出力の内容からMinecraftプレイヤー の行動を検出し、それに対応した処理を実行し、必要に応じてコマンドを送信する。
Minecraftサーバープログラム の標準出力はminecraft プラグインにより解釈され、Pluggaloidを通じて他のプラグインに送られる。また、Pluggaloidを通じてminecraft プラグインがイベントを着信した場合、それに応じたコマンドがMinecraftサーバープログラム に送られる。
sequenceDiagram
participant minecraft.jar
participant minecraft as (plugin)<br>minecraft
participant active_players as (plugin)<br>active_players
participant c_active_players as (collection)<br>active_players
participant continuous_login as (plugin)<br>continuous_login
participant giftbox as (plugin)<br>giftbox
minecraft.jar ->> minecraft: write to STDOUT
Note over minecraft.jar, minecraft: [19:46:03] [Server thread/INFO]: osapon_ joined the game
minecraft -->> active_players: fire event<br>server_raw_output
active_players ->> c_active_players: add "osapon_"
c_active_players -->> continuous_login: fire event<br>active_players__add
continuous_login -->> continuous_login: fire event<br>scan_continuous_login_bonus
continuous_login -->> continuous_login: fire event<br>give_continuous_login_bonus
continuous_login -->> giftbox: fire event<br>giftbox_keep
Note over continuous_login,giftbox: 114514日記念!棒をプレゼント!
giftbox -->> giftbox: fire event<br>giftbox_give
par
giftbox -->> minecraft: fire event<br>minecraft_give_item
minecraft -->> minecraft: fire event<br>minecraft_run_command
minecraft ->> minecraft.jar: write to STDIN
Note over minecraft.jar, minecraft: /give osapon_ minecraft:stick
and
giftbox -->> minecraft: fire event<br>minecraft_tell
minecraft -->> minecraft: fire event<br>minecraft_run_command
minecraft ->> minecraft.jar: write to STDIN
Note over minecraft.jar, minecraft: /tell osapon_ 114514日記念!棒をプレゼント!
end