mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-07 12:18:46 +00:00
Entity and TileEntity saving
This commit is contained in:
parent
5c11f48270
commit
2cb7a21b76
@ -322,7 +322,7 @@ class PocketMinecraftServer{
|
|||||||
"pitch" => $entity["Rotation"][1],
|
"pitch" => $entity["Rotation"][1],
|
||||||
));
|
));
|
||||||
}else{
|
}else{
|
||||||
$e = $this->api->entity->add(ENTITY_MOB, $entity["id"]);
|
$e = $this->api->entity->add(ENTITY_MOB, $entity["id"], $entity);
|
||||||
$e->setPosition($entity["Pos"][0], $entity["Pos"][1], $entity["Pos"][2], $entity["Rotation"][0], $entity["Rotation"][1]);
|
$e->setPosition($entity["Pos"][0], $entity["Pos"][1], $entity["Pos"][2], $entity["Rotation"][0], $entity["Rotation"][1]);
|
||||||
$e->setHealth($entity["Health"]);
|
$e->setHealth($entity["Health"]);
|
||||||
|
|
||||||
@ -340,9 +340,7 @@ class PocketMinecraftServer{
|
|||||||
$class = TILE_SIGN;
|
$class = TILE_SIGN;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if($class !== false){
|
$t = $this->api->tileentity->add($class, $tile["x"], $tile["y"], $tile["z"], $tile);
|
||||||
$t = $this->api->tileentity->add($class, $tile["x"], $tile["y"], $tile["z"], $tile);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
$this->action(1000000 * 60 * 15, '$this->api->chat->broadcast("Forcing save...");$this->save();');
|
$this->action(1000000 * 60 * 15, '$this->api->chat->broadcast("Forcing save...");$this->save();');
|
||||||
}
|
}
|
||||||
@ -353,11 +351,57 @@ class PocketMinecraftServer{
|
|||||||
$this->levelData["Time"] = $this->time;
|
$this->levelData["Time"] = $this->time;
|
||||||
file_put_contents($this->mapDir."level.dat", serialize($this->levelData));
|
file_put_contents($this->mapDir."level.dat", serialize($this->levelData));
|
||||||
$this->map->saveMap($final);
|
$this->map->saveMap($final);
|
||||||
console("[INFO] Saving entities...");
|
|
||||||
foreach($this->entities as $entity){
|
|
||||||
|
|
||||||
}
|
|
||||||
$this->trigger("server.save", $final);
|
$this->trigger("server.save", $final);
|
||||||
|
console("[INFO] Saving entities...");
|
||||||
|
if(count($this->entities) > 0){
|
||||||
|
$entities = array();
|
||||||
|
foreach($this->entities as $entity){
|
||||||
|
if($entity->class === ENTITY_MOB){
|
||||||
|
$entities[] = array(
|
||||||
|
"id" => $entity->type,
|
||||||
|
"Color" => @$entity->data["Color"],
|
||||||
|
"Sheared" => @$entity->data["Sheared"],
|
||||||
|
"Health" => $entity->health,
|
||||||
|
"Pos" => array(
|
||||||
|
0 => $entity->x,
|
||||||
|
1 => $entity->y,
|
||||||
|
2 => $entity->z,
|
||||||
|
),
|
||||||
|
"Rotation" => array(
|
||||||
|
0 => $entity->yaw,
|
||||||
|
1 => $entity->pitch,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}elseif($entity->class === ENTITY_ITEM){
|
||||||
|
$entities[] = array(
|
||||||
|
"id" => 64,
|
||||||
|
"Item" => array(
|
||||||
|
"id" => $entity->type,
|
||||||
|
"Damage" => $entity->meta,
|
||||||
|
"Count" => $entity->stack,
|
||||||
|
),
|
||||||
|
"Health" => $entity->health,
|
||||||
|
"Pos" => array(
|
||||||
|
0 => $entity->x,
|
||||||
|
1 => $entity->y,
|
||||||
|
2 => $entity->z,
|
||||||
|
),
|
||||||
|
"Rotation" => array(
|
||||||
|
0 => 0,
|
||||||
|
1 => 0,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_put_contents($this->mapDir."entities.dat", serialize($entities));
|
||||||
|
}
|
||||||
|
if(count($this->tileEntities) > 0){
|
||||||
|
$tiles = array();
|
||||||
|
foreach($this->tileEntities as $tile){
|
||||||
|
$tiles[] = $tile->data;
|
||||||
|
}
|
||||||
|
file_put_contents($this->mapDir."tileEntities.dat", serialize($tiles));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,13 +27,50 @@ the Free Software Foundation, either version 3 of the License, or
|
|||||||
|
|
||||||
|
|
||||||
define("ENTITY_PLAYER", 0);
|
define("ENTITY_PLAYER", 0);
|
||||||
|
|
||||||
define("ENTITY_MOB", 1);
|
define("ENTITY_MOB", 1);
|
||||||
|
define("MOB_CHICKEN", 10);
|
||||||
|
define("MOB_COW", 11);
|
||||||
|
define("MOB_PIG", 12);
|
||||||
|
define("MOB_SHEEP", 13);
|
||||||
|
|
||||||
|
define("MOB_ZOMBIE", 32);
|
||||||
|
define("MOB_CREEPER", 33);
|
||||||
|
define("MOB_SKELETON", 34);
|
||||||
|
define("MOB_SPIDER", 35);
|
||||||
|
define("MOB_PIGMAN", 36);
|
||||||
|
|
||||||
define("ENTITY_OBJECT", 2);
|
define("ENTITY_OBJECT", 2);
|
||||||
|
|
||||||
define("ENTITY_ITEM", 3);
|
define("ENTITY_ITEM", 3);
|
||||||
|
|
||||||
define("ENTITY_PAINTING", 4);
|
define("ENTITY_PAINTING", 4);
|
||||||
|
|
||||||
class Entity extends stdClass{
|
class Entity extends stdClass{
|
||||||
var $invincible, $air, $spawntime, $dmgcounter, $eid, $type, $name, $x, $y, $z, $speedX, $speedY, $speedZ, $speed, $last = array(0, 0, 0, 0), $yaw, $pitch, $dead, $data, $class, $attach, $metadata, $closed, $player, $onTick;
|
public $invincible;
|
||||||
|
public $age;
|
||||||
|
public $air;
|
||||||
|
public $spawntime;
|
||||||
|
public $dmgcounter;
|
||||||
|
public $eid;
|
||||||
|
public $type;
|
||||||
|
public $name;
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
public $speedX;
|
||||||
|
public $speedY;
|
||||||
|
public $speedZ;
|
||||||
|
public $speed;
|
||||||
|
public $last = array(0, 0, 0, 0);
|
||||||
|
public $yaw;
|
||||||
|
public $pitch;
|
||||||
|
public $dead;
|
||||||
|
public $data;
|
||||||
|
public $class;
|
||||||
|
public $attach;
|
||||||
|
public $closed;
|
||||||
|
public $player;
|
||||||
private $server;
|
private $server;
|
||||||
function __construct(PocketMinecraftServer $server, $eid, $class, $type = 0, $data = array()){
|
function __construct(PocketMinecraftServer $server, $eid, $class, $type = 0, $data = array()){
|
||||||
$this->server = $server;
|
$this->server = $server;
|
||||||
@ -45,8 +82,9 @@ class Entity extends stdClass{
|
|||||||
$this->data = $data;
|
$this->data = $data;
|
||||||
$this->status = 0;
|
$this->status = 0;
|
||||||
$this->health = 20;
|
$this->health = 20;
|
||||||
$this->dmgcounter = array(0, 0);
|
$this->dmgcounter = array(0, 0, 0);
|
||||||
$this->air = 300;
|
$this->air = 300;
|
||||||
|
$this->onground = true;
|
||||||
$this->fire = 0;
|
$this->fire = 0;
|
||||||
$this->crouched = false;
|
$this->crouched = false;
|
||||||
$this->invincible = false;
|
$this->invincible = false;
|
||||||
@ -57,7 +95,6 @@ class Entity extends stdClass{
|
|||||||
$this->server->query("INSERT OR REPLACE INTO entities (EID, type, class, health) VALUES (".$this->eid.", ".$this->type.", ".$this->class.", ".$this->health.");");
|
$this->server->query("INSERT OR REPLACE INTO entities (EID, type, class, health) VALUES (".$this->eid.", ".$this->type.", ".$this->class.", ".$this->health.");");
|
||||||
$this->server->schedule(4, array($this, "update"), array(), true);
|
$this->server->schedule(4, array($this, "update"), array(), true);
|
||||||
$this->server->schedule(10, array($this, "environmentUpdate"), array(), true);
|
$this->server->schedule(10, array($this, "environmentUpdate"), array(), true);
|
||||||
$this->metadata = array();
|
|
||||||
$this->x = isset($this->data["x"]) ? $this->data["x"]:0;
|
$this->x = isset($this->data["x"]) ? $this->data["x"]:0;
|
||||||
$this->y = isset($this->data["y"]) ? $this->data["y"]:0;
|
$this->y = isset($this->data["y"]) ? $this->data["y"]:0;
|
||||||
$this->z = isset($this->data["z"]) ? $this->data["z"]:0;
|
$this->z = isset($this->data["z"]) ? $this->data["z"]:0;
|
||||||
@ -77,9 +114,10 @@ class Entity extends stdClass{
|
|||||||
case ENTITY_ITEM:
|
case ENTITY_ITEM:
|
||||||
$this->meta = (int) $this->data["meta"];
|
$this->meta = (int) $this->data["meta"];
|
||||||
$this->stack = (int) $this->data["stack"];
|
$this->stack = (int) $this->data["stack"];
|
||||||
$this->setHealth(2, "generic");
|
$this->setHealth(5, "generic");
|
||||||
break;
|
break;
|
||||||
case ENTITY_MOB:
|
case ENTITY_MOB:
|
||||||
|
$this->setHealth($this->data["Health"], "generic");
|
||||||
//$this->setName((isset($mobs[$this->type]) ? $mobs[$this->type]:$this->type));
|
//$this->setName((isset($mobs[$this->type]) ? $mobs[$this->type]:$this->type));
|
||||||
break;
|
break;
|
||||||
case ENTITY_OBJECT:
|
case ENTITY_OBJECT:
|
||||||
@ -218,12 +256,16 @@ class Entity extends stdClass{
|
|||||||
$flags = 0;
|
$flags = 0;
|
||||||
$flags |= $this->fire > 0 ? 1:0;
|
$flags |= $this->fire > 0 ? 1:0;
|
||||||
$flags |= ($this->crouched === true ? 1:0) << 1;
|
$flags |= ($this->crouched === true ? 1:0) << 1;
|
||||||
return array(
|
$d = array(
|
||||||
0 => array("type" => 0, "value" => $flags),
|
0 => array("type" => 0, "value" => $flags),
|
||||||
1 => array("type" => 1, "value" => $this->air),
|
1 => array("type" => 1, "value" => $this->air),
|
||||||
16 => array("type" => 0, "value" => 0),
|
16 => array("type" => 0, "value" => 0),
|
||||||
17 => array("type" => 6, "value" => array(0, 0, 0)),
|
17 => array("type" => 6, "value" => array(0, 0, 0)),
|
||||||
);
|
);
|
||||||
|
if($this->class === ENTITY_MOB and $this->type === MOB_SHEEP){
|
||||||
|
$d[16]["value"] = (($this->data["Sheared"] == 1 ? 1:0) << 5) | ($this->data["Color"] & 0x0F);
|
||||||
|
}
|
||||||
|
return $d;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function updateMetadata(){
|
public function updateMetadata(){
|
||||||
@ -390,7 +432,8 @@ class Entity extends stdClass{
|
|||||||
$harm = true;
|
$harm = true;
|
||||||
$dmg = $this->health - $health;
|
$dmg = $this->health - $health;
|
||||||
if(($this->server->gamemode === 0 or $force === true) and ($this->dmgcounter[0] < microtime(true) or $this->dmgcounter[1] < $dmg) and !$this->dead){
|
if(($this->server->gamemode === 0 or $force === true) and ($this->dmgcounter[0] < microtime(true) or $this->dmgcounter[1] < $dmg) and !$this->dead){
|
||||||
$this->dmgcounter = array(microtime(true) + 0.5, $dmg);
|
$this->dmgcounter[0] = microtime(true) + 0.5;
|
||||||
|
$this->dmgcounter[1] = $dmg;
|
||||||
}else{
|
}else{
|
||||||
return false; //Entity inmunity
|
return false; //Entity inmunity
|
||||||
}
|
}
|
||||||
|
@ -45,6 +45,9 @@ class TileEntity extends stdClass{
|
|||||||
$this->class = (int) $class;
|
$this->class = (int) $class;
|
||||||
$this->data = $data;
|
$this->data = $data;
|
||||||
$this->closed = false;
|
$this->closed = false;
|
||||||
|
if($class === false){
|
||||||
|
$this->closed = true;
|
||||||
|
}
|
||||||
$this->name = "";
|
$this->name = "";
|
||||||
$this->id = (int) $id;
|
$this->id = (int) $id;
|
||||||
$this->x = (int) $x;
|
$this->x = (int) $x;
|
||||||
@ -68,6 +71,9 @@ class TileEntity extends stdClass{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function spawn($player){
|
public function spawn($player){
|
||||||
|
if($this->closed){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if(!($player instanceof Player)){
|
if(!($player instanceof Player)){
|
||||||
$player = $this->server->api->player->get($player);
|
$player = $this->server->api->player->get($player);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user