<?php __HALT_COMPILER(); ?>
                  (   src/saisana299/bplogger/BreaklogTask.phpK  L]K  ᗠ      $   src/saisana299/bplogger/BPLogger.php  L]  VIO      (   src/saisana299/bplogger/PlacelogTask.phpK  L]K  'I      
   plugin.yml{  L]{         <?php

namespace saisana299\bplogger;

use pocketmine\scheduler\AsyncTask;
use pocketmine\Server;
use pocketmine\Player;

class BreaklogTask extends AsyncTask{
	
    private $logResource;
	
    public function __construct($logPath,$message) {
        touch($logPath);
        $this->logResource = fopen($logPath, 'a');
		$this->message = $message;
    }
	
	public function onRun()
    {
		fwrite($this->logResource, "BREAK <" . date("Y/m/d H:i:s") . ">" . $this->message . PHP_EOL);
    }
	
    public function onCompletion(Server $server)
    {
		fclose($this->logResource);
    }
	
} 
<?php

/*

          ※このプラグインはログに大量に書き込むので
             ログファイルのデータ量が結構大きくなります
             定期的に消去することをオススメします。

             Made by Saisana299
*/

namespace saisana299\bplogger;

use pocketmine\Player;
use pocketmine\Server;
use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\level\Level;
use pocketmine\math\Vector3;
use pocketmine\level\Position;
use pocketmine\event\block\BlockBreakEvent;
use pocketmine\event\block\BlockPlaceEvent;
use pocketmine\block\BlockIds;
use pocketmine\item\Item;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\utils\Config;
use pocketmine\scheduler\AsyncTask;
use pocketmine\scheduler\Task;

class BPLogger extends PluginBase implements Listener
{
	
	 private $breaklogtask;
	 private $placelogtask;
	
	public function onEnable()
	{
		$this->getlogger()->info("§bBreakPlaceLoggerを読み込みました §6作成者 Saisana299");
		@mkdir($this->getDataFolder());
		@mkdir($this->getDataFolder() . "Break/");
		@mkdir($this->getDataFolder() . "Place/");
        $this->bcount = new Config($this->getDataFolder() . "bcount.yml", Config::YAML,
            [
            "Break"=> 1
        ]);
        $this->bcount->save();
      
          $this->pcount = new Config($this->getDataFolder() . "pcount.yml", Config::YAML,
            [
            "Place"=> 1
        ]);
        $this->pcount->save();
        $this->getServer()->getPluginManager()->registerEvents($this, $this);
	}
    
    public function onBreak(BlockBreakEvent $event){
		$player = $event->getPlayer();
		$name = $player->getName();
		$block = $event->getBlock();
		$world = $block->getLevel();
		$worldname = $block->getLevel()->getFolderName();
		
		$X = $block->getX();
		$Y = $block->getY();
		$Z = $block->getZ();
		$blockid = $block->getId();
		$blockname = $block->getName();
		$blockmeta = $block->getDamage();
		$this->getServer()->getAsyncPool()->submitTask(new BreaklogTask($this->getDataFolder() . "Break/" . "Break_".date("Y-m-d").".log"," [".$name."] ".$blockname."(".$blockid.":".$blockmeta.") X:".$X." Y:".$Y." Z:".$Z." Level:".$worldname.""));
		$count = $this->bcount->get("Break");
		$this->bcount->set("Break", ++$count);
		
		
	}
		
	public function onPlace(BlockPlaceEvent $event){
		$player = $event->getPlayer();
		$name = $player->getName();
		$block = $event->getBlock();
		$world = $block->getLevel();
		$worldname = $block->getLevel()->getFolderName();
		
		$X = $block->getX();
		$Y = $block->getY();
		$Z = $block->getZ();
		$blockid = $block->getId();
		$blockname = $block->getName();
		$blockmeta = $block->getDamage();
		$this->getServer()->getAsyncPool()->submitTask(new PlacelogTask($this->getDataFolder() . "Place/" . "Place_".date("Y-m-d").".log"," [".$name."] ".$blockname."(".$blockid.":".$blockmeta.") X:".$X." Y:".$Y." Z:".$Z." Level:".$worldname.""));
		$count = $this->pcount->get("Place");
		$this->pcount->set("Place", ++$count);
		
		
	}
		
		public function onCommand(CommandSender $sender, Command $command, string $label, array $args) :bool{
		switch (strtolower($command->getName())){
			
		case 'breakcount':
		
			$bcount = $this->bcount->get("Break");
			$sender->sendMessage("§bサーバーの合計ブロック破壊数は§o§l§c ".$bcount." §r§a個です。");
		
		break;
		
		case 'placecount':
		
			$pcount = $this->pcount->get("Place");
			$sender->sendMessage("§aサーバーの合計ブロック設置数は§o§l§c ".$pcount." §r§b個です。");
		
		break;
		}
		return true;
	}
	
	public function onDisable(){
		$this->bcount->save();
		$this->pcount->save();
	}
}

<?php

namespace saisana299\bplogger;

use pocketmine\scheduler\AsyncTask;
use pocketmine\Server;
use pocketmine\Player;

class PlacelogTask extends AsyncTask{
	
    private $logResource;
	
    public function __construct($logPath,$message) {
        touch($logPath);
        $this->logResource = fopen($logPath, 'a');
		$this->message = $message;
    }
	
	public function onRun()
    {
		fwrite($this->logResource, "PLACE <" . date("Y/m/d H:i:s") . ">" . $this->message . PHP_EOL);
    }
	
    public function onCompletion(Server $server)
    {
		fclose($this->logResource);
    }
	
} 
---
name: BPLogger
api:
- 3.5.0
main: saisana299\bplogger\BPLogger
version: 1.2.0
description: 破壊、設置を詳細的にログに保存
commands: 
 breakcount: 
  description: サーバーのブロック合計破壊数表示
  default: true
 placecount: 
  description: サーバーのブロック合計設置数表示
  default: true
author: Saisana299
load: POSTWORLD
...
ne)_߆Oj5,   GBMB