Added world teleporting

This commit is contained in:
Shoghi Cervantes Pueyo 2013-05-15 17:29:55 +02:00
parent 7de0835ad9
commit 33bd66c1da
6 changed files with 19 additions and 14 deletions

View File

@ -321,7 +321,7 @@ class BlockAPI{
return false; return false;
} }
if($item->isActivable === true and $item->onActivate($player, $block, $target, $face, $fx, $fy, $fz)){ if($item->isActivable === true and $item->onActivate($player->level, $player, $block, $target, $face, $fx, $fy, $fz)){
return $this->cancelAction($block, $player); return $this->cancelAction($block, $player);
} }

View File

@ -197,11 +197,9 @@ class ConsoleAPI{
$end = strpos($line, " "); $end = strpos($line, " ");
if($end === false){ if($end === false){
$end = strlen($line); $end = strlen($line);
}else{
++$end;
} }
$cmd = strtolower(substr($line, 0, $end - 1)); $cmd = strtolower(substr($line, 0, $end));
$params = substr($line, $end); $params = substr($line, $end + 1);
if(isset($this->alias[$cmd])){ if(isset($this->alias[$cmd])){
$this->run($this->alias[$cmd] . " " .$params, $issuer, $cmd); $this->run($this->alias[$cmd] . " " .$params, $issuer, $cmd);

View File

@ -60,7 +60,7 @@ class ServerAPI{
$this->config = new Config(DATA_PATH . "server.properties", CONFIG_PROPERTIES, array( $this->config = new Config(DATA_PATH . "server.properties", CONFIG_PROPERTIES, array(
"server-name" => "Minecraft PE Server", "server-name" => "Minecraft PE Server",
"description" => "Server made using PocketMine-MP", "description" => "Server made using PocketMine-MP",
"motd" => "Welcome @username to this server!", "motd" => "Welcome @player to this server!",
"server-invisible" => false, "server-invisible" => false,
"server-ip" => "0.0.0.0", "server-ip" => "0.0.0.0",
"server-port" => 19132, "server-port" => 19132,

View File

@ -156,7 +156,7 @@ class Player{
)); ));
} }
$tiles = $this->server->query("SELECT * FROM tileentities WHERE spawnable = 1 AND x >= ".($x - 1)." AND x < ".($x + 17)." AND z >= ".($z - 1)." AND z < ".($z + 17)." AND y >= ".($y - 1)." AND y < ".($y + 17).";"); $tiles = $this->server->query("SELECT ID FROM tileentities WHERE spawnable = 1 AND x >= ".($x - 1)." AND x < ".($x + 17)." AND z >= ".($z - 1)." AND z < ".($z + 17)." AND y >= ".($y - 1)." AND y < ".($y + 17).";");
if($tiles !== false and $tiles !== true){ if($tiles !== false and $tiles !== true){
while(($tile = $tiles->fetchArray(SQLITE3_ASSOC)) !== false){ while(($tile = $tiles->fetchArray(SQLITE3_ASSOC)) !== false){
$this->server->api->tileentity->spawnTo($tile["ID"], $this); $this->server->api->tileentity->spawnTo($tile["ID"], $this);
@ -512,7 +512,6 @@ class Player{
} }
} }
$this->dataPacket(MC_CHAT, array( $this->dataPacket(MC_CHAT, array(
"message" => $m, "message" => $m,
)); ));
} }
@ -579,6 +578,7 @@ class Player{
if($pos instanceof Position and $pos->level !== $this->level){ if($pos instanceof Position and $pos->level !== $this->level){
$this->level = $pos->level; $this->level = $pos->level;
$this->chunksLoaded = array(); $this->chunksLoaded = array();
$terrain = true;
} }
$this->lastCorrect = $pos; $this->lastCorrect = $pos;
$this->entity->fallY = false; $this->entity->fallY = false;
@ -899,7 +899,7 @@ class Player{
$this->evid[] = $this->server->event("block.change", array($this, "eventHandler")); $this->evid[] = $this->server->event("block.change", array($this, "eventHandler"));
$this->evid[] = $this->server->event("tile.container.slot", array($this, "eventHandler")); $this->evid[] = $this->server->event("tile.container.slot", array($this, "eventHandler"));
$this->server->schedule(40, array($this, "measureLag"), array(), true); $this->server->schedule(40, array($this, "measureLag"), array(), true);
console("[INFO] \x1b[33m".$this->username."\x1b[0m[/".$this->ip.":".$this->port."] logged in with entity id ".$this->eid." at (".round($this->entity->x, 2).", ".round($this->entity->y, 2).", ".round($this->entity->z, 2).")"); console("[INFO] \x1b[33m".$this->username."\x1b[0m[/".$this->ip.":".$this->port."] logged in with entity id ".$this->eid." at (".$this->entity->level->getName().", ".round($this->entity->x, 2).", ".round($this->entity->y, 2).", ".round($this->entity->z, 2).")");
break; break;
case MC_READY: case MC_READY:
if($this->loggedIn === false){ if($this->loggedIn === false){
@ -986,7 +986,7 @@ class Player{
if($this->spawned === false){ if($this->spawned === false){
break; break;
} }
if($this->blocked === true or Utils::distance($this->entity->position, $data) > 8){ if($this->blocked === true or $this->entity->distance(new Vector3($data["x"], $data["y"], $data["z"])) > 8){
break; break;
} }
$this->server->api->block->playerBlockBreak($this, new Vector3($data["x"], $data["y"], $data["z"])); $this->server->api->block->playerBlockBreak($this, new Vector3($data["x"], $data["y"], $data["z"]));
@ -1002,7 +1002,7 @@ class Player{
if($this->spawned === false){ if($this->spawned === false){
break; break;
} }
if($this->gamemode !== VIEW and $this->blocked === false and isset($this->server->entities[$data["target"]]) and Utils::distance($this->entity->position, $this->server->entities[$data["target"]]->position) <= 8){ if($this->gamemode !== VIEW and $this->blocked === false and isset($this->server->entities[$data["target"]]) and $this->entity->distance($this->server->entities[$data["target"]]) <= 8){
$target = $this->server->api->entity->get($data["target"]); $target = $this->server->api->entity->get($data["target"]);
$data["targetentity"] = $target; $data["targetentity"] = $target;
$data["entity"] = $this->entity; $data["entity"] = $this->entity;

View File

@ -78,8 +78,8 @@ class PaintingItem extends Item{
"yaw" => $faces[$face] * 90, "yaw" => $faces[$face] * 90,
"Motive" => $motive[0], "Motive" => $motive[0],
); );
$e = $server->api->entity->add($this->level, ENTITY_OBJECT, OBJECT_PAINTING, $data); $e = $server->api->entity->add($level, ENTITY_OBJECT, OBJECT_PAINTING, $data);
$server->api->entity->spawnToAll($this->level, $e->eid); $server->api->entity->spawnToAll($level, $e->eid);
if(($player->gamemode & 0x01) === 0x00){ if(($player->gamemode & 0x01) === 0x00){
$player->removeItem($this->getID(), $this->getMetadata(), 1); $player->removeItem($this->getID(), $this->getMetadata(), 1);
} }

View File

@ -33,6 +33,13 @@ class Position extends Vector3{
$this->level = $level; $this->level = $level;
} }
public function distance($x = 0, $y = 0, $z = 0){
if($x instanceof Position and $x->level !== $this->level){
return PHP_INT_MAX;
}
return parent::distance($x, $y, $z);
}
public function __toString(){ public function __toString(){
return "Position(level=".$this->level->getName().",x=".$this->x.",y=".$this->y.",z=".$this->z.")"; return "Position(level=".$this->level->getName().",x=".$this->x.",y=".$this->y.",z=".$this->z.")";
} }