Merge pull request #2225 from PEMapModder/falling-sand

Update FallingBlock to new Anvil formats, possible fix for #2189
This commit is contained in:
Shoghi Cervantes 2014-10-25 17:58:47 +02:00
commit db8ac0b9cb
2 changed files with 18 additions and 6 deletions

View File

@ -29,6 +29,7 @@ use pocketmine\nbt\tag\Compound;
use pocketmine\nbt\tag\Double;
use pocketmine\nbt\tag\Enum;
use pocketmine\nbt\tag\Float;
use pocketmine\nbt\tag\Int;
use pocketmine\Player;
abstract class Fallable extends Solid{
@ -60,7 +61,8 @@ abstract class Fallable extends Solid{
new Float("", 0),
new Float("", 0)
]),
"Tile" => new Byte("Tile", $this->getID())
"TileID" => new Int("TileID", $this->getID()),
"Data" => new Byte("Data", $this->getDamage()),
]));
$fall->spawnToAll();

View File

@ -28,6 +28,7 @@ use pocketmine\event\entity\EntityDamageEvent;
use pocketmine\event\entity\EntityRegainHealthEvent;
use pocketmine\item\Item;
use pocketmine\nbt\tag\Byte;
use pocketmine\nbt\tag\Int;
use pocketmine\nbt\tag\String;
use pocketmine\network\protocol\AddEntityPacket;
use pocketmine\network\protocol\SetEntityMotionPacket;
@ -44,13 +45,18 @@ class FallingBlock extends Entity{
protected $gravity = 0.04;
protected $drag = 0.02;
protected $blockId = 0;
protected $damage;
public $canCollide = false;
protected function initEntity(){
$this->namedtag->id = new String("id", "FallingSand");
if(isset($this->namedtag->Tile)){
if(isset($this->namedtag->TileID)){
$this->blockId = $this->namedtag["TileID"];
}
elseif(isset($this->namedtag->Tile)){
$this->blockId = $this->namedtag["Tile"];
$this->namedtag["TileID"] = new Int("TileID", $this->blockId);
}
if($this->blockId === 0){
@ -106,9 +112,9 @@ class FallingBlock extends Entity{
$this->kill();
$block = $this->level->getBlock($pos);
if(!$block->isFullBlock){
$this->getLevel()->dropItem($this, Item::get($this->getBlock(), 0, 1));
$this->getLevel()->dropItem($this, Item::get($this->getBlock(), $this->getDamage(), 1));
}else{
$this->server->getPluginManager()->callEvent($ev = new EntityBlockChangeEvent($this, $block, Block::get($this->getBlock(), 0)));
$this->server->getPluginManager()->callEvent($ev = new EntityBlockChangeEvent($this, $block, Block::get($this->getBlock(), $this->getDamage())));
if(!$ev->isCancelled()){
$this->getLevel()->setBlock($pos, $ev->getTo(), true);
}
@ -125,9 +131,13 @@ class FallingBlock extends Entity{
public function getBlock(){
return $this->blockId;
}
public function getDamage(){
return $this->damage;
}
public function saveNBT(){
$this->namedtag->Tile = new Byte("Tile", $this->blockId);
$this->namedtag->TileID = new Int("TileID", $this->blockId);
$this->namedtag->Data = new Byte("Data", $this->damage);
}
public function attack($damage, $source = EntityDamageEvent::CAUSE_MAGIC){
@ -156,4 +166,4 @@ class FallingBlock extends Entity{
parent::spawnTo($player);
}
}
}