public function onShoot(EntityShootBowEvent $e) { if ($e->isCancelled()) { return; } $p = $e->getEntity(); if (!$p instanceof Player) { return; } $n = $p->getName(); if (isset($this->dumdums[$n])) { if ($this->misfire($e->getBow())) { $e->setCancelled(); // Bow broke! $p->sendMessage("Dumdum failure!"); $this->getServer()->getPluginManager()->callEvent($cc = new ExplosionPrimeEvent($p, 4)); if ($cc->isCancelled()) { return; } $explosion = new Explosion($p, $this->dumdums[$n][0]); if (!$this->dumdums[$n][1]) { $explosion->explodeA(); } $explosion->explodeB(); return; } $arrow = $e->getProjectile(); $arrow->namedtag->setName("dumdum:" . implode(":", $this->dumdums[$n])); return; } if (!isset($this->shooters[$n])) { return; } if (!isset($this->shooters[$n])) { return; } $e->setCancelled(); // Disable it and replace it with our own if (!$p->isCreative()) { if (!$this->checkAmmo($p, true)) { $p->sendMessage("You are out of grenades"); $p->sendMessage("RPG disarmed"); unset($this->shoters[$n]); return; } if ($this->misfire($e->getBow())) { $p->sendMessage("RPG misfired!"); $this->fire($p, mt_rand(1, $this->shooters[$n][0]), 0.01); return; } // Since we are cancelling the event, we change the damage later $this->getServer()->getScheduler()->scheduleDelayedTask(new PluginCallbackTask($this, [$this, "breakBow"], [$n]), 5); } //echo "FORCE: ". $e->getForce()."\n"; //## DEBUG $this->fire($p, $this->shooters[$n][0], $this->shooters[$n][1]); }