public function burstArrow(Player $player) { if ($player->getInventory()->getItemInHand()->getId() === Item::BOW) { $bow = $player->getInventory()->getItemInHand(); $nbt = new Compound("", ["Pos" => new Enum("Pos", [new Double("", $player->x), new Double("", $player->y + $player->getEyeHeight()), new Double("", $player->z)]), "Motion" => new Enum("Motion", [new Double("", -\sin($player->yaw / 180 * M_PI) * \cos($player->pitch / 180 * M_PI)), new Double("", -\sin($player->pitch / 180 * M_PI)), new Double("", \cos($player->yaw / 180 * M_PI) * \cos($player->pitch / 180 * M_PI))]), "Rotation" => new Enum("Rotation", [new Float("", $player->yaw), new Float("", $player->pitch)])]); $ev = new EntityShootBowEvent($player, $bow, Entity::createEntity("Arrow", $player->chunk, $nbt, $player), 1.5); $this->getServer()->getPluginManager()->callEvent($ev); if ($ev->isCancelled()) { $ev->getProjectile()->kill(); } else { $ev->getProjectile()->setMotion($ev->getProjectile()->getMotion()->multiply($ev->getForce())); if ($ev->getProjectile() instanceof Projectile) { $this->getServer()->getPluginManager()->callEvent($projectileEv = new ProjectileLaunchEvent($ev->getProjectile())); if ($projectileEv->isCancelled()) { $ev->getProjectile()->kill(); } else { $this->object_hash[spl_object_hash($ev->getProjectile())] = 1; $ev->getProjectile()->spawnToAll(); } } else { $this->object_hash[spl_object_hash($ev->getProjectile())] = 1; $ev->getProjectile()->spawnToAll(); } } } }
public function launch(Player $player) { $nbt = new Compound("", ["Pos" => new Enum("Pos", [new Double("", $player->x), new Double("", $player->y + $player->getEyeHeight()), new Double("", $player->z)]), "Motion" => new Enum("Motion", [new Double("", -sin($player->yaw / 180 * M_PI) * cos($player->pitch / 180 * M_PI)), new Double("", -sin($player->pitch / 180 * M_PI)), new Double("", cos($player->yaw / 180 * M_PI) * cos($player->pitch / 180 * M_PI))]), "Rotation" => new Enum("Rotation", [new Float("", $player->yaw), new Float("", $player->pitch)]), "Data" => new Byte("Data", $this->getDamage())]); $f = $this->f; $launched = Entity::createEntity($this->getEntityName(), $player->chunk, $nbt, $player); $launched->setMotion($launched->getMotion()->multiply($f)); if ($launched instanceof Projectile) { $player->server->getPluginManager()->callEvent($projectileEv = new ProjectileLaunchEvent($launched)); if ($projectileEv->isCancelled()) { $launched->kill(); } else { $launched->spawnToAll(); $player->level->addSound(new LaunchSound($player), $player->getViewers()); } } else { $launched->spawnToAll(); } return true; }
public function launch(Player $player) { $dir = $player->getDirectionVector(); $frontPos = $player->add($dir->multiply(1.1)); $nbt = new Compound("", ["Pos" => new Enum("Pos", [new Double("", $frontPos->x), new Double("", $frontPos->y + $player->getEyeHeight()), new Double("", $frontPos->z)]), "Motion" => new Enum("Motion", [new Double("", $dir->x), new Double("", $dir->y), new Double("", $dir->z)]), "Rotation" => new Enum("Rotation", [new Float("", 0), new Float("", 0)])]); $f = $this->f; $launched = Entity::createEntity($this->getEntityName(), $player->chunk, $nbt); $launched->setMotion($launched->getMotion()->multiply($f)); if ($launched instanceof Projectile) { $player->server->getPluginManager()->callEvent($projectileEv = new ProjectileLaunchEvent($launched)); if ($projectileEv->isCancelled()) { $launched->kill(); } else { $launched->spawnToAll(); $player->level->addSound(new LaunchSound($player), $player->getViewers()); } } else { $launched->spawnToAll(); } }
private function fire(Player $c, $fuse, $speed) { $pos = $c->getPosition(); $pos->y += $c->getEyeHeight(); $dir = $c->getDirectionVector(); $dir->x = $dir->x * $speed; $dir->y = $dir->y * $speed; $dir->z = $dir->z * $speed; $this->scorchit($pos, $dir, $fuse); }
/** * * @param Player $player * @param Position $fromPos */ public static function shootArrow(Player $player, Position $fromPos) { $nbt = new Compound("", ["Pos" => new Enum("Pos", [new Double("", $fromPos->x), new Double("", $fromPos->y + $player->getEyeHeight()), new Double("", $fromPos->z)]), "Motion" => new Enum("Motion", [new Double("", -\sin($player->yaw / 180 * M_PI) * \cos($player->pitch / 180 * M_PI)), new Double("", -\sin($player->pitch / 180 * M_PI)), new Double("", \cos($player->yaw / 180 * M_PI) * \cos($player->pitch / 180 * M_PI))]), "Rotation" => new Enum("Rotation", [new Float("", $player->yaw), new Float("", $player->pitch)])]); $diff = 3; $p = $diff / 20; $f = \min(($p * 2 + $p * 2) / 3, 1) * 2; $ev = new EntityShootBowEvent($player, Item::get(Item::BOW), Entity::createEntity("Arrow", $player->chunk, $nbt, $player, $f == 2 ? \true : \false), $f); $ev->getProjectile()->spawnToAll(); $player->level->addSound(new LaunchSound($player), $player->getViewers()); }
public function isInsidePortal(Player $player) { $block = $player->getLevel()->getBlock($player->temporalVector->setComponents(Math::floorFloat($player->x), Math::floorFloat($y = $player->y + $player->getEyeHeight()), Math::floorFloat($player->z))); return $block->getId() == 90; }
public function touch(Player $damager, Player $entity) { $damagerGameId = $this->players[$damager->getName()]; $entityGameId = $this->players[$entity->getName()]; if ($damagerGameId === $entityGameId && $damagerGameId !== "NONE") { $returnVal = $this->games[$damagerGameId]->touch($damager->getName(), $entity->getName()); switch ($returnVal) { case GameManager::RETURNTYPE_TOUCH_ALREADY_TOUCED_FAILED: $damager->sendMessage(TextFormat::RED . $this->getTranslation("TOUCH_ALREADY_TOUCHED")); break; case GameManager::RETURNTYPE_TOUCH_IN_PREPARATION_OR_REST_FAILED: $damager->sendMessage(TextFormat::RED . $this->getTranslation("PREPARATION_OR_REST")); break; case GameManager::RETURNTYPE_TOUCH_SUCCEED: $this->notifyTipForPlayers($damagerGameId, TextFormat::DARK_PURPLE . $this->getTranslation("TOUCH_MESSAGE", $damager->getName(), $entity->getName())); $this->notifyForPlayers($damagerGameId, TextFormat::DARK_PURPLE . $this->getTranslation("TOUCH_MESSAGE", $damager->getName(), $entity->getName())); $this->createTouchEffect($entity->getLocation(), $entity->getEyeHeight(), $damager->getLocation(), $damager->getEyeHeight()); break; } return $returnVal; } return false; }
public function __construct(Player $player, Item $item) { parent::__construct($player->getLevel()->getChunk($player->x >> 4, $player->z >> 4), new Compound("", ["Pos" => new Enum("Pos", [new Double("", $player->x), new Double("", $player->y + $player->getEyeHeight()), new Double("", $player->z)]), "Motion" => new Enum("Motion", [new Double("", 0), new Double("", 0), new Double("", 0)]), "Rotation" => new Enum("Rotation", [new Float("", 0), new Float("", 0)])])); $this->item = $item->getID() == 0 ? Item::get(1000, 0, 0) : $item; $this->player = $player; $this->yaw = $player->getYaw(); $this->pitch = $player->getPitch(); parent::spawnToAll(); }