
<?php
echo "PocketMine-MP plugin ReplenishResources v2
This file has been generated using DevTools v1.13.2 at Mon, 21 Jan 2019 19:34:10 +1030
----------------
";

if(extension_loaded("phar")){
	$phar = new \Phar(__FILE__);
	foreach($phar->getMetadata() as $key => $value){
		echo ucfirst($key) . ": " . (is_array($value) ? implode(", ", $value) : $value) . "\n";
	}
}

__HALT_COMPILER(); ?>
š               a:9:{s:4:"name";s:18:"ReplenishResources";s:7:"version";d:2;s:4:"main";s:24:"aieuo\ReplenishResources";s:3:"api";a:1:{i:0;s:5:"3.0.0";}s:6:"depend";s:0:"";s:11:"description";s:0:"";s:7:"authors";s:0:"";s:7:"website";s:0:"";s:12:"creationDate";i:1548061450;}
   plugin.ymlæ   
‹E\æ   ?T•Ö¶      	   README.md™  
‹E\™  *o=¶          src/aieuo/ReplenishResources.php·=  
‹E\·=  œ	ß¶      name: ReplenishResources
main: aieuo\ReplenishResources
version: 2.0
api: [3.0.0]
load: POSTWORLD
author: aieuo
commands:
 reso:
  description: äººå·¥è³‡æºè£œå……
  usage: /reso <pos1 | pos2 | add | del | setting>
  permission: op# ReplenishResources

è¨­å®šã—ãŸçœ‹æ¿ã‚’ã‚¹ãƒ‹ãƒ¼ã‚¯ã—ãªãŒã‚‰è§¦ã‚‹ã¨è‡ªå‹•ã§äººå·¥è³‡æºã‚’è£œå……ã—ã¾ã™ã€‚

ã‚³ãƒžãƒ³ãƒ‰  
/reso pos1
æœ€åˆã®ç«¯ã‚’è¨­å®šã—ã¾ã™

/reso pos2
pos1ã¨åå¯¾å´ã®ç«¯ã‚’è¨­å®šã—ã¾ã™

/reso add <id>
çœ‹æ¿ã«è¿½åŠ ã—ã¾ã™
(idã¯è³‡æºã®ãƒ–ãƒ­ãƒƒã‚¯ã®id)

/reso del
çœ‹æ¿ã«è¿½åŠ ã—ãŸã®ã‚’å‰Šé™¤ã—ã¾ã™

/reso cancel
ã‚­ãƒ£ãƒ³ã‚»ãƒ«
<?php
namespace aieuo;

use pocketmine\Player;
use pocketmine\block\Block;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\command\ConsoleCommandSender;
use pocketmine\event\Listener;
use pocketmine\event\block\BlockBreakEvent;
use pocketmine\event\player\PlayerInteractEvent;
use pocketmine\event\server\DataPacketReceiveEvent;
use pocketmine\network\mcpe\protocol\ModalFormRequestPacket;
use pocketmine\network\mcpe\protocol\ModalFormResponsePacket;
use pocketmine\math\Vector3;
use pocketmine\plugin\PluginBase;
use pocketmine\utils\Config;

class ReplenishResources extends PluginBase implements Listener{

    public function onEnable(){
        $this->getServer()->getPluginManager()->registerEvents($this,$this);
        if(!file_exists($this->getDataFolder())) @mkdir($this->getDataFolder(), 0721, true);
    	$this->config = new Config($this->getDataFolder()."config.yml", Config::YAML);
    	$this->setting = new Config($this->getDataFolder()."setting.yml", Config::YAML, [
    		"wait" => 60,
    		"sneak" => true,
    		"announcement" => false,
    		"count" => 0
    	]);

    	$this->formIds = [
    		"settings" => mt_rand(0, 99999999),
    		"wait" => mt_rand(0, 99999999),
    		"count" => mt_rand(0, 99999999)
    	];
    }

    public function onDisable(){
    	$this->setting->save();
    }

  	public function onCommand(CommandSender $sender, Command $command,string $label, array $args):bool{
        $cmd = $command->getName();
    	if($cmd == "reso"){
    		if(!$sender instanceof Player){
    			$sender->sendMessage("ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã‹ã‚‰ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“");
    			return true;
    		}
    		if(!$sender->isOp() or !isset($args[0])){
    			return false;
    		}
        	$name = $sender->getName();
    		switch ($args[0]) {
    			case 'setting':
            		$this->sendSettingForm($sender);
            		return true;
				case 'cancel':
					unset($this->tap[$name],$this->break[$name],$this->pos1[$name],$this->pos2[$name]);
					$sender->sendMessage("ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã—ã¾ã—ãŸ");
					return true;
				case 'pos1':
					$this->break[$name] = "pos1";
					unset($this->pos2[$name]);
					$sender->sendMessage("ãƒ–ãƒ­ãƒƒã‚¯ã‚’å£Šã—ã¦ãã ã•ã„");
					return true;
				case 'pos2':
					if(!isset($this->pos1[$name])){
						$sender->sendMessage("ã¾ãšpos1ã‚’è¨­å®šã—ã¦ãã ã•ã„");
						return true;
					}
					$this->break[$name] = "pos2";
					$sender->sendMessage("ãƒ–ãƒ­ãƒƒã‚¯ã‚’å£Šã—ã¦ãã ã•ã„");
					return true;
				case 'add':
					if(!isset($args[1])){
						$sender->sendMessage("/reso add <id>");
						return true;
					}
					if(!isset($this->pos1[$name]) or !isset($this->pos2[$name])){
						$sender->sendMessage("ã¾ãšposã‚’è¨­å®šã—ã¦ãã ã•ã„");
						return true;
					}
					$this->tap[$name] = [
						"type" => "add",
						"id" => $args[1]
					];
					$sender->sendMessage("è¿½åŠ ã™ã‚‹çœ‹æ¿ã‚’ã‚¿ãƒƒãƒ—ã—ã¦ãã ã•ã„");
					return true;
				case 'del':
					$this->tap[$name]["type"] = "del";
					$sender->sendMessage("å‰Šé™¤ã™ã‚‹çœ‹æ¿ã‚’ã‚¿ãƒƒãƒ—ã—ã¦ãã ã•ã„");
					return true;
    		}
    		return true;
		}
	}

	public function onBreak(BlockBreakEvent $event){
		$player = $event->getPlayer();
		$name = $player->getName();
		if(isset($this->break[$name])){
			$block = $event->getBlock();
			$event->setCancelled();
			switch ($this->break[$name]) {
				case 'pos1':
					$this->pos1[$name] = [
						"x" => $block->x,
						"y" => $block->y,
						"z" => $block->z,
						"level" => $block->level->getFolderName()
					];
					$player->sendMessage("è¨­å®šã—ã¾ã—ãŸ(".$this->pos1[$name]["x"].",".$this->pos1[$name]["y"].",".$this->pos1[$name]["z"].",".$this->pos1[$name]["level"].")");
					break;
				case 'pos2':
					if($this->pos1[$name]["level"] != $block->level->getFolderName()){
						$player->sendMessage("pos1ã¨åŒã˜ãƒ¯ãƒ¼ãƒ«ãƒ‰ã«è¨­å®šã—ã¦ãã ã•ã„");
						return;
					}
					$this->pos2[$name] = [
						"x" => $block->x,
						"y" => $block->y,
						"z" => $block->z,
						"level" => $block->level->getFolderName()
					];
					$player->sendMessage("è¨­å®šã—ã¾ã—ãŸ");
					break;
			}
			unset($this->break[$name]);
		}
	}

    public function onTouch(PlayerInteractEvent $event){
    	$player = $event->getPlayer();
    	$block = $event->getBlock();
    	$name = $player->getName();
    	if(isset($this->tap[$name])){
    		switch ($this->tap[$name]["type"]) {
    			case 'add':
					if(!($block->getId() == 63 or $block->getId() == 68)){
						$player->sendMessage("çœ‹æ¿ã‚’è§¦ã£ã¦ãã ã•ã„");
						return;
					}
					$event->setCancelled();
					$ids = explode(":",$this->tap[$name]["id"]);
					if(!isset($ids[1]))$ids[1] = 0;
					$this->config->set($block->x.",".$block->y.",".$block->z.",".$block->level->getFolderName(),[
						"startx" => min($this->pos1[$name]["x"],$this->pos2[$name]["x"]),
						"starty" => min($this->pos1[$name]["y"],$this->pos2[$name]["y"]),
						"startz" => min($this->pos1[$name]["z"],$this->pos2[$name]["z"]),
						"endx" => max($this->pos1[$name]["x"],$this->pos2[$name]["x"]),
						"endy" => max($this->pos1[$name]["y"],$this->pos2[$name]["y"]),
						"endz" => max($this->pos1[$name]["z"],$this->pos2[$name]["z"]),
						"level" => $this->pos1[$name]["level"],
						"id" => [
							"id" => $ids[0],
							"damage" => $ids[1]
						]
					]);
					$this->config->save();
					$player->sendMessage("è¿½åŠ ã—ã¾ã—ãŸ");
    				break;
    			case 'del':
					if(!($block->getId() == 63 or $block->getId() == 68)){
						$player->sendMessage("çœ‹æ¿ã‚’è§¦ã£ã¦ãã ã•ã„");
						return;
					}
		    		$place = $block->x.",".$block->y.",".$block->z.",".$block->level->getFolderName();
					if($this->config->exists($place)){
						$this->config->remove($place);
						$this->config->save();
						$player->sendMessage("å‰Šé™¤ã—ã¾ã—ãŸ");
					}else{
						$player->sendMessage("ãã®å ´æ‰€ã«ã¯ç™»éŒ²ã•ã‚Œã¦ã„ã¾ã›ã‚“");
					}
					break;
    		}
    		unset($this->tap[$name]);
    		return;
    	}
    	if(($block->getId() == 63 or $block->getId() == 68)){
	    	$place = $block->x.",".$block->y.",".$block->z.",".$block->level->getFolderName();
	    	if($this->config->exists($place)){
	    		if($this->setting->get("sneak") and !$player->isSneaking()){
	    			$player->sendMessage("ã‚¹ãƒ‹ãƒ¼ã‚¯ã—ãªãŒã‚‰ã‚¿ãƒƒãƒ—ã™ã‚‹ã¨è£œå……ã—ã¾ã™");
	    			return;
	    		}
	    		if((float)$this->setting->get("wait") > 0){
		    		$time = $this->checkTime($player->getName(), $place);
		    		if($time !== true){
		    			$player->sendMessage((float)$this->setting->get("wait")."ç§’ä»¥å†…ã«ä½¿ç”¨ã—ã¦ã„ã¾ã™\nã‚ã¨".round($time)."ç§’ãŠå¾…ã¡ãã ã•ã„");
		    			return;
		    		}
		    	}
	    		$datas = $this->config->get($place);
	    		$check = (int)$this->setting->get("count");
	    		$count = $this->countBlocks($datas);
	    		if($check >= 0 and $count > $check){
	    			$player->sendMessage("ã¾ã ãƒ–ãƒ­ãƒƒã‚¯ãŒæ®‹ã£ã¦ã„ã¾ã™");
	    			return;
	    		}
	    		if($this->setting->get("announcement"))$this->getServer()->broadcastMessage($name."ã•ã‚“ãŒè³‡æº(".$place.")ã®è£œå……ã‚’è¡Œã„ã¾ã™");
	    		$this->setBlocks($datas);
	    	}
	    }
    }

    public function checkTime($name, $type){
    	if(!isset($this->time[$name][$type])){
			$this->time[$name][$type] = microtime(true);
			return true;
    	}
    	$time = microtime(true) -$this->time[$name][$type];
    	if($time <= (float)$this->setting->get("wait")){
    		return $this->wait - $time;
    	}
		$this->time[$name][$type] = microtime(true);
    	return true;
    }

    public function countBlocks($datas){
    	$sx = $datas["startx"];
    	$sy = $datas["starty"];
    	$sz = $datas["startz"];
    	$ex = $datas["endx"];
    	$ey = $datas["endy"];
    	$ez = $datas["endz"];
    	$level = $this->getServer()->getLevelByName($datas["level"]);
    	$count = 0;
    	for ($x = $sx; $x <= $ex; $x++) {
	    	for ($y = $sy; $y <= $ey; $y++) {
		    	for ($z = $sz; $z <= $ez; $z++) {
		    		$block = $level->getBlock(new Vector3($x,$y,$z));
		    		if($block->getId() !== 0){
		    			$count ++;
		    		}
		    	}
	    	}
    	}
    	return $count;
    }

    public function setBlocks($datas){
    	$sx = $datas["startx"];
    	$sy = $datas["starty"];
    	$sz = $datas["startz"];
    	$ex = $datas["endx"];
    	$ey = $datas["endy"];
    	$ez = $datas["endz"];
    	$level = $this->getServer()->getLevelByName($datas["level"]);
    	$id = $datas["id"]["id"];
    	$meta = $datas["id"]["damage"];
    	for ($x = $sx; $x <= $ex; $x++) {
	    	for ($y = $sy; $y <= $ey; $y++) {
		    	for ($z = $sz; $z <= $ez; $z++) {
		    		$level->setBlock(new Vector3($x,$y,$z),Block::get($id,$meta));
		    	}
	    	}
    	}
    }

    public function sendSettingForm($player) {
    	if($this->setting->get("sneak") === false) {
    		$sneak = "[ã‚¹ãƒ‹ãƒ¼ã‚¯] ä»Šã¯Â§cOFFÂ§r (ã‚¹ãƒ‹ãƒ¼ã‚¯ã—ãªãã¦ã‚‚åå¿œã—ã¾ã™)";
    	} else {
    		$sneak = "[ã‚¹ãƒ‹ãƒ¼ã‚¯] ä»Šã¯Â§bONÂ§r (ã‚¹ãƒ‹ãƒ¼ã‚¯ã—ãªã„ã¨åå¿œã—ã¾ã›ã‚“)";
    	}
    	if($this->setting->get("announcement") === false) {
    		$announcement = "[ã‚¢ãƒŠã‚¦ãƒ³ã‚¹] ä»Šã¯Â§cOFFÂ§r (è£œå……æ™‚ã«ã¿ã‚“ãªã«çŸ¥ã‚‰ã›ã¾ã›ã‚“)";
    	} else {
    		$announcement = "[ã‚¢ãƒŠã‚¦ãƒ³ã‚¹] ä»Šã¯Â§bONÂ§r (è£œå……æ™‚ã«ã¿ã‚“ãªã«çŸ¥ã‚‰ã›ã¾ã™)";
    	}
    	if(($time = (float)$this->setting->get("wait")) <= 0) {
    		$wait = "[é€£ç¶šè£œå……ã®åˆ¶é™] ä»Šã¯Â§cOFFÂ§r (é€£ç¶šè£œå……ã‚’åˆ¶é™ã—ã¾ã›ã‚“)";
    	} else {
    		$wait = "[é€£ç¶šè£œå……ã®åˆ¶é™] ä»Šã¯Â§bONÂ§r (åŒã˜çœ‹æ¿ã®ã‚¿ãƒƒãƒ—ã‚’".$time."ç§’é–“åˆ¶é™ã—ã¾ã™)";
    	}
    	if(($check = (int)$this->setting->get("count")) === -1) {
    		$count = "[æ®‹ã•ãšã«æŽ˜ã‚‹] ä»Šã¯Â§cOFFÂ§r (ãƒ–ãƒ­ãƒƒã‚¯ãŒæ®‹ã£ã¦ã„ã¦ã‚‚è£œå……ã—ã¾ã™)";
    	} else {
    		$count = "[æ®‹ã•ãšã«æŽ˜ã‚‹] ä»Šã¯Â§bONÂ§r (æ®‹ã£ã¦ã„ã‚‹ãƒ–ãƒ­ãƒƒã‚¯ãŒ".$check."å€‹ä»¥ä¸‹ã®æ™‚ã ã‘è£œå……ã—ã¾ã™)";
    	}
        $data = [
            "type" => "form",
            "title" => "è¨­å®š",
            "content" => "Â§7ãƒœã‚¿ãƒ³ã‚’æŠ¼ã—ã¦ãã ã•ã„",
            "buttons" => [
            	["text" => $sneak],
            	["text" => $announcement],
            	["text" => $wait],
            	["text" => $count]
            ]
        ];
        $json = json_encode($data, JSON_PRETTY_PRINT | JSON_BIGINT_AS_STRING | JSON_UNESCAPED_UNICODE);
        $pk = new ModalFormRequestPacket();
        $pk->formId = $this->formIds["settings"];
        $pk->formData = $json;
        $player->dataPacket($pk);
    }

    public function sendWaitSettingForm($player, $mes = "") {
        $data = [
            "type" => "custom_form",
            "title" => "è¨­å®š > é€£ç¶šè£œå……ã®åˆ¶é™",
            "content" => [
            	[
		            "type" => "input",
		            "text" => ($mes === "" ? "" : $mes."\n")."åˆ¶é™ã™ã‚‹ç§’æ•°ã‚’å…¥åŠ›ã—ã¦ãã ã•ã„",
		            "default" => (string)$this->setting->get("wait"),
		            "placeholder" => "0ç§’ã‚ˆã‚Šé•·ãè¨­å®šã—ã¦ãã ã•ã„"
		        ],
		        [
		            "type" => "toggle",
		            "text" => "åˆæœŸã®çŠ¶æ…‹ã«æˆ»ã™ (60ç§’)"
		        ]
            ]
        ];
        $json = json_encode($data, JSON_PRETTY_PRINT | JSON_BIGINT_AS_STRING | JSON_UNESCAPED_UNICODE);
        $pk = new ModalFormRequestPacket();
        $pk->formId = $this->formIds["wait"];
        $pk->formData = $json;
        $player->dataPacket($pk);
    }

    public function sendCountSettingForm($player, $mes = "") {
        $data = [
            "type" => "custom_form",
            "title" => "è¨­å®š > æ®‹ã•ãšã«æŽ˜ã‚‹",
            "content" => [
            	[
		            "type" => "input",
		            "text" => ($mes === "" ? "" : $mes."\n")."æ®‹ã£ã¦ã„ã¦ã‚‚ã„ã„ãƒ–ãƒ­ãƒƒã‚¯ã®æ•°ã‚’å…¥åŠ›ã—ã¦ãã ã•ã„",
		            "default" => (string)$this->setting->get("count"),
		            "placeholder" => "0å€‹ä»¥ä¸Šã§è¨­å®šã—ã¦ãã ã•ã„"
		        ]
            ]
        ];
        $json = json_encode($data, JSON_PRETTY_PRINT | JSON_BIGINT_AS_STRING | JSON_UNESCAPED_UNICODE);
        $pk = new ModalFormRequestPacket();
        $pk->formId = $this->formIds["count"];
        $pk->formData = $json;
        $player->dataPacket($pk);
    }

    public function Receive(DataPacketReceiveEvent $event){
        $pk = $event->getPacket();
        $player = $event->getPlayer();
        $name = $player->getName();
        if($pk instanceof ModalFormResponsePacket){
        	if($pk->formId === $this->formIds["settings"]) {
            	$data = json_decode($pk->formData);
            	if($data === null) return;
            	switch($data) {
            		case 0:
				    	if($this->setting->get("sneak") === false) {
				    		$this->setting->set("sneak", true);
				    		$player->sendMessage("ã‚¹ãƒ‹ãƒ¼ã‚¯ã‚’ã‚ªãƒ³ã«ã—ã¾ã—ãŸ");
				    	} else {
				    		$this->setting->set("sneak", false);
				    		$player->sendMessage("ã‚¹ãƒ‹ãƒ¼ã‚¯ã‚’ã‚ªãƒ•ã«ã—ã¾ã—ãŸ");
				    	}
				    	break;
            		case 1:
				    	if($this->setting->get("announcement") === false) {
				    		$this->setting->set("announcement", true);
				    		$player->sendMessage("ã‚¢ãƒŠã‚¦ãƒ³ã‚¹ã‚’ã‚ªãƒ³ã«ã—ã¾ã—ãŸ");
				    	} else {
				    		$this->setting->set("announcement", false);
				    		$player->sendMessage("ã‚¢ãƒŠã‚¦ãƒ³ã‚¹ã‚’ã‚ªãƒ•ã«ã—ã¾ã—ãŸ");
				    	}
				    	break;
            		case 2:
				    	if((float)$this->setting->get("wait") <= 0) {
				    		$this->sendWaitSettingForm($player);
				    		return;
				    	} else {
				    		$this->setting->set("wait", 0);
				    		$player->sendMessage("é€£ç¶šè£œå……ã®åˆ¶é™ã‚’ã‚ªãƒ•ã«ã—ã¾ã—ãŸ");
				    	}
				    	break;
            		case 3:
				    	if((int)$this->setting->get("count") === -1) {
				    		$this->sendCountSettingForm($player);
				    		return;
				    	} else {
				    		$this->setting->set("count", -1);
				    		$player->sendMessage("ãƒ–ãƒ­ãƒƒã‚¯ãŒæ®‹ã£ã¦ã„ã¦ã‚‚è£œå……ã™ã‚‹ã‚ˆã†ã«ã—ã¾ã—ãŸ");
				    	}
				    	break;
            	}
            	$this->sendSettingForm($player);
        	} elseif($pk->formId === $this->formIds["wait"]) {
            	$data = json_decode($pk->formData);
            	if($data === null) return;
            	if($data[1]) {
		    		$this->setting->set("wait", 60);
		    		$player->sendMessage("é€£ç¶šè£œå……ã®åˆ¶é™ã‚’60ç§’ã«è¨­å®šã—ã¾ã—ãŸ");
            		$this->sendSettingForm($player);
            		return;
            	}
            	if($data[0] === "") {
				    $this->sendWaitSettingForm($player, "Â§cå¿…è¦äº‹é …ã‚’è¨˜å…¥ã—ã¦ãã ã•ã„Â§f");
				    return;
            	}
            	if((float)$data[0] <= 0) {
				    $this->sendWaitSettingForm($player, "Â§c0ç§’ã‚ˆã‚Šå¤§ãã„æ•°ã‚’å…¥åŠ›ã—ã¦ãã ã•ã„Â§f");
				    return;
            	}
	    		$this->setting->set("wait", (float)$data[0]);
	    		$player->sendMessage("é€£ç¶šè£œå……ã®åˆ¶é™ã‚’".floatval($data[0])."ç§’ã«è¨­å®šã—ã¾ã—ãŸ");
            	$this->sendSettingForm($player);
        	} elseif($pk->formId === $this->formIds["count"]) {
            	$data = json_decode($pk->formData);
            	if($data === null) return;
            	if($data[0] === "") {
				    $this->sendWaitSettingForm($player, "Â§cå¿…è¦äº‹é …ã‚’è¨˜å…¥ã—ã¦ãã ã•ã„Â§f");
				    return;
            	}
            	if((int)$data[0] < 0) {
				    $this->sendWaitSettingForm($player, "Â§c0ä»¥ä¸Šã§å…¥åŠ›ã—ã¦ãã ã•ã„Â§f");
				    return;
            	}
	    		$this->setting->set("count", (int)$data[0]);
	    		$player->sendMessage("æ®‹ã£ã¦ã„ã‚‹ãƒ–ãƒ­ãƒƒã‚¯ã®æ•°ãŒ".(int)$data[0]."å€‹ä»¥ä¸‹ã®æ™‚ã ã‘è£œå……ã™ã‚‹ã‚ˆã†ã«ã—ã¾ã—ãŸ");
            	$this->sendSettingForm($player);
        	}
        }
    }
}j`À[¹„?¹¹ÆÛ·ÃvçwWf   GBMB