public function onUpdate($currentTick) { if ($this->closed) { return false; } $this->timings->startTiming(); $hasUpdate = parent::onUpdate($currentTick); if (!$this->hadCollision and $this->isCritical) { $this->level->addParticle(new CriticalParticle($this->add($this->width / 2 + mt_rand(-100, 100) / 500, $this->height / 2 + mt_rand(-100, 100) / 500, $this->width / 2 + mt_rand(-100, 100) / 500))); } elseif ($this->onGround) { $this->isCritical = false; } if ($this->age > 1200 or $this->isCollided) { $hasUpdate = true; if ($this->isCollided and $this->canExplode) { $this->server->getPluginManager()->callEvent($ev = new ExplosionPrimeEvent($this, 2.8)); if (!$ev->isCancelled()) { $explosion = new Explosion($this, $ev->getForce(), $this->shootingEntity); if ($ev->isBlockBreaking()) { $explosion->explodeA(); } $explosion->explodeB(); } } $this->kill(); } $this->timings->stopTiming(); return $hasUpdate; }
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 onRun($currentTick) { $explosion = new Explosion(new Position($this->entity->getX(), $this->entity->getY(), $this->entity->getZ(), $this->entity->getLevel()), $this->radius); if (!$this->entity->isAlive()) { return; } $this->entity->close(); if ($explosion->explodeA()) { $explosion->explodeB(); } }
public function blowPlayer($pl, $yield, $magic) { $this->owner->getServer()->getPluginManager()->callEvent($cc = new ExplosionPrimeEvent($pl, $yield)); if ($cc->isCancelled()) { return false; } $explosion = new Explosion($pl, $yield); if (!$magic) { $explosion->explodeA(); } $explosion->explodeB(); return true; }
public function onProjectileHit(ProjectileHitEvent $event) { $entity = $event->getEntity(); if ($entity instanceof Arrow) { $theX = $entity->getX(); $theY = $entity->getY(); $theZ = $entity->getZ(); $level = $entity->getLevel(); $thePosition = new Position($theX, $theY, $theZ, $level); $theExplosion = new Explosion($thePosition, 5, NULL); $theExplosion->explode(); $level->remove($entity); } }
public function onMove(PlayerMoveEvent $event) { $cfg = $this->getConfig(); $player = $event->getPlayer(); $c4 = $event->getPlayer()->getLevel()->getBlock($event->getPlayer()->floor()->subtract(0, 1)); $e = new Explosion($player, $cfg->get("Explosion-Radius")); if ($c4->getId() === $cfg->get("C4-Block")) { if ($cfg->get("Remove-Terrain") == true) { $player->sendMessage(TextFormat::YELLOW . "[C-4]" . TextFormat::RED . " Booom!!"); $e->explodeA(); $e->explodeB(); } else { $player->sendMessage(TextFormat::YELLOW . "[C-4]" . TextFormat::RED . " Booom!!"); $e->explodeB(); } } }
public function explodePlayer($player, $sender, $force) { $exploded = false; foreach ($this->getServer()->getOnlinePlayers() as $p) { if ($p->getName() === $player) { $sender->sendMessage("§f[§cEYF§f] §9" . $player . " §fwas blown up!"); $p->sendMessage("§c" . $sender->getName() . " §fblew you up!"); $position = $p->getPosition(); $explosion = new Explosion($position, $force, $this); $explosion->explodeB(); $exploded = true; break; } } if ($exploded === false) { $sender->sendMessage("§f[§cEYF§f] Could not find player §9" . $player); } }
public function onActivate(Item $item, Player $player = null) { if ($this->getLevel()->getDimension() == Level::DIMENSION_NETHER) { $explosion = new Explosion($this, 6, $this); $explosion->explode(); return true; } $time = $this->getLevel()->getTime() % Level::TIME_FULL; $isNight = ($time >= Level::TIME_NIGHT and $time < Level::TIME_SUNRISE); if ($player instanceof Player and !$isNight) { $player->sendMessage(TextFormat::GRAY . "You can only sleep at night"); return true; } $blockNorth = $this->getSide(2); //Gets the blocks around them $blockSouth = $this->getSide(3); $blockEast = $this->getSide(5); $blockWest = $this->getSide(4); if (($this->meta & 0x8) === 0x8) { //This is the Top part of bed $b = $this; } else { //Bottom Part of Bed if ($blockNorth->getId() === $this->id and ($blockNorth->meta & 0x8) === 0x8) { $b = $blockNorth; } elseif ($blockSouth->getId() === $this->id and ($blockSouth->meta & 0x8) === 0x8) { $b = $blockSouth; } elseif ($blockEast->getId() === $this->id and ($blockEast->meta & 0x8) === 0x8) { $b = $blockEast; } elseif ($blockWest->getId() === $this->id and ($blockWest->meta & 0x8) === 0x8) { $b = $blockWest; } else { if ($player instanceof Player) { $player->sendMessage(TextFormat::GRAY . "This bed is incomplete"); } return true; } } if ($player instanceof Player and $player->sleepOn($b) === false) { $player->sendMessage(TextFormat::GRAY . "This bed is occupied"); } return true; }
public function onCommand(CommandSender $sender, Command $cmd, $label, array $args) { if ($cmd->getName() != "blowup") { return false; } if (count($args) == 0) { return false; } $pl = $this->owner->getServer()->getPlayer($args[0]); if (!$pl) { $sender->sendMessage(mc::_("%1% not found.", $args[0])); return true; } array_shift($args); $yield = 5; $magic = false; foreach ($args as $i) { if (is_numeric($i)) { $yield = intval($i); if ($yield < 1) { $yield = 1; } } elseif (strtolower($i) == "magic") { $magic = true; } elseif (strtolower($i) == "normal") { $magic = false; } } $this->owner->getServer()->getPluginManager()->callEvent($cc = new ExplosionPrimeEvent($pl, $yield)); if ($cc->isCancelled()) { return true; } $explosion = new Explosion($pl, $yield); if (!$magic) { $explosion->explodeA(); } $explosion->explodeB(); return true; }
public function onRun($currentTick) { if ($this->event->isCancelled()) { return; } $arrow = $this->event->getEntity(); $murder = $this->event->getEntity()->shootingEntity; if (!$arrow instanceof Arrow) { return; } if (!$murder instanceof Player) { return; } $this->server->getPluginManager()->callEvent($ev = new ExplosionPrimeEvent($arrow, 3.2)); if (!$ev->isCancelled()) { $arrow->getLevel()->addParticle(new MobSpawnParticle($arrow, 2, 2)); $explosion = new Explosion($arrow, $ev->getForce(), $murder); $explosion->explodeB(); } $reflection_class = new \ReflectionClass($arrow); $property = $reflection_class->getProperty('age'); $property->setAccessible(true); $property->setValue($arrow, 7000); }
public function removeArrow(Event $event) { if ($event->isCancelled()) { return; } $arrow = $event->getEntity(); $murder = $event->getEntity()->shootingEntity; $this->getServer()->getPluginManager()->callEvent($ev = new ExplosionPrimeEvent($arrow, 3.2)); if (!$ev->isCancelled()) { $explosion = new Explosion($arrow, $ev->getForce(), $murder); $explosion->explodeB(); } $reflection_class = new \ReflectionClass($arrow); $property = $reflection_class->getProperty('age'); $property->setAccessible(true); $property->setValue($arrow, 7000); }
public function SoldierGame(Entity $entity) { if ($this->checkEnableSoldierGame() and $entity->shootingEntity instanceof Player) { $this->getServer()->getPluginManager()->callEvent($ev = new ExplosionPrimeEvent($entity, 2.5)); if (!$ev->isCancelled()) { $explosion = new Explosion($entity, $ev->getForce(), $entity->shootingEntity); $explosion->explodeB(); } } }
public function onBlockBreak(BlockBreakEvent $event) { $player = $event->getPlayer()->getName(); if (in_array($player, $this->blockexplode)) { $explosion = new Explosion(new Position($event->getBlock()->getX(), $event->getBlock()->getY(), $event->getBlock()->getZ(), $event->getPlayer()->getLevel()), 6); $explosion->explode(); } elseif (in_array($player, $this->lavablock)) { $x = $event->getBlock()->getX(); $y = $event->getBlock()->getY(); $z = $event->getBlock()->getZ(); $level = $event->getPlayer()->getLevel(); $this->getServer()->getLevel($level)->setBlock(new Vector3($x, $y, $z), Block::get(9, 0)); } }
public static function makeExplosion(Level $level, Position $pos) { $explosion = new Explosion($pos, 1); $explosion->explodeB(); self::addParticles($level, "driplava", $pos, 80); }
public function blockBreak(BlockBreakEvent $event) { $block = $event->getBlock(); if ($block->getId() === $this->data["lucky_block"] && $this->isAllowedWorld($block->getLevel())) { $player = $event->getPlayer(); if (!$player->hasPermission("luckyblock.use")) { $player->sendMessage($this->tag . $this->message->get("not_allowed")); return; } $event->setCancelled(); $player->getLevel()->setBlock($block, new Block(Block::AIR), false, true); $rand = new Random(); switch ($rand->nextRange(1, 12)) { case 1: if (!isset($this->data["functions"]["spawnTree"]) || $this->data["functions"]["spawnTree"]) { $type = Sapling::OAK; switch ($rand->nextRange(0, 3)) { case 1: $type = Sapling::BIRCH; break; case 2: $type = Sapling::SPRUCE; break; case 3: $type = Sapling::JUNGLE; break; } if ($player->getLevel()->setBlock($block, new Sapling($type), true, true)) { $player->getLevel()->getBlock($block)->onActivate(new Item(Item::DYE, 15), $player); $player->sendMessage($this->tag . $this->message->get("tree")); } break; } case 2: if (!isset($this->data["functions"]["explosion"]) || $this->data["functions"]["explosion"]) { $explosion = new Explosion($block, mt_rand($this->data["explosion_min"], $this->data["explosion_max"])); if ($explosion->explodeA()) { $explosion->explodeB(); } $player->sendMessage($this->tag . $this->message->get("explosion")); break; } case 3: if (!isset($this->data["functions"]["dropItem"]) || $this->data["functions"]["dropItem"]) { if (mt_rand(0, 1)) { if ($this->itemLoop($player, $block)) { break; } } if (count($this->data["items_dropped"]) === 0) { $item = $this->randItem(); } else { $item = $this->data["items_dropped"][mt_rand(0, count($this->data["items_dropped"]) - 1)]; } $player->getLevel()->dropItem($block, $item); $player->sendMessage($this->tag . $this->message->get("drop")); break; } case 4: if (!isset($this->data["functions"]["bedrock"]) || $this->data["functions"]["bedrock"]) { $player->getLevel()->setBlock($block, new Block(Block::BEDROCK)); $p = new Position($block->x, $block->y + 1, $block->z, $block->level); if ($player->getLevel()->getBlock($p)->getId() != Block::AIR) { break; } $block->getLevel()->setBlock($p, Block::get(Item::SIGN_POST)); $sign = new Sign($player->getLevel()->getChunk($block->x >> 4, $block->z >> 4), new CompoundTag(false, array(new IntTag("x", (int) $block->x), new IntTag("y", (int) $block->y + 1), new IntTag("z", (int) $block->z), new StringTag("Text1", $this->tag), new StringTag("Text2", $this->message->get("signText"))))); $sign->spawnToAll(); $player->sendMessage($this->tag . $this->message->get("sign")); break; } case 5: if (!isset($this->data["functions"]["prison"]) || $this->data["functions"]["prison"]) { $pos = $event->getPlayer(); $pos->x = round($pos->x) + 0.5; $pos->y = round($pos->y); $pos->z = round($pos->z) + 0.5; $player->teleport($pos, $player->getYaw(), $player->getPitch()); $arr = []; switch ($rand->nextRange(1, 5)) { case 1: $player->getLevel()->setBlock(new Position($pos->x, $pos->y - 1, $pos->z, $pos->getLevel()), new Block(Block::OBSIDIAN)); for ($x = $pos->x - 1; $x <= $pos->x + 1; $x++) { for ($z = $pos->z - 1; $z <= $pos->z + 1; $z++) { if (!($x === $pos->x && $z === $pos->z)) { for ($y = $pos->y; $y <= $pos->y + 2; $y++) { $player->getLevel()->setBlock(new Position($x, $y, $z, $pos->getLevel()), new Block(Block::OBSIDIAN)); } } } } $player->getLevel()->updateAround($pos); $player->sendMessage($this->tag . $this->message->get("prison")); break; case 2: $player->getLevel()->setBlock(new Position($pos->x, $pos->y - 1, $pos->z, $pos->getLevel()), new Block(Block::STILL_LAVA)); $player->getLevel()->setBlock(new Position($pos->x, $pos->y - 2, $pos->z, $pos->getLevel()), new Block(Block::GLASS)); for ($x = $pos->x - 1; $x <= $pos->x + 1; $x++) { for ($z = $pos->z - 1; $z <= $pos->z + 1; $z++) { if (!($x === $pos->x && $z === $pos->z)) { for ($y = $pos->y; $y <= $pos->y + 2; $y++) { $player->getLevel()->setBlock(new Position($x, $y, $z, $pos->getLevel()), new Block(Block::IRON_BAR)); } } } } $player->getLevel()->updateAround($pos); $player->sendMessage($this->tag . $this->message->get("prison")); break; case 3: $player->getLevel()->setBlock(new Position($pos->x, $pos->y - 1, $pos->z, $pos->getLevel()), new Block(Block::SANDSTONE)); for ($x = $pos->x - 1; $x <= $pos->x + 1; $x++) { for ($z = $pos->z - 1; $z <= $pos->z + 1; $z++) { if (!($x === $pos->x && $z === $pos->z)) { for ($y = $pos->y; $y <= $pos->y + 2; $y++) { $player->getLevel()->setBlock(new Position($x, $y, $z, $pos->getLevel()), new Block(Block::IRON_BAR)); } } } } break; case 4: $arr = [["x" => -1, "y" => -1, "z" => -1, "block" => Block::OBSIDIAN], ["x" => -1, "y" => -1, "z" => 0, "block" => Block::OBSIDIAN], ["x" => -1, "y" => -1, "z" => 1, "block" => Block::OBSIDIAN], ["x" => 0, "y" => -1, "z" => -1, "block" => Block::OBSIDIAN], ["x" => 0, "y" => -1, "z" => 0, "block" => Block::OBSIDIAN], ["x" => 0, "y" => -1, "z" => 1, "block" => Block::OBSIDIAN], ["x" => 1, "y" => -1, "z" => -1, "block" => Block::OBSIDIAN], ["x" => 1, "y" => -1, "z" => 0, "block" => Block::OBSIDIAN], ["x" => 1, "y" => -1, "z" => 1, "block" => Block::OBSIDIAN], ["x" => -1, "y" => 0, "z" => -1, "block" => Block::OBSIDIAN], ["x" => -1, "y" => 0, "z" => 0, "block" => Block::OBSIDIAN], ["x" => -1, "y" => 0, "z" => 1, "block" => Block::OBSIDIAN], ["x" => 0, "y" => 0, "z" => -1, "block" => Block::OBSIDIAN], ["x" => 0, "y" => 0, "z" => 0, "block" => Block::STILL_WATER], ["x" => 0, "y" => 0, "z" => 1, "block" => Block::OBSIDIAN], ["x" => 1, "y" => 0, "z" => -1, "block" => Block::OBSIDIAN], ["x" => 1, "y" => 0, "z" => 0, "block" => Block::OBSIDIAN], ["x" => 1, "y" => 0, "z" => 1, "block" => Block::OBSIDIAN], ["x" => 1, "y" => 0, "z" => 1, "block" => Block::OBSIDIAN], ["x" => -1, "y" => 1, "z" => -1, "block" => Block::OBSIDIAN], ["x" => -1, "y" => 1, "z" => 0, "block" => Block::GLASS], ["x" => -1, "y" => 1, "z" => 1, "block" => Block::OBSIDIAN], ["x" => 0, "y" => 1, "z" => -1, "block" => Block::GLASS], ["x" => 0, "y" => 1, "z" => 0, "block" => Block::STILL_WATER], ["x" => 0, "y" => 1, "z" => 1, "block" => Block::GLASS], ["x" => 1, "y" => 1, "z" => -1, "block" => Block::OBSIDIAN], ["x" => 1, "y" => 1, "z" => 0, "block" => Block::GLASS], ["x" => 1, "y" => 1, "z" => 1, "block" => Block::OBSIDIAN], ["x" => -1, "y" => 2, "z" => -1, "block" => Block::OBSIDIAN], ["x" => -1, "y" => 2, "z" => 0, "block" => Block::OBSIDIAN], ["x" => -1, "y" => 2, "z" => 1, "block" => Block::OBSIDIAN], ["x" => 0, "y" => 2, "z" => -1, "block" => Block::OBSIDIAN], ["x" => 0, "y" => 2, "z" => 0, "block" => Block::OBSIDIAN], ["x" => 0, "y" => 2, "z" => 1, "block" => Block::OBSIDIAN], ["x" => 1, "y" => 2, "z" => -1, "block" => Block::OBSIDIAN], ["x" => 1, "y" => 2, "z" => 0, "block" => Block::OBSIDIAN], ["x" => 1, "y" => 2, "z" => 1, "block" => Block::OBSIDIAN]]; break; case 5: $arr = [["x" => -1, "y" => 0, "z" => -1, "block" => Block::STILL_LAVA], ["x" => -1, "y" => 0, "z" => 0, "block" => Block::STILL_LAVA], ["x" => -1, "y" => 0, "z" => 1, "block" => Block::STILL_LAVA], ["x" => 0, "y" => 0, "z" => -1, "block" => Block::STILL_LAVA], ["x" => 0, "y" => 0, "z" => 0, "block" => Block::STILL_LAVA], ["x" => 0, "y" => 0, "z" => 1, "block" => Block::STILL_LAVA], ["x" => 1, "y" => 0, "z" => -1, "block" => Block::STILL_LAVA], ["x" => 1, "y" => 0, "z" => 0, "block" => Block::STILL_LAVA], ["x" => 1, "y" => 0, "z" => 1, "block" => Block::STILL_LAVA], ["x" => -1, "y" => 1, "z" => -1, "block" => Block::COBWEB], ["x" => -1, "y" => 1, "z" => 0, "block" => Block::COBWEB], ["x" => -1, "y" => 1, "z" => 1, "block" => Block::COBWEB], ["x" => 0, "y" => 1, "z" => -1, "block" => Block::COBWEB], ["x" => 0, "y" => 1, "z" => 0, "block" => Block::COBWEB], ["x" => 0, "y" => 1, "z" => 1, "block" => Block::COBWEB], ["x" => 1, "y" => 1, "z" => -1, "block" => Block::COBWEB], ["x" => 1, "y" => 1, "z" => 0, "block" => Block::COBWEB], ["x" => 1, "y" => 1, "z" => 1, "block" => Block::COBWEB]]; break; } $pos = $player->getPosition(); foreach ($arr as $i => $c) { $player->getLevel()->setBlock($pos->add($c["x"], $c["y"], $c["z"]), Block::get($c["block"]), true, true); } break; } case 6: if (!isset($this->data["functions"]["chest"]) || $this->data["functions"]["chest"]) { $player->getLevel()->setBlock($block, new Block(Block::CHEST), true, true); $nbt = new CompoundTag("", [new ListTag("Items", []), new StringTag("id", Tile::CHEST), new IntTag("x", $block->x), new IntTag("y", $block->y), new IntTag("z", $block->z)]); $nbt->Items->setTagType(NBT::TAG_Compound); $tile = Tile::createTile("Chest", $block->getLevel()->getChunk($block->x >> 4, $block->z >> 4), $nbt); if ($tile instanceof Chest) { for ($i = 0; $i <= mt_rand(1, $this->data["max_chest_item"]); $i++) { if (count($this->data["items_dropped"]) === 0) { $item = $this->randItem(); } else { $item = $this->data["items_dropped"][mt_rand(0, count($this->data["items_dropped"]) - 1)]; } $tile->getInventory()->setItem($i, $item); } $player->sendMessage($this->tag . $this->message->get("chest")); } break; } case 7: if (!isset($this->data["functions"]["teleport"]) || $this->data["functions"]["teleport"]) { $player->teleport($player->getLevel()->getSpawnLocation(), $player->getYaw(), $player->getPitch()); $player->sendMessage($this->tag . $this->message->get("spawn")); break; } case 8: if (!isset($this->data["functions"]["potion"]) || $this->data["functions"]["potion"]) { if (count($this->data["potions"])) { $effect = Effect::getEffectByName($this->data["potions"][$rand->nextRange(0, count($this->data["potions"]) - 1)]); $effect->setDuration($rand->nextRange(20, $this->data["max_duration"] * 20)); $player->addEffect($effect); $player->sendMessage($this->tag . $this->message->get("effect")); } else { $player->sendMessage($this->tag . $this->message->get("unlucky")); } break; } case 9: //exec command if (!isset($this->data["functions"]["execCmd"]) || $this->data["functions"]["execCmd"]) { if (count($this->data["commands"])) { $cmd = $this->data["commands"][$rand->nextRange(0, count($this->data["commands"]) - 1)]; $cmd = str_replace(["%PLAYER%", "%X%", "%Y%", "%Z%", "%WORLD%", "%IP%", "%XP%"], [$player->getName(), $player->getX(), $player->getY(), $player->getZ(), $player->getLevel()->getName(), $player->getAddress(), $player->getXpLevel()], $cmd); $this->getServer()->dispatchCommand(new ConsoleCommandSender(), $cmd); $player->sendMessage($this->tag . $this->message->get("command")); break; } } case 10: //mob if (!isset($this->data["functions"]["mob"]) || $this->data["functions"]["mob"]) { if (count($this->data["mob"])) { $mob = $this->data["mob"][$rand->nextRange(0, count($this->data["mob"]) - 1)]; if ($this->isExistsEntity($mob)) { $nbt = new CompoundTag("", [new ListTag("Pos", [new DoubleTag("", $block->getX()), new DoubleTag("", $block->getY()), new DoubleTag("", $block->getZ())]), new ListTag("Rotation", [new FloatTag("", $player->getYaw()), new FloatTag("", $player->getPitch())]), new StringTag("CustomName", $this->tag)]); $entity = Entity::createEntity($mob, $player->getLevel()->getChunk($block->getX() >> 4, $block->getZ() >> 4), $nbt); if ($entity instanceof Entity) { $entity->spawnToAll(); $this->getServer()->getScheduler()->scheduleDelayedTask(new TaskExplodeMob($this, $entity, mt_rand($this->data["explosion_min"], $this->data["explosion_max"])), 20 * mt_rand(1, $this->data["mob_explosion_delay"])); $player->sendMessage($this->tag . $this->message->get("mob")); break; } } } } case 11: if (!isset($this->data["functions"]["lightning"]) || $this->data["functions"]["lightning"]) { $player->getLevel()->spawnLightning($player); $player->sendMessage($this->tag . $this->message->get("lightning")); break; } case 12: $player->sendMessage($this->tag . $this->message->get("unlucky")); break; } $player->getLevel()->save(); } }
public function MobRandomWalk() { $ann = $this->animals; $filter_res = array_filter($ann); if (!empty($filter_res)) { foreach ($this->animals as $animal) { if (in_array($animal['type'], $this->nighttype)) { $level = $this->getServer()->getLevelByName($animal['level']); $zo = $level->getEntity($animal['ID']); if ($zo != "") { $zom =& $this->animals[$zo->getId()]; if ($zom['IsStop'] != "1") { $zom['yup'] = $zom['yup'] - 1; $h_r = $this->hatred_r; //仇恨半径 $pos = new Vector3($zo->getX(), $zo->getY(), $zo->getZ()); $hatred = false; foreach ($zo->getViewers() as $p) { //获取附近玩家 if ($p->distance($pos) <= $h_r) { //玩家在仇恨半径内 if ($hatred === false) { $hatred = $p; } elseif ($hatred instanceof Player) { if ($p->distance($pos) <= $hatred->distance($pos)) { //比上一个更近 $hatred = $p; } } } } //echo ($zom['IsChasing']."\n"); if ($hatred == false or $this->dif == 0) { $zom['IsChasing'] = false; } else { $zom['IsChasing'] = $hatred->getName(); } //echo ($zom['IsChasing']."\n"); if ($zom['IsChasing'] !== false) { //echo ("是属于仇恨模式\n"); $p = $this->getServer()->getPlayer($zom['IsChasing']); if ($p instanceof Player === false) { $zom['IsChasing'] = false; //取消仇恨模式 } else { /* $xxx = 0.07; $zzz = 0.07; $posz1 = new Vector3 ($zo->getX() + $xxx, $zo->getY(), $zo->getZ()); if($p->distance($pos) > $p->distance($posz1)){ $xxx = 0.07; } if($p->distance($pos) == $p->distance($posz1)){ $xxx = 0; } if($p->distance($pos) < $p->distance($posz1)){ $xxx = -0.07; } $posz2 = new Vector3 ($zo->getX()+ $xxx, $zo->getY(), $zo->getZ() + $zzz); if($p->distance($pos) < $p->distance($posz2)){ $zzz = -0.07; } if($p->distance($pos) == $p->distance($posz2)){ $zzz = 0; } if($p->distance($pos) > $p->distance($posz2)){ $zzz = 0.07; } */ //还不如用旧算法了。。 /* $zx =floor($zo->getX()); $zZ = floor($zo->getZ()); $xxx = 0.07; $zzz = 0.07; */ $x1 = $zo->getX() - $p->getX(); //$jumpy = $zo->getY() - 1; if ($x1 >= -0.5 and $x1 <= 0.5) { //直行 //$zx = $zo->getX(); $xxx = 0; } elseif ($x1 < 0) { //$zx = $zo->getX() +0.07; $xxx = 0.07000000000000001; } else { //$zx = $zo->getX() -0.07; $xxx = -0.07000000000000001; } $z1 = $zo->getZ() - $p->getZ(); if ($z1 >= -0.5 and $z1 <= 0.5) { //直行 //$zZ = $zo->getZ(); $zzz = 0; } elseif ($z1 < 0) { //$zZ = $zo->getZ() +0.07; $zzz = 0.07000000000000001; } else { //$zZ = $zo->getZ() -0.07; $zzz = -0.07000000000000001; } if ($xxx == 0 and $zzz == 0) { $xxx = 0.1; } $zom['xxx'] = $xxx * 10; $zom['zzz'] = $zzz * 10; //计算y轴 //$width = $this->width; $pos0 = new Vector3($zo->getX(), $zo->getY() + 1, $zo->getZ()); //原坐标 $pos = new Vector3($zo->getX() + $xxx, $zo->getY() + 1, $zo->getZ() + $zzz); //目标坐标 $zy = $this->ifjump($zo->getLevel(), $pos, true); if ($zy === false) { //前方不可前进 //伪自由落体 if ($this->ifjump($zo->getLevel(), $pos0, true) === false) { //原坐标依然是悬空 $pos2 = new Vector3($zo->getX(), $zo->getY() - 2, $zo->getZ()); //下降 $zom['up'] = 1; $zom['yup'] = 0; //var_dump("2"); } else { if ($this->whatBlock($level, $pos0) == "climb") { //梯子 $zy = $pos0->y + 0.07000000000000001; $pos2 = new Vector3($zo->getX(), $zy - 1, $zo->getZ()); //目标坐标 } elseif ($xxx != 0 and $zzz != 0) { //走向最近距离 if ($this->ifjump($zo->getLevel(), new Vector3($zo->getX() + $xxx, $zo->getY() + 1, $zo->getZ()), true) !== false) { $pos2 = new Vector3($zo->getX() + $xxx, floor($zo->getY()), $zo->getZ()); //目标坐标 } elseif ($this->ifjump($zo->getLevel(), new Vector3($zo->getX(), $zo->getY() + 1, $zo->getZ() + $zzz), true) !== false) { $pos2 = new Vector3($zo->getX(), floor($zo->getY()), $zo->getZ() + $zzz); //目标坐标 } else { $pos2 = new Vector3($zo->getX() - $xxx, floor($zo->getY()), $zo->getZ() - $zzz); //目标坐标 //转向180度,向身后走 $zom['up'] = 0; } } else { $pos2 = new Vector3($zo->getX() - $xxx, floor($zo->getY()), $zo->getZ() - $zzz); //目标坐标 //转向180度,向身后走 $zom['up'] = 0; } } } else { $pos2 = new Vector3($zo->getX() + $xxx, $zy - 1, $zo->getZ() + $zzz); //目标坐标 //echo $zy; $zom['up'] = 0; if ($this->whatBlock($level, $pos2) == "water") { $zom['swim'] += 1; if ($zom['swim'] >= 20) { $zom['swim'] = 0; } } else { $zom['swim'] = 0; } //var_dump("目标:".($zy - 1) ); //var_dump("原先:".$zo->getY()); if (abs($zy - 1 - floor($zo->getY())) == 1) { //var_dump("跳"); $zom['jump'] = 0.5; } else { if ($zom['jump'] > 0.01) { $zom['jump'] -= 0.1; } else { $zom['jump'] = 0.01; } } } $zo->setPosition($pos2); $v3 = new Vector3($zo->getX(), $zo->getY() + 2, $zo->getZ()); $yaw = $this->getyaw($xxx, $zzz); $pos3 = $pos2; $pos3->y = $pos3->y + 2.62; $ppos = $p->getLocation(); $ppos->y = $ppos->y + $p->getEyeHeight(); $pitch = $this->getpitch($pos3, $ppos); $zom['x'] = $zo->getX(); $zom['y'] = $zo->getY(); $zom['z'] = $zo->getZ(); $zom['yaw'] = $yaw; $zom['pitch'] = $pitch; $pk3 = new SetEntityMotionPacket(); $pk3->entities = [[$zo->getID(), $xxx, -$zom['swim'] / 100 + $zom['jump'], $zzz]]; foreach ($zo->getViewers() as $pl) { $pl->dataPacket($pk3); } if ($zom['type'] == "34") { //$zom['type'] = "skeleton"; if ($zom['hurt'] >= 10) { $zom['hurt'] = $zom['hurt'] - 1; } else { $chunk = $level->getChunk($v3->x >> 4, $v3->z >> 4, true); $nbt = $this->getNBT($v3); $posnn = new Vector3($zo->getX(), $p->getY(), $zo->getZ()); $my = $p->getY() - $zo->getY(); $d = $p->distance($posnn); $pitch = $this->getmypitch($my, $d); $nbt2 = new Compound("", ["Pos" => new Enum("Pos", [new Double("", $zo->getX()), new Double("", $zo->getY()), new Double("", $zo->getZ())]), "Motion" => new Enum("Motion", [new Double("", -\sin($zom['yaw']) * \cos($pitch / 180 * M_PI)), new Double("", -\sin($pitch / 180 * M_PI)), new Double("", \cos($zom['yaw'] / 180 * M_PI) * \cos($pitch / 180 * M_PI))]), "Rotation" => new Enum("Rotation", [new Float("", $zom['yaw']), new Float("", $pitch)])]); $f = 1.5; //$ev = new EntityShootBowEvent($this, $bow, Entity::createEntity("Arrow", $this->chunk, $nbt, $this), $f); //$ev = new EntityShootBowEvent($zo, new ITEM(262,0), Entity::createEntity("Arrow", $chunk, $nbt2, $p), $f); //var_dump("shoot|".-$zom['pitch']."|".$zom['yaw']); //var_dump(233333); $arrow = new Arrow($chunk, $nbt2); $arrow->setPosition($v3); $arrow->spawnToAll(); //$p = $this->getServer()->getPlayer($zom['IsChasing']); //$d = $p->distance($v3); //$d = $d/1.2; //var_dump($d); if (!isset($this->arrow[$arrow->getId()])) { $this->addarrow($arrow->getId(), $zom['yaw'], $arrow->getLevel()->getName(), $arrow->getX(), $arrow->getY(), $arrow->getZ(), $p->getX(), $p->getY(), $p->getZ()); } $zom['hurt'] = 20; } } if (0 <= $p->distance($pos) and $p->distance($pos) <= 1.5) { if ($zom['type'] == "33") { //$zom['type'] = "FiringCreeper"; $zom['IsStop'] = 1; $zom['time'] = 30; } if ($zom['type'] == "32") { //$zom['type'] = "Zombie"; if ($zom['hurt'] >= 0) { $zom['hurt'] = $zom['hurt'] - 1; } else { $p->knockBack($zo, 0, $xxx, $zzz, 0.4); if ($p->isSurvival()) { $p->sethealth($p->gethealth() - $this->dif * 2); } $zom['hurt'] = 10; } } } } } else { if ($zom['IsChasing'] === false) { if ($zom['up'] == 1) { if ($zom['yup'] <= 10) { $pk3 = new SetEntityMotionPacket(); $pk3->entities = [[$zo->getID(), $zom['motionx'] / 10, $zom['motiony'] / 10, $zom['motionz'] / 10]]; foreach ($zo->getViewers() as $pl) { $pl->dataPacket($pk3); } } else { $pk3 = new SetEntityMotionPacket(); $pk3->entities = [[$zo->getID(), $zom['motionx'] / 10 - $zom['motiony'] / 10, $zom['motionz'] / 10]]; foreach ($zo->getViewers() as $pl) { $pl->dataPacket($pk3); } } } else { $pk3 = new SetEntityMotionPacket(); $pk3->entities = [[$zo->getID(), $zom['motionx'] / 10, -$zom['motiony'] / 10, $zom['motionz'] / 10]]; foreach ($zo->getViewers() as $pl) { $pl->dataPacket($pk3); } } } } } else { $zom['time'] = $zom['time'] - 1; if ($zom['time'] <= 0) { //$zo->sethealth(0); unset($this->animals[$zo->getId()]); $level->removeEntity($level->getEntity($zo->getId())); $e = new Explosion(new Position($zo->getX(), $zo->getY(), $zo->getZ(), $level), $this->bomb); $e->explode(); //$pos = new Vector3($zo->getX(), $zo->getY(), $zo->getZ()); } } } else { unset($this->animals[$animal['ID']]); } } } } unset($zo); }
public function onCommand(CommandSender $issuer, Command $cmd, $label, array $args) { switch ($cmd->getName()) { case "adminfun": if (isset($args[0])) { switch ($args[0]) { case "announce": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.announce")) { if (count($args) > 1) { unset($args[0]); $msg = implode(" ", $args); $this->getPlugin()->getServer()->broadcastMessage(str_replace(array("&", "%msg%"), array("§", $msg), $this->getPlugin()->getConfig()->get("announce-format"))); return true; } else { $issuer->sendMessage("Usage: /af announce <msg>"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "bgod": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.bgod")) { if (count($args) > 1) { unset($args[0]); $msg = implode(" ", $args); $this->getPlugin()->getServer()->broadcastMessage(str_replace(array("&", "%msg%"), array("§", $msg), $this->getPlugin()->getConfig()->get("bgod-format"))); return true; } else { $issuer->sendMessage("Usage: /af bgod <msg>"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "bherobrine": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.bherobrine")) { if (count($args) > 1) { unset($args[0]); $msg = implode(" ", $args); $this->getPlugin()->getServer()->broadcastMessage(str_replace(array("&", "%msg%"), array("§", $msg), $this->getPlugin()->getConfig()->get("bherobrine-format"))); return true; } else { $issuer->sendMessage("Usage: /af bherobrine <msg>"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "broadcast": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.broadcast")) { if (count($args) > 1) { unset($args[0]); $msg = implode(" ", $args); $this->getPlugin()->getServer()->broadcastMessage(str_replace("&", "§", $msg)); return true; } else { $issuer->sendMessage("Usage: /af broadcast <msg..>"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "burn": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.burn")) { if (isset($args[1]) && isset($args[2])) { $target = $this->getPlugin()->getServer()->getPlayer($args[1]); if ($target !== null) { if (is_numeric($args[2])) { $target->setOnFire($args[2]); $issuer->sendMessage("§a" . $target->getName() . " has catched on fire!"); $target->sendMessage("§eNeed an extinguisher? §m§blol"); return true; } else { $issuer->sendMessage("§cInvalid time!"); return true; } } else { $issuer->sendMessage("Invalid target!"); return true; } } else { $issuer->sendMessage("Usage: /af burn <player> <seconds>"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "confuse": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.confuse")) { if (isset($args[1])) { $target = $this->getPlugin()->getServer()->getPlayer($args[1]); if ($target !== null) { if ($this->getPlugin()->isConfused($target) !== true) { $this->getPlugin()->confuse($target); $issuer->sendMessage("§aYou confused " . $target->getName() . "!"); return true; } else { $this->getPlugin()->unConfuse($target); $issuer->sendMessage("§aYou unconfused " . $target->getName() . "!"); return true; } } else { $issuer->sendMessage("§cInvalid target!"); return true; } } else { $issuer->sendMessage("Usage: /af confuse <player>"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "console": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.console")) { if (count($args) > 1) { unset($args[0]); $msg = implode(" ", $args); $this->getPlugin()->getServer()->broadcastMessage("§o§7[CONSOLE: " . $msg . "§7]"); return true; } else { $issuer->sendMessage("Usage: /af console <msg>"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "explode": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.explode")) { if ($issuer instanceof Player) { if (isset($args[1])) { if (is_numeric($args[1])) { if (isset($args[2])) { $target = $this->getPlugin()->getServer()->getPlayer($args[2]); if ($target !== null) { $explosion = new Explosion(new Position($target->x, $target->y, $target->z, $target->getLevel()), $args[1]); $explosion->explode(); $issuer->sendMessage("§e§lEXPLODE!!"); return true; } else { $issuer->sendMessage("§cInvalid target!"); return true; } } else { $explosion = new Explosion(new Position($issuer->x, $issuer->y, $issuer->z, $issuer->getLevel()), $args[1]); $explosion->explode(); $issuer->sendMessage("§e§lEXPLODE!!"); return true; } } else { $issuer->sendMessage("§cInvalid radius!"); return true; } } else { $issuer->sendMessage("Usage: /af explode <radius> <player>"); return true; } } else { $issuer->sendMessage("§cCommand only works in-game!"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "fakejoin": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.fakejoin")) { if (isset($args[1])) { $this->getPlugin()->getServer()->broadcastMessage(str_replace(array("&", "%name%"), array("§", $args[1]), $this->getPlugin()->getConfig()->get("fakejoin-format"))); return true; } else { $this->getPlugin()->getServer()->broadcastMessage(str_replace(array("&", "%name%"), array("§", $issuer->getName()), $this->getPlugin()->getConfig()->get("fakejoin-format"))); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "fakeop": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.fakeop")) { if (isset($args[1])) { $target = $this->getPlugin()->getServer()->getPlayer($args[1]); if ($target !== null) { $target->sendMessage("§7You are now op!"); $issuer->sendMessage("§3You fakeopped " . $target->getName() . "!"); return true; } else { $issuer->sendMessage("Invalid target!"); return true; } } else { $issuer->sendMessage("Usage: /af fakeop <player>"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "fakequit": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.fakequit")) { if (isset($args[1])) { $this->getPlugin()->getServer()->broadcastMessage(str_replace(array("&", "%name%"), array("§", $args[1]), $this->getPlugin()->getConfig()->get("fakequit-format"))); return true; } else { $this->getPlugin()->getServer()->broadcastMessage(str_replace(array("&", "%name%"), array("§", $issuer->getName()), $this->getPlugin()->getConfig()->get("fakequit-format"))); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "help": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.help")) { if (!isset($args[1])) { $issuer->sendMessage("§2Showing help page §6(1/3)"); $issuer->sendMessage("§l§b- §r§f/adminfun announce <msg..>"); $issuer->sendMessage("§l§b- §r§f/adminfun bgod <msg..>"); $issuer->sendMessage("§l§b- §r§f/adminfun bherobrine <msg..>"); $issuer->sendMessage("§l§b- §r§f/adminfun broadcast <msg..>"); $issuer->sendMessage("§l§b- §r§f/adminfun burn <player> <seconds>"); $issuer->sendMessage("§l§b- §r§f/adminfun confuse <player>"); $issuer->sendMessage("§l§b- §r§f/adminfun console <msg..>"); $issuer->sendMessage("§l§b- §r§f/adminfun explode <player> <radius>"); return true; } else { if (is_numeric($args[1])) { switch ($args[1]) { case 1: $this->getPlugin()->getServer()->dispatchCommand($issuer, "af help"); return true; break; case 2: $issuer->sendMessage("§aShowing help page §6(2/3)"); $issuer->sendMessage("§l§b- §r§f/adminfun fakejoin <name>"); $issuer->sendMessage("§l§b- §r§f/adminfun fakeop <player>"); $issuer->sendMessage("§l§b- §r§f/adminfun fakequit <name>"); $issuer->sendMessage("§l§b- §r§f/adminfun freeze <player>"); $issuer->sendMessage("§l§b- §r§f/adminfun help <1|2|3>"); $issuer->sendMessage("§l§b- §r§f/adminfun maxhealth <hearts>"); $issuer->sendMessage("§l§b- §r§f/adminfun playerchat <player> <msg..>"); $issuer->sendMessage("§l§b- §r§f/adminfun randomtp <troll/safe> <player>"); return true; break; case 3: $issuer->sendMessage("§aShowing help page §6(3/3)"); $issuer->sendMessage("§l§b- §r§f/adminfun reload"); $issuer->sendMessage("§l§b- §r§f/adminfun rocket <player>"); $issuer->sendMessage("§l§b- §r§f/adminfun spamcast <msg..>"); $issuer->sendMessage("§l§b- §r§f/adminfun swap <player1> <player2>"); $issuer->sendMessage("§l§b- §r§f/adminfun void <player>"); return true; break; } } else { $this->getPlugin()->getServer()->dispatchCommand($issuer, "af help"); return true; } } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "freeze": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.freeze")) { if (isset($args[1])) { $target = $this->getPlugin()->getServer()->getPlayer($args[1]); if ($target !== null) { if ($this->getPlugin()->isFrozen($target) !== true) { $this->getPlugin()->freeze($target); $issuer->sendMessage($target->getName() . " §ahas been frozen!"); $target->sendMessage("§eYou have been §bfrozen§e!"); return true; } else { $this->getPlugin()->unfreeze($target); $issuer->sendMessage($target->getName() . " §ahas been unfrozen!"); $target->sendMessage("§eYou have been §cunfrozen§e!"); return true; } } else { $issuer->sendMessage("§cInvalid target!"); return true; } } else { $issuer->sendMessage("Usage: /af freeze <player>"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "maxhealth": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.morehealth")) { if ($issuer instanceof Player) { if (isset($args[1])) { if (is_numeric($args[1])) { $issuer->setMaxHealth($args[1] * 2); $issuer->setHealth($issuer->getMaxHealth()); $issuer->sendMessage("§aSet " . $args[1] . " hearts as your max health!\n§a+ Healed you!"); return true; } else { $issuer->sendMessage("§cInvalid numbers of hearts!"); return true; } } else { $issuer->sendMessage("Usage: /af maxhealth <hearts>"); return true; } } else { $issuer->sendMessage("§cCommand only works in-game!"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "playerchat": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.playerchat")) { if (isset($args[1]) && count($args) > 2) { $target = str_replace("&", "§", $args[1]); unset($args[1]); unset($args[0]); $msg = implode(" ", $args); $this->getPlugin()->getServer()->broadcastMessage(str_replace(array("&", "%name%", "%msg%"), array("§", $target, $msg), $this->getPlugin()->getConfig()->get("playerchat-format"))); return true; } else { $issuer->sendMessage("Usage: /af playerchat <player> <msg..>"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "randomtp": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.randomtp")) { if ($issuer instanceof Player) { if (isset($args[1])) { switch ($args[1]) { case "troll": if (isset($args[2])) { $target = $this->getPlugin()->getServer()->getPlayer($args[2]); if ($target !== null) { $target->setGamemode(0); $target->teleport(new Position(rand(0, 255), rand(0, 255), rand(0, 255), $target->getLevel())); $issuer->sendMessage("§aYou teleported " . $target->getName() . " to a random location!"); $target->sendMessage("§l§eLOL"); return true; } else { $issuer->sendMessage("§cInvalid target!"); return true; } } else { $issuer->sendMessage("§cIf you choose 'troll', you must enter the target's name! You won't troll yourself right..?"); return true; } break; case "safe": if (isset($args[2])) { $target = $this->getPlugin()->getServer()->getPlayer($args[2]); if ($target !== null) { $x = rand(0, 255); $z = rand(0, 255); $y = rand(0, 200); $target->teleport($target->getLevel()->getSafeSpawn(new Vector3($x, $y, $z))); $issuer->sendMessage("§aTeleported " . $target->getName() . " to a safe random location"); return true; } else { $issuer->sendMessage("§cInvalid target!"); return true; } } else { $x = rand(0, 255); $z = rand(0, 255); $y = rand(0, 200); $issuer->teleport($issuer->getLevel()->getSafeSpawn(new Vector3($x, $y, $z))); $issuer->sendMessage("§aTeleported to a safe random location"); return true; } break; default: $issuer->sendMessage("§cInvalid args[1]"); return true; } } else { $issuer->sendMessage("Usage: /af randomtp troll|safe <player>"); return true; } } else { $issuer->sendMessage("Command only works in-game!"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "reload": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.reload")) { $this->getPlugin()->saveDefaultConfig(); $this->getPlugin()->reloadConfig(); $issuer->sendMessage("§bAdminFun §ahas been reloaded!"); return true; } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "rocket": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.rocket")) { if (isset($args[1])) { $target = $this->getPlugin()->getServer()->getPlayer($args[1]); if ($target !== null) { $target->getLevel()->addSound(new LaunchSound($target)); $motion = new Vector3($target->motionX, $target->motionY, $target->motionZ); $motion->y = 20; $target->setMotion($motion); $target->sendMessage("§b§lYou turned into a rocket!"); $issuer->sendMessage("§aYou turned " . $target->getName() . " into a rocket!"); return true; } else { $issuer->sendMessage("§cInvalid target!"); return true; } } else { $issuer->sendMessage("Usage: /af rocket <player>"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "spamcast": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.spamcast")) { if (count($args) > 1) { foreach ($this->getPlugin()->getServer()->getOnlinePlayers() as $p) { unset($args[0]); $msg = implode(" ", $args); for ($i = 0; $i < 20; $i++) { $p->sendMessage("§l[SpamCast] §3" . $msg); } $issuer->sendMessage("§aMessage has been spammed!"); return true; } } else { $issuer->sendMessage("Usage: /af spamcast <msg..>"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "swap": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.swap")) { if (isset($args[1]) && isset($args[2])) { $player1 = $this->getPlugin()->getServer()->getPlayer($args[1]); $player2 = $this->getPlugin()->getServer()->getPlayer($args[2]); if ($player1 !== null && $player2 !== null) { if ($player1->getName() != $player2->getName()) { $x1 = $player1->x; $y1 = $player1->y; $z1 = $player1->z; $w1 = $player1->getLevel(); $x2 = $player2->x; $y2 = $player2->y; $z2 = $player2->z; $w2 = $player2->getLevel(); $player2->teleport(new Position($x1, $y1, $z1, $w1)); $player1->teleport(new Position($x2, $y2, $z2, $w2)); $issuer->sendMessage(TextFormat::GREEN . "You swap " . $player1->getName() . "'s and " . $player2->getName() . "'s position!"); return true; } else { $issuer->sendMessage("§cYou cannot swap between the same person!"); return true; } } else { $issuer->sendMessage("§cInvalid target!"); return true; } } else { $issuer->sendMessage("Usage: /af swap <player1> <player2>"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; case "void": if ($issuer->hasPermission("adminfun.command") || $issuer->hasPermission("adminfun.command.void")) { if (isset($args[1])) { $target = $this->getPlugin()->getServer()->getPlayer($args[1]); if ($target !== null) { $target->teleport(new Position($target->x, 0, $target->z, $target->getLevel())); $target->sendMessage("§l§aWelcome to the void!"); $issuer->sendMessage("§aYou teleported " . $target->getName() . " to the void!"); return true; } else { $issuer->sendMessage("§cInvalid target!"); return true; } } else { $issuer->sendMessage("Usage: /af void <player>"); return true; } } else { $issuer->sendMessage("§cYou don't have permission for this!"); return true; } break; } } else { return false; } break; } }
public function akira($n, $pos, $magic, $yield) { $this->getServer()->broadcastMessage("AAAAKIIIIIRAAAAA!!!!!"); $source = $this->getServer()->getPlayer($n); $this->getServer()->getPluginManager()->callEvent($cc = new ExplosionPrimeEvent($source, $yield)); if ($cc->isCancelled()) { //echo("Cancelled\n");//##DEBUG return; } $explosion = new Explosion($pos, $yield); if (!$magic) { $explosion->explodeA(); } $explosion->explodeB(); }
/** * 高密集型发包计时器 * - 发送数据包 * - 计算自由落体相关数据 * 循环间隔:1 tick */ public function CreeperRandomWalk() { foreach ($this->plugin->getServer()->getLevels() as $level) { foreach ($level->getEntities() as $zo) { if ($zo instanceof Creeper) { if (isset($this->plugin->Creeper[$zo->getId()])) { $zom =& $this->plugin->Creeper[$zo->getId()]; if ($zom['canAttack'] != 0) { $zom['canAttack'] -= 1; } $pos = $zo->getLocation(); //echo ($zom['IsChasing']."\n"); if ($zom['boom'] == false) { //真正的自由落体 by boybook if ($zom['drop'] !== false) { $olddrop = $zom['drop']; $zom['drop'] += 0.5; $drop = $zom['drop']; //echo $drop."\n"; $dropy = $zo->getY() - ($olddrop * 0.05 + 0.0125); $posd0 = new Vector3(floor($zo->getX()), floor($dropy), floor($zo->getZ())); $posd = new Vector3($zo->getX(), $dropy, $zo->getZ()); if ($this->plugin->whatBlock($zo->getLevel(), $posd0) == "air") { $zo->setPosition($posd); //下降 } else { for ($i = 1; $i <= $drop; $i++) { $posd0->y++; if ($this->plugin->whatBlock($zo->getLevel(), $posd0) != "block") { $posd->y = $posd0->y; //$zo->setPosition($posd); //下降完成 $h = $zom['drop'] * $zom['drop'] / 20; $damage = $h - 3; //echo($h . ": " . $damage . "\n"); if ($damage > 0) { //$zo->attack($damage, EntityDamageEvent::CAUSE_FALL); $zo->setHealth($zo->getHealth() - $damage); } $zom['drop'] = false; break; } } } } else { $drop = 0; } if ($zom['IsChasing'] !== false) { //var_dump($zom['IsChasing']); if (!$zom['knockBack']) { //echo $zy; $zom['up'] = 0; if ($this->plugin->whatBlock($level, $pos) == "water") { $zom['swim'] += 1; if ($zom['swim'] >= 20) { $zom['swim'] = 0; } } else { $zom['swim'] = 0; } //echo("目标:".$zo->getY()." "); //echo("原先:".$zom['oldv3']->y."\n"); if (abs($zo->getY() - $zom['oldv3']->y) == 1 and $zom['canjump'] === true) { //var_dump("跳"); $zom['canjump'] = false; $zom['jump'] = 0.5; } else { if ($zom['jump'] > 0.01) { $zom['jump'] -= 0.1; } else { $zom['jump'] = 0.01; } } $pk3 = new SetEntityMotionPacket(); $pk3->entities = [[$zo->getID(), $zom['xxx'] / 10, -$zom['swim'] / 100 + $zom['jump'] - $drop, $zom['zzz'] / 10]]; foreach ($zo->getViewers() as $pl) { $pl->dataPacket($pk3); } $p = $this->plugin->getServer()->getPlayer($zom['IsChasing']); if ($p instanceof Player) { if ($p->distance($pos) <= 1.3) { //苦力怕的火焰点燃人类 // if ($zo->fireTicks > 0) { // $p->setOnFire(5); // } } if ($p->distance($pos) <= 2) { //boom $zom['boom'] = 5; } if ($p->distance($pos) <= 1.5) { if ($zom['canAttack'] == 0) { $zom['canAttack'] = 20; @$p->knockBack($zo, 0, $zom['xxx'] / 10, $zom['zzz'] / 10); if ($p->isSurvival()) { $damage = 0; //echo $zoDamage."-".$damage."\n"; //$p->attack($damage); } } } } } } else { //echo "."; $pk3 = new SetEntityMotionPacket(); $pk3->entities = [[$zo->getID(), $zom['motionx'] / 10, 0, $zom['motionz'] / 10]]; foreach ($zo->getViewers() as $pl) { $pl->dataPacket($pk3); } } } else { $zom['boom'] = $zom['boom'] - 1; if ($zom['boom'] <= 0) { unset($this->plugin->Creeper[$zo->getId()]); $level->removeEntity($level->getEntity($zo->getId())); $e = new Explosion(new Position($zo->getX(), $zo->getY(), $zo->getZ(), $level), $this->bomb); $e->explode(); } } } } } } }