PMMPプラグイン用サンプルコード集
PocketMine-MPのプラグイン制作に使える簡単なコード一覧を作ってみました。
これからプラグイン制作を始めてみようと思っている方の参考になれば幸いです。

Playerオブジェクト関連


•指定したプレイヤーがいるかどうか確認する
Playerオブジェクトを取得した際にそのプレイヤーが居なかった場合はfalseが返ってくるので、それを利用して判別します。

$player = $this->api->player->get("プレイヤー名"); //Playerオブジェクトの取得
if ($player instanceof Player) {
    //いる
} elseif ($player == false) {
    //いない
}


•個人にチャットを送る
メッセージを送る相手がサーバーに居ないとPlayerオブジェクト以外が返ってきてエラーを起こすので、確認の為のif文を設けてあります。以後同じように確認が必要なコードが続きますが、このことについては省いて説明していきます。

$player = $this->api->player->get("プレイヤー名"); //Playerオブジェクトの取得
if ($player instanceof Player) { //Playerオブジェクトかどうか
    $player->sendChat("メッセージ");
}


もしくは、こちらの方法ならばエラーは起きません。

$this->api->chat->sendTo(false, "メッセージ", array("プレイヤー名"));


•プレイヤーの情報を取得する
Playerオブジェクトからはそのプレイヤーの様々な情報を取得できるので、その一例を挙げておきます。

$player = $this->api->player->get("プレイヤー名"); /Playerオブジェクトの取得
$player->username; //ユーザー名
$player->ip; //IPアドレス
$player->gamemode; //ゲームモード
$player->level->getName(); //そのプレイヤーのいるレベル名
$player->entity->x; //x座標
$player->entity->getDirection(); //向き
(0 -> xの正方向, 1 -> zの正方向, 2 -> xの負, 3 -> zの負)


•特定のプレイヤーを硬直させる
移動はおろか、首を動かすこともできなくなります。

$player = $this->api->player->get("プレイヤー名"); //Playerオブジェクトの取得
$player->blocked = true;


•プレイヤーのインベントリを空にする

$player = $this->api->player->get("プレイヤー名"); //Playerオブジェクトの取得
$air = BlockAPI::getItem(Air, 0, 0);
foreach ($player->inventory as $slot => $item) {
    if ($item->getID() !== Air) {
       $player->inventory[$slot] = $air;
    }
}
$player->sendInventorySlot();


•プレイヤーの防具を脱がす

$player = $this->api->player->get("プレイヤー名");
$air = BlockAPI::getItem(Air, 0, 0);
$player->armor = array($air, $air, $air, $air);
$player->sendArmor($player);


•プレイヤーのリスポーン地点を変更する
あくまでも変更されるのはリスポーン地点なので、サーバーに入った時にスポーンするスポーン地点は変更されません。

$player = $this->api->player->get("プレイヤー名");
$vector = new Vector3(x座標, y座標, z座標);
$player->setSpawn($vector);


•全プレイヤーのリスポーン地点を変更する

$players = $this->api->player->getAll();
$vector = new Vector3(x座標, y座標, z座標);
foreach ($players as $player) {
    $player->setSpawn($vector);
}



Levelオブジェクト関連


•指定した座標のブロックの情報を取得する
Blockオブジェクトを取得してそこから情報を読み取ります。

$vector = new Vector3(x座標, y座標, z座標);
$level = $this->api->level->getDefault(); //Levelオブジェクトの取得
$block = $level->getBlock($vector); //Blockオブジェクトの取得
$block->getID(); //ブロックID
$block->getMetadata(); //メタ値
$block->getName(); //ブロック名


•ブロックを設置する
ブロックIDと座標を指定して設置します。

$block = BlockAPI::get(ブロックID, メタ値); //Blockオブジェクトの生成
$vector = new Vector3(x座標, y座標, z座標);
$level = $this->api->level->getDefault(); //Levelオブジェクトの取得
$level->setBlockRaw($vector, $block, false);


•ブロックを破壊する
指定した座標に存在するブロックを破壊(空気に置き換え)します。

$vector = new Vector3(x座標, y座標, z座標);
$level = $this->api->level->getDefault(); //Levelオブジェクトの取得
$level->setBlockRaw($vector, new AirBlock(), false);


•アイテムをドロップする

$item = BlockAPI::getItem(アイテムID, 個数, ダメージ値);
$level = $this->api->level->getDefault();
$position = new Position(x座標, y座標, z座標, $level);
$this->api->entity->drop($position, $item);



Tileオブジェクト関連


•看板を立てる
座標と看板に書き込むメッセージを指定して看板を設置します。

$level = $this->api->level->getDefault(); //Levelオブジェクトの取得
$this->api->tile->addSign($level, x座標, y座標, z座標, array("一行目", "二行目", "三行目", "四行目"));


看板に書かれている文章を取得する
座標からTileオブジェクトを取得して看板の情報を読み取ります。座標先が看板じゃない場合エラーが発生するので判別式をつけておいた方が良いです。

$level = $this->api->level->getDefault();
$position = new Position(x座標, y座標, z座標, $level);
$tile = $this->api->tile->get($position); //Tileオブジェクトの取得
if ($tile instanceof Tile) { //Tileオブジェクトかどうか
    $tile->data["line1"]; //一行目
    $tile->data["line2"]; //二行目
    $tile->data["line3"]; //三行目
    $tile->data["line4"]; //四行目
}



その他


•指定した地点を爆破する
Explosionオブジェクトを生成して指定した座標で爆破させます。数値を変更することで爆発の規模を変えることができますが、大きくしすぎるとサーバーが重くなるので注意。

$level = $this->api->level->getDefault();
$explosion = new Explosion(new Position(x座標, y座標, z座標, $level), 3); //Explosionオブジェクトの生成
$explosion->explode();


•t秒後に指定した関数を実行する
Schedule関数を用いて関数を実行する予定を立てます。

$t = 秒数;
$this->api->schedule($t * 20, array($this, "関数名"), array(引数1, 引数2...), false, false);


•t秒毎に指定した関数を実行する
Schedule関数を用いて定期的に同じ関数を自動で実行させます。

$t = 秒数;
$this->api->schedule($t * 20, array($this, "関数名"), array(引数1, 引数2...), true, false);



Playerオブジェクトの取得方法


•プレイヤー名から取得
プレイヤー名を指定してオブジェクトを取得します。そのプレイヤーがその時点でサーバーに居なかった場合、オブジェクトの代わりにfalseが代入されます。

$player = $this->api->player->get("プレイヤー名");


•EntityIDから取得
ほとんど使う機会がありません。

$player = $this->api->player->getByEID(EntityID);


•全プレイヤーのオブジェクトを取得
全プレイヤーのオブジェクトを配列に入れて渡してくれます。この後にforeachなどを使えば全員にそれぞれ同じ処理を行うことができます。

$players = $this->api->player->getAll();



Levelオブジェクトの取得方法


•デフォルトワールドのLevelを取得
デフォルトに設定されているワールドのLevelオブジェクトを取得します。マルチワールド機能を使っていない人向けであれば基本これで構いません。

$level = $this->api->level->getDefault();


•ワールド名から取得
ワールド名を指定してオブジェクトを取得します。そのワールドが存在していない場合、代わりにfalseが代入されます。

$level = $this->api->level->get("ワールド名");


•Playerオブジェクトから取得
PlayerオブジェクトにはそのプレイヤーがいるワールドのLevelオブジェクトが格納されるようになっているので、そこからも取得できます。
同じようにBlockオブジェクトからも取得可能です。

$player = $this->api->player->get("プレイヤー名");
$level = $player->level;

関連記事
スポンサーサイト




Pagination

Trackback

Trackback URL

http://mattyaphone.blog.fc2.com/tb.php/107-488ac93f

Comment

このコメントは管理者の承認待ちです
  • 2014/09/18 23:45

Post Your Comment

コメント:登録フォーム
公開設定

Utility

Profile

おまっちゃお

Author:おまっちゃお
ブログ開設日:2011/12/31
本ブログの記事の内容を参考にして起こった如何なるトラブルに対しても管理人は一切の責任を取りません。全て自己責任でお願いします。

CATEGORY

Search

リポジトリ

http://dl.dropbox.com/u/35617758/apt/

ブロとも申請フォーム

アクセス解析

Powered By FC2ブログ