From 58253be0a020491e5566cb60da9af3903e12503f Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Fri, 20 Mar 2015 17:19:06 +0100 Subject: [PATCH] Implemented swiftness, added invisible status to FloatingTextParticle --- src/pocketmine/entity/Effect.php | 4 +- src/pocketmine/entity/Entity.php | 4 ++ src/pocketmine/level/Level.php | 4 ++ .../level/particle/FloatingTextParticle.php | 46 ++++++++++++------- 4 files changed, 39 insertions(+), 19 deletions(-) diff --git a/src/pocketmine/entity/Effect.php b/src/pocketmine/entity/Effect.php index 532bd7af72..76858ad2ca 100644 --- a/src/pocketmine/entity/Effect.php +++ b/src/pocketmine/entity/Effect.php @@ -30,7 +30,7 @@ use pocketmine\Server; class Effect{ const SPEED = 1; const SLOWNESS = 2; - //TODO: const SWIFTNESS = 3; + const SWIFTNESS = 3; const FATIGUE = 4; const MINING_FATIGUE = 4; //TODO: const STRENGTH = 5; @@ -61,7 +61,7 @@ class Effect{ self::$effects[Effect::SPEED] = new Effect(Effect::SPEED, "Speed", 124, 175, 198); self::$effects[Effect::SLOWNESS] = new Effect(Effect::SLOWNESS, "Slowness", 90, 108, 129, true); - //self::$effects[Effect::SWIFTNESS] = new Effect(Effect::SWIFTNESS, "Swiftness", 217, 192, 67); + self::$effects[Effect::SWIFTNESS] = new Effect(Effect::SWIFTNESS, "Swiftness", 217, 192, 67); self::$effects[Effect::FATIGUE] = new Effect(Effect::FATIGUE, "Mining Fatigue", 74, 66, 23, true); //self::$effects[Effect::STRENGTH] = new Effect(Effect::STRENGTH, "Strength", 147, 36, 35); //self::$effects[Effect::HEALING] = new InstantEffect(Effect::HEALING, "Healing", 248, 36, 35); diff --git a/src/pocketmine/entity/Entity.php b/src/pocketmine/entity/Entity.php index 9a9620d0db..31470468d0 100644 --- a/src/pocketmine/entity/Entity.php +++ b/src/pocketmine/entity/Entity.php @@ -285,6 +285,10 @@ abstract class Entity extends Location implements Metadatable{ } } + public function getEffect($effectId){ + return isset($this->effects[$effectId]) ? $this->effects[$effectId] : null; + } + public function hasEffect($effectId){ return isset($this->effects[$effectId]); } diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 03f3d7ff63..368aae2465 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -98,6 +98,7 @@ use pocketmine\utils\ReversePriorityQueue; use pocketmine\utils\TextFormat; use pocketmine\level\particle\Particle; use pocketmine\level\sound\Sound; +use pocketmine\entity\Effect; use pocketmine\level\particle\DestroyBlockParticle; #include @@ -1289,6 +1290,9 @@ class Level implements ChunkManager, Metadatable{ } $breakTime = $player->isCreative() ? 0.15 : $target->getBreakTime($item); + if($player->hasEffect(Effect::SWIFTNESS)){ + $breakTime *= pow(0.80, $player->getEffect(Effect::SWIFTNESS)->getAmplifier() + 1); + } if(!$ev->getInstaBreak() and ($player->lastBreak + $breakTime) >= microtime(true)){ return false; diff --git a/src/pocketmine/level/particle/FloatingTextParticle.php b/src/pocketmine/level/particle/FloatingTextParticle.php index ff683b63db..797d982783 100644 --- a/src/pocketmine/level/particle/FloatingTextParticle.php +++ b/src/pocketmine/level/particle/FloatingTextParticle.php @@ -38,6 +38,7 @@ class FloatingTextParticle extends Particle{ protected $text; protected $title; protected $entityId; + protected $invisible = false; public function __construct(Vector3 $pos, $text, $title = ""){ parent::__construct($pos->x, $pos->y, $pos->z); @@ -52,6 +53,14 @@ class FloatingTextParticle extends Particle{ public function setTitle($title){ $this->title = $title; } + + public function isInvisible(){ + return $this->invisible; + } + + public function setInvisible($value = true){ + $this->invisible = (bool) $value; + } public function encode(){ $p = []; @@ -66,24 +75,27 @@ class FloatingTextParticle extends Particle{ $p[] = $pk0; } - $pk = new AddPlayerPacket(); - $pk->eid = $this->entityId; - $pk->username = $this->title . "\n" . $this->text; - $pk->clientID = $this->entityId; - $pk->x = $this->x; - $pk->y = $this->y - 2; - $pk->z = $this->z; - $pk->yaw = 0; - $pk->pitch = 0; - $pk->item = 0; - $pk->meta = 0; - $pk->metadata = [ - Entity::DATA_FLAGS => [Entity::DATA_TYPE_BYTE, 1 << Entity::DATA_FLAG_INVISIBLE], - Entity::DATA_AIR => [Entity::DATA_TYPE_SHORT, 300], - Entity::DATA_SHOW_NAMETAG => [Entity::DATA_TYPE_BYTE, 1] - ]; + if(!$this->invisible){ + + $pk = new AddPlayerPacket(); + $pk->eid = $this->entityId; + $pk->username = $this->title . "\n" . $this->text; + $pk->clientID = $this->entityId; + $pk->x = $this->x; + $pk->y = $this->y - 2; + $pk->z = $this->z; + $pk->yaw = 0; + $pk->pitch = 0; + $pk->item = 0; + $pk->meta = 0; + $pk->metadata = [ + Entity::DATA_FLAGS => [Entity::DATA_TYPE_BYTE, 1 << Entity::DATA_FLAG_INVISIBLE], + Entity::DATA_AIR => [Entity::DATA_TYPE_SHORT, 300], + Entity::DATA_SHOW_NAMETAG => [Entity::DATA_TYPE_BYTE, 1] + ]; - $p[] = $pk; + $p[] = $pk; + } return $pk; }