<?php __HALT_COMPILER(); ?>
i                     src/MGTWorld/Main.phpÑ@  ‹6Ü[Ñ@  æâ?¶      
   plugin.yml¯  ‹6Ü[¯  9¸àj¶      <?php

namespace MGTWorld;

use pocketmine\utils\TextFormat;
use pocketmine\Server;
use pocketmine\event\player\PlayerInteractEvent;
use pocketmine\event\player\PlayerJoinEvent;
use pocketmine\plugin\PluginBase;
use pocketmine\utils\Config;
use pocketmine\level\Level;
use pocketmine\level\generator\generatorManager;
use pocketmine\level\generator\generator;
use pocketmine\event\Listener;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\math\Vector3;

class Main extends PluginBase implements Listener {

    public function onEnable() {
        $this->getServer()->getPluginManager()->registerEvents($this,$this);
        $this->getLogger()->info("§aMGTWorldを読み込んだ by mixpowder");
        if (!file_exists($this->getDataFolder())) {
            @mkdir($this->getDataFolder(), 0744, true);
        }
        $this->set = new Config($this->getDataFolder() . "worldDeleteConfig.yml", Config::YAML);
      $this->world = new Config($this->getDataFolder() . "CommandOP.yml", Config::YAML,array(
        '説明' => 'trueでop限定 falseで全プレイヤー',
        'wp-op' => 'true',
        'gwd-op' => 'true',
        'gwf-op' => 'true',
        'gwn-op' => 'true',
        'load-op' => 'true',
        'unload-op' => 'true',
        'loadworld-op' => 'true',
        'setspawn-op' => 'true',
      ));
      $this->setworld = new Config($this->getDataFolder() . "setworld.yml", Config::YAML,array(
        '説明' => 'falseで使用しない。trueで使用する',
        'Useworld' => 'false',
        '説明2' => '初めての人限定のワールド。名前設定。フラットで生成される',
        'JoinWorld' => 'world2',
        '説明3' => '一度でも入ったことある人をロビー(初期リスポーン地)に強制的に戻させるか。勿論trueかfalse',
        'return' => 'false',
    ));
      $this->StartPlayer = new Config($this->getDataFolder() . "StartPlayer.yml", Config::YAML);
      $world = $this->setworld->get("JoinWorld");
        if($this->setworld->get("Useworld") === "true"){
            $blue = pack("c",0x1B)."[1;46m";
        $this->getLogger()->notice(TextFormat::BLACK.$blue."専用のワールドをロードしました");
        if($this->getServer()->loadLevel("$world") == null){
        $this->getServer()->generateLevel("$world", time(), generatorManager::getGenerator("Flat"));
    }
}
}
    public function onJoin(PlayerJoinEvent $event){
            $player = $event->getPlayer();
            $name = $player->getName();
            $world = $this->setworld->get("JoinWorld");
            if($this->setworld->get("Useworld") === "true"){
            if ($this->StartPlayer->get("$name") == null){
            $this->StartPlayer->set($name);
            $this->StartPlayer->save();
            $player->teleport($this->getServer()->getLevelByName("$world")->getSafeSpawn());
        }else{
            if($this->setworld->get("return") === "true"){
            $player->teleport($this->getServer()->getdefaultLevel()->getSafeSpawn());
            }
        }
        }
            }

    public function onCommand(CommandSender $sender, Command $command, string $label, array $args): bool{
          $Level = strtolower(implode($args));
        switch($command->getName()){

        
        case "Help":
            $sender->sendMessage("/wp <ワールド名>でそのワールドにテレポートできます！");
            $sender->sendMessage("/gwd <ワールド名>で普通のワールドを生成できます！");
            $sender->sendMessage("/gwf <ワールド名>でフラットのワールドを作ることができます！");
            $sender->sendMessage("/load <ワールド名>でそのワールド読み込むことができます！");
            $sender->sendMessage("/unload <ワールド名>でそのワールドの読み込みを解除できます！");
            $sender->sendMessage("/loadworld で読み込まれているワールドを確認できます！");
            $sender->sendMessage("/setspawn でスポーン位置を設定できます！");
            if($sender->isOp()){
            $sender->sendMessage("/deleteworld <ワールド名>でワールドを削除できます");
            }
        break;

        case "wp":
        if($this->world->get("wp-op") === "true"){
          if($sender->getName() === "CONSOLE"){
            $sender->sendMessage("ゲーム内で使用してください");        
        }elseif(!($sender->isOp())){
            $sender->sendMessage("§4opではないと使うことができません");    
        }elseif("$Level" === ""){
            $sender->sendMessage("§d/wp <ワールド名>と打ってください");
        }elseif(!$this->getServer()->loadLevel("$Level")){
            $sender->sendMessage("§dワールド: ".$Level." が存在しません。");
        }else{
            $sender->teleport($this->getServer()->getLevelByName("$Level")->getSafeSpawn());
            $sender->sendMessage("§bワールド: ".$Level." にテレポートしました。");
        }
        }elseif($this->world->get("wp-op") === "false"){
          if($sender->getName() === "CONSOLE"){
            $sender->sendMessage("ゲーム内で使用してください");        
        }elseif("$Level" === ""){
            $sender->sendMessage("§d/wp <ワールド名>と打ってください");
        }elseif(!$this->getServer()->loadLevel("$Level")){
            $sender->sendMessage("§dワールド: ".$Level." が存在しません。");
        }else{
            $sender->teleport($this->getServer()->getLevelByName("$Level")->getSafeSpawn());
            $sender->sendMessage("§bワールド: ".$Level." にテレポートしました。");
        }
        }

        break;

        
        case "gwf":
        if($this->world->get("gwf-op") === "true"){
          if(!($sender->isOp())){
            $sender->sendMessage("§4opではないと使うことができません");
        }elseif("$Level" == ""){
            $sender->sendMessage("§d/gwf <ワールド名>と打ってください");
        }elseif($this->getServer()->isLevelGenerated($Level)){
            $sender->sendMessage("§4ワールド: ".$Level." はすでに存在します。");
         }else{
            $sender->sendMessage("§b(flat)ワールド: ".$Level." 作成中");
            $this->getServer()->generateLevel("$Level", time(), generatorManager::getGenerator("flat"));
            sleep("1");
            $sender->sendMessage("§b完了しました");
        }
        }elseif($this->world->get("gwf-op") === "false"){
          if("$Level" == ""){
            $sender->sendMessage("§d/gwf <ワールド名>と打ってください");
        }elseif($this->getServer()->isLevelGenerated($Level)){
            $sender->sendMessage("§4ワールド: ".$Level." はすでに存在します。");
        }else{
            $sender->sendMessage("§b(flat)ワールド: ".$Level." 作成中");
            $this->getServer()->generateLevel("$Level", time(), generatorManager::getGenerator("flat"));
            sleep("1");
            $sender->sendMessage("§b完了しました");
          }
        }
        break;

        case "gwn":
        if($this->world->get("gwn-op") === "true"){
          if(!($sender->isOp())){
            $sender->sendMessage("§4opではないと使うことができません");
        }elseif("$Level" == ""){
            $sender->sendMessage("§d/gwn <ワールド名>と打ってください");
        }elseif($this->getServer()->isLevelGenerated($Level)){
            $sender->sendMessage("§4ワールド: ".$Level." はすでに存在します。");
        }else{
            $sender->sendMessage("§b(nether)ワールド: ".$Level." 作成中");
            $this->getServer()->generateLevel("$Level", time(), generatorManager::getGenerator("nether"));
            sleep("1");
            $sender->sendMessage("§b完了しました");
        }
        }elseif($this->world->get("gwn-op") === "false"){
          if("$Level" == ""){
            $sender->sendMessage("§d/gwn <ワールド名>と打ってください");
        }elseif($this->getServer()->isLevelGenerated($Level)){
            $sender->sendMessage("§4ワールド: ".$Level." はすでに存在します。");
        }else{
            $sender->sendMessage("§b(nether)ワールド: ".$Level." 作成中");
            $this->getServer()->generateLevel("$Level", time(), generatorManager::getGenerator("nether"));
            sleep("1");
            $sender->sendMessage("§b完了しました");
          }
        }
        break;
        
        case "gwd":
        if($this->world->get("gwd-op") === "true"){
          if(!($sender->isOp())){
            $sender->sendMessage("§4opではないと使うことができません");
        }elseif("$Level" == ""){
            $sender->sendMessage("§d/gwd <ワールド名>と打ってください");
        }elseif($this->getServer()->isLevelGenerated($Level)){
            $sender->sendMessage("§4ワールド: ".$Level." はすでに存在します。");
        }else{
            $sender->sendMessage("§b(default)ワールド: ".$Level." 作成中");
            $this->getServer()->generateLevel("$Level", time(), generatorManager::getGenerator("default"));
            sleep("1");
            $sender->sendMessage("§b完了しました");
        }
        }elseif($this->world->get("gwd-op") === "false"){
          if("$Level" == ""){
            $sender->sendMessage("§d/gwd <ワールド名>と打ってください");
        }elseif($this->getServer()->isLevelGenerated($Level)){
            $sender->sendMessage("§4ワールド: ".$Level." はすでに存在します。");
        }else{
            $sender->sendMessage("§b(default)ワールド: ".$Level." 作成中");
            $this->getServer()->generateLevel("$Level", time(), generatorManager::getGenerator("default"));
            sleep("1");
            $sender->sendMessage("§b完了しました");
          }
        }
        break;

        case "load":
        if($this->world->get("load-op") === "true"){
          if(!($sender->isOp())){
            $sender->sendMessage("§4opではないと使うことができません");   
        }elseif("$Level" == ""){
            $sender->sendMessage("§d/load <ワールド名>と打ってください");
        }elseif($this->getServer()->getLevelByName("$Level")){
            $sender->sendMessage("§aすでにワールド: ".$Level." は読み込まれてます。");
        }elseif(!$this->getServer()->loadLevel("$Level")){
            $sender->sendMessage("§4ワールド: ".$Level." が存在しません。");
        }else{
            $sender->sendMessage("§bワールド: ".$Level." の読み込みに成功しました。");
        }
        }elseif($this->world->get("load-op") === "false"){
          if("$Level" == ""){
            $sender->sendMessage("§d/load <ワールド名>と打ってください");
        }elseif($this->getServer()->getLevelByName("$Level")){
            $sender->sendMessage("§aすでにワールド: ".$Level." は読み込まれてます。");
        }elseif(!$this->getServer()->loadLevel("$Level")){
            $sender->sendMessage("§4ワールド: ".$Level." が存在しません。");
        }else{
            $sender->sendMessage("§bワールド: ".$Level." の読み込みに成功しました。");
          }
        }
        break;
      
        case "unload":
        if($this->world->get("unload-op") === "true"){
          if(!($sender->isOp())){
            $sender->sendMessage("§4opではないと使うことができません。");
        }elseif("$Level" == ""){
            $sender->sendMessage("§d/unload <ワールド名>と打ってください");
        }elseif(!$this->getServer()->getLevelByName("$Level")){
            $sender->sendMessage("§dワールド: ".$Level." は読み込まれていません。");
        }elseif($this->getServer()->getDefaultLevel()->getName() == "$Level"){
            $sender->sendMessage("§4このワールドの読み込みを解除することはできません。");
        }else{
            $sender->sendMessage("§bワールド: ".$Level." の読み込みを解除しました。");
            $this->getServer()->unloadLevel($this->getServer()->getLevelByName("$Level"));
        }
        }elseif($this->world->get("unload-op") === "false"){
          if("$Level" == ""){
            $sender->sendMessage("§d/unload <ワールド名>と打ってください");
        }elseif(!$this->getServer()->getLevelByName("$Level")){
            $sender->sendMessage("§dワールド: ".$Level." は読み込まれていません。");
        }elseif($this->getServer()->getDefaultLevel()->getName() == "$Level"){
            $sender->sendMessage("§4このワールドの読み込みを解除することはできません。");
        }else{
            $sender->sendMessage("§bワールド: ".$Level." の読み込みを解除しました。");
            $this->getServer()->unloadLevel($this->getServer()->getLevelByName("$Level"));
          }
        }
        break;

      
        case "loadworld":
        if($this->world->get("loadworld-op") === "true"){
          if(!($sender->isOp())){
              $sender->sendMessage("§4opではないと使うことができません。");
        }else{ 
            foreach($this->getServer()->getLevels() as $level){
            $sender->sendMessage(TextFormat::AQUA.$level->getName());
        }
        }
        }elseif($this->world->get("loadworld-op") === "false"){
            foreach($this->getServer()->getLevels() as $level){
            $sender->sendMessage(TextFormat::AQUA.$level->getName());
        }
        }
        break;



        case "setspawn":
        if($this->world->get("setspawn-op") === "true"){
          if(!($sender->isOp())){
            $sender->sendMessage("§4opではないと使うことができません");
        }else{
            $level = $sender->getLevel();
            $pos = (new Vector3($sender->getX(),$sender->getY(),$sender->getZ()))->round();
            $level->setSpawnLocation($pos);
            $sender->sendMessage("スポーン位置を"."[X: ".floor($sender->getX())."] [Y: ".floor($sender->getY())."] [Z: ".floor($sender->getZ())."]に設定しました。");
        }
        }elseif($this->world->get("setspawn-op") === "false"){
            $level = $sender->getLevel();
            $pos = (new Vector3($sender->getX(),$sender->getY(),$sender->getZ()))->round();
            $level->setSpawnLocation($pos);
            $sender->sendMessage("スポーン位置を"."[X: ".floor($sender->getX())."] [Y: ".floor($sender->getY())."] [Z: ".floor($sender->getZ())."]に設定しました。");
        }
        break;
        
        case "deleteworld":
        if($Level === ""){
        $sender->sendMessage("§d/deleteworld <ワールド名>と入力してください");
        }elseif(!$this->getServer()->isLevelGenerated($Level)){
        $sender->sendMessage("§4その名前のワールドは存在しません");
        }elseif($this->getServer()->getLevelByName($Level)){
        $sender->sendMessage("§4ワールドが読み込まれています。読み込みを/unload <>ワールド名>で解除して下さい");
        }elseif(!$this->set->exists($Level)){
        $this->set->set($Level,0);
        $this->set->save();
        $sender->sendMessage("§4最終確認です。もう一度入力してください");
        }else{
        $this->set->remove($Level);
        $this->set->save();
        $sender->file = $Level;
        $this->deleteData($sender,"worlds/".$Level."/");
        $sender->sendMessage("§bワールドを削除しました");
        }

        }
        return true;
      }
    

           public function deleteData($player,$dir){
            unlink($dir."level.dat");
        foreach (scandir("worlds/$player->file/region/") as $value){
        if($value !== "." && $value !== ".."){
        unlink("worlds/$player->file/region/".$value);
        }
    }
        rmdir($dir."region");
        rmdir("worlds/".$player->file);
}
}
name: MGTWorld
api: [3.0.0,4.0.0]
main: MGTWorld\Main
version: 5.5.0
description: ワールド管理
author: mixpowder
commands:
 Help:
  usage: /Help
  description: コマンドの説明 
 wp:
  usage: /wp <ワールド名>
  description: ワールド移動
 gwf:
  usage: /gwf <ワールド名>
  description: ワールド作成(flat)
 gwd:
  usage: /gwd <ワールド名>
  description: ワールド作成(default)
 gwn:
  usage: /gwn <ワールド名>
  description: ワールド作成(nether)
 load:
  usage: /load <ワールド名>
  description: ワールド読み込み
 unload:
  usage: /unload <ワールド名>
  description: ワールド読み込み解除
 loadworld:
  usage: /loadworld
  description: 読み込まれているワールド検索
 setspawn:
  usage: /setspawn
  description: そのワールドのスポーン位置の設定
 deleteworld:
  usage: /deleteworld <ワールド名>
  description: ワールドの削除
¨ùwxÉê¤Jœ�Iù©ž$é&V   GBMB