mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-10 05:34:54 +00:00
Selector aliases & @world & /spawnpoint
This commit is contained in:
parent
ad4959f8c0
commit
66322d7719
@ -205,7 +205,7 @@ class ConsoleAPI{
|
||||
console("[DEBUG] \x1b[33m*".$issuer."\x1b[0m issued server command: ".ltrim("$alias ")."/$cmd ".$params, true, true, 2);
|
||||
}
|
||||
|
||||
if(preg_match_all('#@([@A-Za-z_]{1,})#', $params, $matches, PREG_OFFSET_CAPTURE) > 0){
|
||||
if(preg_match_all('#@([@a-z]{1,})#', $params, $matches, PREG_OFFSET_CAPTURE) > 0){
|
||||
$offsetshift = 0;
|
||||
foreach($matches[1] as $selector){
|
||||
if($selector[0]{0} === "@"){ //Escape!
|
||||
@ -214,18 +214,27 @@ class ConsoleAPI{
|
||||
continue;
|
||||
}
|
||||
switch(strtolower($selector[0])){
|
||||
case "u":
|
||||
case "player":
|
||||
case "username":
|
||||
$p = ($issuer instanceof Player) ? $issuer->username:$issuer;
|
||||
$params = substr_replace($params, $p, $selector[1] + $offsetshift - 1, strlen($selector[0]) + 1);
|
||||
$offsetshift -= strlen($selector[0]) - strlen($p) + 1;
|
||||
break;
|
||||
case "w":
|
||||
case "world":
|
||||
$p = ($issuer instanceof Player) ? $issuer->level->getName():$this->server->api->level->getDefault()->getName();
|
||||
$params = substr_replace($params, $p, $selector[1] + $offsetshift - 1, strlen($selector[0]) + 1);
|
||||
$offsetshift -= strlen($selector[0]) - strlen($p) + 1;
|
||||
break;
|
||||
case "a":
|
||||
case "all":
|
||||
$output = "";
|
||||
foreach($this->server->api->player->getAll() as $p){
|
||||
$output .= $this->run($cmd . " ". substr_replace($params, $p->username, $selector[1] + $offsetshift - 1, strlen($selector[0]) + 1), $issuer, $alias);
|
||||
}
|
||||
return $output;
|
||||
case "r":
|
||||
case "random":
|
||||
$l = array();
|
||||
foreach($this->server->api->player->getAll() as $p){
|
||||
|
@ -37,7 +37,8 @@ class PlayerAPI{
|
||||
$this->server->api->console->register("list", "", array($this, "commandHandler"));
|
||||
$this->server->api->console->register("kill", "<player>", array($this, "commandHandler"));
|
||||
$this->server->api->console->register("gamemode", "<mode> [player]", array($this, "commandHandler"));
|
||||
$this->server->api->console->register("tp", "[target player] <destination player> OR [target player] <x> <y> <z>", array($this, "commandHandler"));
|
||||
$this->server->api->console->register("tp", "[target player] <destination player> OR /tp [target player] <x> <y> <z>", array($this, "commandHandler"));
|
||||
$this->server->api->console->register("spawnpoint", "[player] [x] [y] [z]", array($this, "commandHandler"));
|
||||
$this->server->api->console->register("spawn", "[world]", array($this, "commandHandler"));
|
||||
$this->server->api->console->register("lag", "", array($this, "commandHandler"));
|
||||
$this->server->api->console->alias("suicide", "kill");
|
||||
@ -115,12 +116,39 @@ class PlayerAPI{
|
||||
public function commandHandler($cmd, $params, $issuer, $alias){
|
||||
$output = "";
|
||||
switch($cmd){
|
||||
case "spawn":
|
||||
if(count($params) > 1){
|
||||
$player = $this->server->api->player->get(array_pop($params));
|
||||
}else{
|
||||
$player = $issuer;
|
||||
case "spawnpoint":
|
||||
if(!($issuer instanceof Player)){
|
||||
$output .= "Please run this command in-game.\n";
|
||||
break;
|
||||
}
|
||||
|
||||
if(count($params) === 1 or count($params) === 4){
|
||||
$target = $this->server->api->player->get(array_shift($params));
|
||||
}else{
|
||||
$target = $issuer;
|
||||
}
|
||||
|
||||
if(!($target instanceof Player)){
|
||||
$output .= "That player cannot be found.\n";
|
||||
break;
|
||||
}
|
||||
|
||||
if(count($params) === 3){
|
||||
$spawn = new Position(floatval(array_shift($params)), floatval(array_shift($params)), floatval(array_shift($params)), $issuer->level);
|
||||
}else{
|
||||
$spawn = new Position($issuer->x, $issuer->y, $issuer->z, $issuer->level);
|
||||
}
|
||||
|
||||
$target->setSpawn($spawn);
|
||||
|
||||
$output .= "Spawnpoint set correctly!\n";
|
||||
break;
|
||||
case "spawn":
|
||||
if(!($issuer instanceof Player)){
|
||||
$output .= "Please run this command in-game.\n";
|
||||
break;
|
||||
}
|
||||
|
||||
if(isset($params[0])){
|
||||
$lv = $this->server->api->level->get(trim(implode(" ",$params)));
|
||||
if($lv === false){
|
||||
@ -132,11 +160,7 @@ class PlayerAPI{
|
||||
$spawn = $this->server->api->level->getDefault()->getSpawn();
|
||||
}
|
||||
|
||||
if(!($player instanceof Player)){
|
||||
$output .= "Couldn't respawn.\n";
|
||||
break;
|
||||
}
|
||||
$player->teleport($spawn);
|
||||
$issuer->teleport($spawn);
|
||||
break;
|
||||
case "lag":
|
||||
if(!($issuer instanceof Player)){
|
||||
|
@ -94,9 +94,11 @@ class Player{
|
||||
console("[DEBUG] New Session started with ".$ip.":".$port.". MTU ".$this->MTU.", Client ID ".$this->clientID, true, true, 2);
|
||||
}
|
||||
|
||||
public function setSpawn(Vector3 $pos, $level){
|
||||
if(($level = $this->server->api->level->get($level)) === false){
|
||||
$level = $this->server->api->level->getDefault();
|
||||
public function setSpawn(Vector3 $pos){
|
||||
if(!($pos instanceof Level)){
|
||||
$level = $this->level;
|
||||
}else{
|
||||
$level = $pos->level;
|
||||
}
|
||||
$this->spawnPosition = new Position($pos->x, $pos->y, $pos->z, $level);
|
||||
$this->dataPacket(MC_SET_SPAWN_POSITION, array(
|
||||
|
Loading…
x
Reference in New Issue
Block a user