Added some types of Particles, Block break particles

This commit is contained in:
Shoghi Cervantes 2015-03-13 14:24:19 +01:00
parent 1ce7cc64a6
commit e48a3e5713
8 changed files with 188 additions and 4 deletions

View File

@ -1246,7 +1246,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
$this->lastUpdate = $currentTick; $this->lastUpdate = $currentTick;
if($this->spawned){ if($this->spawned){
$this->processMovement($currentTick); $this->processMovement($currentTick);
$this->entityBaseTick(1); $this->entityBaseTick(1);

View File

@ -95,6 +95,8 @@ use pocketmine\utils\LevelException;
use pocketmine\utils\MainLogger; use pocketmine\utils\MainLogger;
use pocketmine\utils\ReversePriorityQueue; use pocketmine\utils\ReversePriorityQueue;
use pocketmine\utils\TextFormat; use pocketmine\utils\TextFormat;
use pocketmine\level\particle\Particle;
use pocketmine\level\particle\DestroyBlockParticle;
#include <rules/Level.h> #include <rules/Level.h>
@ -355,6 +357,13 @@ class Level implements ChunkManager, Metadatable{
$this->blockCache = []; $this->blockCache = [];
$this->temporalPosition = null; $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 * @return bool
@ -1259,7 +1268,11 @@ class Level implements ChunkManager, Metadatable{
} }
} }
$drops = $target->getDrops($item); //Fixes tile entities being deleted before getting drops $drops = $target->getDrops($item); //Fixes tile entities being deleted before getting drops
$this->addParticle(new DestroyBlockParticle($target, $target));
$target->onBreak($item); $target->onBreak($item);
$tile = $this->getTile($target); $tile = $this->getTile($target);
if($tile instanceof Tile){ if($tile instanceof Tile){
if($tile instanceof InventoryHolder){ if($tile instanceof InventoryHolder){

View File

@ -0,0 +1,47 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
namespace pocketmine\level\particle;
use pocketmine\network\protocol\LevelEventPacket;
use pocketmine\block\Block;
use pocketmine\math\Vector3;
class DestroyBlockParticle extends Particle{
protected $data;
public function __construct(Vector3 $pos, Block $b){
parent::__construct($pos->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;
}
}

View File

@ -0,0 +1,42 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
namespace pocketmine\level\particle;
use pocketmine\network\protocol\ExplodePacket;
use pocketmine\math\Vector3;
class ExplodeParticle extends Particle{
public function __construct(Vector3 $pos){
parent::__construct($pos->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;
}
}

View File

@ -0,0 +1,48 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
namespace pocketmine\level\particle;
use pocketmine\network\protocol\LevelEventPacket;
use pocketmine\math\Vector3;
class MobSpawnParticle extends Particle{
protected $width;
protected $height;
public function __construct(Vector3 $pos, $width = 0, $height = 0){
parent::__construct($pos->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;
}
}

View File

@ -0,0 +1,34 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
namespace pocketmine\level\particle;
use pocketmine\math\Vector3;
use pocketmine\network\protocol\DataPacket;
abstract class Particle extends Vector3{
/**
* @return DataPacket
*/
abstract public function encode();
}

View File

@ -65,7 +65,7 @@ interface Info{
const LEVEL_EVENT_PACKET = 0x96; const LEVEL_EVENT_PACKET = 0x96;
const TILE_EVENT_PACKET = 0x97; const TILE_EVENT_PACKET = 0x97;
const ENTITY_EVENT_PACKET = 0x98; const ENTITY_EVENT_PACKET = 0x98;
//const MOB_EFFECT_paCKET = 0x99; //const MOB_EFFECT_PACKET = 0x99;
const PLAYER_EQUIPMENT_PACKET = 0x9a; const PLAYER_EQUIPMENT_PACKET = 0x9a;
const PLAYER_ARMOR_EQUIPMENT_PACKET = 0x9b; const PLAYER_ARMOR_EQUIPMENT_PACKET = 0x9b;

View File

@ -46,9 +46,9 @@ class LevelEventPacket extends DataPacket{
$this->reset(); $this->reset();
$this->putShort($this->evid); $this->putShort($this->evid);
$this->putInt($this->x); $this->putInt($this->x);
$this->putShort($this->y); $this->putByte($this->y);
$this->putInt($this->z); $this->putInt($this->z);
$this->putInt($this->data); $this->putInt($this->data);
} }
} }