
<?php
echo "PocketMine-MP plugin ReplenishResources v2.2.0
This file has been generated using DevTools v1.13.2 at Fri, 08 Mar 2019 23:50:45 +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";s:5:"2.2.0";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:1552051245;}
   plugin.ymlï   .l‚\ï   ÎðM„¶         src/aieuo/AutoReplenishTask.phpš  .l‚\š  H‡ª’¶          src/aieuo/ReplenishResources.phpIR  .l‚\IR  y™Ò¶      name: ReplenishResources
main: aieuo\ReplenishResources
version: 2.2.0
api: [3.0.0]
load: POSTWORLD
author: aieuo
commands:
 reso:
  description: äººå·¥è³‡æºè£œå……
  usage: /reso <pos1 | pos2 | add | del | auto | setting>
  permission: op<?php

namespace aieuo;

use pocketmine\scheduler\Task;

class AutoReplenishTask extends Task {
    public function __construct(ReplenishResources $owner) {
        $this->owner = $owner;
    }

    public function onRun(int $currentTick) {
        $owner = $this->owner;
        foreach ($owner->getAutoReplenishResources() as $place) {
            if(!$owner->config->exists($place)) continue;

            if($owner->setting->get("announcement")) {
                $owner->getServer()->broadcastMessage("è³‡æº(".$place.")ã®è£œå……ã‚’è¡Œã„ã¾ã™");
            }
            $owner->setBlocks($owner->config->get($place));
        }
    }
}<?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,
            "auto-replenish-time" => 3600,
            "auto-replenish-resources" => []
        ]);
        $this->getScheduler()->scheduleRepeatingTask(new AutoReplenishTask($this), (float)$this->setting->get("auto-replenish-time", 60) * 20);

        $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;
                case 'auto':
                    if(!isset($args[1])) {
                        $sender->sendMessage("/reso auto <add | del>");
                        return true;
                    }
                    switch ($args[1]) {
                        case 'add':
                            $this->tap[$name]["type"] = "auto_add";
                            $sender->sendMessage("è¿½åŠ ã™ã‚‹çœ‹æ¿ã‚’ã‚¿ãƒƒãƒ—ã—ã¦ãã ã•ã„");
                            break;
                        case 'del':
                            $this->tap[$name]["type"] = "auto_del";
                            $sender->sendMessage("å‰Šé™¤ã™ã‚‹çœ‹æ¿ã‚’ã‚¿ãƒƒãƒ—ã—ã¦ãã ã•ã„");
                            break;
                        default:
                            $sender->sendMessage("/reso auto <add | del>");
                            break;
                    }
                default:
                    return false;
            }
            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])) {
            $place = $block->x.",".$block->y.",".$block->z.",".$block->level->getFolderName();
            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($place, [
                        "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;
                    }
                    if($this->config->exists($place)){
                        $this->config->remove($place);
                        $this->config->save();
                        $player->sendMessage("å‰Šé™¤ã—ã¾ã—ãŸ");
                    }else{
                        $player->sendMessage("ãã®å ´æ‰€ã«ã¯ç™»éŒ²ã•ã‚Œã¦ã„ã¾ã›ã‚“");
                    }
                    break;
                case 'auto_add':
                    $resources = $this->getAutoReplenishResources();
                    if(in_array($place, $resources)) {
                        $player->sendMessage("ã™ã§ã«è¿½åŠ ã•ã‚Œã¦ã„ã¾ã™");
                    } else {
                        $resources[] = $place;
                        $this->setting->set("auto-replenish-resources", $resources);
                        $player->sendMessage("è¿½åŠ ã—ã¾ã—ãŸ");
                    }
                    break;
                case 'auto_del':
                    $resources = $this->getAutoReplenishResources();
                    if(in_array($place, $resources)) {
                        $resources = array_diff($resources, [$place]);
                        $resources = array_values($resources);
                        $this->setting->set("auto-replenish-resources", $resources);
                        $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)) return;

            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($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 (float)$this->setting->get("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->setBlockIdAt($x,$y,$z, $id);
                    $level->setBlockDataAt($x,$y,$z, $meta);
                }
            }
        }
    }

    public function getAutoReplenishResources() {
        return $this->setting->get("auto-replenish-resources", []);
    }

    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]
            ]
        ];
        $this->sendForm($player, $data, $this->formIds["settings"]);
    }

    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ç§’)"
                ]
            ]
        ];
        $this->sendForm($player, $data, $this->formIds["wait"]);
    }

    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å€‹ä»¥ä¸Šã§è¨­å®šã—ã¦ãã ã•ã„"
                ]
            ]
        ];
        $this->sendForm($player, $data, $this->formIds["count"]);
    }

    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);
            }
        }
    }

    public function sendForm($player, $form, $id) {
        $json = json_encode($form, JSON_PRETTY_PRINT | JSON_BIGINT_AS_STRING | JSON_UNESCAPED_UNICODE);
        $pk = new ModalFormRequestPacket();
        $pk->formId = $id;
        $pk->formData = $json;
        $player->dataPacket($pk);
    }
}ÿ¾ÒÃ"ìï"ÐG8ŽÜAjj3p   GBMB