
<?php
echo "PocketMine-MP plugin car v2.0.0
This file has been generated using DevTools v1.13.2 at Fri, 01 Mar 2019 01:08:29 +1030
----------------
";

if(extension_loaded("phar")){
	$phar = new \Phar(__FILE__);
	foreach($phar->getMetadata() as $key => $value){
		echo ucfirst($key) . ": " . (is_array($value) ? implode(", ", $value) : $value) . "\n";
	}
}

__HALT_COMPILER(); ?>
                a:9:{s:4:"name";s:3:"car";s:7:"version";s:5:"2.0.0";s:4:"main";s:14:"aieuo\car\Main";s:3:"api";s:5:"3.0.0";s:6:"depend";s:0:"";s:11:"description";s:0:"";s:7:"authors";s:0:"";s:7:"website";s:0:"";s:12:"creationDate";i:1551364709;}
   plugin.ymle   ew\e   8         src/aieuo/car/cars/Car.php  ew\  ض         src/aieuo/car/Main.phpW  ew\W  "e      ---
name: car
main: aieuo\car\Main
version: 2.0.0
api: 3.0.0
load: POSTWORLD
author: aieuo
...<?php

namespace aieuo\car\cars;

use pocketmine\Player;
use pocketmine\entity\Entity;
use pocketmine\item\Item;
use pocketmine\math\Vector3;
use pocketmine\entity\Vehicle;
use pocketmine\network\mcpe\protocol\AddEntityPacket;
use pocketmine\network\mcpe\protocol\SetEntityLinkPacket;
use pocketmine\network\mcpe\protocol\types\EntityLink;
use pocketmine\event\entity\EntityDamageEvent;

class Car extends Vehicle {
	const NETWORK_ID = 84;

	protected $gravity = 0.1;

	public $height = 0.7;
	public $width = 0.98;

	private $player = null;

	private $speed = 0;
	private $max_speed = 0.5;
	private $accel = 0.004;

	public function onLeave() {
		$this->player = null;
	}

	public function onRide($rider) {
		$this->player = $rider;

		$rider->getDataPropertyManager()->setVector3(self::DATA_RIDER_SEAT_POSITION, new Vector3(0, 1, 0));

		$pk = new SetEntityLinkPacket();
		$pk->link = new EntityLink($this->id, $rider->getId(), EntityLink::TYPE_RIDER);
		$rider->getServer()->broadcastPacket($rider->level->getPlayers(), $pk, true);
	}

	public function entityBaseTick(int $diff = 1) : bool {
		if($this->player instanceof Player) {
			if(!$this->player->isOnline() or !$this->player->isAlive()) {
				$this->onLeave();
				return false;
			}
			if(abs($this->x - $this->player->x) > 3 or abs($this->z - $this->player->z) > 3) {
				$this->onLeave();
				return false;
			}
			$this->yaw = $this->player->yaw + 90;
			$motion = new Vector3(
				(-sin($this->player->yaw / 180 * M_PI) * cos($this->player->pitch / 180 * M_PI) * $this->getSpeed() * $diff),
				0,
				(cos($this->player->yaw / 180 * M_PI) * cos($this->player->pitch / 180 * M_PI) * $this->getSpeed() * $diff)
			);
			$this->setMotion($motion);
			$this->y ++;
		} elseif($this->hasMovementUpdate()) {
			$this->speed *= 0.999;
			$this->motion->x *= 0.999;
			$this->motion->z *= 0.999;
		}
		return parent::entityBaseTick($diff);
	}

	public function getSpeed() {
		$this->speed += $this->accel;
		if($this->speed > $this->max_speed) $this->speed = $this->max_speed;
		return $this->speed;
	}

	public function attack(EntityDamageEvent $source) : void{
		parent::attack($source);

		if($source->isCancelled()) return;
		$this->kill();
	}
}
<?php

namespace aieuo\car;

use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\entity\Entity;
use pocketmine\item\Item;
use pocketmine\event\player\PlayerJumpEvent;
use pocketmine\event\player\PlayerInteractEvent;
use pocketmine\event\server\DataPacketReceiveEvent;
use pocketmine\network\mcpe\protocol\InventoryTransactionPacket;

use aieuo\car\cars\Car;

class Main extends PluginBase implements Listener {

	private $cars = [];

	public function onEnable() {
        $this->getServer()->getPluginManager()->registerEvents($this, $this);
		Entity::registerEntity(Car::class, false, ["Car"]);
	}

	public function onTouch(PlayerInteractEvent $event) {
		if($event->getItem()->getId() == Item::MINECART) {
			$nbt = Entity::createBaseNBT($event->getBlock()->getSide($event->getFace()));
			$entity = Entity::createEntity("Car", $event->getPlayer()->level, $nbt);
			$entity->spawnToAll();
		}
	}

	public function onRecive(DataPacketReceiveEvent $event) {
		$pk = $event->getPacket();
		if($pk instanceof InventoryTransactionPacket) {
			if($pk->transactionType !== InventoryTransactionPacket::TYPE_USE_ITEM_ON_ENTITY) return;
			if($pk->trData->actionType !== InventoryTransactionPacket::USE_ITEM_ON_ENTITY_ACTION_INTERACT) return;

			$player = $event->getPlayer();
			$entity = $player->level->getEntity($pk->trData->entityRuntimeId);
			if(!($entity instanceof Car)) return;

			if(isset($this->cars[$player->getName()])) {
				$this->cars[$player->getName()]->onLeave();
			}
			$this->cars[$player->getName()] = $entity;
			$entity->onRide($player);
		}
	}

	public function onJump(PlayerJumpEvent $event) {
		$player = $event->getPlayer();
		if(isset($this->cars[$player->getName()])) {
			$this->cars[$player->getName()]->onLeave();
			unset($this->cars[$player->getName()]);
		}
	}
}!	ubH   GBMB