diff --git a/src/pocketmine/entity/Entity.php b/src/pocketmine/entity/Entity.php index bdb3fdad7..e70557005 100644 --- a/src/pocketmine/entity/Entity.php +++ b/src/pocketmine/entity/Entity.php @@ -30,6 +30,7 @@ use pocketmine\block\Block; use pocketmine\block\BlockFactory; use pocketmine\block\Water; use pocketmine\entity\projectile\Arrow; +use pocketmine\entity\projectile\Egg; use pocketmine\entity\projectile\Snowball; use pocketmine\event\entity\EntityDamageEvent; use pocketmine\event\entity\EntityDespawnEvent; @@ -219,6 +220,7 @@ abstract class Entity extends Location implements Metadatable{ public static function init(){ Entity::registerEntity(Arrow::class); + Entity::registerEntity(Egg::class); Entity::registerEntity(FallingSand::class); Entity::registerEntity(Item::class); Entity::registerEntity(PrimedTNT::class); diff --git a/src/pocketmine/entity/projectile/Egg.php b/src/pocketmine/entity/projectile/Egg.php new file mode 100644 index 000000000..2545098c7 --- /dev/null +++ b/src/pocketmine/entity/projectile/Egg.php @@ -0,0 +1,45 @@ +type = Egg::NETWORK_ID; + $pk->entityRuntimeId = $this->getId(); + $pk->position = $this->asVector3(); + $pk->motion = $this->getMotion(); + $pk->metadata = $this->dataProperties; + $player->dataPacket($pk); + + parent::spawnTo($player); + } + + //TODO: spawn chickens on collision +} \ No newline at end of file diff --git a/src/pocketmine/entity/projectile/Snowball.php b/src/pocketmine/entity/projectile/Snowball.php index fbadfad22..cd6771db2 100644 --- a/src/pocketmine/entity/projectile/Snowball.php +++ b/src/pocketmine/entity/projectile/Snowball.php @@ -23,40 +23,12 @@ declare(strict_types=1); namespace pocketmine\entity\projectile; -use pocketmine\entity\Entity; -use pocketmine\level\Level; -use pocketmine\nbt\tag\CompoundTag; use pocketmine\network\mcpe\protocol\AddEntityPacket; use pocketmine\Player; -class Snowball extends Projectile{ +class Snowball extends Throwable{ const NETWORK_ID = 81; - public $width = 0.25; - public $height = 0.25; - - protected $gravity = 0.03; - protected $drag = 0.01; - - public function __construct(Level $level, CompoundTag $nbt, Entity $shootingEntity = null){ - parent::__construct($level, $nbt, $shootingEntity); - } - - public function entityBaseTick(int $tickDiff = 1) : bool{ - if($this->closed){ - return false; - } - - $hasUpdate = parent::entityBaseTick($tickDiff); - - if($this->age > 1200 or $this->isCollided){ - $this->kill(); - $hasUpdate = true; - } - - return $hasUpdate; - } - public function spawnTo(Player $player){ $pk = new AddEntityPacket(); $pk->type = Snowball::NETWORK_ID; diff --git a/src/pocketmine/entity/projectile/Throwable.php b/src/pocketmine/entity/projectile/Throwable.php new file mode 100644 index 000000000..10738623c --- /dev/null +++ b/src/pocketmine/entity/projectile/Throwable.php @@ -0,0 +1,49 @@ +closed){ + return false; + } + + $hasUpdate = parent::entityBaseTick($tickDiff); + + if($this->age > 1200 or $this->isCollided){ + //TODO: hit particles + $this->kill(); + $hasUpdate = true; + } + + return $hasUpdate; + } +} \ No newline at end of file diff --git a/src/pocketmine/item/Egg.php b/src/pocketmine/item/Egg.php index b13868f06..51a6f3f25 100644 --- a/src/pocketmine/item/Egg.php +++ b/src/pocketmine/item/Egg.php @@ -23,12 +23,21 @@ declare(strict_types=1); namespace pocketmine\item; -class Egg extends Item{ +class Egg extends ProjectileItem{ public function __construct(int $meta = 0){ parent::__construct(self::EGG, $meta, "Egg"); } - //TODO + public function getMaxStackSize() : int{ + return 16; + } + public function getProjectileEntityType() : string{ + return "Egg"; + } + + public function getThrowForce() : float{ + return 1.5; + } }