From 9b5799ff6850eb7acdb3eeb33e5aafe59203bf62 Mon Sep 17 00:00:00 2001 From: Josscoder Date: Tue, 14 Sep 2021 18:43:06 -0500 Subject: [PATCH] feat: remove warp command added --- README.md | 2 +- src/jossc/warps/Main.php | 26 +------ src/jossc/warps/command/AddWarpCommand.php | 3 +- .../warps/command/ReloadWarpsCommand.php | 5 +- src/jossc/warps/command/RemoveWarpCommand.php | 3 +- src/jossc/warps/command/WarpsCommand.php | 3 +- src/jossc/warps/manager/FormManager.php | 78 ++++++++++++++----- src/jossc/warps/storage/WarpsStorage.php | 75 +++++++++++++++++- src/jossc/warps/utils/LocationUtils.php | 2 +- src/jossc/warps/warp/Warp.php | 9 +-- 10 files changed, 144 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index bdbc4f3..b80b335 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ If you encounter any bugs, have suggestions or questions, [create an issue](http ## Setup -1) Download the latest version [here](https://github.com/Josscoder/Warps/releases/latest) +1) Download the latest version [here](https://poggit.pmmp.io/ci/Josscoder/Warps#) 2) Put the .phar in your plugins folder 3) And finally, start your server! diff --git a/src/jossc/warps/Main.php b/src/jossc/warps/Main.php index ce86318..dab2400 100644 --- a/src/jossc/warps/Main.php +++ b/src/jossc/warps/Main.php @@ -42,7 +42,7 @@ public function onEnable() { $this->giveItemWhenJoin = (bool) $itemConfig["give_item_when_join"]; $this->itemCustomName = TextFormat::colorize((string) $itemConfig["custom_name"]); - $this->reloadWarpsConfig(); + $this->storage->reload(); $this->registerCommands(); @@ -84,24 +84,6 @@ private function registerCommands(): void { ); } - public function reloadWarpsConfig(): void { - $config = $this->getConfig(); - - if (!$config->exists('warps')) { - return; - } - - $storage = $this->storage; - - $warps = $config->get('warps'); - - foreach ($warps as $warpData) { - $warpDataArray = explode(';', $warpData); - - $storage->add($warpDataArray[0], $warpDataArray[1]); - } - } - /*** @return Main */ public static function getInstance(): Main { return self::$instance; @@ -118,14 +100,12 @@ public function getFormManager(): FormManager { } /*** @return bool */ - public function isGiveItemWhenJoin(): bool - { + public function isGiveItemWhenJoin(): bool { return $this->giveItemWhenJoin; } /*** @return string */ - public function getItemCustomName(): string - { + public function getItemCustomName(): string { return $this->itemCustomName; } } \ No newline at end of file diff --git a/src/jossc/warps/command/AddWarpCommand.php b/src/jossc/warps/command/AddWarpCommand.php index 569b75c..04c5a09 100644 --- a/src/jossc/warps/command/AddWarpCommand.php +++ b/src/jossc/warps/command/AddWarpCommand.php @@ -17,8 +17,7 @@ class AddWarpCommand extends Command { private $formManager; /*** AddWarpCommand constructor.*/ - public function __construct() - { + public function __construct() { parent::__construct( 'addwarp', 'Add a new warp location' diff --git a/src/jossc/warps/command/ReloadWarpsCommand.php b/src/jossc/warps/command/ReloadWarpsCommand.php index c0dbbe7..965a913 100644 --- a/src/jossc/warps/command/ReloadWarpsCommand.php +++ b/src/jossc/warps/command/ReloadWarpsCommand.php @@ -15,8 +15,7 @@ class ReloadWarpsCommand extends Command { private $main; /*** ReloadWarpsCommand constructor.*/ - public function __construct() - { + public function __construct() { parent::__construct( 'reloadwarps', 'Reload all warps' @@ -38,7 +37,7 @@ public function execute(CommandSender $sender, string $commandLabel, array $args return false; } - $this->main->reloadWarpsConfig(); + $this->main->getStorage()->reload(); $sender->sendMessage(TextFormat::GREEN . 'All warps reloaded!'); diff --git a/src/jossc/warps/command/RemoveWarpCommand.php b/src/jossc/warps/command/RemoveWarpCommand.php index 673db82..83ee480 100644 --- a/src/jossc/warps/command/RemoveWarpCommand.php +++ b/src/jossc/warps/command/RemoveWarpCommand.php @@ -17,8 +17,7 @@ class RemoveWarpCommand extends Command { private $formManager; /*** RemoveWarpCommand constructor.*/ - public function __construct() - { + public function __construct() { parent::__construct( 'removewarp', 'Remove a warp ' diff --git a/src/jossc/warps/command/WarpsCommand.php b/src/jossc/warps/command/WarpsCommand.php index a57e4bb..8caa784 100644 --- a/src/jossc/warps/command/WarpsCommand.php +++ b/src/jossc/warps/command/WarpsCommand.php @@ -17,8 +17,7 @@ class WarpsCommand extends Command { private $formManager; /*** AddWarpCommand constructor.*/ - public function __construct() - { + public function __construct() { parent::__construct( 'warps', 'See a warps list' diff --git a/src/jossc/warps/manager/FormManager.php b/src/jossc/warps/manager/FormManager.php index 6683ffd..d497a54 100644 --- a/src/jossc/warps/manager/FormManager.php +++ b/src/jossc/warps/manager/FormManager.php @@ -3,6 +3,7 @@ namespace jossc\warps\manager; use jossc\warps\utils\LocationUtils; +use jossc\warps\warp\Warp; use lib\FormAPI\elements\Button; use lib\FormAPI\window\{ CustomWindowForm, @@ -22,8 +23,7 @@ class FormManager { private $storage; /*** FormManager constructor.*/ - public function __construct() - { + public function __construct() { $this->main = Main::getInstance(); $this->storage = $this->main->getStorage(); } @@ -39,13 +39,14 @@ public function showWarpsMenu(Player $player): void { $warps = $storage->getWarps(); - if (count($warps) == 0) { + if ($storage->isEmpty()) { $player->sendMessage(TextFormat::RED . 'There are no warps to see!'); return; } foreach ($warps as $value) { + /**@var Warp $warp*/ $warp = $storage->get($value->getId()); if (is_null($warp)) { @@ -60,6 +61,7 @@ public function showWarpsMenu(Player $player): void { } $form->addHandler(function (Player $player, Button $button) { + /**@var Warp $warp*/ $warp = $this->storage->get($button->getName()); if (is_null($warp)) { @@ -86,44 +88,84 @@ public function showAddWarpMenu(Player $player): void { $form->addInput('id', 'Please insert a warp id:'); $form->addHandler(function (Player $player, CustomWindowForm $form) { - $warpId = $form->getElement('id'); - $warp = $warpId->getFinalValue(); + $warp = $form->getElement('id'); + $warpId = $warp->getFinalValue(); - if (strlen($warp) === 0) { + if (strlen($warpId) === 0) { $player->sendMessage(TextFormat::RED . 'Please, insert a valid name or identifier!'); return; } - if ($this->storage->contains($warp)) { + $storage = $this->storage; + + if ($storage->contains($warpId)) { $player->sendMessage(TextFormat::RED . 'That warp id already exist!'); return; } - $main = $this->main; - - $config = $main->getConfig(); - $locationToString = LocationUtils::locationToString($player->getLocation()); - $warps = $config->get('warps'); - array_push($warps, "$warp;$locationToString"); + $warps = $this->main->getConfig()->get('warps'); + array_push($warps, "$warpId;$locationToString"); - $config->set('warps', $warps); - $config->save(); - - $main->reloadWarpsConfig(); + $storage->set($warps); $player->sendMessage( - TextFormat::GREEN . "You have successfully created the warp: $warp!" + TextFormat::GREEN . "You have successfully created the warp: $warpId!" ); }); $form->showTo($player); } + /*** @param Player $player */ public function showRemoveWarpMenu(Player $player): void { + $form = new CustomWindowForm( + 'warps', + 'Warps List' + ); + + $storage = $this->storage; + + $warps = $storage->getWarps(); + + if ($storage->isEmpty()) { + $player->sendMessage(TextFormat::RED . 'There are no warps to see!'); + + return; + } + + $warpsWithId = []; + foreach ($warps as $warp) { + /**@var Warp $warp*/ + array_push($warpsWithId, $warp->getId()); + } + + $form->addDropdown("warp", "Select the warp to remove:", $warpsWithId); + + $form->addHandler(function (Player $player, CustomWindowForm $form) { + $warp = $form->getElement("warp"); + + $warpId = $warp->getFinalValue(); + + $storage = $this->storage; + + if (!$storage->contains($warpId)) { + $player->sendMessage(TextFormat::RED . 'That warp does not exist!'); + + return; + } + + $storage->removeFromStorage($warpId); + + $player->sendMessage( + TextFormat::GREEN . "You have successfully removed the warp: $warpId!" + ); + }); + + $form->showTo($player); } } \ No newline at end of file diff --git a/src/jossc/warps/storage/WarpsStorage.php b/src/jossc/warps/storage/WarpsStorage.php index e360c89..4b43166 100644 --- a/src/jossc/warps/storage/WarpsStorage.php +++ b/src/jossc/warps/storage/WarpsStorage.php @@ -2,17 +2,25 @@ namespace jossc\warps\storage; +use jossc\warps\Main; use jossc\warps\utils\LocationUtils; use jossc\warps\warp\Warp; class WarpsStorage { + /*** @var Main */ + private $main; + + public function __construct() + { + $this->main = Main::getInstance(); + } + /*** @var array */ private $warps = []; /*** @return array */ - public function getWarps(): array - { + public function getWarps(): array { return $this->warps; } @@ -41,8 +49,67 @@ public function remove(string $warpId): void { * @param string $warpId * @return Warp|null */ - public function get(string $warpId): ?Warp - { + public function get(string $warpId): ?Warp { return !$this->contains($warpId) ? null : $this->warps[$warpId]; } + + /*** @return int */ + public function count(): int { + return count($this->warps); + } + + /*** @return bool */ + public function isEmpty(): bool { + return $this->count() === 0; + } + + public function reload(): void { + $config = $this->main->getConfig(); + + if (!$config->exists('warps')) { + return; + } + + unset($this->warps); + + $this->warps = []; + + $warps = $config->get('warps'); + + foreach ($warps as $warpData) { + $warpDataArray = explode(';', $warpData); + + $this->add($warpDataArray[0], $warpDataArray[1]); + } + } + + /*** @param array $warps */ + public function set(array $warps): void { + $config = $this->main->getConfig(); + + $config->set('warps', $warps); + $config->save(); + + $this->reload(); + } + + /*** @param string $warpId */ + public function removeFromStorage(string $warpId): void { + $warps = $this->main->getConfig()->get('warps'); + + $warpObject = $this->get($warpId); + + if (is_null($warpObject)) { + return; + } + + $locationToString = LocationUtils::locationToString($warpObject->getLocation()); + + $warpIdArray = array($warpId . ";" . $locationToString); + + $updatedArray = array_diff($warps, $warpIdArray); + + $this->remove($warpId); + $this->set($updatedArray); + } } \ No newline at end of file diff --git a/src/jossc/warps/utils/LocationUtils.php b/src/jossc/warps/utils/LocationUtils.php index 99e079e..db96d90 100644 --- a/src/jossc/warps/utils/LocationUtils.php +++ b/src/jossc/warps/utils/LocationUtils.php @@ -29,6 +29,6 @@ public static function stringToLocation(string $locationString): Location { * @return string */ public static function locationToString(Location $location): string { - return "$location->x:$location->y:$location->z:$location->yaw:$location->pitch:{$location->getLevel()->getFolderName()}"; + return (int) $location->x . ":" . (int) $location->y . ":" . (int) $location->z . ":$location->yaw:$location->pitch:{$location->getLevel()->getFolderName()}"; } } \ No newline at end of file diff --git a/src/jossc/warps/warp/Warp.php b/src/jossc/warps/warp/Warp.php index 2002e7e..2a0862a 100644 --- a/src/jossc/warps/warp/Warp.php +++ b/src/jossc/warps/warp/Warp.php @@ -17,21 +17,18 @@ class Warp { * @param string $id * @param Location $location */ - public function __construct(string $id, Location $location) - { + public function __construct(string $id, Location $location) { $this->id = $id; $this->location = $location; } /*** @return string */ - public function getId(): string - { + public function getId(): string { return $this->id; } /*** @return Location */ - public function getLocation(): Location - { + public function getLocation(): Location { return $this->location; } } \ No newline at end of file