From 428236d02f05f2879d9e05b7ef020ea8040ed2e5 Mon Sep 17 00:00:00 2001 From: iksaku Date: Wed, 23 Jul 2014 22:28:17 -0500 Subject: [PATCH] Some work... --- plugin.yml | 1 + src/HealthBar/EventHandler.php | 38 ++++--- src/HealthBar/HealthBarCommand.php | 10 +- src/HealthBar/Loader.php | 161 +++++++++++++++++++++-------- 4 files changed, 151 insertions(+), 59 deletions(-) diff --git a/plugin.yml b/plugin.yml index 9e36b1d..7e409ef 100644 --- a/plugin.yml +++ b/plugin.yml @@ -4,6 +4,7 @@ version: 1.0.0 api: 1.0.0 author: iksaku website: https://github.com/LegendOfMCPE/HealthBar +softdepend: EssentialsPE permissions: healthbar: diff --git a/src/HealthBar/EventHandler.php b/src/HealthBar/EventHandler.php index 4ccc5c7..1ab35d5 100644 --- a/src/HealthBar/EventHandler.php +++ b/src/HealthBar/EventHandler.php @@ -1,6 +1,7 @@ plugin = $plugin; } - /** - * @param PlayerJoinEvent $event - */ - public function onPlayerJoin(PlayerJoinEvent $event){ - $player = $event->getPlayer(); - $this->plugin->updateHealthBar($player); - } - /** * @param EntityRegainHealthEvent $event */ public function onRegainHealth(EntityRegainHealthEvent $event){ $entity = $event->getEntity(); - $health = $event->getAmount(); - if($entity instanceof Player){ + if($entity instanceof Player && !$event->isCancelled()){ + $health = $entity->getHealth() + $event->getAmount(); + if($health > $entity->getMaxHealth()){ + $health = $entity->getMaxHealth(); + }elseif($health <= 0){ + $health = 0; + } $this->plugin->updateHealthBar($entity, $health); } } @@ -40,7 +38,7 @@ public function onRegainHealth(EntityRegainHealthEvent $event){ */ public function onHealthLose(EntityDamageEvent $event){ $entity = $event->getEntity(); - if($entity instanceof Player){ + if($entity instanceof Player && !$event->isCancelled()){ $health = $entity->getHealth() - $event->getFinalDamage(); $this->plugin->updateHealthBar($entity, $health); } @@ -51,9 +49,25 @@ public function onHealthLose(EntityDamageEvent $event){ */ public function onAttack(EntityDamageByEntityEvent $event){ $entity = $event->getEntity(); - if($entity instanceof Player){ + if($entity instanceof Player && !$event->isCancelled()){ $health = $entity->getHealth() - $event->getFinalDamage(); $this->plugin->updateHealthBar($entity, $health); } } + + /** + * @param PlayerNickChangeEvent $event + */ + public function onNickChange(PlayerNickChangeEvent $event){ + $player = $event->getPlayer(); + $nick = $event->getNewNick(); + $nametag = $event->getNameTag(); + + $bar = $this->plugin->getHealthBar(); + $bar = str_replace("maxhealth", $player->getMaxHealth(), $bar); + $bar = str_replace("health", $player->getHealth(), $bar); + $bar = str_replace("name", $nick, $bar); + + $event->setNameTag($bar); + } } \ No newline at end of file diff --git a/src/HealthBar/HealthBarCommand.php b/src/HealthBar/HealthBarCommand.php index d5d6cf6..8b32bf6 100644 --- a/src/HealthBar/HealthBarCommand.php +++ b/src/HealthBar/HealthBarCommand.php @@ -82,6 +82,8 @@ public function execute(CommandSender $sender, $alias, array $args){ } switch($args[1]){ case "default": + case "retro": + case "slim": $this->plugin->setStyle($args[1]); $sender->sendMessage(TextFormat::YELLOW . "[HealthBar] Updating style..."); return true; @@ -123,12 +125,12 @@ public function execute(CommandSender $sender, $alias, array $args){ switch($args[1]){ case "on": $sender->sendMessage(TextFormat::YELLOW . "Setting your HealthBar..."); - $this->plugin->updateHealthBar($sender); + $this->plugin->setHealthBar($sender, true, $sender->getHealth()); return true; break; case "off": $sender->sendMessage(TextFormat::YELLOW . "Removing your HealthBar..."); - $this->plugin->removeHealthBar($sender); + $this->plugin->setHealthBar($sender, false); return true; break; default: @@ -160,13 +162,13 @@ public function execute(CommandSender $sender, $alias, array $args){ case "on": $sender->sendMessage(TextFormat::YELLOW . "Setting player' HealthBar..."); $player->sendMessage(TextFormat::YELLOW . "Setting your HealthBar..."); - $this->plugin->updateHealthBar($player); + $this->plugin->setHealthBar($player, true, $player->getHealth()); return true; break; case "off": $sender->sendMessage(TextFormat::YELLOW . "Removing player' HealthBar..."); $player->sendMessage(TextFormat::YELLOW . "Removing your HealthBar..."); - $this->plugin->removeHealthBar($player); + $this->plugin->setHealthBar($player, false); return true; break; default: diff --git a/src/HealthBar/Loader.php b/src/HealthBar/Loader.php index 0d496e3..3b90ac4 100644 --- a/src/HealthBar/Loader.php +++ b/src/HealthBar/Loader.php @@ -2,10 +2,13 @@ namespace HealthBar; use pocketmine\Player; +use pocketmine\plugin\Plugin; use pocketmine\plugin\PluginBase; use pocketmine\utils\TextFormat; +use EssentialsPE\Loader as EssentialsPE; class Loader extends PluginBase{ + public $essentialspe; private $canRemove; public function onEnable(){ @@ -13,12 +16,16 @@ public function onEnable(){ $this->getServer()->getCommandMap()->register("healthbar", new HealthBarCommand($this)); $this->getServer()->getPluginManager()->registerEvents(new EventHandler($this), $this); $this->checkConfiguration(); + $ess = $this->getServer()->getPluginManager()->getPlugin("EssentialsPE"); + if($ess instanceof Plugin && $ess->isEnabled()){ + $this->essentialspe = new EssentialsPE(); + } } public function onDisable(){ if($this->canRemove === true){ foreach($this->getServer()->getOnlinePlayers() as $p){ - $this->removeHealthBar($p); + $this->setHealthBar($p, false); } } } @@ -43,7 +50,7 @@ private function checkConfiguration(){ private function enableHealthBar(){ $this->canRemove = true; foreach($this->getServer()->getOnlinePlayers() as $p){ - $this->updateHealthBar($p); + $this->setHealthBar($p, true); } } @@ -62,51 +69,55 @@ private function enableHealthBar(){ * */ + protected $players = []; + public function getPlayer($player){ - $r = ""; + $player = strtolower($player); + $r = false; foreach($this->getServer()->getOnlinePlayers() as $p){ - if(strtolower($p->getDisplayName()) == strtolower($player) || strtolower($p->getName()) == strtolower($player)){ - $r = $this->getServer()->getPlayerExact($p->getName()); + if(strtolower($p->getName()) == $player || strtolower($p->getDisplayName()) == $player){ + $r = $p; } } - if($r == ""){ - return false; - }else{ - return $r; - } + return $r; } public function getStyle(){ $style = $this->getConfig()->get("style"); - if($style == "default"){ - return "default"; - }elseif($style == "retro"){ - return "retro"; - }elseif($style == "slim"){ - return "slim"; - }else{ - return false; + switch($style){ + case "default": + case "retro": + case "slim": + return $style; + break; } + return false; } public function getPosition(){ $position = $this->getConfig()->get("position"); - if($position == "above" || $position == "under" || $position == "left" || $position == "right"){ - return $position; - }else{ - return false; + switch($position){ + case "above": + case "under": + case "left": + case "right": + return $position; + break; } + return false; } public function setStyle($style){ switch($style){ case "default": + case "retro": + case "slim": $this->getConfig()->set("style", $style); + $this->getConfig()->save(); break; } - $this->getConfig()->save(); foreach($this->getServer()->getOnlinePlayers() as $p){ - $this->updateHealthBar($p); + $this->updateHealthBar($p, $p->getMaxHealth(), $p->getDisplayName()); } return true; } @@ -118,21 +129,26 @@ public function setPosition($position){ case "left": case "right": $this->getConfig()->set("position", $position); + $this->getConfig()->save(); break; } - $this->getConfig()->save(); foreach($this->getServer()->getOnlinePlayers() as $p){ - $this->updateHealthBar($p); + $this->updateHealthBar($p, $p->getMaxHealth(), $p->getDisplayName()); } return true; } - public function updateHealthBar(Player $player, $health = false){ + public function updateHealthBar(Player $player, $health = false, $name = false){ + if(!$this->isHealthBarEnabled($player)){ + return false; + } $style = $this->getStyle(); $position = $this->getPosition(); $maxhealth = $player->getMaxHealth(); if($health === false){ $health = $player->getHealth(); + }elseif($name === false){ + $name = $player->getDisplayName(); } if($style === false || $position === false){ @@ -146,45 +162,45 @@ public function updateHealthBar(Player $player, $health = false){ case "retro": $bar = ""; $h = $health; - $nh = $maxhealth - $health; - while($nh >= 1){ - $bar = $bar . ":"; - $nh--; - } + $mh = $maxhealth - $health; while($h >= 1){ - $bar = $bar . "|"; + $bar .= $bar . "|"; $h--; } + while($mh >= 1){ + $bar .= $bar . ":"; + $mh--; + } $style = $bar; break; case "slim": $bar = ""; $h = $health; - $nh = $maxhealth - $health; - while($nh >= 1){ - $bar = $bar . "-"; - $nh--; - } + $mh = $maxhealth - $health; while($h >= 1){ - $bar = $bar . "="; + $bar .= $bar . "="; $h--; } + while($mh >= 1){ + $bar .= $bar . "-"; + $mh--; + } $style = $bar; break; } switch($position){ case "above": - $player->setNameTag($style . "\n" . $player->getDisplayName()); + $player->setNameTag($style . "\n" . $name); break; case "under": - $player->setNameTag($player->getDisplayName() . "\n" . $style); + $player->setNameTag($name . "\n" . $style); break; case "left": - $player->setNameTag($style . " " . $player->getDisplayName()); + $player->setNameTag($style . " " . $name); break; case "right": - $player->setNameTag($player->getDisplayName() . " " . $style); + $player->setNameTag($name . " " . $style); break; } return true; @@ -195,4 +211,63 @@ public function removeHealthBar(Player $player){ $player->setNameTag($player->getDisplayName()); } } + + public function getHealthBar(){ + $style = $this->getStyle(); + $position = $this->getPosition(); + $maxhealth = "maxhealth"; + $health = "health"; + $name = "name"; + + if($style === false || $position === false){ + return false; + } + + switch($style){ + case "default": + $style = "[" . $health . "/" . $maxhealth . "]"; + break; + } + + $bar = ""; + switch($position){ + case "above": + $bar = $style . "\n" . $name; + break; + case "under": + $bar = $name . "\n" . $style; + break; + case "left": + $bar = $style . " " . $name; + break; + case "right": + $bar = $name . " " . $style; + break; + } + return $bar; + } + + public function isHealthBarEnabled(Player $player){ + if(!isset($this->players[$player->getName()])){ + $this->players[$player->getName()] = true; + } + if($this->players[$player->getName()] === false){ + return false; + }else{ + return true; + } + } + + public function setHealthBar(Player $player, $value = true, $health = false){ + if(!is_bool($value)){ + return false; + } + $this->players[$player->getName()] = $value; + if($value === false){ + $this->removeHealthBar($player); + }else{ + $this->updateHealthBar($player, $health); + } + return true; + } }