
<?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