From 43cf281ddaa0924ef0404906aedfe4fab10a3349 Mon Sep 17 00:00:00 2001 From: Xeno Date: Sat, 27 Jun 2020 13:08:55 -0500 Subject: [PATCH 1/5] Update for PM 3.14.0 Fixes lots of old, outdated API calls. Added support for using FormAPI virion rather than depending on the plugin. Fixed form images crashing issue. --- plugin.yml | 6 +- src/jojoe77777/SlapperPlus/Main.php | 91 ++++++++--------- .../commands/SlapperPlusCommand.php | 99 +++++++++++++------ 3 files changed, 120 insertions(+), 76 deletions(-) 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..da270a3 100644 --- a/src/jojoe77777/SlapperPlus/Main.php +++ b/src/jojoe77777/SlapperPlus/Main.php @@ -4,21 +4,19 @@ 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; +/** + * Class Main + * @package jojoe77777\SlapperPlus + */ class Main extends PluginBase implements Listener { const ENTITY_LIST = [ @@ -44,51 +42,56 @@ public function onEnable() { $this->getServer()->getPluginManager()->registerEvents($this, $this); $this->getServer()->getCommandMap()->register("slapperplus", new SlapperPlusCommand($this)); } - - public function getFormAPI() : FormAPI { - /** @var FormAPI $api */ - $api = $this->getServer()->getPluginManager()->getPlugin("FormAPI"); - return $api; - } - + + /** + * @param PlayerQuitEvent $ev + */ 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") { + + /** + * @param string $type + * @param Player $player + * @param string $name + * + * @return CompoundTag + */ + 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; + } + + /** + * @param Player $player + * @param int $type + * @param string $name + */ + 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..42ad5bc 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; @@ -14,13 +15,21 @@ use slapper\entities\SlapperEntity; use slapper\entities\SlapperHuman; +/** + * Class SlapperPlusCommand + * @package jojoe77777\SlapperPlus\commands + */ class SlapperPlusCommand extends PluginCommand { - const IMAGE_URL = "https://raw.githubusercontent.com/jojoe77777/vanilla-textures/mob-heads/{0}.png"; + const IMAGE_URL = "https://raw.githubusercontent.com/jojoe77777/vanilla-textures/mob-heads/{name}.png"; /** @var Main */ private $plugin; - + + /** + * SlapperPlusCommand constructor. + * @param Main $plugin + */ public function __construct(Main $plugin) { $this->plugin = $plugin; parent::__construct("slapperplus", $plugin); @@ -31,7 +40,13 @@ public function __construct(Main $plugin) { public function getPlugin() : Plugin { return $this->plugin; } - + + /** + * @param CommandSender $sender + * @param string $commandLabel + * @param array $args + * @return bool|mixed + */ public function execute(CommandSender $sender, string $commandLabel, array $args) { if(!$this->testPermission($sender)){ return true; @@ -40,34 +55,39 @@ 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){ + + /** + * @param Player $player + */ + 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); } - + + /** + * @param Player $player + */ 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 +98,14 @@ 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); } - + + /** + * @param Player $player + */ 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 +128,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(""); @@ -120,10 +143,12 @@ private function createSlapperList(Player $player){ } else { $entityType = substr(get_class($entity), strlen("slapper\\entities\\other\\Slapper")); } + var_dump($this->getSlapperIcon($entityType)); $form->addButton($this->formatSlapperEntity($entity, $entityType), SimpleForm::IMAGE_TYPE_URL, $this->getSlapperIcon($entityType)); $entityIds[$i] = $entity->getId(); ++$i; } elseif($entity instanceof SlapperHuman){ + var_dump($this->getSlapperIcon("Human")); $form->addButton($this->formatSlapperHuman($entity), SimpleForm::IMAGE_TYPE_URL, $this->getSlapperIcon("Human")); $entityIds[$i] = $entity->getId(); ++$i; @@ -131,30 +156,38 @@ private function createSlapperList(Player $player){ } } $this->plugin->entityIds[$player->getName()] = $entityIds; - return $form; + $player->sendForm($form); } private function formatSlapperEntity(SlapperEntity $entity, string $type) : string{ $name = $this->shortenName($entity->getNameTag()); $pos = round($entity->getX()) . ", " . round($entity->getY()) . ", " . round($entity->getZ()) . ", " . $entity->getLevel()->getName(); - return "§6\"§b{$name}§6\" §7(§5{$type}§7)\n§1{$pos}"; + return "§6'§b{$name}§6' §7(§5{$type}§7)\n§1{$pos}"; } private function formatSlapperHuman(SlapperHuman $entity) : string { $name = $this->shortenName($entity->getNameTag()); $pos = round($entity->getX()) . ", " . round($entity->getY()) . ", " . round($entity->getZ()) . ", " . $entity->getLevel()->getName(); - return "§6\"§b{$name}§6\" §7(§5Human§7)\n§1{$pos}"; + return "§6'§b{$name}§6' §7(§5Human§7)\n§1{$pos}"; } - + + /** + * @param $entityType + * @return string|string[] + */ private function getSlapperIcon($entityType){ if($entityType === "Human"){ - return str_replace("{0}", (mt_rand(0, 1) === 0 ? "steve" : "alex"), self::IMAGE_URL); + return str_replace("{name}", (mt_rand(0, 1) === 0 ? "steve" : "alex"), self::IMAGE_URL); } - return str_replace("{0}", strtolower($entityType), self::IMAGE_URL); + return str_replace("{name}", strtolower($entityType), self::IMAGE_URL); } - - private function createSlapperDesc(Entity $entity){ - $form = $this->plugin->getFormAPI()->createCustomForm(function (Player $player, array $data = null){ + + /** + * @param Player $player + * @param Entity $entity + */ + private function createSlapperDesc(Player $player, Entity $entity){ + $form = new CustomForm(function(Player $player, $data){ if($data === null){ return; } @@ -192,16 +225,24 @@ private function createSlapperDesc(Entity $entity){ $form->addSlider("Pitch", 0, 180, -1, (int) $entity->getPitch()); $form->addToggle("Teleport here", false); } - return $form; + $player->sendForm($form); } - + + /** + * @param string $name + * @return string + */ private function shortenName(string $name){ if(strlen($name) > 16){ return substr($name, 0, 16) . "..."; } return $name; } - + + /** + * @param SlapperEntity $entity + * @return false|string + */ private function getSlapperType(SlapperEntity $entity){ $class = get_class($entity); if(strpos($class, "other") === false){ From 8819c5273c7811ba2cf2c09e902910a144d32e76 Mon Sep 17 00:00:00 2001 From: Xeno Date: Sat, 27 Jun 2020 13:15:23 -0500 Subject: [PATCH 2/5] Remove var dumps :facepalm: --- src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php b/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php index 42ad5bc..32f28a2 100644 --- a/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php +++ b/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php @@ -143,12 +143,10 @@ private function createSlapperList(Player $player){ } else { $entityType = substr(get_class($entity), strlen("slapper\\entities\\other\\Slapper")); } - var_dump($this->getSlapperIcon($entityType)); $form->addButton($this->formatSlapperEntity($entity, $entityType), SimpleForm::IMAGE_TYPE_URL, $this->getSlapperIcon($entityType)); $entityIds[$i] = $entity->getId(); ++$i; } elseif($entity instanceof SlapperHuman){ - var_dump($this->getSlapperIcon("Human")); $form->addButton($this->formatSlapperHuman($entity), SimpleForm::IMAGE_TYPE_URL, $this->getSlapperIcon("Human")); $entityIds[$i] = $entity->getId(); ++$i; From c77ba12694a283eead5a61f68ec128398880733b Mon Sep 17 00:00:00 2001 From: Xeno Date: Mon, 6 Jul 2020 13:14:15 -0500 Subject: [PATCH 3/5] Update SlapperPlusCommand.php --- .../commands/SlapperPlusCommand.php | 45 +++---------------- 1 file changed, 7 insertions(+), 38 deletions(-) diff --git a/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php b/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php index 32f28a2..64d4d94 100644 --- a/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php +++ b/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php @@ -15,21 +15,13 @@ use slapper\entities\SlapperEntity; use slapper\entities\SlapperHuman; -/** - * Class SlapperPlusCommand - * @package jojoe77777\SlapperPlus\commands - */ class SlapperPlusCommand extends PluginCommand { const IMAGE_URL = "https://raw.githubusercontent.com/jojoe77777/vanilla-textures/mob-heads/{name}.png"; /** @var Main */ private $plugin; - - /** - * SlapperPlusCommand constructor. - * @param Main $plugin - */ + public function __construct(Main $plugin) { $this->plugin = $plugin; parent::__construct("slapperplus", $plugin); @@ -40,13 +32,7 @@ public function __construct(Main $plugin) { public function getPlugin() : Plugin { return $this->plugin; } - - /** - * @param CommandSender $sender - * @param string $commandLabel - * @param array $args - * @return bool|mixed - */ + public function execute(CommandSender $sender, string $commandLabel, array $args) { if(!$this->testPermission($sender)){ return true; @@ -58,10 +44,7 @@ public function execute(CommandSender $sender, string $commandLabel, array $args $this->createMenu($sender); return true; } - - /** - * @param Player $player - */ + private function createMenu(Player $player){ $form = new SimpleForm(function(Player $player, $data){ $selection = $data; @@ -82,10 +65,7 @@ private function createMenu(Player $player){ $form->addButton("Create a new Slapper entity"); $player->sendForm($form); } - - /** - * @param Player $player - */ + private function createSlapperCreationForm(Player $player){ $form = new CustomForm(function(Player $player, $data){ if($data === null){ @@ -100,10 +80,7 @@ private function createSlapperCreationForm(Player $player){ $form->addInput("Name", "Name", $player->getName()); $player->sendForm($form); } - - /** - * @param Player $player - */ + private function createSlapperList(Player $player){ $form = new SimpleForm(function(Player $player, $data){ $selection = $data; @@ -168,22 +145,14 @@ private function formatSlapperHuman(SlapperHuman $entity) : string { $pos = round($entity->getX()) . ", " . round($entity->getY()) . ", " . round($entity->getZ()) . ", " . $entity->getLevel()->getName(); return "§6'§b{$name}§6' §7(§5Human§7)\n§1{$pos}"; } - - /** - * @param $entityType - * @return string|string[] - */ + private function getSlapperIcon($entityType){ if($entityType === "Human"){ return str_replace("{name}", (mt_rand(0, 1) === 0 ? "steve" : "alex"), self::IMAGE_URL); } return str_replace("{name}", strtolower($entityType), self::IMAGE_URL); } - - /** - * @param Player $player - * @param Entity $entity - */ + private function createSlapperDesc(Player $player, Entity $entity){ $form = new CustomForm(function(Player $player, $data){ if($data === null){ From 4398eb3bd66626b489ac15a05d080bd2c0a083d4 Mon Sep 17 00:00:00 2001 From: Xeno Date: Mon, 6 Jul 2020 13:18:11 -0500 Subject: [PATCH 4/5] Remove extra garbage --- src/jojoe77777/SlapperPlus/Main.php | 25 +++---------------- .../commands/SlapperPlusCommand.php | 8 ------ 2 files changed, 3 insertions(+), 30 deletions(-) diff --git a/src/jojoe77777/SlapperPlus/Main.php b/src/jojoe77777/SlapperPlus/Main.php index da270a3..a920387 100644 --- a/src/jojoe77777/SlapperPlus/Main.php +++ b/src/jojoe77777/SlapperPlus/Main.php @@ -13,10 +13,6 @@ use pocketmine\plugin\PluginBase; use slapper\events\SlapperCreationEvent; -/** - * Class Main - * @package jojoe77777\SlapperPlus - */ class Main extends PluginBase implements Listener { const ENTITY_LIST = [ @@ -42,22 +38,12 @@ public function onEnable() { $this->getServer()->getPluginManager()->registerEvents($this, $this); $this->getServer()->getCommandMap()->register("slapperplus", new SlapperPlusCommand($this)); } - - /** - * @param PlayerQuitEvent $ev - */ + public function onPlayerQuit(PlayerQuitEvent $ev){ unset($this->entityIds[$ev->getPlayer()->getName()]); unset($this->editingId[$ev->getPlayer()->getName()]); } - - /** - * @param string $type - * @param Player $player - * @param string $name - * - * @return CompoundTag - */ + private function makeNBT($type, Player $player, string $name): CompoundTag { $nbt = Entity::createBaseNBT($player, null, $player->getYaw(), $player->getPitch()); $nbt->setShort("Health", 1); @@ -78,12 +64,7 @@ private function makeNBT($type, Player $player, string $name): CompoundTag { } return $nbt; } - - /** - * @param Player $player - * @param int $type - * @param string $name - */ + public function makeSlapper(Player $player, int $type, string $name){ $type = self::ENTITY_LIST[$type]; $nbt = $this->makeNBT($type, $player, $name); diff --git a/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php b/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php index 64d4d94..6909356 100644 --- a/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php +++ b/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php @@ -195,10 +195,6 @@ private function createSlapperDesc(Player $player, Entity $entity){ $player->sendForm($form); } - /** - * @param string $name - * @return string - */ private function shortenName(string $name){ if(strlen($name) > 16){ return substr($name, 0, 16) . "..."; @@ -206,10 +202,6 @@ private function shortenName(string $name){ return $name; } - /** - * @param SlapperEntity $entity - * @return false|string - */ private function getSlapperType(SlapperEntity $entity){ $class = get_class($entity); if(strpos($class, "other") === false){ From 21b4f26e853b34548a43d97a3381afd27da15720 Mon Sep 17 00:00:00 2001 From: Xeno Date: Mon, 6 Jul 2020 13:20:39 -0500 Subject: [PATCH 5/5] Fix epic edits --- .../SlapperPlus/commands/SlapperPlusCommand.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php b/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php index 6909356..f56baec 100644 --- a/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php +++ b/src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php @@ -17,7 +17,7 @@ class SlapperPlusCommand extends PluginCommand { - const IMAGE_URL = "https://raw.githubusercontent.com/jojoe77777/vanilla-textures/mob-heads/{name}.png"; + const IMAGE_URL = "https://raw.githubusercontent.com/jojoe77777/vanilla-textures/mob-heads/{0}.png"; /** @var Main */ private $plugin; @@ -137,20 +137,20 @@ private function createSlapperList(Player $player){ private function formatSlapperEntity(SlapperEntity $entity, string $type) : string{ $name = $this->shortenName($entity->getNameTag()); $pos = round($entity->getX()) . ", " . round($entity->getY()) . ", " . round($entity->getZ()) . ", " . $entity->getLevel()->getName(); - return "§6'§b{$name}§6' §7(§5{$type}§7)\n§1{$pos}"; + return "§6\"§b{$name}§6\" §7(§5{$type}§7)\n§1{$pos}"; } private function formatSlapperHuman(SlapperHuman $entity) : string { $name = $this->shortenName($entity->getNameTag()); $pos = round($entity->getX()) . ", " . round($entity->getY()) . ", " . round($entity->getZ()) . ", " . $entity->getLevel()->getName(); - return "§6'§b{$name}§6' §7(§5Human§7)\n§1{$pos}"; + return "§6\"§b{$name}§6\" §7(§5Human§7)\n§1{$pos}"; } private function getSlapperIcon($entityType){ if($entityType === "Human"){ - return str_replace("{name}", (mt_rand(0, 1) === 0 ? "steve" : "alex"), self::IMAGE_URL); + return str_replace("{0}", (mt_rand(0, 1) === 0 ? "steve" : "alex"), self::IMAGE_URL); } - return str_replace("{name}", strtolower($entityType), self::IMAGE_URL); + return str_replace("{0}", strtolower($entityType), self::IMAGE_URL); } private function createSlapperDesc(Player $player, Entity $entity){ @@ -194,14 +194,14 @@ private function createSlapperDesc(Player $player, Entity $entity){ } $player->sendForm($form); } - + private function shortenName(string $name){ if(strlen($name) > 16){ return substr($name, 0, 16) . "..."; } return $name; } - + private function getSlapperType(SlapperEntity $entity){ $class = get_class($entity); if(strpos($class, "other") === false){