2017-03-17 19:37:04 +00:00
|
|
|
<?php
|
|
|
|
# FloatingTexts
|
|
|
|
# A new production from Ad5001 generated using ImagicalPlugCreator by Ad5001 (C) 2017
|
|
|
|
|
|
|
|
namespace Ad5001\FloatingTexts;
|
|
|
|
|
|
|
|
use pocketmine\Server;
|
|
|
|
use pocketmine\Player;
|
|
|
|
use pocketmine\plugin\PluginBase;
|
|
|
|
use pocketmine\entity\Entity;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Main extends PluginBase implements \pocketmine\event\Listener {
|
|
|
|
|
|
|
|
/*
|
|
|
|
Called when the plugin enables
|
|
|
|
*/
|
|
|
|
public function onEnable() {
|
|
|
|
$this->getServer()->getPluginManager()->registerEvents($this, $this);
|
|
|
|
$this->sessions = [];
|
2018-06-10 08:43:22 +00:00
|
|
|
$this->getScheduler()->scheduleRepeatingTask(new SetNameTagVisibleTask($this),10);
|
2017-03-17 19:37:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
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
|
|
|
|
*/
|
2017-10-27 20:40:23 +00:00
|
|
|
public function onCommand(\pocketmine\command\CommandSender $sender, \pocketmine\command\Command $cmd, string $label, array $args): bool {
|
2017-03-17 19:37:04 +00:00
|
|
|
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()])) {
|
2018-06-10 09:04:09 +00:00
|
|
|
$event->getEntity()->addEffect(new \pocketmine\entity\EffectInstance(\pocketmine\entity\Effect::getEffectByName("invisibility"))->setAmbient(true)->setVisible(false));
|
2017-03-17 19:37:04 +00:00
|
|
|
$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) {
|
2017-04-04 15:02:30 +00:00
|
|
|
if(isset($et->namedtag->isUsedToFloat)) {
|
|
|
|
$et->addEffect(\pocketmine\entity\Effect::getEffectByName("invisibility")->setDuration(99999)->setVisible(false));
|
|
|
|
$et->setNameTagAlwaysVisible(true);
|
|
|
|
$et->setNameTagVisible(true);
|
|
|
|
$et->setImmobile(true);
|
2017-03-17 19:37:04 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2017-10-27 20:40:23 +00:00
|
|
|
}
|