From a4630372fa483aedda0e67f754bb8729362a8dbd Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Wed, 2 Apr 2014 04:37:58 +0200 Subject: [PATCH] Added /save-on, /save-off, /save-all --- src/pocketmine/Player.php | 7 ++- src/pocketmine/Server.php | 16 ++--- src/pocketmine/command/SimpleCommandMap.php | 6 ++ .../command/defaults/SaveCommand.php | 60 +++++++++++++++++++ .../command/defaults/SaveOffCommand.php | 54 +++++++++++++++++ .../command/defaults/SaveOnCommand.php | 54 +++++++++++++++++ 6 files changed, 186 insertions(+), 11 deletions(-) create mode 100644 src/pocketmine/command/defaults/SaveCommand.php create mode 100644 src/pocketmine/command/defaults/SaveOffCommand.php create mode 100644 src/pocketmine/command/defaults/SaveOnCommand.php diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index a6de899f74..e1e2471bd6 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -2272,9 +2272,6 @@ class Player extends Human implements CommandSender, IPlayer{ if($this->loggedIn === true){ parent::close(); $this->save(); - if($this->namedtag instanceof Compound){ - $this->server->saveOfflinePlayerData($this->username, $this->namedtag); - } } } @@ -2331,6 +2328,10 @@ class Player extends Human implements CommandSender, IPlayer{ $this->namedtag["lastPlayed"] = floor(microtime(true) * 1000); //$this->data->set("health", $this->getHealth()); + + if($this->username != "" and $this->isOnline() and $this->namedtag instanceof Compound){ + $this->server->saveOfflinePlayerData($this->username, $this->namedtag); + } } /** diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 6cadddec6b..85e00b97c7 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -676,12 +676,6 @@ class Server{ } } - public function saveLevels(){ - foreach($this->getLevels() as $level){ - $level->save(); - } - } - /** * @return Level[] */ @@ -1557,8 +1551,14 @@ class Server{ } public function doAutoSave(){ - $this->broadcast(TextFormat::GRAY . "Saving...", self::BROADCAST_CHANNEL_ADMINISTRATIVE); - $this->saveLevels(); + + /*foreach($this->getOnlinePlayers() as $player){ + $player->save(); + }*/ + + foreach($this->getLevels() as $level){ + $level->save(); + } } public function sendUsage(){ diff --git a/src/pocketmine/command/SimpleCommandMap.php b/src/pocketmine/command/SimpleCommandMap.php index 63654596d9..7e62e2c77b 100644 --- a/src/pocketmine/command/SimpleCommandMap.php +++ b/src/pocketmine/command/SimpleCommandMap.php @@ -35,6 +35,9 @@ use pocketmine\command\defaults\OpCommand; use pocketmine\command\defaults\PardonCommand; use pocketmine\command\defaults\PardonIpCommand; use pocketmine\command\defaults\PluginsCommand; +use pocketmine\command\defaults\SaveCommand; +use pocketmine\command\defaults\SaveOffCommand; +use pocketmine\command\defaults\SaveOnCommand; use pocketmine\command\defaults\SayCommand; use pocketmine\command\defaults\SeedCommand; use pocketmine\command\defaults\StopCommand; @@ -80,6 +83,9 @@ class SimpleCommandMap implements CommandMap{ $this->register("pocketmine", new OpCommand("op")); $this->register("pocketmine", new DeopCommand("deop")); $this->register("pocketmine", new WhitelistCommand("whitelist")); + $this->register("pocketmine", new SaveOnCommand("save-on")); + $this->register("pocketmine", new SaveOffCommand("save-off")); + $this->register("pocketmine", new SaveCommand("save-all")); } diff --git a/src/pocketmine/command/defaults/SaveCommand.php b/src/pocketmine/command/defaults/SaveCommand.php new file mode 100644 index 0000000000..f7f8096a7a --- /dev/null +++ b/src/pocketmine/command/defaults/SaveCommand.php @@ -0,0 +1,60 @@ +setPermission("pocketmine.command.save.perform"); + } + + public function execute(CommandSender $sender, $currentAlias, array $args){ + if(!$this->testPermission($sender)){ + return true; + } + + Command::broadcastCommandMessage($sender, "Forcing save..."); + + foreach(Server::getInstance()->getOnlinePlayers() as $player){ + $player->save(); + } + + foreach(Server::getInstance()->getLevels() as $level){ + $level->save(true); + } + + Command::broadcastCommandMessage($sender, "Save complete."); + + return true; + } +} \ No newline at end of file diff --git a/src/pocketmine/command/defaults/SaveOffCommand.php b/src/pocketmine/command/defaults/SaveOffCommand.php new file mode 100644 index 0000000000..36508b139a --- /dev/null +++ b/src/pocketmine/command/defaults/SaveOffCommand.php @@ -0,0 +1,54 @@ +setPermission("pocketmine.command.save.disable"); + } + + public function execute(CommandSender $sender, $currentAlias, array $args){ + if(!$this->testPermission($sender)){ + return true; + } + + foreach(Server::getInstance()->getLevels() as $level){ + $level->setAutoSave(false); + } + + Command::broadcastCommandMessage($sender, "Disabled level saving"); + + return true; + } +} \ No newline at end of file diff --git a/src/pocketmine/command/defaults/SaveOnCommand.php b/src/pocketmine/command/defaults/SaveOnCommand.php new file mode 100644 index 0000000000..c2db16235e --- /dev/null +++ b/src/pocketmine/command/defaults/SaveOnCommand.php @@ -0,0 +1,54 @@ +setPermission("pocketmine.command.save.enable"); + } + + public function execute(CommandSender $sender, $currentAlias, array $args){ + if(!$this->testPermission($sender)){ + return true; + } + + foreach(Server::getInstance()->getLevels() as $level){ + $level->setAutoSave(true); + } + + Command::broadcastCommandMessage($sender, "Enabled level saving"); + + return true; + } +} \ No newline at end of file