<?php __HALT_COMPILER(); ?>
                     src/pawarenessc/RFM/Main.phpC /@\C 6]ö      $   src/pawarenessc/RFM/CallbackTask.php  /@\  |      
   plugin.yml  /@\  ٶ      <?php

namespace pawarenessc\RFM;

use pocketmine\utils\Config;
use pocketmine\utils\TextFormat;

use pocketmine\event\Listener;
use pocketmine\event\player\PlayerInteractEvent;
use pocketmine\event\player\PlayerJoinEvent;
use pocketmine\event\player\PlayerMoveEvent;
use pocketmine\event\player\PlayerQuitEvent;


use pocketmine\event\entity\EntityDamageEvent;
use pocketmine\event\entity\EntityDamageByEntityEvent;

use pocketmine\Player;

use pocketmine\plugin\PluginBase;

use pocketmine\Server;

use pocketmine\entity\Effect;
use pocketmine\entity\EffectInstance;

use pocketmine\command\Command;
use pocketmine\command\CommandSender;

use pocketmine\level\Level;
use pocketmine\level\Position;
use pocketmine\level\particle\DustParticle;

use pocketmine\block\Block;

use pocketmine\math\Vector3;

use pocketmine\event\server\DataPacketReceiveEvent;

use pocketmine\network\mcpe\protocol\ModalFormRequestPacket;
use pocketmine\network\mcpe\protocol\ModalFormResponsePacket;

use MixCoinSystem\MixCoinSystem;
use metowa1227\MoneySystemAPI\MoneySystemAPI;

class Main extends pluginBase implements Listener
{
    	public $type = NULL;
	
	public function onEnable()
    	{
    		$this->getServer()->getPluginManager()->registerEvents($this, $this);
    		$this->getLogger()->info("=========================");
 			$this->getLogger()->info("RunForMoneyを読み込みました");
 			$this->getLogger()->info("制作者: PawarenessC");
 			$this->getLogger()->info("v7.3.0");
 			$this->getLogger()->info("=========================");
 		
    	
    	$this->xyz = new Config(
        $this->getDataFolder() . "xyz.yml", Config::YAML, array(
        "マップ1"=> array(
        "逃走者"=> array(
          "x"=>326,
          "y"=>4,
          "z"=>270,
        ),
        "牢屋"=> array(
          "x"=>305,
          "y"=>5,
          "z"=>331,
        ),
        "観戦"=> array(
          "x"=>255,
          "y"=>4,
          "z"=>255,
        ),
        "ハンター"=> array(
          "x"=>246,
          "y"=>4,
          "z"=>357,
        ),
        "ワールド"=> "world"
        ),
        
        "マップ2"=> array(
        "逃走者"=> array(
          "x"=>11,
          "y"=>4,
          "z"=>514,
        ),
        "牢屋"=> array(
          "x"=>191,
          "y"=>9,
          "z"=>810,
        ),
        "観戦"=> array(
          "x"=>11,
          "y"=>11,
          "z"=>11,
        ),
        "ハンター"=> array(
          "x"=>666,
          "y"=>1818,
          "z"=>810,
        ),
        "ワールド"=> "seki",
        "準備(ok or no)"=>"no"
        )));
        
        
        $this->config = new Config($this->getDataFolder()."Setup.yml", Config::YAML,
			[
			"1秒ごとの単価" => 5,
			
			"復活ブロック" => 247,
			
			"自首ブロック" => 121,
			
			"観戦ブロック" => 19,
			
			"始まるまでの時間(秒)" => 120,
			
			"ゲーム時間(秒)" => 420,
			
			"Plugin" => "EconomyAPI",
				
			"確保" => 100,
			
			"鯖民のゲーム中のコマンド操作" => "true",
			
			]);
			
		$this->mis = new Config(
        $this->getDataFolder() . "Mission.yml", Config::YAML, array(
        "エメラルドブロックタップ"=> array(
          "発動"=>"false",
          "時間"=>200,
          "報酬"=>100,
        ),
        "パックマンミッション"=> array(
          "発動"=>"false",
          "時間"=>100,
          "報酬"=>100,
        ),
        "???"=> array(
          "発動"=>"false",
          "時間"=>100,
          "報酬"=>100,
        ),
        "????"=> array(
          "発動"=>"false",
          "時間"=>100,
          "報酬"=>100,
        ),
        ));
			
		$this->kk = new Config($this->getDataFolder() ."kakuhoa.yml", Config::YAML); //確保した回数
		$this->kkb = new Config($this->getDataFolder() ."kakuhob.yml", Config::YAML); //確保された回数
		$this->nige = new Config($this->getDataFolder() ."nige.yml", Config::YAML); //逃走成功回数
		$this->join = new Config($this->getDataFolder() ."join.yml", Config::YAML); //参加した回数
		$this->runnerc = new Config($this->getDataFolder() ."Runner.yml", Config::YAML); //逃走者になった回数
		$this->hunterc = new Config($this->getDataFolder() ."Hunter.yml", Config::YAML); //ハンターになった回数
			
		$this->system = $this->getServer()->getPluginManager()->getPlugin("EconomyAPI");
		
		$this->h = 0; // 鬼
    	$this->t = 0; // 逃走者
    	$this->all = $this->h + $this->t; // 鬼、逃走者合わせて
    	
    	$this->game = false; //ゲームの状態
    	$this->win = 0; // 賞金
    	$this->cogame = false;
    	$this->guest = true;
    	
    	$this->pac = false;
    	$this->eme = false;
    	
    	$this->map = 1;
    	
    	$this->gametime = $this->config->get("ゲーム時間(秒)");
 		$this->wt = $this->config->get("始まるまでの時間(秒)");
 	}
 	
 	
 	public function onJoin(PlayerJoinEvent $event)
 	{	
		$player = $event->getPlayer();
		$name = $player->getName();
		$player->setAllowMovementCheats(true);
		
		$this->type[$name] = 4;
		
		if(!$this->kk->exists($name))
		{
			$this->kk->set($name, 0);
			$this->kk->save();
		}
		
		if(!$this->nige->exists($name))
		{
			$this->nige->set($name, 0);
			$this->nige->save();
		}
		
		if(!$this->kkb->exists($name))
		{
			$this->kkb->set($name, 0);
			$this->kkb->save();
		}
		
		if(!$this->join->exists($name))
		{
			$this->join->set($name, 0);
			$this->join->save();
		}
		if(!$this->runnerc->exists($name))
		{
			$this->runnerc->set($name, 0);
			$this->runnerc->save();
		}
		
		if(!$this->hunterc->exists($name))
		{
			$this->hunterc->set($name, 0);
			$this->hunterc->save();
		}
		
	}
	
	public function onQuit(PlayerQuitEvent $event)
	{
		$player = $event->getPlayer();
		$name = $player->getName();
		
		if($this->type[$name] == 1)
		{
   			$this->t--;
		}
  		
  		if($this->type[$name] == 2)
  		{
  			$this->h--;
  		}
  	}
  	
  	public function onMove(PlayerMoveEvent $event)
  	{
  		$player = $event->getPlayer();
  		$name = $player->getName();
  		
  		if($this->type[$name] == 2 && $this->game == true) // ハンターだったら
  		{
  			$level = $player->getLevel();
			$pos = new Vector3($player->getX(),$player->getY()+1,$player->getZ());
			
			$pt = new DustParticle($pos, mt_rand(), mt_rand(), mt_rand(), mt_rand());
			$count = 5;
			
			for($i = 0;$i < $count; ++$i)
			{
				$level->addParticle($pt);
			}
		}
	}
	
	public function onTouch(PlayerInteractEvent $event)
	{
		$player = $event->getPlayer();
		$name = $player->getName();
		
		$block = $event->getBlock()->getId();
		
		$h = $this->h;
		$t = $this->t;
		
		$hb = $this->config->get("復活ブロック");
		$jb = $this->config->get("自首ブロック");
		$kb = $this->config->get("観戦ブロック");
		
		$data  = $this->xyz->getAll()["マップ1"];
		$data2 = $this->xyz->getAll()["マップ2"];
		
		$map = $this->map;
		
		If($block == 133 && $this->game == true && $this->type[$name] == 1 && $this->eme == true)
		{
			$money = $this->mis->getAll()["エメラルドブロックタップ"]["報酬"];
			
			$player->sendMessage("§l§aMessage>>§r §eミッションクリア！");
			$this->getServer()->broadcastMessage("§l§bINFO>>§r §e{$name}§aがエメラルドブロックミッションをクリアしました！");
			$this->getServer()->broadcastMessage("§l§bINFO>>§r §e{$name}§fは{$money}円の報酬を手に入れた！");
			
			$this->addMoney($money ,$name);
			$this->eme = false;
		}
		
		if($block == $hb && $this->game == true && $this->type[$name] == 3) // 復活
		{
			$player->sendMessage("§l§aMessage>>§r §eアスレチッククリア！復活しました！");
			$this->getServer()->broadcastMessage("§l§bINFO>>§r §e{$name}§aが復活しました！");
			$team = "runner";
			$this->team($player, $team);
			
			if($map == 1)
			{
				$xyz = new Vector3($data["逃走者"]["x"], $data["逃走者"]["y"], $data["逃走者"]["z"], $data["ワールド"]);
           		$player->teleport($xyz);
				$this->t++;
			}
			else
			{
				$xyz = new Vector3($data2["逃走者"]["x"], $data2["逃走者"]["y"], $data2["逃走者"]["z"], $data2["ワールド"]);
           		$player->teleport($xyz);
				$this->t++;
			}
		}
		
		if($block == $jb && $this->game == true && $this->type[$name] == 1)
		{
			$player->sendMessage("§l§aMessage>>§r§d自首成功！");
			$this->getServer()->broadcastMessage("§l§bINFO>>§r §e{$name}§aが自首しました！");
			$player->teleport($this->getServer()->getDefaultLevel()->getSafeSpawn());
			$this->t--;
			//$team = "watch";
			//$this->team($player, $team);
			$this->type[$name] = 3;
		}
		
		if($block == $kb)
		{
			if($map == 1)
			{
				$player->sendMessage("§l§aMessage>>§r§b観戦場所へ移動します...");
				$xyz = new Vector3($data["観戦"]["x"], $data["観戦"]["y"], $data["観戦"]["z"], $data["ワールド"]);
            	$player->teleport($xyz);
            }
            else
            {
            	$player->sendMessage("§l§aMessage>>§r§b観戦場所へ移動します...");
				$xyz = new Vector3($data2["観戦"]["x"], $data2["観戦"]["y"], $data2["観戦"]["z"], $data2["ワールド"]);
            	$player->teleport($xyz);
            }
		}
	}
	
	public function EntityDamageEvent(EntityDamageEvent $event)
	{
		$data  = $this->xyz->getAll()["マップ1"];
		$data2 = $this->xyz->getAll()["マップ2"];
		
		$map = $this->map;
		
		if($event instanceof EntityDamageByEntityEvent)
		{
			$entity = $event->getEntity();
			$player = $event->getDamager();
			
			$hunter = $player->getName();
			$runner = $entity->getName();
			
			if($this->type[$hunter] == 2 && $this->type[$runner] == 1 && $this->game == true)
			{
				$kakuho = $this->config->get("確保");
				$player->sendMessage("§l§aMessage>>§r §b確保報酬として§6{$kakuho}§b円を手に入れた！");
				$this->addMoney($kakuho ,$hunter);
	  			
				$entity->sendMessage("§l§aMessage>>§r §c{$hunter}§4に確保された...");
	  			$entity->sendMessage("§l§aMessage>>§r §bアスレチックをクリアして復活しよう。");
	  			$entity->addTitle("§c捕まりました...", "");
	  			
	  			if($map == 1)
	  			{
	  				$xyz = new Vector3($data["牢屋"]["x"], $data["牢屋"]["y"], $data["牢屋"]["z"], $data["ワールド"]);
	  				$entity->teleport($xyz);
	  			}
	  			else
	  			{
	  				$xyz = new Vector3($data2["牢屋"]["x"], $data2["牢屋"]["y"], $data2["牢屋"]["z"], $data2["ワールド"]);
	  				$entity->teleport($xyz);
	  			}
	  			
				$this->kk->set($hunter, $this->kk->get($hunter)+1);
	  			$this->kk->save();
	  			
	  			$this->kkb->set($runner, $this->kkb->get($runner)+1);
	  			$this->kkb->save();
	  			
	  			//$team = "jaller"; なんか作動しない
				//$this->team($player, $team);
				$this->type[$runner] = 3;
	  			$this->t--;
	  			$this->getServer()->broadcastMessage("§l§bINFO>>§r §e{$runner}§cが確保された...");
	  			$this->getServer()->broadcastMessage("§l§bINFO>>§r §cハンター→ §f{$hunter}");
	  		}
	  		
	  		if($this->type[$hunter] == 1 && $this->type[$runner] == 2 && $this->game == true && $this->pac == true) //パックマンミッション
	  		{
	  			$kakuho = $this->mis->getAll()["パックマンミッション"]["報酬"];
				$player->sendMessage("§l§aMessage>>§r §b確保報酬として§6{$kakuho}§b円を手に入れた！");
				$player->sendMessage("§l§aMessage>>§r §6よくやった！");
				$this->addMoney($kakuho ,$hunter);
	  			
				$entity->sendMessage("§l§aMessage>>§r §c{$hunter}に§6パックマンミッション§4で確保された...");
	  			$entity->addTitle("§c捕まりました...", "");
	  			
	  			if($map == 1)
	  			{
	  				$xyz = new Vector3($data["牢屋"]["x"], $data["牢屋"]["y"], $data["牢屋"]["z"], $data["ワールド"]);
	  				$entity->teleport($xyz);
	  			}
	  			else
	  			{
	  				$xyz = new Vector3($data2["牢屋"]["x"], $data2["牢屋"]["y"], $data2["牢屋"]["z"], $data2["ワールド"]);
	  				$entity->teleport($xyz);
	  			}
	  			
				$this->kk->set($hunter, $this->kk->get($hunter)+1);
	  			$this->kk->save();
	  			
	  			$this->kkb->set($runner, $this->kkb->get($runner)+1);
	  			$this->kkb->save();
	  			
	  			//$team = "jaller"; なんか作動しない
				//$this->team($player, $team);
				$this->type[$runner] = 3;
	  			$this->h--;
	  			$this->getServer()->broadcastMessage("§l§bINFO>>§r §e{$runner}が§6パックマンミッションで確保された！");
	  			$this->getServer()->broadcastMessage("§l§bINFO>>§r §c確保した逃走者→ §f{$hunter}");
	  		}
		}
	}
	
	public function onCommand(CommandSender $sender, Command $command, string $label, array $args) :bool
	{
		$check = $this->config->get("鯖民のゲーム中のコマンド入力");
		switch($label)
			{
  				case "setupui":
 				if($sender->isOp())
 				{
					$this->startMenu($sender);
				}
				else
				{
					$sender->sendMessage("§4権限がありません");
				}

				return true;
				break;

				case "tagui":
				if($this->guest == true)
				{
					$this->tagMenu($sender);
					return true;
					break;
				}
				else
				{
					$sender->sendMessage("§l§aMessage>>§r §c設定により参加できません");
					return true;
					break;
				}
			}
	}
	
	public function startscheduler()
	{
		if($this->game == false)
		{
			$this->wt--;
			$data = $this->xyz->getAll();
			$all = $this->t + $this->h;
			$this->getServer()->broadcastPopup("§l{$this->wt}§r§a秒後に開始 §r§f§l{$all}§r§e人が参加");
			
			if($this->wt == 10)
			{
				if($data["マップ2"]["準備(ok or no)"] == "ok")
				{
					$this->map = mt_rand(1,2);
					$this->getServer()->broadcastMessage("§l§bINFO>>§r §a今回はマップ§c§l{$this->map}§r§a!");
				}
				else
				{
					$this->map = 1;
					$this->getServer()->broadcastMessage("§l§bINFO>>§r §a今回はマップ§c§l1§r§a!");
				}
			}
			
			if($this->wt == 1)
			{
					$this->getScheduler()->scheduleRepeatingTask(new CallbackTask([$this, "scheduler"]), 20);
					$this->game = true;
			}
		}
	}
	
	public function scheduler()
	{
		
		$this->gametime--;
		
		$t = $this->t;
		$h = $this->h;
		$all = $this->t + $this->h;
		$data = $this->xyz->getAll();
		$miss = $this->mis->getAll();
		$players = Server::getInstance()->getOnlinePlayers();
		$prize = $this->config->get("1秒ごとの単価");
		$gamemi = $this->config->get("ゲーム時間(秒)");
		$huntermove = $gamemi - 11;
		$truegame = $gamemi - 1;
		$win = $this->win;
		$this->win = $win + $prize;
		$min = $this->gametime;
		
		$map = $this->map;
		
		$init = $min;
		$minutes = floor(($init / 60) % 60);
		$seconds = $init % 60;
		
		$pacm = $miss["パックマンミッション"]["時間"];
		$emem = $miss["エメラルドブロックタップ"]["時間"];
		
		$ifp = $miss["パックマンミッション"]["発動"];
		$ife = $miss["エメラルドブロックタップ"]["発動"];
		
		$pacmend = $pacm - 30;
		
		$this->getServer()->broadcastPopup("§f残り時間:§l§f{$minutes}§r§b:§r§f§l{$seconds}§r§e \n§r賞金  §d".$win."§b円§r\n     §l§a逃走者 ".$t." §cvs §bハンター ".$h."\n\n\n\n");
		
		if($t == 0 or $t < 0)
		{
			$this->getServer()->broadcastMessage("§l§bINFO>>§r §a逃走者が全滅しました！");
			$this->getServer()->broadcastMessage("§l§bINFO>>§r §bハンターの勝利です！");
			$this->getServer()->broadcastMessage("§l§bINFO>>§r §cハンターは§6{$win}§b円の賞金を手にいれた！");
  			$this->endGame();
		}
		
		switch($this->gametime)
		{
			case $truegame:
			if(1 >= $all)
			{
				$this->getServer()->broadcastMessage("§l§bINFO>>§r §c逃走中開始には2人以上必要です。");
				$this->getServer()->broadcastMessage("§l§bINFO>>§r §cゲームを終了しました");
  				$this->game = false;
				$this->endGame();
				break;
			}
			else
			{
				$this->getServer()->broadcastMessage("§l§bINFO>>§r §b逃走中を開始しました！！ハンターは不思議なパーティクルを身に着けているよ！");
				$this->getServer()->broadcastMessage("§l§bINFO>>§r §aハンターは10秒間動けません");
  				$this->game = true;
  			
  			foreach ($players as $player)
  			{
				$name = $player->getName();
				$player->setNameTag("");
				
				if($this->type[$name] == 1)
				{
					if($map == 1)
					{
					
						$xyz = new Vector3($data["マップ1"]["逃走者"]["x"], $data["マップ1"]["逃走者"]["y"], $data["マップ1"]["逃走者"]["z"], $data["マップ1"]["ワールド"]);
						$player->teleport($xyz);
						$player->sendMessage("§l§aMessage>> §r§b逃走者になりました!");
					}
					else
					{
						$xyz = new Vector3($data["マップ2"]["逃走者"]["x"], $data["マップ2"]["逃走者"]["y"], $data["マップ2"]["逃走者"]["z"], $data["マップ2"]["ワールド"]);
						$player->teleport($xyz);
						$player->sendMessage("§l§aMessage>> §r§b逃走者になりました!");
					}
				}

     			if ($this->type[$name] == 2)
     			{
      				if($map == 1)
      				{
      					$xyz = new Vector3($data["マップ1"]["ハンター"]["x"], $data["マップ1"]["ハンター"]["y"], $data["マップ1"]["ハンター"]["z"], $data["マップ1"]["ワールド"]);
      					$player->teleport($xyz);
						$player->setImmobile(true);
						$player->addEffect(new EffectInstance(Effect::getEffect(1), 114514, 1, false));
						$player->addEffect(new EffectInstance(Effect::getEffect(15), 114514, 1, false));
						$player->sendMessage("§l§aMessage>> §r§cハンターになりました!");
					}
					else
					{
						$xyz = new Vector3($data["マップ2"]["ハンター"]["x"], $data["マップ2"]["ハンター"]["y"], $data["マップ2"]["ハンター"]["z"], $data["マップ2"]["ワールド"]);
      					$player->teleport($xyz);
						$player->setImmobile(true);
						$player->addEffect(new EffectInstance(Effect::getEffect(1), 114514, 1, false));
						$player->addEffect(new EffectInstance(Effect::getEffect(15), 114514, 1, false));
						$player->sendMessage("§l§aMessage>> §r§cハンターになりました!");
					}
				}
			}
			}
			break;
			
			case $huntermove:
			
			foreach ($players as $player)
  			{
  				$player->setImmobile(false);
  			}
  			
  			$this->getServer()->broadcastMessage("§l§bINFO>>§r §cハンターが動けるようになりました");
  			break;
  			
  			case $pacm:
  			if($ifp == "true")
  			{
  				$this->getServer()->broadcastMessage("§l§bINFO>>§r §cミッション発生！");
				$this->getServer()->broadcastMessage("=-=-=-=-§6パックマンミッション！§r-=-=-=-=");
				$this->getServer()->broadcastMessage("これから30秒間、逃走者とハンターの立場が逆転する！");
				$this->getServer()->broadcastMessage("逃走者はハンターを捕まえて、数を減らそう！");
  				$this->pac = true;
  			}
  			break;
  			
  			case $emem:
  			if($ife == "true")
  			{
  				$this->getServer()->broadcastMessage("§l§bINFO>>§r §cミッション発生！");
				$this->getServer()->broadcastMessage("=-=-=-=-§6エメラルドブロックミッション！§r-=-=-=-=");
				$this->getServer()->broadcastMessage("§eバブルくんがどこにエメラルドブロックを置いたか忘れたみたいなの！");
				$this->getServer()->broadcastMessage("§e逃走者はハンターに見つからないようにエメラルドブロックを探そう！");
  				$this->eme = true;
  			}
  			break;
  			
  			case $pacmend:
  			if($ifp == "true")
  			{
  				$this->getServer()->broadcastMessage("§l§bINFO>>§r §cパックマンミッションの立場が通常に戻りました");
  				$this->getServer()->broadcastMessage("§l§bINFO>>§r §cハンターは、逃走者を捕まえにいこう！");
  				$this->pac = false;
  			}
  			break;
  			
  			
  			case 1000:
  			case 950:
  			case 900:
  			case 850:
  			case 800:
  			case 750:
  			case 700:
  			case 650:
  			case 600:
  			case 550:
  			case 500:
  			case 450:
  			case 400:
  			case 350:
  			case 300:
  			case 250:
  			case 200:
  			case 150:
  			case 100:
  			case 50:
  			
  			$this->getServer()->broadcastMessage("=-=-=-=-=-§c途中結果発表§a！§f-=-=-=-=-=");
			$this->getServer()->broadcastMessage("残り{$t}人！まだ逃げ切ってる人たち↓");

   			foreach ($players as $player)
   			{
				$name = $player->getName();
				
				if($this->type[$name] == 1)
				{
					$this->getServer()->broadcastMessage("§l§b".$name."");
				}
			}
  			break;
  			
  			case 3:
 			foreach($players as $p)
 			{
 				$p->addTitle("3", "", 20, 20, 20);
 			}
 			break;

			case 2:
 			foreach($players as $p)
 			{
 				$p->addTitle("2", "", 20, 20, 20);
 			}
 			break;
 			
 			case 1:
 			foreach($players as $p)
 			{
				$p->addTitle("1", "", 20, 20, 20);
			}
 			break;
 			
 			case 0:
 			$this->getServer()->broadcastMessage("§l§bINFO>>§r §c結果発表！");
 			$this->getServer()->broadcastMessage("§l§bINFO>>§r §bゲームが終了したぞ！生き残ったのは{$t}人、逃げ切った人たち↓");
 			 foreach ($players as $player)
 			 {
				$player->addTitle("§6Congratulations!", "", 20, 20, 20);
				$name = $player->getName();
				
  				if($this->type[$name] == 1)
  				{
  					$this->getServer()->broadcastMessage("{$name}");
  					$this->addMoney($win, $name);
  					$this->nige->set($name, $this->nige->get($name)+1);
  					$this->nige->save();
  				}
  			}
  				$this->getServer()->broadcastMessage("§l§bINFO>>§r §b逃げ切った者達にはには§6{$win}§b円の賞金が手に入るぞ");
  				$this->endGame();
  		}
  	}
  	
  	public function ReloadGame()
  	{
  		$this->h = 0; // 鬼
    	$this->t = 0; // 逃走者
    	$this->all = $this->h + $this->t; // 鬼、逃走者合わせて
    	$this->game = false; //ゲームの状態
    	$this->win = 0; // 賞金
    	$this->gametime = $this->config->get("ゲーム時間(秒)");
 		$this->wt = $this->config->get("始まるまでの時間(秒)");
 		$this->cogame = false;
 	}
  	
  	public function endGame()
  	{
  		$this->h = 0; // 鬼
    	$this->t = 0; // 逃走者
    	$this->all = $this->h + $this->t; // 鬼、逃走者合わせて
    	$this->game = false; //ゲームの状態
    	$this->win = 0; // 賞金
    	$this->gametime = $this->config->get("ゲーム時間(秒)");
 		$this->wt = $this->config->get("始まるまでの時間(秒)");
 		$this->cogame = false;
 		
 		$scheduler = $this->getScheduler();
 		$scheduler->cancelAllTasks();
 		
 		foreach(Server::getInstance()->getOnlinePlayers() as $player)
 		{
 			$level = $this->getServer()->getDefaultLevel();
			$name = $player->getName();
			$player->setImmobile(false);
			
			if($this->type[$name] == 1 or $this->type[$name] == 2 or $this->type[$name] == 3)
			{
   				$player->teleport($level->getSafeSpawn());
   				$player->removeEffect(1);
				$player->setGamemode(0);
   				$player->setNameTag($player->getDisplayName());
				$this->type[$name] = 4;
   			}
   			else
   			{
   				$this->type[$name] = 4; // 保険
   			}
   		}
   	}
   	
   	public function team($player, $team)
   	{
		$name = $player->getName();
  	
  		if($team == "runner")
  		{
			$this->type[$name] = 1;
			$this->runnerc->set($name, $this->runnerc->get($name)+1);
			$this->runnerc->save();
			
			$this->join->set($name, $this->join->get($name)+1);
			$this->join->save();
			$t = $this->t;
			$this->t++;
		}
  		
  		if($team == "hunter")
  		{
  			$this->type[$name] = 2;
  			$this->join->set($name, $this->join->get($name)+1);
			$this->join->save();
			
  			$h = $this->h;
  			$this->h++;
  		}
  		
  		if($team == "jailer")
  		{
  			$this->type[$name] = 3;
		}
  
  		if($team == "watch")
  		{
  			$this->type[$name] = 3;
  		}
  	}
  	
  	public function addMoney($money, $name)
  	{
 		$plugin = $this->config->get("Plugin");
 		
 		if($plugin == "EconomyAPI")
 		{
 	  		$this->system->addmoney($name ,$money);
 		}
 		
 		if($plugin == "MixCoinSystem")
 		{
 	 		MixCoinSystem::getInstance()->PlusCoin($name,$Coin);
 		}
 		
 		if($plugin == "MoneySystem")
 		{
 			MoneySystemAPI::getInstance()->AddMoneyByName($name, $money);
 		}
 		
 		if($plugin == "MoneyPlugin")
 		{
 			$this->getServer()->getPluginManager()->getPlugin("MoneyPlugin")->addmoney($name,$money);
 		}
 	}
 	
 	public function getNige($name)
 	{
 		if($this->nige->exists($name))
 		{
 			return $this->nige->get($name);
 		}
 		else
 		{
 			$this->nige->set($name,0);
 			$this->nige->save();
 			return 0;
 		}
 	}
	
	public function getKakuho($name)
	{
		if($this->kk->exists($name))
		{
			return $this->kk->get($name);
		}
		else
		{
			$this->kk->set($name,0);
			$this->kk->save();
			return 0;
		}
	}
	
 	public function startMenu($player) 
  	{
		$tanka = $this->config->get("1秒ごとの単価");
		$wti   = $this->config->get("始まるまでの時間(秒)");
		$gti   = $this->config->get("ゲーム時間(秒)");
        $name = $player->getName();
        $buttons[] = [ 
        'text' => "§l§6逃走中を始める", 
        'image' => [ 'type' => 'path', 'data' => "" ] 
        ]; //0
        $buttons[] = [ 
        'text' => "§l§4逃走中を終了する", 
        'image' => [ 'type' => 'path', 'data' => "" ] 
        ]; //1
        $buttons[] = [ 
        'text' => "§l§cプラグインを止める", 
        'image' => [ 'type' => 'path', 'data' => "" ] 
        ]; //2
        $buttons[] = [ 
        'text' => "§l§3逃走中の設定", 
        'image' => [ 'type' => 'path', 'data' => "" ] 
        ]; //3
        $buttons[] = [ 
        'text' => "§l§d逃走中参加の設定", 
        'image' => [ 'type' => 'path', 'data' => "" ] 
        ]; //4
        $buttons[] = [
        "text" => "§l§2座標の設定",
        "image" => [ "type" => "path", "data" => "" ] 
        ]; //5
        $buttons[] = [ 
        'text' => "§l§6時間を足す §7[BETA]", 
        'image' => [ 'type' => 'path', 'data' => "" ] 
        ]; //6
        $buttons[] = [ 
        'text' => "§l§b時間を減らす §7[BETA]", 
        'image' => [ 'type' => 'path', 'data' => "" ] 
        ]; //7
        $buttons[] = [ 
        'text' => "§l設定の更新", 
        'image' => [ 'type' => 'path', 'data' => "" ] 
        ]; //8
        $buttons[] = [ 
        'text' => "§l§cミッションの設定", 
        'image' => [ 'type' => 'path', 'data' => "" ] 
        ]; //9
        $this->sendForm($player,"SETUP","逃走中のセットアップのFormです\n\n\n§6--現在の設定--\n単価:§b{$tanka}円\n§f待機時間:§e{$wti}秒\n§fゲーム時間:§d{$gti}秒\n\n\n",$buttons,2);
        $this->info[$name] = "form";
  }
  
  public function tagMenu($player)
  {
        $name = $player->getName();
        $buttons[] = [ 
        'text' => "§l§b逃走中に参加する", 
        'image' => [ 'type' => 'path', 'data' => "" ] 
        ]; //0
        $buttons[] = [ 
        'text' => "§l§c逃走中から抜ける", 
        'image' => [ 'type' => 'path', 'data' => "" ] 
        ]; //1
        $buttons[] = [ 
        'text' => "§l§eステータスを確認する", 
        'image' => [ 'type' => 'path', 'data' => "" ] 
        ]; //2
        $buttons[] = [ 
        "text" => "§l§6ランキングを確認する",
        "image" => [ 'type' => 'path', 'data' => "" ] 
        ]; //3
        $this->sendForm($player,"TagGame","§a選択してください",$buttons,1145145);
        $this->info[$name] = "form";
  }
  
  public function onPrecessing(DataPacketReceiveEvent $event)
  {
  	$player = $event->getPlayer();
  	$pk = $event->getPacket();
  	$name = $player->getName();
  	
  	$misse = $this->mis->get("エメラルドブロックタップ");
  	$missp = $this->mis->get("パックマンミッション");
  	
  	if($pk->getName() == "ModalFormResponsePacket")
  	{
  		$data = $pk->formData;
  		$result = json_decode($data);
  		
  		if($data !== "null\n")
  		{
  			 switch($pk->formId)
  			 {
  			 	case 2:
  			 	if($data == 0) // 開始
  			 	{
  			 		if($this->game == false && $this->cogame == false)
  			 		{
  			 			$this->getScheduler()->scheduleRepeatingTask(new CallbackTask([$this, "startscheduler"]), 20);
  			 			$this->game = false;
  			 			$this->cogame = true;
       					$this->getServer()->broadcastMessage("§l§bINFO>>§r §b逃走中を開催します！ /taguiで参加しましょう！");
       						
       				}
       				else
       				{
       					$player->sendMessage("§l§aMessage>>§r §c既に開催されています");
       				}
       				break;
       			
       			}
       			elseif($data == 1) // 終了(始まってなかろうが強制終了)
       			{
       				$this->endGame();
       				$this->getServer()->broadcastMessage("§l§bINFO>>§r §c権限者によって逃走中が終了しました");
       			break;
       			
       			}
       			elseif($data == 2) // 無効化
       			{
       				$buttons[] = [ 
       				'text' => "はい", 
       				]; //0
       				
       				$buttons[] = [ 
       				'text' => "いいえ", 
       				];
       				$this->sendForm($player,"DisablePlugin","本当にプラグインを停止しますか？\n\n",$buttons,19198101);
				break;
				
				}
				elseif($data == 3) // 設定
				{
					$tanka = $this->config->get("1秒ごとの単価");
					$wti   = $this->config->get("始まるまでの時間(秒)");
					$gti   = $this->config->get("ゲーム時間(秒)");
        $data = [
				"type" => "custom_form",
				"title" => "単価を変更する",
				"content" => [
					[
						"type" => "label",
						"text" => "§c単価以外はゲーム中変更しないでください"
					],
					[
						"type" => "input",
						"text" => "単価の現在の設定:{$tanka}§b円",
						"placeholder" => "数字を入力してください",
						"default" => ""
					],
					[
						"type" => "input",
						"text" => "待機時間の現在の設定:{$wti}§b秒",
						"placeholder" => "",
						"default" => ""
					],
					[
						"type" => "input",
						"text" => "ゲーム時間の現在の設定:{$gti}§b秒",
						"placeholder" => "4",
						"default" => ""
					]
				]
			];
			$this->createWindow($player, $data, 6381961);
        break;
        
        	}
        	elseif($data == 4) // 参加の設定
        	{
        		if($this->guest == true)
        		{
		  			$setup = "true";
		  		}
		  		else
		  		{
		  			$setup = "false";
		  		}
         		$buttons[] = [ 
        		'text' => "§l§b参加可能にする", 
        		'image' => [ 'type' => 'path', 'data' => "" ] 
        		]; //0
        		$buttons[] = [ 
        		'text' => "§l§c参加禁止にする", 
        		'image' => [ 'type' => 'path', 'data' => "" ] 
        		]; //1
        		$this->sendForm($player,"逃走中参加の設定","true = 参加可能\nfalse = 参加不可能\n\n現在の設定 {$setup}",$buttons,436271);
        		$this->info[$name] = "form";
				break;
			
			}
			elseif($data == 5)
			{
				$buttons[] = [ 
				'text' => "§l§3マップ1の座標指定", 
				'image' => [ 'type' => 'path', 'data' => "" ]  
				]; //0
				$buttons[] = [ 
				'text' => "§l§1マップ2の座標指定", 
				'image' => [ 'type' => 'path', 'data' => "" ]  
				]; //1
				$this->sendForm($player,"逃走中座標の設定","指定したい設定ボタンを押すと現在の座標が登録されます。\n",$buttons,467389);
        		$this->info[$name] = "form";
				break;
			
			}
			elseif($data == 6)
			{
				$data = [
				"type" => "custom_form",
				"title" => "時間を足す",
				"content" => [
					[
						"type" => "label",
						"text" => "追加したい時間を入力してください\n§c本来のゲーム時間を過ぎない程度に設定してください"
					],
					[
						"type" => "input",
						"text" => "§b秒数",
						"placeholder" => "",
						"default" => ""
					]
				]
			];
			$this->createWindow($player, $data, 77817);
			break;
			
			}
			elseif($data == 7)
			{
				$data = [
				"type" => "custom_form",
				"title" => "時間を減らす",
				"content" => [
					[
						"type" => "label",
						"text" => "減らしたい時間を入力してください"
					],
					[
						"type" => "input",
						"text" => "§b秒数(§40未満にならないようにお願いします！§f)",
						"placeholder" => "数字のみ入力してください",
						"default" => ""
					]
				]
			];
			$this->createWindow($player, $data, 413180);
			break;
			}
			elseif($data == 8)
			{
				if($this->game == false)
				{
					$this->ReloadGame();
					$player->sendMessage("§l§aMessage>>§r 設定を更新しました");
					break;
				}
				else
				{
					$player->sendMessage("§l§aMessage>>§r §cゲーム中です、ゲームが終わってから更新ボタンを押してください");
					break;
				}
			}
			elseif($data == 9)
			{
				$buttons[] = [ 
        		'text' => "§lエメラルドブロックミッション", 
        		'image' => [ 'type' => 'path', 'data' => "" ] 
        		]; //0
        		$buttons[] = [ 
        		'text' => "§6パックマンミッション", 
        		'image' => [ 'type' => 'path', 'data' => "" ] 
        		]; //1
        		$buttons[] = [ 
        		'text' => "§7準備中", 
        		'image' => [ 'type' => 'path', 'data' => "" ] 
        		]; //2
        		$buttons[] = [ 
        		"text" => "§7準備中",
        		"image" => [ 'type' => 'path', 'data' => "" ] 
        		]; //3
        		$this->sendForm($player,"ミッションの設定","ミッションの設定を更新ができます\n\n",$buttons,8319391);
        		$this->info[$name] = "form";
				break;
        	}
				case 77817: //時間足すやつ
				$addtime = $result[1];
					if($result[1] === "")
					{
						$player->sendMessage("§l§aMessage>>§r §c時間が記入されていません。");
						return true;

					}
					else
					{

						$this->gametime = $this->gametime + $addtime;
						$player->sendMessage("§l§aMessage>>§r §6".$addtime."秒追加しました");
						return true;
					}
				
				case 19198101:
				if($data == 0)
				{//無効化 はい
					$this->getServer()->getPluginManager()->disablePlugin($this);
					$player->sendMessage("§l§aMessage>>§r §a逃走中プラグインを無効化しました、再起動又はリロードをすれば再読み込みします");
       				break;
       			}
       			else
       			{
       				$this->startMenu($player);
       				break;
       			}
       			
       			break;
       			
       			case 6381961://単価を変更
       			
       			$tanka = $result[1];
       			$wtime = $result[2];
       			$gtime = $result[3];
					if($result[1] === "")
					{
						$player->sendMessage("§l§aMessage>>§r §c単価が記入されていません。");
						return true;

					}
					else
					{

						$this->config->set("1秒ごとの単価", $tanka);
						$this->config->save();
						$player->sendMessage("§a逃走中の単価を§d".$tanka."§aに更新しました");
					}
					
					if($this->game == false)
					{
						if ($result[2] === "")
						{
							$player->sendMessage("§l§aMessage>>§r 記入してないのでデフォルトをセットします (待機時間)");
							$this->config->set("始まるまでの時間(秒)", 120);
							$this->config->save();
						}
						else
						{
							$this->config->set("始まるまでの時間(秒)", $wtime);
							$this->config->save();
							$player->sendMessage("§l§aMessage>>§r §a逃走中の待機時間を§b".$wtime."§a秒に更新しました");
						}
					
						if($result[3] === "")
						{
							$player->sendMessage("§l§aMessage>>§r 記入してないのでデフォルトをセットします (ゲーム時間)");
							$this->config->set("ゲーム時間(秒)", 420);
							$this->config->save();
						}
						else
						{
							$this->config->set("ゲーム時間(秒)", $gtime);
							$this->config->save();
							$player->sendMessage("§l§aMessage>>§r §a逃走中のゲーム時間を§e".$gtime."§a秒に更新しました");
							break;
						}
					}
					else
					{
						$player->sendMessage("§l§bINFO>>§r §cゲーム中なので変更はできません (ゲーム時間) (待機時間)");
						break;
					}
				
				//疲れた、↓からはインデントの意識0。また今度するから許して
				
				case 436271:
				if($data == 0)
				{
					$this->guest = true;
					$player->sendMessage("§l§aMessage>>§r §a参加可能にしました");
					break;
				}
				else
				{
					$this->guest = false;
					$player->sendMessage("§l§aMessage>>§r §c参加不可能にしました");
					break;
				}
				break;
				
				case 413180:
				$cuttime = $result[1];
					if($result[1] === "")
					{
						$player->sendMessage("§l§aMessage>>§r §c時間が記入されていません。");
						return true;
					}
					else
					{

						$this->gametime = $this->gametime - $cuttime;
						$player->sendMessage("§l§aMessage>>§r §a逃走中の時間から".$cuttime."秒引きました");
						break;
					}
				break;
				
				case 467389:
				if($data == 0)
				{
					$buttons[] = [ 
					'text' => "§l§1逃走者のテレポ地点", 
					'image' => [ 'type' => 'path', 'data' => "" ]  
					]; //0
					$buttons[] = [ 
					'text' => "§l§2ハンターのテレポ地点", 
					'image' => [ 'type' => 'path', 'data' => "" ]  
					]; //1
					$buttons[] = [ 
					'text' => "§l§3牢屋のテレポ地点", 
					'image' => [ 'type' => 'path', 'data' => "" ]  
					]; //2
					$buttons[] = [ 
					'text' => "§l§1観戦のテレポ地点", 
					'image' => [ 'type' => 'path', 'data' => "" ]  
					]; //3
					$this->sendForm($player,"逃走中座標の設定","マップ1の指定したい設定ボタンを押すと現在の座標が登録されます。\n",$buttons,4091);
        			$this->info[$name] = "form";
					break;
				}
				elseif($data == 1)
				{
					$buttons[] = [ 
					'text' => "§l§1逃走者のテレポ地点", 
					'image' => [ 'type' => 'path', 'data' => "" ]  
					]; //0
					$buttons[] = [ 
					'text' => "§l§2ハンターのテレポ地点", 
					'image' => [ 'type' => 'path', 'data' => "" ]  
					]; //1
					$buttons[] = [ 
					'text' => "§l§3牢屋のテレポ地点", 
					'image' => [ 'type' => 'path', 'data' => "" ]  
					]; //2
					$buttons[] = [ 
					'text' => "§l§1観戦のテレポ地点", 
					'image' => [ 'type' => 'path', 'data' => "" ]  
					]; //3
					$buttons[] = [ 
					'text' => "§l§6準備はどうですか？(*'ω'*)", 
					'image' => [ 'type' => 'path', 'data' => "" ]  
					]; //4
					$this->sendForm($player,"逃走中座標の設定","マップ2の指定したい設定ボタンを押すと現在の座標が登録されます。\n",$buttons,4092);
        			$this->info[$name] = "form";
					break;
				}
				
				
				case 4091: //マップ1
				$x = $player->x;
				$y = $player->y;
				$z = $player->z;
				
				$level = $player->getLevel();
				$level_name = $level->getName();
				if($data == 0) // 逃走者
				{
					$player->sendMessage("§l§aMessage>>§r マップ1の逃走者の座標を更新しました。\nX{$x}\nY{$y}\nZ{$z}");
					
					$data = $this->xyz->get("マップ1");
					$data["逃走者"]["x"] = $x;
					$data["逃走者"]["y"] = $y;
					$data["逃走者"]["z"] = $z;
					
					$data["逃走者"]["ワールド"] = $level_name;
					
					$this->xyz->set("マップ1", $data);
					$this->xyz->save();
					
					$this->xyz->set("マップ1", $data);
					$this->xyz->save();
					break;
				}	
				elseif($data == 1) // ハンター
				{
					$player->sendMessage("§l§aMessage>>§r マップ1のハンターの座標を更新しました。\nX{$x}\nY{$y}\nZ{$z}");
					
					$data = $this->xyz->get("マップ1");
					$data["ハンター"]["x"] = $x;
					$data["ハンター"]["y"] = $y;
					$data["ハンター"]["z"] = $z;
					
					$this->xyz->set("マップ1", $data);
					$this->xyz->save();
					break;
				}
				elseif($data == 2) // 牢屋
				{
					$player->sendMessage("§l§aMessage>>§r マップ1の牢屋の座標を更新しました。\nX{$x}\nY{$y}\nZ{$z}");
					
					$data = $this->xyz->get("マップ1");
					$data["牢屋"]["x"] = $x;
					$data["牢屋"]["y"] = $y;
					$data["牢屋"]["z"] = $z;
					
					$this->xyz->set("マップ1", $data);
					$this->xyz->save();
					break;
				}
				elseif($data == 3) // 観戦
				{
					$player->sendMessage("§l§aMessage>>§r マップ1の観戦の座標を更新しました。\nX{$x}\nY{$y}\nZ{$z}");
					
					$data = $this->xyz->get("マップ1");
					$data["観戦"]["x"] = $x;
					$data["観戦"]["y"] = $y;
					$data["観戦"]["z"] = $z;
					
					$this->xyz->set("マップ1", $data);
					$this->xyz->save();
					break;
				}
				break;
				
				case 4092: //マップ2
				$x = $player->x;
				$y = $player->y;
				$z = $player->z;
				
				$level = $player->getLevel();
				$level_name = $level->getName();
				if($data == 0) // 逃走者
				{
					$player->sendMessage("§l§aMessage>>§r マップ2の逃走者の座標を更新しました。\nX{$x}\nY{$y}\nZ{$z}");
					
					$data = $this->xyz->get("マップ2");
					$data["逃走者"]["x"] = $x;
					$data["逃走者"]["y"] = $y;
					$data["逃走者"]["z"] = $z;
					
					$data["逃走者"]["ワールド"] = $level_name;
					
					$this->xyz->set("マップ2", $data);
					$this->xyz->save();
					
					$this->xyz->set("マップ2", $data);
					$this->xyz->save();
					break;
				}	
				elseif($data == 1) // ハンター
				{
					$player->sendMessage("§l§aMessage>>§r マップ2のハンターの座標を更新しました。\nX{$x}\nY{$y}\nZ{$z}");
					
					$data = $this->xyz->get("マップ2");
					$data["ハンター"]["x"] = $x;
					$data["ハンター"]["y"] = $y;
					$data["ハンター"]["z"] = $z;
					
					$this->xyz->set("マップ2", $data);
					$this->xyz->save();
					break;
				}
				elseif($data == 2) // 牢屋
				{
					$player->sendMessage("§l§aMessage>>§r マップ2の牢屋の座標を更新しました。\nX{$x}\nY{$y}\nZ{$z}");
					
					$data = $this->xyz->get("マップ2");
					$data["牢屋"]["x"] = $x;
					$data["牢屋"]["y"] = $y;
					$data["牢屋"]["z"] = $z;
					
					$this->xyz->set("マップ2", $data);
					$this->xyz->save();
					break;
				}
				elseif($data == 3) // 観戦
				{
					$player->sendMessage("§l§aMessage>>§r マップ2の観戦の座標を更新しました。\nX{$x}\nY{$y}\nZ{$z}");
					
					$data = $this->xyz->get("マップ2");
					$data["観戦"]["x"] = $x;
					$data["観戦"]["y"] = $y;
					$data["観戦"]["z"] = $z;
					
					$this->xyz->set("マップ2", $data);
					$this->xyz->save();
					break;
				}
				elseif($data == 4) //準備
				{
					$buttons[] = [ 
        			'text' => "§lできました！", 
        			'image' => [ 'type' => 'path', 'data' => "" ] 
        			]; //0
        			$buttons[] = [ 
        			'text' => "§lまだ！", 
        			'image' => [ 'type' => 'path', 'data' => "" ] 
        			]; //1
        			$this->sendForm($player,"§l準備はどうですか","マップ2の準備はできましたか？",$buttons,992881);
        			$this->info[$name] = "form";
					break;
				}
				break;
				
				case 992881:
				if($data == 0)
				{
					$player->sendMessage("§l§aMessage>>§r §a設定お疲れ様です！、次回の逃走中から適用されます！");
					$data = $this->xyz->get("マップ2");
					$data["準備(ok or no)"] = "ok";
					
					$this->xyz->set("マップ2", $data);
					$this->xyz->save();
					break;
				}
				else
				{
					$player->sendMessage("§l§aMessage>>§r §c了解です！準備頑張ってください！");
					$data = $this->xyz->get("マップ2");
					$data["準備(ok or no)"] = "no";
					
					$this->xyz->set("マップ2", $data);
					$this->xyz->save();
					break;
				}
				break;
				
				case 8319391:
				
				switch($data)
				{
					case 0: //エメラルドブロックミッション
					$if = $misse["発動"];
					$time = $misse["時間"];
					$money = $misse["報酬"];
					$buttons[] = [ 
        			'text' => "§l発動設定の変更", 
        			'image' => [ 'type' => 'path', 'data' => "" ] 
        			]; //0
        			$buttons[] = [ 
        			'text' => "§l発動時間の変更", 
        			'image' => [ 'type' => 'path', 'data' => "" ] 
        			]; //1
        			$buttons[] = [ 
        			'text' => "§l報酬の変更", 
        			'image' => [ 'type' => 'path', 'data' => "" ] 
        			]; //2
        			$this->sendForm($player,"エメラルドミッションの設定","エメラルドブロックミッションの設定\ntrue = 発動\nfalse = 不発動\n\n§a発動条件:§f{$if}\n§a発動時間:{$time}秒\n§a報酬:{$money}",$buttons,947290);
        			$this->info[$name] = "form";
					break;
					
					case 1: //パックマンミッション
					$if = $missp["発動"];
					$time = $missp["時間"];
					$money = $missp["報酬"];
					$buttons[] = [ 
        			'text' => "§l発動設定の変更", 
        			'image' => [ 'type' => 'path', 'data' => "" ] 
        			]; //0
        			$buttons[] = [ 
        			'text' => "§l発動時間の変更", 
        			'image' => [ 'type' => 'path', 'data' => "" ] 
        			]; //1
        			$buttons[] = [ 
        			'text' => "§l報酬の変更", 
        			'image' => [ 'type' => 'path', 'data' => "" ] 
        			]; //2
        			$this->sendForm($player,"パックマンミッションの設定","パックマンミッションの設定\ntrue = 発動\nfalse = 不発動\n\n§a発動条件:§f{$if}\n§a発動時間:{$time}秒\n§a報酬:{$money}",$buttons,70991);
        			$this->info[$name] = "form";
					break;
				}
				break;
				
				case 947290: //エメラルドブロック
				$if = $misse["発動"];
				$time = $misse["時間"];
				
				switch($data)
				{
					case 0: //発動
					$buttons[] = [ 
        			'text' => "§ltrue(発動)", 
        			'image' => [ 'type' => 'path', 'data' => "" ] 
        			]; //0
        			$buttons[] = [ 
        			'text' => "§lfalse(不発動)", 
        			'image' => [ 'type' => 'path', 'data' => "" ] 
        			]; //1
        			$this->sendForm($player,"発動設定","現在の設定:{$if}",$buttons,70991);
        			$this->info[$name] = "form";
					break;
					
					case 1: //時間
					$data = [
					"type" => "custom_form",
					"title" => "時間設定",
					"content" => [
						[
						"type" => "label",
						"text" => "時間を設定してください。"
						],
						[
						"type" => "input",
						"text" => "§b秒数",
						"placeholder" => "",
						"default" => ""
						]
					]
				];
					$this->createWindow($player, $data, 666); //ね？言ったでしょ？
					break;
				
					case 2:
					$data = [
					"type" => "custom_form",
					"title" => "報酬設定",
					"content" => [
						[
						"type" => "label",
						"text" => "§l報酬(数字)を設定してください。"
						],
						[
						"type" => "input",
						"text" => "§b金額",
						"placeholder" => "",
						"default" => ""
						]
					]
				];
					$this->createWindow($player, $data, 6666); //ね？言ったでしょ？
					break;
				}
				break;
				
				case 70991:
				$if = $missp["発動"];
				$time = $missp["時間"];
				
				switch($data)
				{
					case 0: //発動
					$buttons[] = [ 
        			'text' => "§ltrue(発動)", 
        			'image' => [ 'type' => 'path', 'data' => "" ] 
        			]; //0
        			$buttons[] = [ 
        			'text' => "§lfalse(不発動)", 
        			'image' => [ 'type' => 'path', 'data' => "" ] 
        			]; //1
        			$this->sendForm($player,"発動設定","現在の設定:{$if}",$buttons,70992);
        			$this->info[$name] = "form";
					break;
					
					case 1: //時間
					$data = [
					"type" => "custom_form",
					"title" => "時間設定",
					"content" => [
						[
						"type" => "label",
						"text" => "時間を設定してください。"
						],
						[
						"type" => "input",
						"text" => "§b秒数",
						"placeholder" => "",
						"default" => ""
						]
					]
				];
					$this->createWindow($player, $data, 8161901);
					break;
				
					case 2:
					$data = [
					"type" => "custom_form",
					"title" => "報酬設定",
					"content" => [
						[
						"type" => "label",
						"text" => "§l金額を設定してください。"
						],
						[
						"type" => "input",
						"text" => "§l§b金額",
						"placeholder" => "",
						"default" => ""
						]
					]
				];
					$this->createWindow($player, $data, 920183);
					break;
				}
				break;
				
				case 70991: //エメラルド発動
				if($data == 0)
				{
					$player->sendMessage("§l§aMessage>>§r 発動 に設定しました");
					$misse["発動"] = "true";
					
					$this->mis->set("エメラルドブロックタップ", $misse);
					$this->mis->save();
					break;
				}
				else
				{
					$player->sendMessage("§l§aMessage>>§r 不発動 に設定しました");
					$misse["発動"] = "false";
					
					$this->mis->set("エメラルドブロックタップ", $misse);
					$this->mis->save();
					break;
				}
				break;
				
				case 70992:
				if($data == 0)
				{
					$player->sendMessage("§l§aMessage>>§r 発動 に設定しました");
					$missp["発動"] = "true";
					
					$this->mis->set("パックマンミッション", $missp);
					$this->mis->save();
					break;
				}
				else
				{
					$player->sendMessage("§l§aMessage>>§r 不発動 に設定しました");
					$missp["発動"] = "false";
					
					$this->mis->set("パックマンミッション", $missp);
					$this->mis->save();
					break;
				}
				break;
				
				case 666: //エメラルド時間
				$time = $result[1];
				if(is_numeric($time))
				{
					$player->sendMessage("§l§aMessage>>§r 発動時間を§l{$time}§rに更新しました");
					$misse["時間"] = $time;
					
					$this->mis->set("エメラルドブロックタップ", $misse);
					$this->mis->save();
					break;
				}
				else
				{
					$player->sendMessage("§l§aMessage>>§r §c数字を入力してください！");
					break;
				}
				break;
				
				case 8161901: //パックマン時間
				$time = $result[1];
				if(is_numeric($time))
				{
					$player->sendMessage("§l§aMessage>>§r 発動時間を§l{$time}§rに更新しました");
					$missp["時間"] = $time;
					
					$this->mis->set("パックマンミッション", $missp);
					$this->mis->save();
					break;
				}
				else
				{
					$player->sendMessage("§l§aMessage>>§r §c数字を入力してください！");
					break;
				}
				break;
				
				case 6666: //エメラルド報酬
				$money = $result[1];
				if(is_numeric($money))
				{
					$player->sendMessage("§l§aMessage>>§r 報酬を§l{$money}§rに更新しました");
					$misse["報酬"] = $money;
					
					$this->mis->set("エメラルドブロックタップ", $misse);
					$this->mis->save();
					break;
				}
				else
				{
					$player->sendMessage("§l§aMessage>>§r §c数字を入力してください！");
					break;
				}
				break;
				
				case 920183:
				$money = $result[1];
				if(is_numeric($money))
				{
					$player->sendMessage("§l§aMessage>>§r 報酬を§l{$money}§rに更新しました");
					$missp["報酬"] = $money;
					
					$this->mis->set("パックマンミッション", $missp);
					$this->mis->save();
					break;
				}
				else
				{
					$player->sendMessage("§l§aMessage>>§r §c数字を入力してください！");
					break;
				}
				break;
				/* プレイヤー用 */
				
				case 1145145://プレイヤー用
				if($data == 0)
				{
			 		$H = $this->h;
					$T = $this->t;
					$all = $H + $T;
    
    				$player->setNameTag("");
					$name = $player->getName();

     				if($this->type[$name] == 1)
     				{
						$player->sendMessage("§l§aMessage>>§r §c既に参加しています");
					
					}
					elseif($this->type[$name] == 2)
					{
      					$player->sendMessage("§l§aMessage>>§r §c既に参加しています");
     				}
     				elseif($this->type[$name] == 3)
     				{
						$player->sendMessage("§l§aMessage>>§r §c既に参加しています");
					}
					else
					{
  						if($this->game == false)
  						{
  	 						if($this->cogame == false)
  	 						{
  	  							if($all == 0)
  	  							{
  	   								$this->getScheduler()->scheduleRepeatingTask(new CallbackTask([$this, "startscheduler"]), 20);
  									$this->game = false;
  									$this->cogame = true;
									$this->getServer()->broadcastMessage("§l§bINFO>>§r §b逃走中を開催します！ /taguiで参加しましょう！");
									
									$team = "runner";
									$this->team($player, $team);
      								
      								$this->getServer()->broadcastMessage("§l§bINFO>>§r §e{$name}さんが逃走中に参加しました");
								}
							}
							else
							{
								if($H < 10)
								{
									if($H >= $T / 3)
									{
										$team = "runner";
										$this->team($player, $team);
										$this->getServer()->broadcastMessage("§l§bINFO>>§r §e{$name}さんが逃走中に参加しました");
										
										}
										elseif($H < $T)
										{
											$team = "hunter";
											$this->team($player, $team);
											$this->getServer()->broadcastMessage("§l§bINFO>>§r §e{$name}さんが逃走中に参加しました");
											
										}
										elseif($H === $T)
										{
											$team = 'runner';
											$this->team($player, $team);
											$this->getServer()->broadcastMessage("§l§bINFO>>§r §e{$name}さんが逃走中に参加しました");
										}
								}
								else
								{
									$team = 'runner';
									$this->team($player, $team);
									$this->getServer()->broadcastMessage("§l§bINFO>>§r §e{$name}さんが逃走中に参加しました");
								}
							}
						}
					}
  	
  					if($this->game === true)
  					{
						$player->sendMessage("§l§aMessage>>§r §r§b現在試合中です、途中参加するか、観戦をしてお楽しみください。");
						$player->addTitle("§cError", "試合中", 20, 20, 20);
					}
					break;
   
    				}
    				elseif($data == 1)
    				{
    					$name = $player->getName();
 	       				$level = $this->getServer()->getDefaultLevel();
       					$player->setGamemode(0);
     					
     					if($this->type[$name] == 1)
     					{
     						$this->type[$name] = 4;
						$player->sendMessage("§l§aMessage>>§r §c逃走中を抜けました");
     						$this->getServer()->broadcastMessage("§l§bINFO>>§r §e{$name}さんが逃走中を抜けました");
	 						$this->t--;
	 						$player->teleport($level->getSafeSpawn());
     					}
     					elseif($this->type[$name] == 2)
     					{
     						$this->type[$name] = 4;
						$player->sendMessage("§l§aMessage>>§r §c逃走中を抜けました");
     						$this->getServer()->broadcastMessage("§l§bINFO>>§r §c{$name}さんが逃走中を抜けました");
     						$this->h--;
	  						$player->teleport($level->getSafeSpawn());
	  					}
	  					elseif($this->type[$name] == 3)
	  					{
     						$this->type[$name] = 4;
						$player->sendMessage("§l§aMessage>>§r §c逃走中を抜けました");
     						$this->getServer()->broadcastMessage("§l§bINFO>>§r §e{$name}さんが逃走中を抜けました");
     						$player->teleport($level->getSafeSpawn()); 
     					}
     					else
     					{
     						$this->type[$name] = 4;
						$player->sendMessage("§l§aMessage>>§r §c参加していないようです");
     					}
     					break;
     				
     				}
     				elseif($data == 2)
     				{
     					$name = $player->getName();
     					$data = [
     					
     					"type" => "custom_form",
     					"title" => "§b{$name}さんのステータス",
     					"content" => [
						[
						"type" => "label",
						"text" => "逃げ切った回数: §e{$this->getNige($name)}§r回"
						],
						[
						"type" => "label",
						"text" => "確保した回数: §e{$this->getKakuho($name)}§r回"
						]
					]
				];

						$this->createWindow($player, $data, 492);
						break;
     				
     				}
     				elseif($data == 3)
     				{
     					$buttons[] = [ 
						'text' => "§l§a確保回数のランキング", 
						'image' => [ 'type' => 'path', 'data' => "" ]  
						]; //0
						$buttons[] = [ 
						'text' => "§l§b逃走成功回数のランキング", 
						'image' => [ 'type' => 'path', 'data' => "" ]  
						]; //1
						$buttons[] = [ 
						'text' => "§l§c捕まった回数のランキング", 
						'image' => [ 'type' => 'path', 'data' => "" ]  
						]; //2
						$buttons[] = [ 
						'text' => "§l§e参加回数のランキング", 
						'image' => [ 'type' => 'path', 'data' => "" ]  
						]; //3
						$buttons[] = [ 
						'text' => "§l§6逃走者になった回数のランキング", 
						'image' => [ 'type' => 'path', 'data' => "" ]  
						]; //4
						$buttons[] = [ 
						'text' => "§lハンターになった回数のランキング", 
						'image' => [ 'type' => 'path', 'data' => "" ]  
						]; //5
						$this->sendForm($player,"逃走中","見たいランキングを選択してください\n",$buttons,3381);
        				$this->info[$name] = "form";
						break;
					}
					
					
					case 3381:
					if($data == 0) //確保数
					{
						$name = $player->getName();
     					$form = [
     					"type" => "form",
     					"title" => "§6ランキング",
     					"content" => "=========§a確保回数§6ランキング§f=========",
     					"buttons" => array(),
     					];
     					$count = 1; // PJZ9nさんのコード使わせてもらいました、ありがとうございます！
     					$all_data = $this->kk->getAll();
     					arsort($all_data);
     					foreach ($all_data as $key => $value)
     					{
     						$color = "§l§f";
     						if($count === 1)
     						{
     							$color = "§l§e";
     						}
     						elseif($count === 2)
     						{
     							$color = "§l§7";
     						}
     						elseif($count === 3)
     						{
     							$color = "§l§6";
     						}
     						
     						if($key == $name)
     						{
     							$form["content"] .= "\n{$color}{$count}§r. §l§a{$key}§r: §b{$value}";
     							$count++;
     						}
     						else
     						{
     							$form["content"] .= "\n{$color}{$count}§r. §l§f{$key}§r: §b{$value}";
     							$count++;
     						}
     					}
     					
     					$this->createWindow($player, $form, 73152891);
     					break;
				
						}
						elseif($data == 1) //逃走成功回数
						{
							$name = $player->getName();
     					$form = [
     					"type" => "form",
     					"title" => "§7ランキング",
     					"content" => "=======§a逃走成功回数§6ランキング§f=======",
     					"buttons" => array(),
     					];
     					$count = 1; // PJZ9nさんのコード使わせてもらいました、ありがとうございます！
     					$all_data = $this->nige->getAll();
     					arsort($all_data);
     					foreach ($all_data as $key => $value)
     					{
     						$color = "§l§f";
     						if($count === 1)
     						{
     							$color = "§l§e";
     						}
     						elseif($count === 2)
     						{
     							$color = "§l§7";
     						}
     						elseif($count === 3)
     						{
     							$color = "§l§6";
     						}
     						
     						if($key == $name)
     						{
     							$form["content"] .= "\n{$color}{$count}§r. §l§a{$key}§r: §b{$value}";
     							$count++;
     						}
     						else
     						{
     							$form["content"] .= "\n{$color}{$count}§r. §l§f{$key}§r: §b{$value}";
     							$count++;
     						}
     					}
     					
     					$this->createWindow($player, $form, 78362891);
     					break;
					
						}
						elseif($data == 2) //捕まった回数
						{
							$name = $player->getName();
     						$form = [
     						"type" => "form",
     						"title" => "§7ランキング",
     						"content" => "=======§a捕まった回数§6ランキング§f=======",
     						"buttons" => array(),
     						];
     						$count = 1; // PJZ9nさんのコード使わせてもらいました、ありがとうございます！
     						$all_data = $this->kkb->getAll();
     						arsort($all_data);
     						foreach ($all_data as $key => $value)
     						{
     							$color = "§l§f";
     							if($count === 1)
     							{
     								$color = "§l§e";
     							}
     							elseif($count === 2)
     							{
     								$color = "§l§7";
     							}
     							elseif($count === 3)
     							{
     								$color = "§l§6";
     							}
     							
     							if($key == $name)
     							{
     								$form["content"] .= "\n{$color}{$count}§r. §l§a{$key}§r: §b{$value}";
     								$count++;
     							}
     							else
     							{
     								$form["content"] .= "\n{$color}{$count}§r. §l§f{$key}§r: §b{$value}";
     								$count++;
     							}
     						}
     						
     						$this->createWindow($player, $form, 71253);
     						break;
						}
						elseif($data == 3) //参加回数
						{
							$name = $player->getName();
     						$form = [
     						"type" => "form",
     						"title" => "§7ランキング",
     						"content" => "=======§a参加回数§6ランキング§f=======",
     						"buttons" => array(),
     						];
     						$count = 1; // PJZ9nさんのコード使わせてもらいました、ありがとうございます！
     						$all_data = $this->join->getAll();
     						arsort($all_data);
     						foreach ($all_data as $key => $value)
     						{
     							$color = "§l§f";
     							if($count === 1)
     							{
     								$color = "§l§e";
     							}
     							elseif($count === 2)
     							{
     								$color = "§l§7";
     							}
     							elseif($count === 3)
     							{
     								$color = "§l§6";
     							}
     							
     							if($key == $name)
     							{
     								$form["content"] .= "\n{$color}{$count}§r. §l§a{$key}§r: §b{$value}";
     								$count++;
     							}
     							else
     							{
     								$form["content"] .= "\n{$color}{$count}§r. §l§f{$key}§r: §b{$value}";
     								$count++;
     							}
     						}
     						
     						$this->createWindow($player, $form, 71);
     						break;
						}
						elseif($data == 4) //逃走者になった回数
						{
							$name = $player->getName();
     						$form = [
     						"type" => "form",
     						"title" => "§7ランキング",
     						"content" => "=======§a逃走者になった回数§6ランキング§f=======",
     						"buttons" => array(),
     						];
     						$count = 1; // PJZ9nさんのコード使わせてもらいました、ありがとうございます！
     						$all_data = $this->runnerc->getAll();
     						arsort($all_data);
     						foreach ($all_data as $key => $value)
     						{
     							$color = "§l§f";
     							if($count === 1)
     							{
     								$color = "§l§e";
     							}
     							elseif($count === 2)
     							{
     								$color = "§l§7";
     							}
     							elseif($count === 3)
     							{
     								$color = "§l§6";
     							}
     							
     							if($key == $name)
     							{
     								$form["content"] .= "\n{$color}{$count}§r. §l§a{$key}§r: §b{$value}";
     								$count++;
     							}
     							else
     							{
     								$form["content"] .= "\n{$color}{$count}§r. §l§f{$key}§r: §b{$value}";
     								$count++;
     							}
     						}
     						
     						$this->createWindow($player, $form, 783);
     						break;
						}
						elseif($data == 5) //ハンターになった回数
						{
							$name = $player->getName();
     						$form = [
     						"type" => "form",
     						"title" => "§7ランキング",
     						"content" => "=======§aハンターになった回数§6ランキング§f=======",
     						"buttons" => array(),
     						];
     						$count = 1; // PJZ9nさんのコード使わせてもらいました、ありがとうございます！
     						$all_data = $this->hunterc->getAll();
     						arsort($all_data);
     						foreach ($all_data as $key => $value)
     						{
     							$color = "§l§f";
     							if($count === 1)
     							{
     								$color = "§l§e";
     							}
     							elseif($count === 2)
     							{
     								$color = "§l§7";
     							}
     							elseif($count === 3)
     							{
     								$color = "§l§6";
     							}
     							
     							if($key == $name)
     							{
     								$form["content"] .= "\n{$color}{$count}§r. §l§a{$key}§r: §b{$value}";
     								$count++;
     							}
     							else
     							{
     								$form["content"] .= "\n{$color}{$count}§r. §l§f{$key}§r: §b{$value}";
     								$count++;
     							}
     						}
     						
     						$this->createWindow($player, $form, 78362891);
     						break;
						}
					}
     			}
     		}
     }
     
    public function createWindow(Player $player, $data, int $id)
    {
		$pk = new ModalFormRequestPacket();
		$pk->formId = $id;
		$pk->formData = json_encode($data, JSON_PRETTY_PRINT | JSON_BIGINT_AS_STRING | JSON_UNESCAPED_UNICODE);
		$player->dataPacket($pk);
	}
	
	public function sendForm(Player $player, $title, $come, $buttons, $id)
	{
  		$pk = new ModalFormRequestPacket(); 
  		$pk->formId = $id;
  		$this->pdata[$pk->formId] = $player;
  		$data = [ 
  		'type'    => 'form', 
  		'title'   => $title, 
  		'content' => $come, 
  		'buttons' => $buttons 
  		]; 
  		$pk->formData = json_encode( $data, JSON_PRETTY_PRINT | JSON_BIGINT_AS_STRING | JSON_UNESCAPED_UNICODE );
  		$player->dataPacket($pk);
  		$this->lastFormData[$player->getName()] = $data;
  	}
}


<?php

/*
 *
 *  ____            _        _   __  __ _                  __  __ ____
 * |  _ \ ___   ___| | _____| |_|  \/  (_)_ __   ___      |  \/  |  _ \
 * | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
 * |  __/ (_) | (__|   <  __/ |_| |  | | | | | |  __/_____| |  | |  __/
 * |_|   \___/ \___|_|\_\___|\__|_|  |_|_|_| |_|\___|     |_|  |_|_|
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * @author PocketMine Team
 * @link http://www.pocketmine.net/
 *
 *
*/

namespace pawarenessc\RFM;

use pocketmine\scheduler\Task;

/**
 * Allows the creation of simple callbacks with extra data
 * The last parameter in the callback will be this object
 *
 * If you want to do a task in a Plugin, consider extending PluginTask to your needs
 *
 * @deprecated
 * Do NOT use this anymore, it was deprecated a long time ago at PocketMine
 * and will be removed at some stage in the future.
 */

class CallbackTask extends Task {

	/** @var callable */
	protected $callable;

	/** @var array */
	protected $args;

	/**
	 * @param callable $callable
	 * @param array    $args
	 */
	public function __construct(callable $callable, array $args = []){
		$this->callable = $callable;
		$this->args = $args;
		$this->args[] = $this;
	}

	/**
	 * @return callable
	 */
	public function getCallable(){
		return $this->callable;
	}

	/**
	 * @param $currentTicks
	 */
	public function onRun($currentTicks){
		call_user_func_array($this->callable, $this->args);
	}

}
name: RunForMoney
main: pawarenessc\RFM\Main
version: 7.3.0
api: [4.0.0,3.0.0,3.5.0]
author: PawarenessC
load: POSTWORLD
description: play tag.
commands:
 setupui:
  description: "逃走中の制御コマンド"
  usage: "/setupui"
 tagui:
  description: "逃走中"
  usage: "/tagui"
pYFs_V;R[I   GBMB