public function onShootRun(array $args, Player $player)
 {
     if (!isset($args[0]) or !is_numeric($args[0])) {
         return self::WRONG_USE;
     }
     $length = floatval(array_shift($args));
     $p1 = $player->getPosition()->floor();
     $p2 = $player->add($player->getDirectionVector()->multiply($length))->floor();
     if ($p1->y < 0 or $p1->y > (defined($path = "pemapmodder\\worldeditart\\MAX_WORLD_HEIGHT") ? constant($path) : 127)) {
         return "You must be inside the building height!";
     } elseif ($p2->y < 0 or $p2->y > (defined($path = "pemapmodder\\worldeditart\\MAX_WORLD_HEIGHT") ? constant($path) : 127)) {
         return "The selected area exceeded the world height limit!";
     }
     $player->getLevel()->loadChunk($p2->x >> 4, $p2->z >> 4);
     while (isset($args[0])) {
         $arg = array_shift($args);
         switch ($arg) {
             case "a":
             case "adverse":
                 $cache = [$p1, $p2];
                 $p1 = $cache[1];
                 $p2 = $cache[0];
                 break;
         }
     }
     $level = $player->getLevel();
     $this->getMain()->setSelection($player, $sel = new CuboidSpace($p1 = Position::fromObject($p1, $level), $p2 = Position::fromObject($p2, $level)));
     return "Cuboid selection set: {$sel} (" . count($sel->getPosList()) . " blocks)";
 }
 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();
     }
 }
Exemple #3
0
 /**
  * Spawn a carpet of bomb!
  *
  * @param Player $player
  */
 public function nuke(Player $player)
 {
     for ($x = -10; $x <= 10; $x += 5) {
         for ($z = -10; $z <= 10; $z += 5) {
             $this->createTNT($player->add($x, 0, $z), $player->getLevel());
         }
     }
 }
Exemple #4
0
 public function particleToPotato()
 {
     $this->potato->getLevel()->addParticle(new FloatingTextParticle($this->potato->add(0.1 * mt_rand(1, 9) * mt_rand(-1, 1), 0.1 * mt_rand(5, 9), 0.1 * mt_rand(1, 9) * mt_rand(-1, 1)), TextFormat::RED . $this->time));
     $this->potato->getLevel()->addParticle(new DustParticle($this->potato->add(mt_rand(-3, 3), mt_rand(-3, 3), mt_rand(-3, 3)), 211, 161, 80, 255));
 }
 public function particle(Player $player)
 {
     $pos = $player->add(0, 2, 0);
     $player->getLevel()->addParticle(new DustParticle($pos->setComponents($pos->x + 0.4, $pos->y, $pos->z), 188, 32, 255, 255));
     $player->getLevel()->addParticle(new DustParticle($pos->setComponents($pos->x, $pos->y, $pos->z + 0.4), 188, 32, 255, 255));
     $player->getLevel()->addParticle(new DustParticle($pos->setComponents($pos->x - 0.6, $pos->y, $pos->z), 188, 32, 255, 255));
     $player->getLevel()->addParticle(new DustParticle($pos->setComponents($pos->x, $pos->y, $pos->z - 0.6), 188, 32, 255, 255));
     $player->getLevel()->addParticle(new DustParticle($pos->setComponents($pos->x + 0.4, $pos->y, $pos->z + 0.4), 188, 32, 255, 255));
 }
 public function NydusCanal(Player $player, $warp = null)
 {
     if ($warp == null) {
         return false;
     }
     if (isset(explode("[", $warp)[1])) {
         $level = explode("[", $warp)[1];
         $level = explode("]", $level)[0];
         $level = $this->getServer()->getLevelByName($level);
         if (!$level instanceof Level) {
             $player->sendMessage(TextFormat::DARK_AQUA . $level . "맵 폴더를 찾을 수 없습니다 !, 워프불가");
             return false;
         }
         $pos = $level->getSafeSpawn();
         if ($pos == false) {
             $player->sendMessage(TextFormat::RED . "해당 맵의 기본스폰위치를 찾을 수없습니다, 워프불가");
             return false;
         }
         $player->teleport($pos);
         return true;
     }
     if (!isset($this->NydusCanal_List["warp"][$warp])) {
         $player->sendMessage(TextFormat::DARK_AQUA . "해당 워프가 삭제되어있습니다 !, 워프불가");
         return false;
     }
     $x = $this->NydusCanal_List["warp"][$warp]['x'];
     $y = $this->NydusCanal_List["warp"][$warp]['y'];
     $z = $this->NydusCanal_List["warp"][$warp]['z'];
     $yaw = $this->NydusCanal_List["warp"][$warp]['yaw'];
     $pitch = $this->NydusCanal_List["warp"][$warp]['pitch'];
     $level = $this->getServer()->getLevelByName($this->NydusCanal_List["warp"][$warp]['level']);
     if (!$level instanceof Level) {
         $player->sendMessage(TextFormat::DARK_AQUA . $this->NydusCanal_List["warp"][$warp]['level'] . "맵 폴더를 찾을 수 없습니다 !, 워프불가");
         return false;
     }
     if (!$player->hasPermission("nyduscanal.lockwarp")) {
         if (isset($this->NydusCanal_List["locked"][$warp])) {
             $player->sendMessage(TextFormat::DARK_AQUA . "해당 워프가 잠겨있습니다, 워프불가");
             return false;
         }
     }
     if (isset($this->NydusCanal_List["warp"][$warp]["cooltime"])) {
         if (!isset($this->customCooltime[$warp][$player->getName()])) {
             $this->customCooltime[$warp][$player->getName()] = date("Y-m-d H:i:s");
         } else {
             $before = $this->makeTimestamp($this->customCooltime[$warp][$player->getName()]);
             $after = $this->makeTimestamp(date("Y-m-d H:i:s"));
             $timeout = intval($after - $before);
             if ($timeout < (int) $this->NydusCanal_List["warp"][$warp]["cooltime"]) {
                 $player->sendMessage(TextFormat::RED . "워프 쿨타임이 아직 남았습니다!");
                 $player->sendMessage(TextFormat::RED . intval((int) $this->NydusCanal_List["warp"][$warp]["cooltime"] - $timeout) . "초 후에 이용가능합니다!");
                 return false;
             } else {
                 unset($this->customCooltime[$warp][$player->getName()]);
             }
         }
     }
     if (isset($this->timeout[$warp][$player->getName()])) {
         $player->sendMessage(TextFormat::DARK_AQUA . "[ 시간제한 ] 시간제한이 해제되었습니다.");
         $this->timeout[$warp]["cancel"][$player->getName()] = 1;
     }
     if (isset($this->NydusCanal_List["warp"][$warp]["timeout"])) {
         if (!isset($this->timeout[$warp][$player->getName()])) {
             $this->timeout[$warp][$player->getName()] = $player->add(2);
             $player->sendMessage(TextFormat::RED . "[ 주의 ] [ 시간제한 ] " . $this->NydusCanal_List["warp"][$warp]["timeout"] . "초 뒤에 이전 위치로 복귀됩니다!");
             $this->getServer()->getScheduler()->scheduleDelayedTask(new CallbackTask([$this, "warpTimeout"], [$player, $warp]), 20 * $this->NydusCanal_List["warp"][$warp]["timeout"]);
         }
     }
     if (isset($this->NydusCanal_List["warp"][$warp]["price"]) and $this->checkEconomyAPI()) {
         if (isset(explode("+", $this->NydusCanal_List["warp"][$warp]["price"])[1])) {
             $this->economyAPI->addMoney($player, explode("+", $this->NydusCanal_List["warp"][$warp]["price"])[1]);
         } else {
             $myMoney = $this->economyAPI->myMoney($player);
             if ($myMoney - $this->NydusCanal_List["warp"][$warp]["price"] < 0) {
                 $player->sendMessage(TextFormat::DARK_AQUA . "[ 서버 ] 이동비용이 부족합니다, 워프불가능");
                 return false;
             }
             $this->economyAPI->reduceMoney($player, $this->NydusCanal_List["warp"][$warp]["price"]);
         }
     }
     $player->teleport(new Position($x, $y, $z, $level), $yaw, $pitch);
     $player->addEntityMotion(0, 0, 0.6, 0);
     $player->sendMessage(TextFormat::LIGHT_PURPLE . "[ 서버 ] " . $warp . " (으)로 워프 되었습니다");
     $this->particle($player);
     if (isset($this->NydusCanal_List["warp"][$warp]["price"]) and $this->checkEconomyAPI()) {
         if (isset(explode("+", $this->NydusCanal_List["warp"][$warp]["price"])[1])) {
             $player->sendMessage(TextFormat::DARK_AQUA . "[ 서버 ] 보상금액 " . $this->NydusCanal_List["warp"][$warp]["price"] . "\$ 가 지급되었습니다.");
         } else {
             $player->sendMessage(TextFormat::DARK_AQUA . "[ 서버 ] 워프비용 " . $this->NydusCanal_List["warp"][$warp]["price"] . "\$ 가 지불되었습니다.");
         }
     }
 }