diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index a6de899f7..e1e2471bd 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 6cadddec6..85e00b97c 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 63654596d..7e62e2c77 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 000000000..f7f8096a7 --- /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 000000000..36508b139 --- /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 000000000..c2db16235 --- /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