Pocketmine-MP非公式日本語wikiです。Pocketmine-MPに関する情報を発信しています。

エンティティとは

クリーパーやゾンビ、雷・点火されたTNTなどのものです。
種類はたくさんあります。
エンティティを扱うにはパケットを使う必要があります

エンティティをスポーンさせる(上級者向け)

以下のコードが必要です。
use pocketmine\level\Level;
use pocketmine\math\Vector3;
use pocketmine\level\Position;
use pocketmine\network\Network;
use pocketmine\network\protocol\AddEntityPacket;
use pocketmine\network\protocol\MovePlayerPacket;
use pocketmine\network\protocol\MoveEntityPacket;
use pocketmine\entity\Entity;
use pocketmine\level\particle\FloatingTextParticle;
function宣言の外に以下のコードを追加してください
const NETWORK_ID = 65;//TNTのID
スポーンさせるコード
 //$playerにプレイヤーオブジェクトを入れておいてください
 $players=Server::getInstance()->getOnlinePlayers();//サーバーにいる人全員

 $pk = new AddEntityPacket();//TNTのエンティティを追加
 $pk->type = 65;//TNTのID

 $pk->eid = Entity::$entityCount++;//エンティティIDを指定
 
 $name="点火されたTNT";//エンティティの名前
 
 $pk->metadata = [
		Entity::DATA_FLAGS => [Entity::DATA_TYPE_BYTE, 1 << Entity::DATA_FLAG_INVISIBLE],
		Entity::DATA_NAMETAG => [Entity::DATA_TYPE_STRING,$name],
		Entity::DATA_SHOW_NAMETAG => [Entity::DATA_TYPE_BYTE, 1],
		Entity::DATA_NO_AI => [Entity::DATA_TYPE_BYTE, 1]
 ];//メタデータ aiなしなので爆発しません

 $pk->speedX = 0;
 $pk->speedY = 0;
 $pk->speedZ = 0;

 $pk->yaw = $player->getYaw();
 $pk->pitch = $player->getPitch();

 $x=0;//x座標
 $y=0;//y座標
 $z=0;//z座標
 $pk->x = $x;
 $pk->y = $y;
 $pk->z = $x;

 Server::broadcastPacket($players,$pk);//パケットをみんなに送信

使用例

/tnt [playerの名前]でプレイヤーの座標に点火されたTNTを出現させます
動かないし爆発しません
動かしたいときはmetaのDATA-NO-AIを消してください

コード
<?php
namespace TNT;

use pocketmine\Player;
use pocketmine\Plugin\PluginBase;
use pocketmine\Server;
use pocketmine\event\Listener;

use pocketmine\command\Command;
use pocketmine\command\CommandSender;

use pocketmine\level\Level;
use pocketmine\math\Vector3;
use pocketmine\level\Position;
use pocketmine\network\Network;

use pocketmine\network\protocol\AddEntityPacket;
use pocketmine\network\protocol\MovePlayerPacket;
use pocketmine\network\protocol\MoveEntityPacket;
use pocketmine\entity\Entity;

use pocketmine\level\particle\FloatingTextParticle;

class TNTSpawn extends PluginBase implements Listener{
	const NETWORK_ID = 65;


	public function onCommand(CommandSender $sender, Command $command, $label, array $args){

		if($command->getName() == "tnt"){
			if(!isset($args[0])) return false;
			$player = $this->getServer()->getPlayer($args[0]);
      			if($player instanceOf Player){
 			$players=Server::getInstance()->getOnlinePlayers();//サーバーにいる人全員

 			$pk = new AddEntityPacket();//TNTのエンティティを追加
 			$pk->type = 65;//TNTのID

 		 	$pk->eid = Entity::$entityCount++;//エンティティIDを指定

 			$name="点火されたTNT";//エンティティの名前

 			$pk->metadata = [
			Entity::DATA_FLAGS => [Entity::DATA_TYPE_BYTE, 1 << Entity::DATA_FLAG_INVISIBLE],
			Entity::DATA_NAMETAG => [Entity::DATA_TYPE_STRING,$name],
			Entity::DATA_SHOW_NAMETAG => [Entity::DATA_TYPE_BYTE, 1],
			Entity::DATA_NO_AI => [Entity::DATA_TYPE_BYTE, 1]
  			];//メタデータ

  			$pk->speedX = 0;
  			$pk->speedY = 0;
  			$pk->speedZ = 0;

  			$pk->yaw = $player->getYaw();
  			$pk->pitch = $player->getPitch();

 			$x=$player->getX();//x座標
  			$y=$player->getY();//y座標
  			$z=$player->getZ();//z座標
  			$pk->x = $x;
  			$pk->y = $y;
  			$pk->z = $x;

 			Server::broadcastPacket($players,$pk);//パケットをみんなに送信!
			}else{
			$sender->sendMessage("プレイヤーがいません");
			}
		}
	}
}

メニュー

トップページ
メンバー募集メンバーページ

カウンター

訪問者数

アクセス数

フリーエリア



メンバーのみ編集できます