
<?php
echo "PocketMine-MP plugin Countdown v1.0.0
This file has been generated using DevTools v1.13.0 at Mon, 30 Dec 2019 21:00:30 +0900
----------------
";

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:9:"Countdown";s:7:"version";s:5:"1.0.0";s:4:"main";s:30:"Saisana299\countdown\Countdown";s:3:"api";a:1:{i:0;s:5:"3.0.0";}s:6:"depend";s:0:"";s:11:"description";s:21:"カウントダウン";s:7:"authors";s:0:"";s:7:"website";s:0:"";s:12:"creationDate";i:1577707230;}
   plugin.yml  	^  )͘o      &   src/Saisana299/countdown/Countdown.php  	^  d      ---
name: Countdown
main: Saisana299\countdown\Countdown
version: 1.0.0
api: [3.0.0]
load: POSTWORLD
author: Saisana299
description: カウントダウン
commands:
  countdown:
    description: カウントダウン開始！
    permission: true
...
<?php

namespace Saisana299\countdown;

use pocketmine\plugin\PluginBase;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\scheduler\Task;
use pocketmine\math\Vector3;
use pocketmine\Server;
use pocketmine\utils\Config;
use pocketmine\network\mcpe\protocol\PlaySoundPacket;

class Countdown extends PluginBase
{

	private const config_ver = 1;

	private $configs = [
		"config_ver" => self::config_ver,
		"DATE"       => "2020-01-01 00:00:00",
		"onStart"    => "§e§l2020年までカウントダウン開始！",
		"onCount"    => "§e2020年まで...",
		"onEnd"      => "§e§lWelcome §a2§b0§a2§b0 §f!!",
		"Count"      => "残り # 秒",
		"Sound"      => "random.levelup"
	];

	public $isCountdown = false;
	
	public function onEnable()
	{
		date_default_timezone_set("Asia/Tokyo");
		$this->config = new Config($this->getDataFolder() . "config.yml", Config::YAML, $this->configs);
		if($this->config->get("config_ver") !== self::config_ver)
		{
			$this->config->setAll($this->configs);
			$this->config->save();
			$this->getLogger()->warning("Configのバージョンが異なっていたため初期化致しました");
			$this->getLogger()->warning("現在のコンフィグバージョン = ".self::config_ver);
		}
	}
	
	public function onCommand(CommandSender $sender, Command $command, string $label, array $args) :bool
	{
		switch (strtolower($command->getName()))
		{
			case "countdown":
				if(isset($args[0]))
				{
					if($args[0] === "reload"){
						$this->config->reload();
						$sender->sendMessage("[Countdown] §aConfigをリロードしました");
					}
					return true;
				}

				if($this->isCountdown === true){
					$this->getServer()->broadcastMessage("[Countdown] §eカウントダウンがキャンセルされました");
					$this->isCountdown = false;
					return true;
				}

				$message = $this->config->get("onStart");
				$date = $this->config->get("DATE");
				$date2 = date("Y-m-d H:i:s");
				$date3 = $this->date_time_diff($date, $date2);

				if($date3 <= 0){
					$sender->sendMessage("[Countdown] §c過去に向けたカウントダウンはできません！");
					return true;
				}

				$this->getServer()->broadcastPopup($message);
				$this->getServer()->broadcastMessage("[Countdown] ".$message);
				foreach(Server::getInstance()->getOnlinePlayers() as $player)
				{
					$player->addTitle($message, $date." まで", 1*20, 3*20, 1*20);
				}
				$this->getScheduler()->scheduleRepeatingTask(new CountdownTask($this), 20);
				$this->isCountdown = true;
				break;
		}
		return true;
	}

	public function date_time_diff($d1, $d2)
	{
		$timeStamp1 = strtotime($d1);
		$timeStamp2 = strtotime($d2);
		$diffSeconds = $timeStamp1 - $timeStamp2;
		return $diffSeconds;
	}
}
		
class CountdownTask extends Task
{

	private $Countdown;

	public function __construct(Countdown $Countdown)
	{
		$this->Countdown = $Countdown;
	}

	public function onRun(int $tick)
	{
		if($this->Countdown->isCountdown === false){
			$this->getHandler()->cancel();
			return;
		}
		$d1 = $this->Countdown->config->get("DATE");
		$d2 = date("Y-m-d H:i:s");
		$d3 = $this->Countdown->date_time_diff($d1, $d2);

		if($d3 <= 0){
			$message = $this->Countdown->config->get("onEnd");
			$date = $this->Countdown->config->get("DATE");
			$this->Countdown->getServer()->broadcastMessage("[Countdown] ".$message);
			foreach(Server::getInstance()->getOnlinePlayers() as $player)
			{
				$player->addTitle($message, $date." になりました", 1*20, 5*20, 1*20);
			}
			$this->addSound();
			$this->Countdown->isCountdown = false;
			$this->getHandler()->cancel();

		}elseif($d3 <= 3){
			$message = $this->Countdown->config->get("onCount");
			$count = str_replace("#", "§l§c".strval($d3)."§r§f", $this->Countdown->config->get("Count"));
			$this->Countdown->getServer()->broadcastPopup($message."\n§r§f".$count);
			foreach(Server::getInstance()->getOnlinePlayers() as $player)
			{
				$player->addTitle("§l§c".strval($d3), "", 0*20, 1*20, 0*20);
				$pk = new PlaySoundPacket;
				$pk->soundName = "random.click";
				$pk->x = $player->x;
				$pk->y = $player->y;
				$pk->z = $player->z;
				$pk->volume = 0.5;
				$pk->pitch = 1;
				$player->sendDataPacket($pk);
			}

		}elseif($d3 <= 10){
			$message = $this->Countdown->config->get("onCount");
			$count = str_replace("#", "§l§e".strval($d3)."§r§f", $this->Countdown->config->get("Count"));
			$this->Countdown->getServer()->broadcastPopup($message."\n§r§f".$count);
			foreach(Server::getInstance()->getOnlinePlayers() as $player)
			{
				$player->addTitle("§l§e".strval($d3), "", 0*20, 1*20, 0*20);
				$pk = new PlaySoundPacket;
				$pk->soundName = "random.click";
				$pk->x = $player->x;
				$pk->y = $player->y;
				$pk->z = $player->z;
				$pk->volume = 0.5;
				$pk->pitch = 1;
				$player->sendDataPacket($pk);
			}

		}else{
			$message = $this->Countdown->config->get("onCount");
			$count = str_replace("#", "§l§a".strval($d3)."§r§f", $this->Countdown->config->get("Count"));
			$this->Countdown->getServer()->broadcastPopup($message."\n§r§f".$count);
		}
	}

	public function addSound()
	{
		$sound = $this->Countdown->config->get("Sound");
		if(empty($sound)) return;
		foreach(Server::getInstance()->getOnlinePlayers() as $player)
		{
			$pk = new PlaySoundPacket;
			$pk->soundName = $sound;
			$pk->x = $player->x;
			$pk->y = $player->y;
			$pk->z = $player->z;
			$pk->volume = 0.5;
			$pk->pitch = 1;
			$player->sendDataPacket($pk);
		}
	}
}
:0Jv2YWٝ   GBMB