diff --git a/plugin.yml b/plugin.yml index 0984a02..8d7b326 100644 --- a/plugin.yml +++ b/plugin.yml @@ -1,10 +1,10 @@ name: SlapperPlus main: jojoe77777\SlapperPlus\Main -version: 1.0.2 -api: [3.0.0-ALPHA9, 3.0.0-ALPHA10, 3.0.0-ALPHA11] +version: 1.1.0 +api: 3.13.0 author: jojoe77777 description: Add-on plugin for Slapper -depend: [Slapper, FormAPI] +depend: Slapper website: "https://github.com/jojoe77777/SlapperPlus" permissions: diff --git a/src/jojoe77777/SlapperPlus/Main.php b/src/jojoe77777/SlapperPlus/Main.php index c4b191a..a920387 100644 --- a/src/jojoe77777/SlapperPlus/Main.php +++ b/src/jojoe77777/SlapperPlus/Main.php @@ -4,17 +4,11 @@ namespace jojoe77777\SlapperPlus; -use jojoe77777\FormAPI\FormAPI; use jojoe77777\SlapperPlus\commands\SlapperPlusCommand; use pocketmine\entity\Entity; use pocketmine\event\Listener; use pocketmine\event\player\PlayerQuitEvent; use pocketmine\nbt\tag\CompoundTag; -use pocketmine\nbt\tag\DoubleTag; -use pocketmine\nbt\tag\FloatTag; -use pocketmine\nbt\tag\ListTag; -use pocketmine\nbt\tag\ShortTag; -use pocketmine\nbt\tag\StringTag; use pocketmine\Player; use pocketmine\plugin\PluginBase; use slapper\events\SlapperCreationEvent; @@ -45,50 +39,40 @@ public function onEnable() { $this->getServer()->getCommandMap()->register("slapperplus", new SlapperPlusCommand($this)); } - public function getFormAPI() : FormAPI { - /** @var FormAPI $api */ - $api = $this->getServer()->getPluginManager()->getPlugin("FormAPI"); - return $api; - } - public function onPlayerQuit(PlayerQuitEvent $ev){ unset($this->entityIds[$ev->getPlayer()->getName()]); unset($this->editingId[$ev->getPlayer()->getName()]); } - public function makeSlapper(Player $player, int $type, string $name){ - $type = self::ENTITY_LIST[$type]; - $nbt = new CompoundTag(); - $nbt->Pos = new ListTag("Pos", [ - new DoubleTag("", $player->getX()), - new DoubleTag("", $player->getY()), - new DoubleTag("", $player->getZ()) - ]); - $nbt->Motion = new ListTag("Motion", [ - new DoubleTag("", 0), - new DoubleTag("", 0), - new DoubleTag("", 0) - ]); - $nbt->Rotation = new ListTag("Rotation", [ - new FloatTag("", $player->getYaw()), - new FloatTag("", $player->getPitch()) - ]); - $nbt->Health = new ShortTag("Health", 1); - $nbt->Commands = new CompoundTag("Commands", []); - $nbt->MenuName = new StringTag("MenuName", ""); - $nbt->SlapperVersion = new StringTag("SlapperVersion", $this->getServer()->getPluginManager()->getPlugin("Slapper")->getDescription()->getVersion()); - if($type === "Human") { + private function makeNBT($type, Player $player, string $name): CompoundTag { + $nbt = Entity::createBaseNBT($player, null, $player->getYaw(), $player->getPitch()); + $nbt->setShort("Health", 1); + $nbt->setTag(new CompoundTag("Commands", [])); + $nbt->setString("MenuName", ""); + $nbt->setString("CustomName", $name); + $nbt->setString("SlapperVersion", $this->getDescription()->getVersion()); + if ($type === "Human") { $player->saveNBT(); - $nbt->Inventory = clone $player->namedtag->Inventory; - $nbt->Skin = new CompoundTag("Skin", ["Data" => new StringTag("Data", $player->getSkin()->getSkinData()), "Name" => new StringTag("Name", $player->getSkin()->getSkinId())]); + + $inventoryTag = $player->namedtag->getListTag("Inventory"); + assert($inventoryTag !== null); + $nbt->setTag(clone $inventoryTag); + + $skinTag = $player->namedtag->getCompoundTag("Skin"); + assert($skinTag !== null); + $nbt->setTag(clone $skinTag); } - $entity = Entity::createEntity("Slapper{$type}", $player->getLevel(), $nbt); - $entity->setNameTag($name); - $entity->setNameTagVisible(true); - $entity->setNameTagAlwaysVisible(true); - $this->getServer()->getPluginManager()->callEvent(new SlapperCreationEvent($entity, "Slapper{$type}", $player, SlapperCreationEvent::CAUSE_COMMAND)); + return $nbt; + } + + public function makeSlapper(Player $player, int $type, string $name){ + $type = self::ENTITY_LIST[$type]; + $nbt = $this->makeNBT($type, $player, $name); + $entity = Entity::createEntity("Slapper" . $type, $player->getLevel(), $nbt); + $entity->spawnToAll(); + $event = new SlapperCreationEvent($entity, "Slapper" . $type, $player, SlapperCreationEvent::CAUSE_COMMAND); + $event->call(); $entity->spawnToAll(); $player->sendMessage("§a[§bSlapperPlus§a]§6 Created {$type} entity"); } - } diff --git a/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php b/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php index f273cbf..f56baec 100644 --- a/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php +++ b/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php @@ -4,6 +4,7 @@ namespace jojoe77777\SlapperPlus\commands; +use jojoe77777\FormAPI\CustomForm; use jojoe77777\FormAPI\SimpleForm; use jojoe77777\SlapperPlus\Main; use pocketmine\command\CommandSender; @@ -40,34 +41,33 @@ public function execute(CommandSender $sender, string $commandLabel, array $args $sender->sendMessage("§a[§bSlapperPlus§a]§6 This command uses forms and can only be executed ingame."); return true; } - $this->createMenu()->sendToPlayer($sender); + $this->createMenu($sender); return true; } - private function createMenu(){ - $form = $this->plugin->getFormAPI()->createSimpleForm(function (Player $player, int $data = null){ + private function createMenu(Player $player){ + $form = new SimpleForm(function(Player $player, $data){ $selection = $data; if($selection === null){ return; // Closed form } switch($selection){ case 0: // "List Slapper entities" - $this->createSlapperList($player)->sendToPlayer($player); + $this->createSlapperList($player); break; case 1: // "Create a new Slapper entity" - $this->createSlapperCreationForm($player)->sendToPlayer($player); + $this->createSlapperCreationForm($player); break; } }); $form->setTitle("§aSlapperPlus §6-§b Main menu"); - $form->setContent(""); $form->addButton("Edit Slapper entities"); $form->addButton("Create a new Slapper entity"); - return $form; + $player->sendForm($form); } private function createSlapperCreationForm(Player $player){ - $form = $this->plugin->getFormAPI()->createCustomForm(function (Player $player, array $data = null){ + $form = new CustomForm(function(Player $player, $data){ if($data === null){ return; } @@ -78,11 +78,11 @@ private function createSlapperCreationForm(Player $player){ $form->setTitle("§bCreate Slapper entity"); $form->addDropdown("Entity type", Main::ENTITY_LIST, 0); $form->addInput("Name", "Name", $player->getName()); - return $form; + $player->sendForm($form); } private function createSlapperList(Player $player){ - $form = $this->plugin->getFormAPI()->createSimpleForm(function (Player $player, int $data = null){ + $form = new SimpleForm(function(Player $player, $data){ $selection = $data; if($selection === null){ return; // Closed form @@ -105,7 +105,7 @@ private function createSlapperList(Player $player){ return; } $this->plugin->editingId[$player->getName()] = $eid; - $this->createSlapperDesc($entity)->sendToPlayer($player); + $this->createSlapperDesc($player, $entity); }); $form->setTitle("§aSlapper entities (click to edit)"); $form->setContent(""); @@ -131,7 +131,7 @@ private function createSlapperList(Player $player){ } } $this->plugin->entityIds[$player->getName()] = $entityIds; - return $form; + $player->sendForm($form); } private function formatSlapperEntity(SlapperEntity $entity, string $type) : string{ @@ -153,8 +153,8 @@ private function getSlapperIcon($entityType){ return str_replace("{0}", strtolower($entityType), self::IMAGE_URL); } - private function createSlapperDesc(Entity $entity){ - $form = $this->plugin->getFormAPI()->createCustomForm(function (Player $player, array $data = null){ + private function createSlapperDesc(Player $player, Entity $entity){ + $form = new CustomForm(function(Player $player, $data){ if($data === null){ return; } @@ -192,7 +192,7 @@ private function createSlapperDesc(Entity $entity){ $form->addSlider("Pitch", 0, 180, -1, (int) $entity->getPitch()); $form->addToggle("Teleport here", false); } - return $form; + $player->sendForm($form); } private function shortenName(string $name){