From c81266d1da62e139041df7fd4e7d22846c923a34 Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Wed, 2 Apr 2014 19:04:07 +0200 Subject: [PATCH] Added /tp --- src/pocketmine/command/SimpleCommandMap.php | 2 + .../command/defaults/SpawnpointCommand.php | 4 +- .../command/defaults/TeleportCommand.php | 94 +++++++++++++++++++ 3 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 src/pocketmine/command/defaults/TeleportCommand.php diff --git a/src/pocketmine/command/SimpleCommandMap.php b/src/pocketmine/command/SimpleCommandMap.php index eedb966a1..079feda52 100644 --- a/src/pocketmine/command/SimpleCommandMap.php +++ b/src/pocketmine/command/SimpleCommandMap.php @@ -45,6 +45,7 @@ use pocketmine\command\defaults\SayCommand; use pocketmine\command\defaults\SeedCommand; use pocketmine\command\defaults\SpawnpointCommand; use pocketmine\command\defaults\StopCommand; +use pocketmine\command\defaults\TeleportCommand; use pocketmine\command\defaults\TellCommand; use pocketmine\command\defaults\VanillaCommand; use pocketmine\command\defaults\VersionCommand; @@ -94,6 +95,7 @@ class SimpleCommandMap implements CommandMap{ $this->register("pocketmine", new GamemodeCommand("gamemode")); $this->register("pocketmine", new KillCommand("kill")); $this->register("pocketmine", new SpawnpointCommand("spawnpoint")); + $this->register("pocketmine", new TeleportCommand("tp")); } diff --git a/src/pocketmine/command/defaults/SpawnpointCommand.php b/src/pocketmine/command/defaults/SpawnpointCommand.php index c29f0e0ef..a1f83d417 100644 --- a/src/pocketmine/command/defaults/SpawnpointCommand.php +++ b/src/pocketmine/command/defaults/SpawnpointCommand.php @@ -66,8 +66,8 @@ class SpawnpointCommand extends VanillaCommand{ if(count($args) === 4){ if($level !== null){ $x = (int) $this->getRelativeDouble($sender->x, $sender, $args[1]); - $y = (int) $this->getRelativeDouble($sender->y, $sender, $args[2]); - $z = (int) $this->getRelativeDouble($sender->z, $sender, $args[3], 0, 128); + $y = (int) $this->getRelativeDouble($sender->y, $sender, $args[2], 0, 128); + $z = (int) $this->getRelativeDouble($sender->z, $sender, $args[3]); $target->setSpawn(new Position($x, $y, $z, $level)); Command::broadcastCommandMessage($sender, "Set ".$target->getName()."'s spawnpoint to ".$x.", ".$y.", ".$z); return true; diff --git a/src/pocketmine/command/defaults/TeleportCommand.php b/src/pocketmine/command/defaults/TeleportCommand.php new file mode 100644 index 000000000..245a328e7 --- /dev/null +++ b/src/pocketmine/command/defaults/TeleportCommand.php @@ -0,0 +1,94 @@ + and/or " + ); + $this->setPermission("pocketmine.command.teleport"); + } + + public function execute(CommandSender $sender, $currentAlias, array $args){ + if(!$this->testPermission($sender)){ + return true; + } + + if(count($args) < 1 or count($args) > 4){ + $sender->sendMessage(TextFormat::RED . "Usage: ".$this->usageMessage); + return true; + } + + $target = null; + + if(count($args) === 1 or count($args) === 3){ + if($sender instanceof Player){ + $target = $sender; + }else{ + $sender->sendMessage(TextFormat::RED . "Please provide a player!"); + return true; + } + }else{ + $target = Server::getInstance()->getPlayer($args[0]); + if($target === null){ + $sender->sendMessage(TextFormat::RED . "Can't find player ".$args[0]); + return true; + } + } + + if(count($args) < 3){ + $pos = new Position((int) $sender->x, (int) $sender->y, (int) $sender->z, $sender->getLevel()); + $target->setSpawn($pos); + Command::broadcastCommandMessage($sender, "Set ".$target->getName()."'s spawnpoint to ".$pos->x.", ".$pos->y.", ".$pos->z); + return true; + }elseif($target->getLevel() !== null){ + $pos = count($args) === 4 ? 2:1; + if($sender instanceof Player){ + $x = $this->getRelativeDouble($sender->x, $sender, $args[$pos++]); + $y = $this->getRelativeDouble($sender->y, $sender, $args[$pos++], 0, 128); + $z = $this->getRelativeDouble($sender->z, $sender, $args[$pos]); + }else{ + $x = $this->getDouble($sender, $args[$pos++]); + $y = $this->getDouble($sender, $args[$pos++], 0, 128); + $z = $this->getDouble($sender, $args[$pos]); + } + $target->teleport(new Vector3($x, $y, $z)); + Command::broadcastCommandMessage($sender, "Teleported ".$target->getName()." to ".round($x, 2).", ".round($y, 2).", ".round($z, 2)); + return true; + } + + $sender->sendMessage(TextFormat::RED . "Usage: ".$this->usageMessage); + return true; + } +} \ No newline at end of file