読者です 読者をやめる 読者になる 読者になる

ろきくんわーるど

フォロワーさん!ブログですよ!ブログ!

Minecraft鯖の状態を取得する - その2

Minecraft PHP

前回の記事の続き的なのです。

マインクラフトサーバーの設定ファイルのserver.propertiesにある。

 enable-query=true 

という項目、検索してもあまり詳細が出てこない。
Wikiなどでは「GameSpy4 protocol serverを許可するかどうか」という風に記載されている設定項目なのですが、なんじゃそりゃと。

外国のサイトなどのほうが情報が豊富なので探してみると、どうやらマルチサーバーのいろんな情報を出してくれるっぽいですね。
いろんな取得方法があると思いますが、探すのめんどくさいし日本語の情報が少ないので前回も使ったMinecraft APIを利用します。


利用するためにまずserver.propertiesの一部を以下のように編集します

enable-query=true
query.port=25565

このQueryというのを有効にすると、http://minecraft-api.com/v1/query/?server=play.example.comからJSON情報を受け取ることができます。
実際に僕のサーバーで取得すると、

{
    "status": true,
    "players": {
        "online": 1,
        "max": 20,
        "list": [
            "yutemu"
        ]
    },
    "motd": "rokicraft v1.7.4",
    "version": "1.7.4",
    "plugins": "",
    "software": "Vanilla"
}

となります。
前回の記事と比較すればわかりますが、サーバーに入っているプレイヤーIDが取得できるようになっています。yutemuくんが一人で遊んでますね。
あと、これはバニラ鯖なので関係無いですが、bukkitなどを利用してる場合、プラグイン情報も取得できるみたい。


で、プレイヤーIDが取得できれば、そのままオンラインのプレイヤー名を表示したり、

http://minecraft-api.com/v1/avatar/?player=Player

を利用して、こんな感じでオンライン状態のプレイヤーのスキンの顔部分を表示できたりします。

if( 0 < $info['players']['online']){ //誰かがオンラインなら
	//連想配列からキーを取得
	$keys = $info['players']['list']; 
	//配列数分ループ
	foreach ($keys as $keys) {
		//プレイヤースキンのアイコンを表示する
		$icon = 'http://minecraft-api.com/v1/avatar/?player='.$keys.'&size=64&helmet=true&.jpg'; 
		echo '<img src="'.$icon.'">';
	}
}

スキンの顔画像取得はパラメータとしてプレイヤーID以外に帽子の有無とサイズ指定があります。



ここまで詳細な情報が取得できるならスマートフォン向けにアプリとか作ってもいいかも(作れるとは言ってない