Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions plugin.yml
Original file line number Diff line number Diff line change
@@ -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:
Expand Down
68 changes: 26 additions & 42 deletions src/jojoe77777/SlapperPlus/Main.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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");
}

}
30 changes: 15 additions & 15 deletions src/jojoe77777/SlapperPlus/commands/SlapperPlusCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace jojoe77777\SlapperPlus\commands;

use jojoe77777\FormAPI\CustomForm;
use jojoe77777\FormAPI\SimpleForm;
use jojoe77777\SlapperPlus\Main;
use pocketmine\command\CommandSender;
Expand Down Expand Up @@ -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;
}
Expand All @@ -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
Expand All @@ -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("");
Expand All @@ -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{
Expand All @@ -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;
}
Expand Down Expand Up @@ -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){
Expand Down