ソースコード

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

機能

ライブラリ

プラグイン

イベント

event call

event listening

エンティティ