commit 0af5edc852c411f4628c3c3ae248f4bb246c02aa Author: Ad5001 Date: Fri Mar 17 20:37:04 2017 +0100 Uploading finished plugin ! diff --git a/plugin.yml b/plugin.yml new file mode 100644 index 0000000..ea10138 --- /dev/null +++ b/plugin.yml @@ -0,0 +1,17 @@ +--- +# Base generated with ImagicalPlugCreator by Ad5001 (C) 2017 for Ad5001 +# link: https://ad5001.eu +name: FloatingTexts +author: Ad5001 +main: Ad5001\FloatingTexts\Main +version: 1.0 +api: [3.0.0, 3.0.0-ALPHA3] +commands: + createfloat: + description: Create a floating text ! + usage: /createfloat + permission: floatingtexts.cmd +permissions: + floatingtexts.cmd: + default: op +... \ No newline at end of file diff --git a/src/Ad5001/FloatingTexts/Main.php b/src/Ad5001/FloatingTexts/Main.php new file mode 100644 index 0000000..e2bc079 --- /dev/null +++ b/src/Ad5001/FloatingTexts/Main.php @@ -0,0 +1,94 @@ +getServer()->getPluginManager()->registerEvents($this, $this); + $this->sessions = []; + } + + /* + Called when the plugin disables + */ + public function onDisable() { + } + + /* + Called when one of the defined commands of the plugin has been called + @param $sender \pocketmine\command\CommandSender + @param $cmd \pocketmine\command\Command + @param $label mixed + @param $args array + return bool + */ + public function onCommand(\pocketmine\command\CommandSender $sender, \pocketmine\command\Command $cmd, $label, array $args): bool { + switch($cmd->getName()) { + case "createfloat": + if($sender instanceof Player) { + if(isset($args[0])) { + $text = implode(" ", $args); + $text = str_ireplace("\\n", "\n", $text); + $this->sessions[$sender->getName()] = $text; + $sender->sendMessage("Tap an entity !"); + } + } + return true; + break; + } + } + + /* + WHen a player hits an entity with a session, set his nametag + @param $event \pocketmine\event\entity\EntityDamageEvent + */ + public function onEntityDamage(\pocketmine\event\entity\EntityDamageEvent $event) { + if($event instanceof \pocketmine\event\entity\EntityDamageByEntityEvent) { + if($event->getDamager() instanceof Player && + isset($this->sessions[$event->getDamager()->getName()])) { + $event->getEntity()->addEffect(\pocketmine\entity\Effect::getEffectByName("invisibility")->setDuration(99999)->setVisible(false)); + $event->getEntity()->setNameTag($this->sessions[$event->getDamager()->getName()]); + $event->getEntity()->setNameTagAlwaysVisible(true); + $event->getEntity()->setNameTagVisible(true); + $event->getEntity()->setImmobile(true); + $event->getEntity()->namedtag->isUsedToFloat = new \pocketmine\nbt\tag\StringTag("isUsedToFloat", "true"); + $event->getEntity()->setNameTag($this->sessions[$event->getDamager()->getName()]); + $event->setCancelled(); + unset($this->sessions[$event->getDamager()->getName()]); + } elseif(isset($event->getEntity()->namedtag->isUsedToFloat)) { + if(!($event->getDamager() instanceof Player && $event->getDamager()->isOp())) $event->setCancelled(); + } + } elseif(isset($event->getEntity()->namedtag->isUsedToFloat)) { + $event->setCancelled(); + } + } + + + /* + Checks when a level loads with floats to regive them the flags and effects. + @param $event \pocketmine\event\level\LevelLoadEvent + */ + public function onLevelLoad(\pocketmine\event\level\LevelLoadEvent $event) { + foreach ($event->getLevel()->getEntities() as $et) { + if(isset($event->getEntity()->namedtag->isUsedToFloat)) { + $event->getEntity()->addEffect(\pocketmine\entity\Effect::getEffectByName("invisibility")->setDuration(99999)->setVisible(false)); + $event->getEntity()->setNameTagAlwaysVisible(true); + $event->getEntity()->setNameTagVisible(true); + $event->getEntity()->setImmobile(true); + } + } + } +} \ No newline at end of file