From e48a3e5713b8b008975f0e20ec851ebe89509cfd Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Fri, 13 Mar 2015 14:24:19 +0100 Subject: [PATCH] Added some types of Particles, Block break particles --- src/pocketmine/Player.php | 2 +- src/pocketmine/level/Level.php | 13 +++++ .../level/particle/DestroyBlockParticle.php | 47 ++++++++++++++++++ .../level/particle/ExplodeParticle.php | 42 ++++++++++++++++ .../level/particle/MobSpawnParticle.php | 48 +++++++++++++++++++ src/pocketmine/level/particle/Particle.php | 34 +++++++++++++ src/pocketmine/network/protocol/Info.php | 2 +- .../network/protocol/LevelEventPacket.php | 4 +- 8 files changed, 188 insertions(+), 4 deletions(-) create mode 100644 src/pocketmine/level/particle/DestroyBlockParticle.php create mode 100644 src/pocketmine/level/particle/ExplodeParticle.php create mode 100644 src/pocketmine/level/particle/MobSpawnParticle.php create mode 100644 src/pocketmine/level/particle/Particle.php diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 85b668ddc..0aa092d17 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -1246,7 +1246,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{ $this->lastUpdate = $currentTick; - if($this->spawned){ + if($this->spawned){ $this->processMovement($currentTick); $this->entityBaseTick(1); diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index e19538be8..d2598a42e 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -95,6 +95,8 @@ use pocketmine\utils\LevelException; use pocketmine\utils\MainLogger; use pocketmine\utils\ReversePriorityQueue; use pocketmine\utils\TextFormat; +use pocketmine\level\particle\Particle; +use pocketmine\level\particle\DestroyBlockParticle; #include @@ -355,6 +357,13 @@ class Level implements ChunkManager, Metadatable{ $this->blockCache = []; $this->temporalPosition = null; } + + public function addParticle(Particle $particle){ + $pk = $particle->encode(); + if($pk !== null){ + Server::broadcastPacket($this->getUsingChunk($particle->x >> 4, $particle->z >> 4), $pk); + } + } /** * @return bool @@ -1259,7 +1268,11 @@ class Level implements ChunkManager, Metadatable{ } } $drops = $target->getDrops($item); //Fixes tile entities being deleted before getting drops + + $this->addParticle(new DestroyBlockParticle($target, $target)); + $target->onBreak($item); + $tile = $this->getTile($target); if($tile instanceof Tile){ if($tile instanceof InventoryHolder){ diff --git a/src/pocketmine/level/particle/DestroyBlockParticle.php b/src/pocketmine/level/particle/DestroyBlockParticle.php new file mode 100644 index 000000000..eae28f775 --- /dev/null +++ b/src/pocketmine/level/particle/DestroyBlockParticle.php @@ -0,0 +1,47 @@ +x, $pos->y, $pos->z); + $this->data = $b->getId() + ($b->getDamage() << 12); + } + + public function encode(){ + $pk = new LevelEventPacket; + $pk->evid = 2001; + $pk->x = $this->x; + $pk->y = $this->y; + $pk->z = $this->z; + $pk->data = $this->data; + + return $pk; + } +} diff --git a/src/pocketmine/level/particle/ExplodeParticle.php b/src/pocketmine/level/particle/ExplodeParticle.php new file mode 100644 index 000000000..7317c5e95 --- /dev/null +++ b/src/pocketmine/level/particle/ExplodeParticle.php @@ -0,0 +1,42 @@ +x, $pos->y, $pos->z); + } + + public function encode(){ + $pk = new ExplodePacket; + $pk->x = $this->x; + $pk->y = $this->y; + $pk->z = $this->z; + $pk->radius = 0; + + return $pk; + } +} diff --git a/src/pocketmine/level/particle/MobSpawnParticle.php b/src/pocketmine/level/particle/MobSpawnParticle.php new file mode 100644 index 000000000..b65fa7ae6 --- /dev/null +++ b/src/pocketmine/level/particle/MobSpawnParticle.php @@ -0,0 +1,48 @@ +x, $pos->y, $pos->z); + $this->width = $width; + $this->height = $height; + } + + public function encode(){ + $pk = new LevelEventPacket; + $pk->evid = 2004; + $pk->x = $this->x; + $pk->y = $this->y; + $pk->z = $this->z; + $pk->data = 0; + + return $pk; + } +} diff --git a/src/pocketmine/level/particle/Particle.php b/src/pocketmine/level/particle/Particle.php new file mode 100644 index 000000000..66ce268ee --- /dev/null +++ b/src/pocketmine/level/particle/Particle.php @@ -0,0 +1,34 @@ +reset(); $this->putShort($this->evid); $this->putInt($this->x); - $this->putShort($this->y); + $this->putByte($this->y); $this->putInt($this->z); $this->putInt($this->data); } -} \ No newline at end of file +}