From ca46db593184a6e098d9b8bd1c419bf0bc4b6c5b Mon Sep 17 00:00:00 2001 From: Ad5001 Date: Fri, 23 Dec 2016 21:45:58 +0100 Subject: [PATCH] Gone waaaayyy too far ! Admin tools bouncy everywhere + bouncy blocks ! --- plugin.yml | 2 +- src/Ad5001/Elytra/Main.php | 75 ++++++++++++++++++----- src/Ad5001/Elytra/tasks/AdminGotoTask.php | 31 ++++++---- 3 files changed, 80 insertions(+), 28 deletions(-) diff --git a/plugin.yml b/plugin.yml index 32bc97c..702943d 100644 --- a/plugin.yml +++ b/plugin.yml @@ -6,7 +6,7 @@ api: [3.0.0] main: Ad5001\Elytra\Main commands: opelytra: - description: "Get an OP elytra" + description: "Make your elytras your wear MAGIC !" usage: "/opelytra" permission: elytra.getopelytra boost: diff --git a/src/Ad5001/Elytra/Main.php b/src/Ad5001/Elytra/Main.php index 362c07d..f821147 100644 --- a/src/Ad5001/Elytra/Main.php +++ b/src/Ad5001/Elytra/Main.php @@ -29,6 +29,9 @@ use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\StringTag; +use pocketmine\utils\BlockIterator; + + use pocketmine\item\enchantment\Enchantment; @@ -41,14 +44,17 @@ use Ad5001\Elytra\tasks\AdminGotoTask; class Main extends PluginBase implements Listener { + protected $ops; + /* Called when the plugin enables */ public function onEnable() { $this->getServer()->getPluginManager()->registerEvents($this,$this); - $this->getServer()->getScheduler()->scheduleRepeatingTask(new AdminGotoTask($this), 20); + $this->getServer()->getScheduler()->scheduleRepeatingTask(new AdminGotoTask($this), 10); Item::$list[444] = Elytra::class; Item::addCreativeItem(new Elytra()); + $this->ops = []; } @@ -75,6 +81,36 @@ class Main extends PluginBase implements Listener { } + /* + When a player moves. To make it bounce with elytras. + @param $event \pocketmine\event\player\PlayerMoveEvent + */ + public function onPlayerMove(\pocketmine\event\player\PlayerMoveEvent $event) { + $player = $event->getPlayer(); + if($player->getInventory()->getChestplate()->getId() == 444) { + $flyingup = false; + for($i = 2; $i > 0; $i--) { + if($player->getLevel()->getBlock(new \pocketmine\math\Vector3 (round($player->x), round($player->y) - $i, round($player->z)))->getId() !== 0) { + $flyingup = true; + } + } + if(isset($this->getAdminsModePlayers()[$player->getName()]) && $flyingup) { + $player->setMotion(new \pocketmine\math\Vector3($player->getMotion()->x, 3, $player->getMotion()->z)); + } + $flyingup = false; + for($i = 4; $i > 0; $i--) { + $id = $player->getLevel()->getBlock(new \pocketmine\math\Vector3 (round($player->x), round($player->y) - $i, round($player->z)))->getId(); + if($id == 165 || $id == 88) { + $flyingup = true; + } + } + if($flyingup) { + $player->setMotion(new \pocketmine\math\Vector3($player->getMotion()->x, 3, $player->getMotion()->z)); + } + } + } + + /* Called when one of the defined commands of the plugin has been called @param $sender \pocketmine\command\CommandSender @@ -87,30 +123,41 @@ class Main extends PluginBase implements Listener { switch($cmd->getName()) { case "opelytra": if($sender instanceof Player) { - $item = new Elytra(); - $nbt = new CompoundTag("", [ - "isAdminPowered" => new StringTag("isAdminPowered", 1) - ]); - $item->setCompoundTag($nbt); - $item->addEnchantment(Enchantment::getEnchantement(0)->setLevel(0)); - $sender->getInventory()->addItem($item); - $sender->sendMessage("§aYou got your brand new elytra !"); + if(isset($this->ops[$sender->getName()])) { + unset($this->ops[$sender->getName()]); + $sender->sendMessage("§aYou are back to te original elytra !"); + } else { + $this->ops[$sender->getName()] = true; + $sender->sendMessage("§aYou are now in the admin elytra mode ! Go try out your powers !"); + } } break; case "boost": if($sender instanceof Player && $sender->getInventory()->getChestplate()->getId() == 444) { - $itr = new BlockIterator($sender->getLevel(), $sender->getPosition(), $sender->getDirectionVector(), $sender->getEyeHeight(), 7); + $itr = new BlockIterator($sender->getLevel(), $sender->getPosition(), $sender->getDirectionVector(), $sender->getEyeHeight(), 4); $itr->next(); $itr->next(); $itr->next(); - $itr->next(); - $itr->next(); - $itr->next(); - $sender->setMotion($itr->current()); + $x = sqrt((new \pocketmine\math\Vector3($sender->x, 0, 0))->distanceSquared(new \pocketmine\math\Vector3($itr->current()->x, 0, 0))); + $y = sqrt((new \pocketmine\math\Vector3($sender->y, 0, 0))->distanceSquared(new \pocketmine\math\Vector3($itr->current()->y, 0, 0))); + $z = sqrt((new \pocketmine\math\Vector3($sender->z, 0, 0))->distanceSquared(new \pocketmine\math\Vector3($itr->current()->z, 0, 0))); + // $x -= $x * 2; + // $y -= $y * 2; + // $z -= $z * 2; // Inverting the number to go in the right direction. + $sender->setMotion(new \pocketmine\math\Vector3($x, $y, $z)); } break; } return false; } + + /* + Returns players in ADMIN mode + @return array + */ + public function getAdminsModePlayers() : array { + return $this->ops; + } + } \ No newline at end of file diff --git a/src/Ad5001/Elytra/tasks/AdminGotoTask.php b/src/Ad5001/Elytra/tasks/AdminGotoTask.php index 62a9779..d7a5c2e 100644 --- a/src/Ad5001/Elytra/tasks/AdminGotoTask.php +++ b/src/Ad5001/Elytra/tasks/AdminGotoTask.php @@ -50,19 +50,6 @@ class AdminGotoTask extends PluginTask { public function onRun($tick) { foreach ($this->server->getOnlinePlayers() as $player) { - if($player->getInventory()->getChestplate()->getId() == 444) { - if($player->getInventory()->getChestplate()->getNamedTagEntry("isAdminPowered") !== null) { - $itr = new BlockIterator($player->getLevel(), $player->getPosition(), $player->getDirectionVector(), $player->getEyeHeight(), 7); - $itr->next(); - $itr->next(); - $itr->next(); - $itr->next(); - $itr->next(); - $itr->next(); - $player->setMotion($itr->current); - } - // $player->setMotion(new \pocketmine\math\Vector3($player->getMotion()->x, 0, $player->getMotion()->z)); - } //Part needed for player's good working @@ -79,5 +66,23 @@ class AdminGotoTask extends PluginTask { + /* + Inverts a number + @param $num int + @return int + */ + public function invert(int $num) : int { + if($num < 0) { + echo $num . " +> " . abs($num) . "\n"; + return abs($num); + } else { + echo $num . " -> " . -$num . "\n"; + return -$num; + } + return 0; + } + + + } \ No newline at end of file