
<?php
echo "PocketMine-MP plugin KBroadcaster v1.1.1
This file has been generated using DevTools v1.13.0 at Sat, 06 Jul 2019 18:28:22 +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:12:"KBroadcaster";s:7:"version";s:5:"1.1.1";s:4:"main";s:32:"katona\kBroadcaster\KBroadcaster";s:3:"api";s:5:"3.8.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:1562403502;}
   plugin.ymlô   ®b ]ô   Ã‚¼¶      (   src/katona/kBroadcaster/KBroadcaster.php§(  ®b ]§(  G8¿¶      $   src/katona/kBroadcaster/KBroForm.php^  ®b ]^  a†È~¶      $   src/katona/kBroadcaster/KBroTask.phpó  ®b ]ó  ÞªÅ¶      name: KBroadcaster
main: katona\kBroadcaster\KBroadcaster
version: 1.1.1
api: 3.8.0
author: Katona

commands:
  kbroadcaster:
    permission: op
    description: KBroadcasterç®¡ç†ãƒ•ã‚©ãƒ¼ãƒ ã‚’é–‹ãã¾ã™
    aliases:
    - "kbro"<?php

namespace katona\kBroadcaster;

use pocketmine\{
    Player,
    plugin\PluginBase,
    command\Command,
    command\CommandSender,
    event\Listener,
    event\server\DataPacketReceiveEvent,
    network\mcpe\protocol\ModalFormResponsePacket,
    utils\Config,
    utils\TextFormat as TF
};

class KBroadcaster extends PluginBase implements Listener
{
    const DEFAULT_FORMATS = [
        TF::BOLD . TF::GOLD . "[" . TF::YELLOW . "!" . TF::GOLD . "]" . TF::RESET,
        TF::BOLD . TF::AQUA . "[" . TF::YELLOW . "ãŠçŸ¥ã‚‰ã›" . TF::AQUA . "]" . TF::RESET,
        TF::BOLD . TF::DARK_AQUA . "[" . TF::YELLOW . "(é‡è¦)" . TF::DARK_AQUA . "]" . TF::RESET
    ];

    const TYPES = ["Chat", "Title", "Tip", "Popup"];

    private $config;
    private $form;
    private $oldMessage = [];

    public function onEnable()
    {
        $default = [
            "Formats"  => self::DEFAULT_FORMATS,
            "Messages" => [
                ["Message" => "KBroadcasterã‚’ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¦ã„ãŸã ãã‚ã‚ŠãŒã¨ã†ã”ã–ã„ã¾ã™", "Format" => self::DEFAULT_FORMATS[2], "Type" => "Chat", "Interval" => 60],
                ["Message" => "/kbroadcaster (/kbro) ã§ç·¨é›†ãŒã§ãã¾ã™", "Format" => self::DEFAULT_FORMATS[2], "Type" => "Chat", "Interval" => 60]
            ]
        ];
        $this->getServer()->getPluginManager()->registerEvents($this, $this);
        $this->config = new Config($this->getDataFolder() . "messages.yml", Config::YAML);
        if (!$this->config->exists("Formats") || !$this->config->exists("Messages")) {
            $this->config->setAll($default);
            $this->config->save();
        }
        $this->form   = new KBroForm($this);
        foreach ($this->getMessages() as $message) {
            $this->getScheduler()->scheduleDelayedTask(new KBroTask($this, $this->getType($message), $this->getFormat($message), $message, $delay = $this->getInterval($message) * $second = 20), $delay);
        }
    }

    public function onCommand(CommandSender $sender, Command $command, string $label, array $args): bool
    {
        if (!$sender instanceof Player) {
            $sender->sendMessage("ã‚²ãƒ¼ãƒ å†…ã§å®Ÿè¡Œã—ã¦ãã ã•ã„");
            return false;
        }
        $this->form->sendMainForm($sender);
        return true;
    }

    public function onReceive(DataPacketReceiveEvent $event)
    {
        $packet = $event->getPacket();
        if ($packet instanceof ModalFormResponsePacket) {
            $player = $event->getPlayer();
			$id     = $packet->formId;
			$data   = json_decode($packet->formData, true);
			if (!is_null($data)) {
				if ($id === KBroForm::MAIN) {
                    switch ($action = $data[1]) {
                        case 0:
                            if (count($this->getFormats()) <= 0) {
                                $this->form->sendErrorForm($player, "ä½¿ç”¨å¯èƒ½ãªãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆãŒä¸€ã¤ã‚‚ã‚ã‚Šã¾ã›ã‚“ã€‚\nè¿½åŠ ã—ã¦ãã ã•ã„");
                            } else $this->form->sendAddMessageForm($player);
                            break;
                        case 1:
                            if (count($this->getMessages()) <= 0) {
                                $this->form->sendErrorForm($player, "å‰Šé™¤ã§ãã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ä¸€ã¤ã‚‚ã‚ã‚Šã¾ã›ã‚“");
                            } else $this->form->sendRemoveMessageForm($player);
                            break;
                        case 2:
                            if (count($this->getMessages()) <= 0) {
                                $this->form->sendErrorForm($player, "ç·¨é›†ã§ãã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ä¸€ã¤ã‚‚ã‚ã‚Šã¾ã›ã‚“");
                            } else $this->form->sendEditMessageForm_Select($player);
                            break;
                        case 3:
                            $this->form->sendAddFormatForm($player);
                            break;
                        case 4:
                            if (count($this->getFormats()) <= 0) {
                                $this->form->sendErrorForm($player, "å‰Šé™¤ã§ãã‚‹ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã¯ä¸€ã¤ã‚‚ã‚ã‚Šã¾ã›ã‚“");
                            } else $this->form->sendRemoveFormatForm($player);
                            break;
                    }
                }
                if ($id === KBroForm::ADD_MESSAGE) {
                    $message  = $data[0];
                    $format   = $this->getFormats()[$data[1]];
                    $type     = self::TYPES[$data[2]];
                    $interval = KBroForm::INTERVAL_STEPS[$data[3]];
                    if (is_numeric($interval = str_replace("åˆ†", "", $interval))) {
                        $interval *= 60;
                    } else if (is_numeric($interval = str_replace("æ™‚é–“", "", $interval))) {
                        $interval *= 60 * 60;
                    }
                    $this->addMessage($message, $format, $type, $interval);
                    $player->sendMessage("ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¿½åŠ ã•ã‚Œã¾ã—ãŸ");
                    $player->sendMessage("-> " . $format . " " . $message);
                }
                if ($id === KBroForm::REMOVE_MESSAGE) {
                    $message = $this->getMessages()[$data[1]];
                    $player->sendMessage("ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ");
                    $player->sendMessage("-> " . $this->getFormat($message) . " " . $message);
                    $this->removeMessage($message);
                }
                if ($id === KBroForm::EDIT_MESSAGE_SELECT) {
                    $message = $this->getMessages()[$data[1]];
                    $this->form->sendEditMessageForm($player, $message);
                    $this->oldMessage[$player->getName()] = $message;
                }
                if ($id === KBroForm::EDIT_MESSAGE) {
                    $message = $data[1];
                    $type    = self::TYPES[$data[2]];
                    $format  = $this->getFormats()[$data[3]];
                    $interval = KBroForm::INTERVAL_STEPS[$data[4]];
                    if (is_numeric($interval = str_replace("åˆ†", "", $interval))) {
                        $interval *= 60;
                    } else if (is_numeric($interval = str_replace("æ™‚é–“", "", $interval))) {
                        $interval *= 60 * 60;
                    }
                    $this->removeMessage($this->oldMessage[$player->getName()]);
                    unset($this->oldMessage[$player->getName()]);
                    $this->addMessage($message, $format, $type, $interval);
                    $player->sendMessage("ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒç·¨é›†ã•ã‚Œã¾ã—ãŸ");
                }
                if ($id === KBroForm::ADD_FORMAT) {
                    $this->addFormat($data[1] . TF::RESET);
                    $player->sendMessage("ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆãŒè¿½åŠ ã•ã‚Œã¾ã—ãŸ / " . $data[1]);
                }
                if ($id === KBroForm::REMOVE_FORMAT) {
                    $format = $this->getFormats()[$data[1]];
                    $this->removeFormat($format);
                    $player->sendMessage("ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ / " . $format);
                }
            }
        }
    }

    public function addMessage(string $message, string $format, string $type, int $interval): void
    {
        $messages = $this->config->get("Messages");
        array_push($messages, ["Message" => $message, "Format" => $format, "Type" => $type, "Interval" => $interval]);
        $this->config->set("Messages", $messages);
        $this->config->save();
        $this->getScheduler()->scheduleDelayedTask(new KBroTask($this, $type, $format, $message, $delay = $interval * $second = 20), $delay);
    }

    public function removeMessage(string $rmessage): void
    {
        $messages = [];
        foreach ($this->getMessages() as $message) {
            if ($message !== $rmessage) $messages[] = ["Message" => $message, "Format" => $this->getFormat($message), "Type" => $this->getType($message), "Interval" => $this->getInterval($message)];
        }
        $this->config->set("Messages", $messages);
        $this->config->save();
    }

    public function messageExists(string $emessage): bool
    {
        foreach ($this->getMessages() as $message) {
            if ($message === $emessage) return true;
        }
        return false;
    }

    public function addFormat(string $format): void
    {
        if (in_array($format, $this->getFormats(), true)) return;
        $formats = $this->config->get("Formats");
        array_push($formats, $format);
        $this->config->set("Formats", $formats);
        $this->config->save();
    }

    public function removeFormat(string $rformat): void
    {
        $formats = $this->getFormats();
        foreach ($formats as $format) {
            if ($format === $rformat) {
                $formats = array_diff($formats, [$rformat]);
                $formats = array_values($formats);
            }
        }
        $this->config->set("Formats", $formats);
        $this->config->save();
    }

    public function getMessages(): array
    {
        $messages = [];
        foreach ($this->config->get("Messages") as $value) {
            $messages[] = $value["Message"];
        }
        return $messages;
    }

    public function getFormat(string $message): string
    {
        foreach ($this->config->get("Messages") as $value) {
            if ($value["Message"] === $message) return $value["Format"];
        }
        return "";
    }

    public function getType(string $message): string
    {
        foreach ($this->config->get("Messages") as $value) {
            if ($value["Message"] === $message) return $value["Type"];
        }
        return "";
    }

    public function getInterval(string $message): int
    {
        foreach ($this->config->get("Messages") as $value) {
            if ($value["Message"] === $message) return $value["Interval"];
        }
        return 0;
    }

    public function getFormats(): array
    {
        return $this->config->get("Formats") ?: [];
    }

    public function getTypes(): array
    {
        return self::TYPES;
    }
}<?php

namespace katona\kBroadcaster;

use pocketmine\{
    Player,
    plugin\PluginBase,
    network\mcpe\protocol\ModalFormRequestPacket,
    utils\TextFormat as TF
};

class KBroForm
{
    const ERROR          = 49056439;
    const MAIN           = 38259038;
    const ADD_MESSAGE    = 92376325;
    const REMOVE_MESSAGE = 58239053;
    const ADD_FORMAT     = 89352987;
    const REMOVE_FORMAT  = 59473409;
    const EDIT_MESSAGE   = 93247398;
    const EDIT_MESSAGE_SELECT = 35490832;

    const INTERVAL_STEPS  = ["1åˆ†", "3åˆ†", "5åˆ†", "8åˆ†", "10åˆ†", "13åˆ†", "15åˆ†", "18åˆ†", "20åˆ†", "25åˆ†", "30åˆ†", "40åˆ†", "50åˆ†", "1æ™‚é–“", "2æ™‚é–“"];

    private $main;

    public function __construct(KBroadcaster $main)
    {
        $this->main = $main;
    }

    public function send(Player $player, int $id, array $data): void
    {
        $packet           = new ModalFormRequestPacket();
        $packet->formId   = $id;
        $packet->formData = json_encode($data);
        $player->dataPacket($packet);
    }

    public function sendMainForm(Player $player): void
    {
        $id   = self::MAIN;
        $data = [
            "type"    => "custom_form",
            "title"   => "ãƒ¡ã‚¤ãƒ³ | KBroadcaster",
            "content" => [
                ["type" => "label", "text" => TF::EOL . TF::EOL],
                ["type" => "dropdown", "text" => "æ“ä½œã‚’é¸æŠžã—ã¦ãã ã•ã„", "options" => ["ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’è¿½åŠ ", "ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å‰Šé™¤", "ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ç·¨é›†", "ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã‚’è¿½åŠ ", "ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã‚’å‰Šé™¤"]]
            ]
        ];
        $this->send($player, $id, $data);
    }

    public function sendAddMessageForm(Player $player): void
    {
        $id   = self::ADD_MESSAGE;
        $data = [
            "type"    => "custom_form",
            "title"   => "ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’è¿½åŠ  | KBroadcaster",
            "content" => [
                ["type" => "input", "text" => "ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸å†…å®¹ã‚’å…¥åŠ›ã—ã¦ãã ã•ã„", "placeholder" => "ä¾‹) ~æœˆ~æ—¥ ~:~ ã«ã‚¤ãƒ™ãƒ³ãƒˆãŒã‚ã‚Šã¾ã™!"],
                ["type" => "dropdown", "text" => "ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„", "options" => $this->main->getFormats()],
                ["type" => "dropdown", "text" => "ã‚¿ã‚¤ãƒ—ã‚’é¸æŠžã—ã¦ãã ã•ã„", "options" => ["Chat (ãƒãƒ£ãƒƒãƒˆ)", "Title (ç”»é¢ä¸­å¤®)", "Tip (Popupã‚ˆã‚Šä¸Š)", "Popup (ã‚¢ã‚¤ãƒ†ãƒ åã®å ´æ‰€)"]],
                ["type" => "step_slider", "text" => "ãƒ–ãƒ­ãƒ¼ãƒ‰ã‚­ãƒ£ã‚¹ãƒˆã™ã‚‹é–“éš”ã‚’æ±ºã‚ã¦ãã ã•ã„", "steps" => self::INTERVAL_STEPS]
            ]
        ];
        $this->send($player, $id, $data);
    }

    public function sendRemoveMessageForm(Player $player): void
    {
        $id = self::REMOVE_MESSAGE;
        $dropdown = [];
        foreach ($this->main->getMessages() as $message) {
            $msg = mb_strimwidth($message, 0, 30, "...");
            $dropdown[] =  $this->main->getFormat($message) . " " . $msg;
        }
        $data = [
            "type"    => "custom_form",
            "title"   => "ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å‰Šé™¤ | KBroadcaster",
            "content" => [
                ["type" => "label", "text" => TF::EOL . TF::EOL],
                ["type" => "dropdown", "text" => "å‰Šé™¤ã—ãŸã„ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸é¸æŠžã—ã¦ãã ã•ã„", "options" => $dropdown],
            ]
        ];
        $this->send($player, $id, $data);
    }

    public function sendEditMessageForm_Select(Player $player): void
    {
        $id = self::EDIT_MESSAGE_SELECT;
        $dropdown = [];
        foreach ($this->main->getMessages() as $message) {
            $msg = mb_strimwidth($message, 0, 30, "...");
            $dropdown[] =  $this->main->getFormat($message) . " " . $msg;
        }
        $data = [
            "type"    => "custom_form",
            "title"   => "ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ç·¨é›† | KBroadcaster",
            "content" => [
                ["type" => "label", "text" => TF::EOL . TF::EOL],
                ["type" => "dropdown", "text" => "ç·¨é›†ã—ãŸã„ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸é¸æŠžã—ã¦ãã ã•ã„", "options" => $dropdown],
            ]
        ];
        $this->send($player, $id, $data);
    }

    public function sendEditMessageForm(Player $player, string $message): void
    {
        $id = self::EDIT_MESSAGE;
        $dropdown = [];
        $types    = ["Chat (ãƒãƒ£ãƒƒãƒˆ)", "Title (ç”»é¢ä¸­å¤®)", "Tip (Popupã‚ˆã‚Šä¸Š)", "Popup (ã‚¢ã‚¤ãƒ†ãƒ åã®å ´æ‰€)"];
        $formats  = $this->main->getFormats();
        $interval = $this->main->getInterval($message);
        $data = [
            "type"    => "custom_form",
            "title"   => "ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ç·¨é›† | KBroadcaster",
            "content" => [
                ["type" => "label", "text" => $this->main->getFormat($message) . " " . $message],
                ["type" => "input", "text" => "ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸", "default" => $message],
                ["type" => "dropdown", "text" => "ã‚¿ã‚¤ãƒ—", "options" => $types, "default" => array_search($this->main->getType($message), KBroadcaster::TYPES)],
                ["type" => "dropdown", "text" => "ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆ", "options" => $formats, "default" => array_search($this->main->getFormat($message), $formats)],
                ["type" => "step_slider", "text" => "é–“éš”", "steps" => self::INTERVAL_STEPS]
            ]
        ];
        $this->send($player, $id, $data);
    }
    
    public function sendAddFormatForm(Player $player): void
    {
        $id   = self::ADD_FORMAT;
        $data = [
            "type"    => "custom_form",
            "title"   => "ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã‚’è¿½åŠ  | KBroadcaster",
            "content" => [
                ["type" => "label", "text" => TF::EOL . TF::EOL],
                ["type" => "input", "text" => "ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã‚’å…¥åŠ›ã—ã¦ãã ã•ã„", "placeholder" => "ä¾‹) [é‹å–¶], [é‡è¦]"],
            ]
        ];
        $this->send($player, $id, $data);
    }

    public function sendRemoveFormatForm(Player $player): void
    {
        $id   = self::REMOVE_FORMAT;
        $data = [
            "type"    => "custom_form",
            "title"   => "ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã‚’å‰Šé™¤ | KBroadcaster",
            "content" => [
                ["type" => "label", "text" => TF::EOL . TF::EOL],
                ["type" => "dropdown", "text" => "å‰Šé™¤ã—ãŸã„ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆé¸æŠžã—ã¦ãã ã•ã„", "options" => $this->main->getFormats()],
            ]
        ];
        $this->send($player, $id, $data);
    }

    public function sendErrorForm(Player $player, string $error): void
    {
        $id   = self::ERROR;
        $data = [
            "type"    => "custom_form",
            "title"   => "ã‚¨ãƒ©ãƒ¼ | KBroadcaster",
            "content" => [["type" => "label", "text" => $error . "\n\n\n\n\n\n\n\n\n\n\n"]]
        ];
        $this->send($player, $id, $data);
    }
}<?php

namespace katona\kBroadcaster;

use pocketmine\{
    plugin\PluginBase,
    scheduler\Task
};

class KBroTask extends Task
{
    private $main;
    private $type;
    private $message;
    private $format;
    private $delay;

    public function __construct(KBroadcaster $main, string $type, string $format, string $message, int $delay)
    {
        $this->main    = $main;
        $this->type    = $type;
        $this->message = $message;
        $this->format  = $format;
        $this->delay   = $delay;
    }

    public function onRun(int $tick)
    {
        if ($this->main->messageExists($this->message)) {
            switch ($this->type) {
                case "Chat":
                    $this->main->getServer()->broadcastMessage($this->format . " " . $this->message);
                    break;
                case "Title":
                    $this->main->getServer()->broadcastTitle($this->format . " " . $this->message);
                    break;
                case "Tip":
                    $this->main->getServer()->broadcastTip($this->format . " " . $this->message);
                    break;
                case "Popup":
                    $this->main->getServer()->broadcastPopup($this->format . " " . $this->message);
                    break;
            }
            $this->main->getScheduler()->scheduleDelayedTask(new KBroTask($this->main, $this->type, $this->format, $this->message, $this->delay), $this->delay);
        }
    }
}¤`Ò¦.eã‘¡p@¼`‡Ód_Ÿ   GBMB