namedtag->Fuse)){ $this->fuse = $this->namedtag["Fuse"]; }else{ $this->fuse = 80; } } public function canCollideWith(Entity $entity){ return false; } public function getData(){ return [ 16 => ["type" => 0, "value" => $this->fuse], ]; } public function saveNBT(){ parent::saveNBT(); $this->namedtag->Fuse = new Byte("Fuse", $this->fuse); } public function onUpdate($currentTick){ if($this->closed){ return false; } $this->timings->startTiming(); $tickDiff = max(1, $currentTick - $this->lastUpdate); $this->lastUpdate = $currentTick; $hasUpdate = $this->entityBaseTick($tickDiff); if(!$this->dead){ $this->motionY -= $this->gravity; $this->move($this->motionX, $this->motionY, $this->motionZ); $friction = 1 - $this->drag; $this->motionX *= $friction; $this->motionY *= $friction; $this->motionZ *= $friction; $this->updateMovement(); if($this->onGround){ $this->motionY *= -0.5; $this->motionX *= 0.7; $this->motionZ *= 0.7; } $this->fuse -= $tickDiff; if($this->fuse <= 0){ $this->kill(); $this->explode(); }else{ $this->sendMetadata($this->getViewers()); } } return $hasUpdate or $this->fuse >= 0 or $this->motionX != 0 or $this->motionY != 0 or $this->motionZ != 0; } public function attack($damage, $source = EntityDamageEvent::CAUSE_MAGIC){ } public function heal($amount, $source = EntityRegainHealthEvent::CAUSE_MAGIC){ } public function explode(){ $this->server->getPluginManager()->callEvent($ev = new ExplosionPrimeEvent($this, 4)); if(!$ev->isCancelled()){ $explosion = new Explosion($this, $ev->getForce(), $this); if($ev->isBlockBreaking()){ $explosion->explodeA(); } $explosion->explodeB(); } } public function spawnTo(Player $player){ $pk = new AddEntityPacket(); $pk->type = PrimedTNT::NETWORK_ID; $pk->eid = $this->getID(); $pk->x = $this->x; $pk->y = $this->y; $pk->z = $this->z; $pk->did = 0; $player->dataPacket($pk); $pk = new SetEntityMotionPacket(); $pk->entities = [ [$this->getID(), $this->motionX, $this->motionY, $this->motionZ] ]; $player->dataPacket($pk); parent::spawnTo($player); } }