From ef6ca9d2cd65234395b02871a4d538765622c43e Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Sat, 24 May 2014 13:21:55 +0200 Subject: [PATCH] Added Tile::saveNBT(), moved Player::broadcastPacket() to Server --- src/pocketmine/Player.php | 12 ------------ src/pocketmine/Server.php | 13 +++++++++++++ src/pocketmine/block/Door.php | 5 +++-- src/pocketmine/entity/Entity.php | 4 ++-- src/pocketmine/inventory/ChestInventory.php | 5 +++-- src/pocketmine/level/Explosion.php | 2 +- src/pocketmine/level/Level.php | 13 ++++++++----- src/pocketmine/nbt/tag/Enum.php | 1 + src/pocketmine/tile/Chest.php | 11 ++++++++++- src/pocketmine/tile/Furnace.php | 10 ++++++++++ src/pocketmine/tile/Tile.php | 6 ++++++ 11 files changed, 57 insertions(+), 25 deletions(-) diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index f4e17b6bd..3bb22821c 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -2295,18 +2295,6 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{ return $this->username; } - /** - * Broadcasts a Minecraft packet to a list of players - * - * @param Player[] $players - * @param DataPacket $packet - */ - public static function broadcastPacket(array $players, DataPacket $packet){ - foreach($players as $player){ - $player->dataPacket(clone $packet); - } - } - /** * @param Item[] $craft * @param Item[] $recipe diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 384ba13ea..5736ea3ca 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -61,6 +61,7 @@ use pocketmine\nbt\tag\Long; use pocketmine\nbt\tag\Short; use pocketmine\nbt\tag\String; use pocketmine\network\Packet; +use pocketmine\network\protocol\DataPacket; use pocketmine\network\query\QueryHandler; use pocketmine\network\query\QueryPacket; use pocketmine\network\raknet\Info as RakNetInfo; @@ -1382,6 +1383,18 @@ class Server{ return $count; } + /** + * Broadcasts a Minecraft packet to a list of players + * + * @param Player[] $players + * @param DataPacket $packet + */ + public function broadcastPacket(array $players, DataPacket $packet){ + foreach($players as $player){ + $player->dataPacket(clone $packet); + } + } + /** * @param int $type diff --git a/src/pocketmine/block/Door.php b/src/pocketmine/block/Door.php index 81df674fc..10ac4c83c 100644 --- a/src/pocketmine/block/Door.php +++ b/src/pocketmine/block/Door.php @@ -25,6 +25,7 @@ use pocketmine\item\Item; use pocketmine\level\Level; use pocketmine\network\protocol\LevelEventPacket; use pocketmine\Player; +use pocketmine\Server; abstract class Door extends Transparent{ @@ -111,7 +112,7 @@ abstract class Door extends Transparent{ $pk->z = $this->z; $pk->evid = 1003; $pk->data = 0; - Player::broadcastPacket($players, $pk); + Server::getInstance()->broadcastPacket($players, $pk); return true; } @@ -130,7 +131,7 @@ abstract class Door extends Transparent{ $pk->z = $this->z; $pk->evid = 1003; $pk->data = 0; - Player::broadcastPacket($players, $pk); + Server::getInstance()->broadcastPacket($players, $pk); } return true; diff --git a/src/pocketmine/entity/Entity.php b/src/pocketmine/entity/Entity.php index ee6c461bb..e083abbe3 100644 --- a/src/pocketmine/entity/Entity.php +++ b/src/pocketmine/entity/Entity.php @@ -303,7 +303,7 @@ abstract class Entity extends Position implements Metadatable{ $pk->yaw = $this->yaw; $pk->pitch = $this->pitch; } - Player::broadcastPacket($this->hasSpawned, $pk); + $this->server->broadcastPacket($this->hasSpawned, $pk); } if($this->motionChanged === true){ @@ -314,7 +314,7 @@ abstract class Entity extends Position implements Metadatable{ $pk->speedX = $this->motionX; $pk->speedY = $this->motionY; $pk->speedZ = $this->motionZ; - Player::broadcastPacket($this->hasSpawned, $pk); + $this->server->broadcastPacket($this->hasSpawned, $pk); } $this->lastUpdate = $timeNow; diff --git a/src/pocketmine/inventory/ChestInventory.php b/src/pocketmine/inventory/ChestInventory.php index f44edd101..3180d43e6 100644 --- a/src/pocketmine/inventory/ChestInventory.php +++ b/src/pocketmine/inventory/ChestInventory.php @@ -23,6 +23,7 @@ namespace pocketmine\inventory; use pocketmine\network\protocol\TileEventPacket; use pocketmine\Player; +use pocketmine\Server; use pocketmine\tile\Chest; class ChestInventory extends ContainerInventory{ @@ -47,7 +48,7 @@ class ChestInventory extends ContainerInventory{ $pk->z = $this->getHolder()->getZ(); $pk->case1 = 1; $pk->case2 = 2; - Player::broadcastPacket($this->getHolder()->getLevel()->getPlayers(), $pk); + Server::getInstance()->broadcastPacket($this->getHolder()->getLevel()->getPlayers(), $pk); } } @@ -61,7 +62,7 @@ class ChestInventory extends ContainerInventory{ $pk->z = $this->getHolder()->getZ(); $pk->case1 = 1; $pk->case2 = 0; - Player::broadcastPacket($this->getHolder()->getLevel()->getPlayers(), $pk); + Server::getInstance()->broadcastPacket($this->getHolder()->getLevel()->getPlayers(), $pk); } } } \ No newline at end of file diff --git a/src/pocketmine/level/Explosion.php b/src/pocketmine/level/Explosion.php index 8008566a7..d2ea25676 100644 --- a/src/pocketmine/level/Explosion.php +++ b/src/pocketmine/level/Explosion.php @@ -148,7 +148,7 @@ class Explosion{ $pk->z = $this->source->z; $pk->radius = $this->size; $pk->records = $send; - Player::broadcastPacket($this->level->getPlayers(), $pk); + Server::getInstance()->broadcastPacket($this->level->getPlayers(), $pk); } } diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index e9d9a09d7..8de5b0a49 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -254,7 +254,7 @@ class Level{ $pk = new SetTimePacket; $pk->time = (int) $this->time; $pk->started = $this->stopTime == false; - Player::broadcastPacket($this->players, $pk); + $this->server->broadcastPacket($this->players, $pk); return; } @@ -304,7 +304,7 @@ class Level{ $pk->z = $b->z; $pk->block = $b->getID(); $pk->meta = $b->getDamage(); - Player::broadcastPacket($this->players, $pk); + $this->server->broadcastPacket($this->players, $pk); } } } @@ -437,6 +437,7 @@ class Level{ $i = 0; foreach($this->chunkEntities[$index] as $entity){ + /** @var Entity $entity */ if($entity->closed !== true){ $entity->saveNBT(); $nbt->Entities[$i] = $entity->namedtag; @@ -446,7 +447,9 @@ class Level{ $i = 0; foreach($this->chunkTiles[$index] as $tile){ + /** @var Tile $tile */ if($tile->closed !== true){ + $tile->saveNBT(); $nbt->TileEntities[$i] = $tile->namedtag; ++$i; } @@ -517,7 +520,7 @@ class Level{ $pk->z = $pos->z; $pk->block = $block->getID(); $pk->meta = $block->getDamage(); - Player::broadcastPacket($this->players, $pk); + $this->server->broadcastPacket($this->players, $pk); }elseif($direct === false){ if(!($pos instanceof Position)){ $pos = new Position($pos->x, $pos->y, $pos->z, $this); @@ -571,7 +574,7 @@ class Level{ $pk->z = $pos->z; $pk->block = $block->getID(); $pk->meta = $block->getDamage(); - Player::broadcastPacket($this->players, $pk); + $this->server->broadcastPacket($this->players, $pk); }else{ $index = LevelFormat::getIndex($pos->x >> 4, $pos->z >> 4); if(ADVANCED_CACHE == true){ @@ -1037,7 +1040,7 @@ class Level{ $ordered .= substr($mini, $j << 5, 24); //16 + 8 } } - if(ADVANCED_CACHE == true and $Yndex == 0xff){ + if(ADVANCED_CACHE == true and $Yndex === 0xff){ Cache::add($identifier, $ordered, 60); } diff --git a/src/pocketmine/nbt/tag/Enum.php b/src/pocketmine/nbt/tag/Enum.php index 0098941b2..a0d1cf433 100644 --- a/src/pocketmine/nbt/tag/Enum.php +++ b/src/pocketmine/nbt/tag/Enum.php @@ -156,6 +156,7 @@ class Enum extends NamedTag implements \ArrayAccess{ $nbt->putByte($this->tagType); + /** @var Tag[] $tags */ $tags = []; foreach($this as $tag){ if($tag instanceof Tag){ diff --git a/src/pocketmine/tile/Chest.php b/src/pocketmine/tile/Chest.php index b973b9103..1d3af6a61 100644 --- a/src/pocketmine/tile/Chest.php +++ b/src/pocketmine/tile/Chest.php @@ -30,6 +30,7 @@ use pocketmine\math\Vector3 as Vector3; use pocketmine\nbt\NBT; use pocketmine\nbt\tag\Byte; use pocketmine\nbt\tag\Compound; +use pocketmine\nbt\tag\Enum; use pocketmine\nbt\tag\Int; use pocketmine\nbt\tag\Short; use pocketmine\nbt\tag\String; @@ -53,6 +54,14 @@ class Chest extends Spawnable implements InventoryHolder, Container{ $this->checkPairing(); } + public function saveNBT(){ + $this->namedtag->Inventory = new Enum("Inventory", []); + $this->namedtag->Inventory->setTagType(NBT::TAG_Compound); + for($index = 0; $index < $this->getSize(); ++$index){ + $this->setItem($index, $this->inventory->getItem($index)); + } + } + /** * @return int */ @@ -67,7 +76,7 @@ class Chest extends Spawnable implements InventoryHolder, Container{ */ protected function getSlotIndex($index){ foreach($this->namedtag->Items as $i => $slot){ - if($slot["Slot"] === $s){ + if($slot["Slot"] === $index){ return $i; } } diff --git a/src/pocketmine/tile/Furnace.php b/src/pocketmine/tile/Furnace.php index 788df6709..95e54f449 100644 --- a/src/pocketmine/tile/Furnace.php +++ b/src/pocketmine/tile/Furnace.php @@ -26,8 +26,10 @@ use pocketmine\inventory\FurnaceInventory; use pocketmine\inventory\InventoryHolder; use pocketmine\item\Item; use pocketmine\level\Level; +use pocketmine\nbt\NBT; use pocketmine\nbt\tag\Byte; use pocketmine\nbt\tag\Compound; +use pocketmine\nbt\tag\Enum; use pocketmine\nbt\tag\Short; class Furnace extends Tile implements InventoryHolder, Container{ @@ -57,6 +59,14 @@ class Furnace extends Tile implements InventoryHolder, Container{ } } + public function saveNBT(){ + $this->namedtag->Inventory = new Enum("Inventory", []); + $this->namedtag->Inventory->setTagType(NBT::TAG_Compound); + for($index = 0; $index < $this->getSize(); ++$index){ + $this->setItem($index, $this->inventory->getItem($index)); + } + } + /** * @return int */ diff --git a/src/pocketmine/tile/Tile.php b/src/pocketmine/tile/Tile.php index cb0b51d5a..6586d73b0 100644 --- a/src/pocketmine/tile/Tile.php +++ b/src/pocketmine/tile/Tile.php @@ -95,6 +95,12 @@ abstract class Tile extends Position{ $this->getLevel()->chunkTiles[$this->chunkIndex][$this->id] = $this; } + public function saveNBT(){ + $this->namedtag["x"] = $this->x; + $this->namedtag["y"] = $this->y; + $this->namedtag["z"] = $this->z; + } + public function onUpdate(){ return false; }