<?php echo "Altay plugin FlatPreset v1\nThis file has been generated using Turanic at Wed, 03 Oct 2018 17:29:55 +0900.\n----------------\n";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:10:"FlatPreset";s:7:"version";s:1:"1";s:4:"main";s:16:"aieuo\FlatPreset";s:3:"api";a:2:{i:0;s:5:"3.0.0";i:1;s:5:"4.0.0";}s:6:"depend";a:0:{}s:11:"description";s:0:"";s:7:"authors";a:1:{i:0;s:5:"aieuo";}s:7:"website";s:0:"";s:12:"creationDate";i:1538555395;}
   plugin.yml×   ~´[×   Èƒ¯¶         src/aieuo/FlatPreset.php  ~´[  l,Æ¶      name: FlatPreset
main: aieuo\FlatPreset
version: 1.0
api: [3.0.0, 4.0.0]
load: POSTWORLD
author: aieuo
commands:
 preset:
  description: å¥½ããªãƒ–ãƒ­ãƒƒã‚¯ã§ãƒ¯ãƒ¼ãƒ«ãƒ‰ä½œæˆ
  usage: /preset
  permission: op
 <?php
namespace aieuo;

use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\Player;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\utils\Config;
use pocketmine\item\Item;
use pocketmine\level\generator\generatorManager;
use pocketmine\event\block\BlockBreakEvent;
use pocketmine\math\Vector3;
use pocketmine\block\Block;

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

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

	public function onCommand(CommandSender $sender, Command $command,string $label, array $args):bool{
		$cmd = $command->getName();
		$name = $sender->getName();
		if($cmd == "preset"){
			if(!isset($args[0]))return false;
			switch ($args[0]) {
				case 'pos1':
					$this->pos1break[$name] = true;
					unset($this->pos2[$name]);
					$sender->sendMessage("ãƒ–ãƒ­ãƒƒã‚¯ã‚’å£Šã—ã¦ãã ã•ã„");
					return true;
				case 'pos2':
					if(!isset($this->pos1[$name])){
						$sender->sendMessage("ã¾ãšpos1ã‚’è¨­å®šã—ã¦ãã ã•ã„");
						return true;
					}
					$this->pos2break[$name] = true;
					$sender->sendMessage("ãƒ–ãƒ­ãƒƒã‚¯ã‚’å£Šã—ã¦ãã ã•ã„");
					return true;
				case 'save':
					if(!isset($args[1])){
						$sender->sendMessage("/preset save <name>");
						return true;
					}
					if($this->config->exists($args[1])){
						$sender->sendMessage("ãã®åå‰ã¯æ—¢ã«ä½œæˆã•ã‚Œã¦ã„ã¾ã™");
						return true;
					}
					if(!isset($this->pos1[$name]) or !isset($this->pos2[$name])){
						$sender->sendMessage("ã¾ãšposã‚’è¨­å®šã—ã¦ãã ã•ã„");
						return true;
					}
					$preset = $this->getPreset($this->pos1[$name]["level"], $this->pos1[$name], $this->pos2[$name]);
					$this->config->set($args[1], $preset);
					$sender->sendMessage("ä¿å­˜ã—ã¾ã—ãŸ");
					return true;
				case 'generate':
					if(!isset($args[1])){
						$sender->sendMessage("/preset generate <ãƒ¯ãƒ¼ãƒ«ãƒ‰ã®åå‰> <ãƒ—ãƒªã‚»ãƒƒãƒˆã®åå‰>");
						return true;
					}
					if($this->getServer()->isLevelGenerated($args[1])){
						$sender->sendMessage("ãã®ãƒ¯ãƒ¼ãƒ«ãƒ‰ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™");
						return true;
					}
					if(!isset($args[2])){
						if(!isset($this->pos1[$name]) or !isset($this->pos2[$name])){
							$sender->sendMessage("ã¾ãšposã‚’è¨­å®šã—ã¦ãã ã•ã„");
							return true;
						}
						$preset = $this->getPreset($this->pos1[$name]["level"], $this->pos1[$name], $this->pos2[$name]);
						$this->getServer()->generateLevel($args[1], null, generatorManager::getGenerator("flat"),["preset"=>$preset]);
						$sender->sendMessage("ãƒ¯ãƒ¼ãƒ«ãƒ‰ã‚’ä½œæˆã—ã¾ã—ãŸ");
					}else{
						if(!$this->config->exists($args[2])){
							$sender->sendMessage("ãã‚“ãªã‚‚ã®ã¯ã‚ã‚Šã¾ã›ã‚“");
							return true;
						}
						$preset = $this->config->get($args[2]);
						$this->getServer()->generateLevel($args[1], null, generatorManager::getGenerator("flat"),["preset"=>$preset]);
						$sender->sendMessage("ãƒ¯ãƒ¼ãƒ«ãƒ‰ã‚’ä½œæˆã—ã¾ã—ãŸ");
					}
					return true;
				default:
					return false;
			}
		}
	}

	public function getPreset($level, $pos1, $pos2){
		$sy = min($pos1["y"], $pos2);
		$ey = max($pos1["y"], $pos2);
		$preset = "2;";
		$block = $level->getBlock(new Vector3($pos1["x"], $sy, $pos1["z"]));
		$prev = $block->getId().":".$block->getDamage();
		$count = 0;
		for($y = $sy; $y <= $ey; $y ++){
			$block = $level->getBlock(new Vector3($pos1["x"], $y, $pos1["z"]));
			$id = $block->getId().":".$block->getDamage();
			if($prev === $id){
				$count ++;
			}else{
				$preset .= $count."x".$prev.",";
				$prev = $id;
				$count = 1;
			}
			if($y == $ey){
				$preset .= $count."x".$prev.";1";
			}
		}
		return $preset;
	}

	public function onBreak(BlockBreakEvent $event){
		$player = $event->getPlayer();
		$name = $player->getName();
		if(isset($this->pos1break[$name])){
			$event->setCancelled();
			$block = $event->getBlock();
			$this->pos1[$name] = [
				"x" => $block->x,
				"y" => $block->y,
				"z" => $block->z,
				"level" => $block->level
			];
			unset($this->pos1break[$name]);
			$player->sendMessage("è¨­å®šã—ã¾ã—ãŸ(".$this->pos1[$name]["x"].",".$this->pos1[$name]["y"].",".$this->pos1[$name]["z"].",".$this->pos1[$name]["level"]->getFolderName().")");
		}elseif(isset($this->pos2break[$name])){
			$event->setCancelled();
			$block = $event->getBlock();
			if($block->x !== $this->pos1[$name]["x"] or $block->z !== $this->pos1[$name]["z"]){
				$player->sendMessage("é«˜ã•ä»¥å¤–ã¯æœ€åˆã«è¨­å®šã—ãŸã®ã¨åŒã˜å ´æ‰€ã«ã—ã¦ãã ã•ã„\n(".$this->pos1[$name]["x"].", y ,".$this->pos1[$name]["z"].",".$this->pos1[$name]["level"]->getFolderName().")");
				return;
			}
			$this->pos2[$name] = $block->y;
			unset($this->pos2break[$name]);
			$player->sendMessage("è¨­å®šã—ã¾ã—ãŸ");
		}
	}
}­r-@õ	¨Ã÷“WéU$éø   GBMB