
<?php
echo "PocketMine-MP plugin FlatPreset v1.1
This file has been generated using DevTools v1.13.2 at Sun, 05 May 2019 20:05:32 +0930
----------------
";

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";d:1.1;s:4:"main";s:16:"aieuo\FlatPreset";s:3:"api";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:1557052532;}
   config.yml,   t¼Î\,   5 ¨¶      
   plugin.ymlô   t¼Î\ô   ÐG¶      	   README.mdS  t¼Î\S  7ªR¶         src/aieuo/FlatPreset.php  t¼Î\  X-¶      ---
empty: 2;;1
stone: 2;1x7:0,99x1:0;0
...
name: FlatPreset
main: aieuo\FlatPreset
version: 1.1
api: 3.0.0
load: POSTWORLD
author: aieuo
commands:
 preset:
  description: 好きなブロックでワールド作成
  usage: /preset <pos1 | pos2 | generate>
  permission: op
 
# FlatPreset

フラットのワールドを好きなブロックで作れます
 
コマンド  
/preset pos1  
/preset pos2  
/preset generate <ワールドの名前>
 
-----コマンド使用例-----  
作りたいワールドを縦にくりぬいたようなのを作って↓  
/preset pos1 を実行し一番上か、一番下のブロックを壊します↓  
/preset pos2 を実行し、pos1 と反対側のブロックを壊します↓  
/preset generate <作るワールド名前> を実行するとワールドが作成されます  
 
この時ブロックの並びが作成されるのは/preset generate を実行したときです。  
何もないワールドを作りたいときはpos1 pos2 を同じブロックに設定して、そのブロックを壊してから/preset generate を実行するとできます
<?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\event\block\BlockBreakEvent;
use pocketmine\math\Vector3;
use pocketmine\block\Block;
use pocketmine\level\generator\GeneratorManager;

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, [
    		"empty" => "2;;1",
    		"stone" => "2;1x7:0,99x1:0;0"
    	]);
    	$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->break[$name] = 1;
					$sender->sendMessage("ブロックを壊してください");
					return true;
				case 'pos2':
					if(!isset($this->pos[$name][0])){
						$sender->sendMessage("まずpos1を設定してください");
						return true;
					}
					$this->break[$name] = 2;
					$sender->sendMessage("ブロックを壊してください");
					return true;
				case 'save':
					if(!isset($args[1])){
						$sender->sendMessage("/preset save <name>");
						return true;
					}
					if(!isset($this->pos[$name][0]) or !isset($this->pos[$name][1])){
						$sender->sendMessage("まずposを設定してください");
						return true;
					}
					if($this->config->exists($args[1])){
						$sender->sendMessage("その名前は既に使用されています");
						return true;
					}
					$preset = $this->createPreset(...$this->pos[$name]);
					$this->config->set($args[1],$preset);
					$this->config->save();
					$sender->sendMessage("保存しました");
					return true;
				case 'generate':
					if(!isset($args[1])){
						$sender->sendMessage("/preset generate <ワールドの名前> [<プリセットの名前>]");
						return true;
					}
					if(!isset($args[2])){
						if(!isset($this->pos[$name][0]) or !isset($this->pos[$name][1])){
							$sender->sendMessage("まずposを設定してください");
							return true;
						}
						if($this->getServer()->isLevelGenerated($args[1])){
							$sender->sendMessage("そのワールドは既に存在します");
							return true;
						}
						$preset = $this->createPreset(...$this->pos[$name]);
					} 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("ワールド ".$args[1]." を作成しました");
					$this->getServer()->loadLevel($args[1]);
					$sender->sendMessage("ワールド ".$args[1]." を読み込みました");
					return true;
				default:
					return false;
			}
		}
	}

	public function onBreak(BlockBreakEvent $event){
		$player = $event->getPlayer();
		$name = $player->getName();
		if(!isset($this->break[$name])) return;
		$event->setCancelled();
		$block = $event->getBlock();
		switch ($this->break[$name]) {
			case 1:
				$this->pos[$name][0] = $block;
				$player->sendMessage("一つ目の場所を設定しました(".$block->x.",".$block->y.",".$block->z.",".$block->level->getFolderName().")");
				break;
			case 2:
				$pos1 = $this->pos[$name][0];
				if($block->x !== $pos1->x or $block->z !== $pos1->z or $block->level->getFolderName() !== $pos1->level->getFolderName()){
					$player->sendMessage("高さ以外は最初に設定したのと同じ場所にしてください\n(".$pos1->x.",?y,".$pos1->z.",".$pos1->level->getFolderName().")");
					break;
				}
				$this->pos[$name][1] = $block;
				$player->sendMessage("二つ目の場所を設定しました(".$block->x.",".$block->y.",".$block->z.",".$block->level->getFolderName().")");
				break;
		}
		unset($this->break[$name]);
	}

	public function createPreset($pos1, $pos2) {
		$top = max($pos1->y, $pos2->y);
		$bottom = min($pos1->y, $pos2->y);
		$level = $pos1->level;
		$blocks = [];
		$count = 1;
		$block = $level->getBlock(new Vector3($pos1->x, $bottom, $pos1->z));
		$last = $block->getId().":".$block->getDamage();
		for($y = $bottom + 1; $y <= $top; $y ++) {
			$block = $level->getBlock($block->add(0, 1));
			$id = $block->getId().":".$block->getDamage();
			if($last === $id) {
				$count ++;
			} else {
				$blocks[] = $count."x".$last;
				$count = 1;
				$last = $id;
			}
		}
		$blocks[] = $count."x".$last;
		return "2;".implode(",", $blocks).";1";
	}
}
+öðÅö¤Þ]«môž¦=+£ûú   GBMB