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(); } }
/** * 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()); } } }
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"] . "\$ 가 지불되었습니다."); } } }