mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-16 18:59:00 +00:00
Added Tile::saveNBT(), moved Player::broadcastPacket() to Server
This commit is contained in:
parent
1fd7e0431b
commit
ef6ca9d2cd
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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){
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user