mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-16 18:59:00 +00:00
Save player position, removed several methods from PluginAPI
This commit is contained in:
parent
f8d91b5888
commit
573fe0e5cc
@ -326,84 +326,4 @@ class PlayerAPI{
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function broadcastPacket(array $players, RakNetDataPacket $packet){
|
||||
foreach($players as $p){
|
||||
$p->dataPacket(clone $packet);
|
||||
}
|
||||
}
|
||||
|
||||
public function online(){
|
||||
$o = array();
|
||||
foreach(Player::$list as $p){
|
||||
if($p->auth === true){
|
||||
$o[] = $p->username;
|
||||
}
|
||||
}
|
||||
return $o;
|
||||
}
|
||||
|
||||
//TODO (remove)
|
||||
public function add($CID){
|
||||
if(isset(Player::$list[$CID])){
|
||||
$player =Player::$list[$CID];
|
||||
$player->data = $this->getOffline($player->username);
|
||||
$player->gamemode = $player->data->get("gamemode");
|
||||
if(($player->level = $this->server->api->level->get($player->data->get("position")["level"])) === false){
|
||||
$player->level = $this->server->api->level->getDefault();
|
||||
$player->data->set("position", array(
|
||||
"level" => $player->level->getName(),
|
||||
"x" => $player->level->getSpawn()->x,
|
||||
"y" => $player->level->getSpawn()->y,
|
||||
"z" => $player->level->getSpawn()->z,
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getOffline($name){
|
||||
$iname = strtolower($name);
|
||||
$default = array(
|
||||
"caseusername" => $name,
|
||||
"position" => array(
|
||||
"level" => $this->server->spawn->level->getName(),
|
||||
"x" => $this->server->spawn->x,
|
||||
"y" => $this->server->spawn->y,
|
||||
"z" => $this->server->spawn->z,
|
||||
),
|
||||
"spawn" => array(
|
||||
"level" => $this->server->spawn->level->getName(),
|
||||
"x" => $this->server->spawn->x,
|
||||
"y" => $this->server->spawn->y,
|
||||
"z" => $this->server->spawn->z,
|
||||
),
|
||||
"inventory" => array_fill(0, PLAYER_SURVIVAL_SLOTS, array(AIR, 0, 0)),
|
||||
"hotbar" => array(0, -1, -1, -1, -1, -1, -1, -1, -1),
|
||||
"armor" => array_fill(0, 4, array(AIR, 0)),
|
||||
"gamemode" => $this->server->gamemode,
|
||||
"health" => 20,
|
||||
"lastIP" => "",
|
||||
"lastID" => 0,
|
||||
"achievements" => array(),
|
||||
);
|
||||
|
||||
if(!file_exists(DATA_PATH."players/".$iname.".yml")){
|
||||
console("[NOTICE] Player data not found for \"".$iname."\", creating new profile");
|
||||
$data = new Config(DATA_PATH."players/".$iname.".yml", Config::YAML, $default);
|
||||
$data->save();
|
||||
}else{
|
||||
$data = new Config(DATA_PATH."players/".$iname.".yml", Config::YAML, $default);
|
||||
}
|
||||
|
||||
if(($data->get("gamemode") & 0x01) === 1){
|
||||
$data->set("health", 20);
|
||||
}
|
||||
$this->server->handle("player.offline.get", $data);
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function saveOffline(Config $data){
|
||||
$this->server->handle("player.offline.save", $data);
|
||||
$data->save();
|
||||
}
|
||||
}
|
||||
|
@ -588,7 +588,7 @@ class EntityOLD extends Position{
|
||||
$pk->yaw = $this->yaw;
|
||||
$pk->pitch = $this->pitch;
|
||||
$pk->bodyYaw = $this->yaw;
|
||||
$this->server->api->player->broadcastPacket($players, $pk);
|
||||
Player::broadcastPacket($players, $pk);
|
||||
}else{
|
||||
$pk = new MoveEntityPacket_PosRot;
|
||||
$pk->eid = $this->eid;
|
||||
@ -597,7 +597,7 @@ class EntityOLD extends Position{
|
||||
$pk->z = $this->z;
|
||||
$pk->yaw = $this->yaw;
|
||||
$pk->pitch = $this->pitch;
|
||||
$this->server->api->player->broadcastPacket($players, $pk);
|
||||
Player::broadcastPacket($players, $pk);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
@ -1029,7 +1029,7 @@ class EntityOLD extends Position{
|
||||
$pk->z = -256;
|
||||
$pk->yaw = 0;
|
||||
$pk->pitch = 0;
|
||||
$this->server->api->player->broadcastPacket($this->level->players, $pk);
|
||||
Player::broadcastPacket($this->level->players, $pk);
|
||||
}else{
|
||||
$this->server->api->dhandle("entity.event", array("entity" => $this, "event" => 3)); //Entity dead
|
||||
}
|
||||
|
139
src/Player.php
139
src/Player.php
@ -119,6 +119,59 @@ class Player extends PlayerEntity{
|
||||
public static function getAll(){
|
||||
return Player::$list;
|
||||
}
|
||||
|
||||
public static function getOffline($name){
|
||||
$server = ServerAPI::request();
|
||||
$iname = strtolower($name);
|
||||
$default = array(
|
||||
"caseusername" => $name,
|
||||
"position" => array(
|
||||
"level" => $server->spawn->level->getName(),
|
||||
"x" => $server->spawn->x,
|
||||
"y" => $server->spawn->y,
|
||||
"z" => $server->spawn->z,
|
||||
),
|
||||
"spawn" => array(
|
||||
"level" => $server->spawn->level->getName(),
|
||||
"x" => $server->spawn->x,
|
||||
"y" => $server->spawn->y,
|
||||
"z" => $server->spawn->z,
|
||||
),
|
||||
"inventory" => array_fill(0, PLAYER_SURVIVAL_SLOTS, array(AIR, 0, 0)),
|
||||
"hotbar" => array(0, -1, -1, -1, -1, -1, -1, -1, -1),
|
||||
"armor" => array_fill(0, 4, array(AIR, 0)),
|
||||
"gamemode" => $server->gamemode,
|
||||
"health" => 20,
|
||||
"lastIP" => "",
|
||||
"lastID" => 0,
|
||||
"achievements" => array(),
|
||||
);
|
||||
|
||||
if(!file_exists(DATA_PATH."players/".$iname.".yml")){
|
||||
console("[NOTICE] Player data not found for \"".$iname."\", creating new profile");
|
||||
$data = new Config(DATA_PATH."players/".$iname.".yml", Config::YAML, $default);
|
||||
$data->save();
|
||||
}else{
|
||||
$data = new Config(DATA_PATH."players/".$iname.".yml", Config::YAML, $default);
|
||||
}
|
||||
|
||||
if(($data->get("gamemode") & 0x01) === 1){
|
||||
$data->set("health", 20);
|
||||
}
|
||||
$server->handle("player.offline.get", $data);
|
||||
return $data;
|
||||
}
|
||||
|
||||
public static function saveOffline(Config $data){
|
||||
ServerAPI::request()->handle("player.offline.save", $data);
|
||||
$data->save();
|
||||
}
|
||||
|
||||
public static function broadcastPacket(array $players, RakNetDataPacket $packet){
|
||||
foreach($players as $player){
|
||||
$player->dataPacket(clone $packet);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param integer $clientID
|
||||
@ -293,43 +346,39 @@ class Player extends PlayerEntity{
|
||||
}
|
||||
|
||||
public function save(){
|
||||
if($this->entity instanceof Entity){
|
||||
$this->data->set("achievements", $this->achievements);
|
||||
$this->data->set("position", array(
|
||||
"level" => $this->entity->level->getName(),
|
||||
"x" => $this->entity->x,
|
||||
"y" => $this->entity->y,
|
||||
"z" => $this->entity->z,
|
||||
));
|
||||
$this->data->set("spawn", array(
|
||||
"level" => $this->spawnPosition->level->getName(),
|
||||
"x" => $this->spawnPosition->x,
|
||||
"y" => $this->spawnPosition->y,
|
||||
"z" => $this->spawnPosition->z,
|
||||
));
|
||||
$inv = array();
|
||||
foreach($this->inventory as $slot => $item){
|
||||
if($item instanceof Item){
|
||||
if($slot < (($this->gamemode & 0x01) === 0 ? PLAYER_SURVIVAL_SLOTS:PLAYER_CREATIVE_SLOTS)){
|
||||
$inv[$slot] = array($item->getID(), $item->getMetadata(), $item->count);
|
||||
}
|
||||
$this->data->set("achievements", $this->achievements);
|
||||
$this->data->set("position", array(
|
||||
"level" => $this->level->getName(),
|
||||
"x" => $this->x,
|
||||
"y" => $this->y,
|
||||
"z" => $this->z,
|
||||
));
|
||||
$this->data->set("spawn", array(
|
||||
"level" => $this->spawnPosition->level->getName(),
|
||||
"x" => $this->spawnPosition->x,
|
||||
"y" => $this->spawnPosition->y,
|
||||
"z" => $this->spawnPosition->z,
|
||||
));
|
||||
$inv = array();
|
||||
foreach($this->inventory as $slot => $item){
|
||||
if($item instanceof Item){
|
||||
if($slot < (($this->gamemode & 0x01) === 0 ? PLAYER_SURVIVAL_SLOTS:PLAYER_CREATIVE_SLOTS)){
|
||||
$inv[$slot] = array($item->getID(), $item->getMetadata(), $item->count);
|
||||
}
|
||||
}
|
||||
$this->data->set("inventory", $inv);
|
||||
$this->data->set("hotbar", $this->hotbar);
|
||||
|
||||
$armor = array();
|
||||
foreach($this->armor as $slot => $item){
|
||||
if($item instanceof Item){
|
||||
$armor[$slot] = array($item->getID(), $item->getMetadata());
|
||||
}
|
||||
}
|
||||
$this->data->set("armor", $armor);
|
||||
if($this->entity instanceof Entity){
|
||||
$this->data->set("health", $this->entity->getHealth());
|
||||
}
|
||||
$this->data->set("gamemode", $this->gamemode);
|
||||
}
|
||||
$this->data->set("inventory", $inv);
|
||||
$this->data->set("hotbar", $this->hotbar);
|
||||
|
||||
$armor = array();
|
||||
foreach($this->armor as $slot => $item){
|
||||
if($item instanceof Item){
|
||||
$armor[$slot] = array($item->getID(), $item->getMetadata());
|
||||
}
|
||||
}
|
||||
$this->data->set("armor", $armor);
|
||||
//$this->data->set("health", $this->getHealth());
|
||||
$this->data->set("gamemode", $this->gamemode);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -360,8 +409,7 @@ class Player extends PlayerEntity{
|
||||
$this->resendQueue = array();
|
||||
$this->ackQueue = array();
|
||||
if($this->username != "" and ($this->data instanceof Config)){
|
||||
//TODO
|
||||
//$this->saveOffline($player->data);
|
||||
Player::saveOffline($this->data);
|
||||
}
|
||||
if($msg === true and $this->username != "" and $this->spawned !== false){
|
||||
$this->server->api->chat->broadcast($this->username." left the game");
|
||||
@ -1282,7 +1330,18 @@ class Player extends PlayerEntity{
|
||||
}
|
||||
}
|
||||
|
||||
$this->server->api->player->add($this->CID);
|
||||
$this->data = Player::getOffline($this->username);
|
||||
$this->gamemode = $this->data->get("gamemode");
|
||||
if(($this->level = $this->server->api->level->get($this->data->get("position")["level"])) === false){
|
||||
$this->level = $this->server->api->level->getDefault();
|
||||
$this->data->set("position", array(
|
||||
"level" => $this->level->getName(),
|
||||
"x" => $this->level->getSpawn()->x,
|
||||
"y" => $this->level->getSpawn()->y,
|
||||
"z" => $this->level->getSpawn()->z,
|
||||
));
|
||||
}
|
||||
|
||||
if($this->server->api->handle("player.join", $this) === false){
|
||||
$this->close("join cancelled", false);
|
||||
return;
|
||||
@ -1327,7 +1386,7 @@ class Player extends PlayerEntity{
|
||||
$this->data->set("lastIP", $this->ip);
|
||||
$this->data->set("lastID", $this->clientID);
|
||||
|
||||
$this->server->api->player->saveOffline($this->data);
|
||||
Player::saveOffline($this->data);
|
||||
|
||||
|
||||
$pk = new LoginStatusPacket;
|
||||
@ -2000,7 +2059,7 @@ class Player extends PlayerEntity{
|
||||
$pk->z = $ob->z;
|
||||
$pk->case1 = 1;
|
||||
$pk->case2 = 0;
|
||||
$this->server->api->player->broadcastPacket($this->level->players, $pk);
|
||||
Player::broadcastPacket($this->level->players, $pk);
|
||||
}
|
||||
}elseif($this->windows[$packet->windowid] instanceof ChestTile){
|
||||
$pk = new TileEventPacket;
|
||||
@ -2009,7 +2068,7 @@ class Player extends PlayerEntity{
|
||||
$pk->z = $this->windows[$packet->windowid]->z;
|
||||
$pk->case1 = 1;
|
||||
$pk->case2 = 0;
|
||||
$this->server->api->player->broadcastPacket($this->level->players, $pk);
|
||||
Player::broadcastPacket($this->level->players, $pk);
|
||||
}
|
||||
}
|
||||
unset($this->windows[$packet->windowid]);
|
||||
|
@ -59,7 +59,7 @@ trait ContainerTileTrait{
|
||||
$pk->z = $ob->z;
|
||||
$pk->case1 = 1;
|
||||
$pk->case2 = 2;
|
||||
$this->server->api->player->broadcastPacket($all, $pk);
|
||||
Player::broadcastPacket($all, $pk);
|
||||
for($s = 0; $s < ChestTile::SLOTS; ++$s){
|
||||
$slot = $ob->getSlot($s);
|
||||
if($slot->getID() > AIR and $slot->count > 0){
|
||||
@ -76,7 +76,7 @@ trait ContainerTileTrait{
|
||||
$pk->z = $this->z;
|
||||
$pk->case1 = 1;
|
||||
$pk->case2 = 2;
|
||||
$this->server->api->player->broadcastPacket($this->level->getPlayers(), $pk);
|
||||
Player::broadcastPacket($this->level->getPlayers(), $pk);
|
||||
for($s = 0; $s < ChestTile::SLOTS; ++$s){
|
||||
$slot = $this->getSlot($s);
|
||||
if($slot->getID() > AIR and $slot->count > 0){
|
||||
|
@ -103,7 +103,7 @@ class Level{
|
||||
$pk = new SetTimePacket;
|
||||
$pk->time = (int) $this->time;
|
||||
$pk->started = $this->stopTime == false;
|
||||
$this->server->api->player->broadcastPacket($this->players, $pk);
|
||||
Player::broadcastPacket($this->players, $pk);
|
||||
}
|
||||
}
|
||||
|
||||
@ -143,7 +143,7 @@ class Level{
|
||||
$pk->z = $b->z;
|
||||
$pk->block = $b->getID();
|
||||
$pk->meta = $b->getMetadata();
|
||||
$this->server->api->player->broadcastPacket($this->players, $pk);
|
||||
Player::broadcastPacket($this->players, $pk);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -259,7 +259,7 @@ class Level{
|
||||
$pk->z = $pos->z;
|
||||
$pk->block = $block->getID();
|
||||
$pk->meta = $block->getMetadata();
|
||||
$this->server->api->player->broadcastPacket($this->players, $pk);
|
||||
Player::broadcastPacket($this->players, $pk);
|
||||
}elseif($direct === false){
|
||||
if(!($pos instanceof Position)){
|
||||
$pos = new Position($pos->x, $pos->y, $pos->z, $this);
|
||||
@ -303,7 +303,7 @@ class Level{
|
||||
$pk->z = $pos->z;
|
||||
$pk->block = $block->getID();
|
||||
$pk->meta = $block->getMetadata();
|
||||
$this->server->api->player->broadcastPacket($this->players, $pk);
|
||||
Player::broadcastPacket($this->players, $pk);
|
||||
}else{
|
||||
$index = PMFLevel::getIndex($pos->x >> 4, $pos->z >> 4);
|
||||
if(ADVANCED_CACHE == true){
|
||||
|
Loading…
x
Reference in New Issue
Block a user