
<?php
echo "PocketMine-MP plugin areaMessage v1.0.0
This file has been generated using DevTools v1.13.4 at Fri, 01 May 2020 15:58:38 +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:11:"areaMessage";s:7:"version";s:5:"1.0.0";s:4:"main";s:25:"rain1208\areaMessage\Main";s:3:"api";s:5:"3.0.0";s:6:"depend";s:0:"";s:11:"description";s:0:"";s:7:"authors";s:0:"";s:7:"website";s:0:"";s:12:"creationDate";i:1588316318;}
   plugin.ymlÄ   žÈ«^Ä   OI«Ž¶      &   src/rain1208/areaMessage/checkTask.phpš  žÈ«^š  Žò€?¶      ,   src/rain1208/areaMessage/Form/createForm.phpG  žÈ«^G  = ¶      *   src/rain1208/areaMessage/Form/infoForm.phpŒ  žÈ«^Œ  Àz3,¶      *   src/rain1208/areaMessage/Form/ListForm.php  žÈ«^  :­j¶      ,   src/rain1208/areaMessage/Form/removeForm.phpG  žÈ«^G  -´šo¶      !   src/rain1208/areaMessage/Main.php·
  žÈ«^·
  ä¦P¡¶      +   src/rain1208/areaMessage/SQLiteDatabase.php%
  žÈ«^%
  ¾·Ç`¶      name: areaMessage
main: rain1208\areaMessage\Main
version: 1.0.0
api: 3.0.0
author: rain1208

commands:
  areamsg:
    description: "areamsg"
    usage: "/areamsg < create | pos | list >"<?php


namespace rain1208\areaMessage;


use pocketmine\math\AxisAlignedBB;
use pocketmine\scheduler\Task;
use pocketmine\Server;

class checkTask extends Task
{
    public function onRun(int $currentTick)
    {
        foreach (Server::getInstance()->getOnlinePlayers() as $player) {
            $world = $player->getLevel()->getName();
            $position = Main::$db->getData($world);
            if ($position !== null) {
                foreach ($position as $pos) {
                    $x = explode(",",$pos[2]);
                    $y = explode(",",$pos[3]);
                    $z = explode(",",$pos[4]);
                    $aabb = new AxisAlignedBB($x[0],$y[0],$z[0],$x[1],$y[1],$z[1]);
                    if ($aabb->isVectorInside($player)) {
                        $player->addActionBarMessage($pos[5]);
                    }
                }
            }
        }
    }
}<?php


namespace rain1208\areaMessage\Form;


use pocketmine\form\Form;
use pocketmine\form\FormValidationException;
use pocketmine\level\Position;
use pocketmine\Player;
use rain1208\areaMessage\Main;

class createForm implements Form
{

    /**
     * @var array
     */
    private $x;
    /**
     * @var array
     */
    private $y;
    /**
     * @var array
     */
    private $z;

    public function __construct(Position $pos1, Position $pos2)
    {
        $this->x = [$pos1->getFloorX(),$pos2->getFloorX()];
        $this->y = [$pos1->getFloorY(),$pos2->getFloorY()];
        $this->z = [$pos1->getFloorZ(),$pos2->getFloorZ()];
        sort($this->x);
        sort($this->y);
        sort($this->z);
        $this->y[0] -= 1;
    }

    public function handleResponse(Player $player, $data): void
    {
        if ($data == null) {
            return;
        }
        if ($data[2]) {
            $this->y = [0,255];
        }
        $this->x = implode($this->x,",");
        $this->y = implode($this->y,",");
        $this->z = implode($this->z,",");
        Main::$db->createAreaMessage($data[0],$player->getLevel()->getName(),$this->x,$this->y,$this->z,$data[1]);
        $player->sendMessage("AreaMessageã‚’æ–°ã—ãä½œã‚Šã¾ã—ãŸname:".$data[0]);
    }

    public function jsonSerialize()
    {
        return [
            "type" => "custom_form",
            "title" => "AreaMessage",
            "content" => [
                [
                    "type" => "input",
                    "text" => "name(å‰Šé™¤ç·¨é›†ã™ã‚‹ã¨ãã«ä½¿ã„ã¾ã™æ—¢ã«ã‚ã‚‹nameã¯ä½¿ãˆã¾ã›ã‚“)"
                ],
                [
                    "type" => "input",
                    "text" => "ç¯„å›²å†…ã«å‚åŠ ã—ãŸã¨ãã«è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
                ],
                [
                    "type" => "toggle",
                    "text" => "Yåº§æ¨™ã®æŒ‡å®š(ã‚ªãƒ³ã«ã™ã‚‹ã¨Yåº§æ¨™ã®æŒ‡å®šã‚’ãªãã—ã¾ã™",
                    "default" => false
                ]
            ]
        ];
    }
}<?php


namespace rain1208\areaMessage\Form;


use pocketmine\form\Form;
use pocketmine\form\FormValidationException;
use pocketmine\Player;
use rain1208\areaMessage\Main;

class infoForm implements Form
{
    private $name;
    public function __construct(string $name)
    {
        $this->name = $name;
    }

    public function handleResponse(Player $player, $data): void
    {
        if ($data === null) {
            return;
        }
        Main::$db->changeMessage($this->name,$data[5]);
    }

    public function jsonSerialize()
    {
        return [
            "type" => "custom_form",
            "title" => "AreaMessageInfo",
            "content" => $this->getInfo()
        ];
    }

    public function getInfo():array {
        $result = Main::$db->getDataByName($this->name);
        return [
            [
                "type" => "label",
                "text" => $result["name"]."ã®ç·¨é›†ç”»é¢ã§ã™"
            ],
            [
                "type" => "label",
                "text" => "worldå : ".$result["world"]
            ],
            [
                "type" => "label",
                "text" => "Xåº§æ¨™ : ".$result["posX"]
            ],
            [
                "type" => "label",
                "text" => "Yåº§æ¨™ : ".$result["posY"]
            ],
            [
                "type" => "label",
                "text" => "Zåº§æ¨™ : ".$result["posZ"]
            ],
            [
                "type" => "input",
                "text" => "è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸",
                "default" => $result["message"]
            ]
        ];
    }
}<?php


namespace rain1208\areaMessage\Form;


use pocketmine\form\Form;
use pocketmine\form\FormValidationException;
use pocketmine\Player;
use rain1208\areaMessage\Main;

class ListForm implements Form
{
    private $names = [];
    public function handleResponse(Player $player, $data): void
    {
        if ($data === null) {
            return;
        }
        $player->sendForm(new infoForm($this->names[$data]));
        print_r($this->names[$data]);
    }
    public function jsonSerialize()
    {
        return [
            "type" => "form",
            "title" => "AreaMessage_List",
            "content" => "æ“ä½œã‚’è¡Œã†ç‰©ã‚’é¸ã‚“ã§ãã ã•ã„",
            "buttons" => $this->getButton()
        ];
    }
    public function getButton(){
        $name = Main::$db->getName();
        $res = [];
        foreach ($name as $item) {
            array_push($res,["text" => $item["name"]]);
            array_push($this->names,$item["name"]);
        }
        return $res;
    }
}<?php


namespace rain1208\areaMessage\Form;


use pocketmine\form\Form;
use pocketmine\form\FormValidationException;
use pocketmine\Player;
use rain1208\areaMessage\Main;

class removeForm implements Form
{
    private $names = [];
    public function handleResponse(Player $player, $data): void
    {
        if ($data === null) {
            return;
        }
        Main::$db->removeArea($this->names[$data]);
        $player->sendMessage("AreaMessageã‚’å‰Šé™¤ã—ã¾ã—ãŸ name:".$this->names[$data]);
    }
    public function jsonSerialize()
    {
        return [
            "type" => "form",
            "title" => "AreaMessage_List",
            "content" => "å‰Šé™¤ã™ã‚‹ã‚¨ãƒªã‚¢ã‚’é¸æŠžã—ã¦ãã ã•ã„",
            "buttons" => $this->getButton()
        ];
    }
    public function getButton() {
        $name = Main::$db->getName();
        $res = [];
        foreach ($name as $item) {
            array_push($res,["text" => $item["name"]]);
            array_push($this->names,$item["name"]);
        }
        return $res;
    }
}<?php


namespace rain1208\areaMessage;
//è¦‹ãªã„ã§ã‚¨ãƒƒãƒ!!//


use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\event\Listener;
use pocketmine\Player;
use pocketmine\plugin\PluginBase;
use rain1208\areaMessage\Form\createForm;
use rain1208\areaMessage\Form\ListForm;
use rain1208\areaMessage\Form\removeForm;

class Main extends PluginBase implements Listener
{
    /** @var SQLiteDatabase */
    public static $db;

    private $pos1;
    private $pos2;

    public function onEnable()
    {
        $this->getServer()->getPluginManager()->registerEvents($this,$this);
        self::$db = new SQLiteDatabase($this);
        $this->getScheduler()->scheduleRepeatingTask(new checkTask(),20);
    }

    public function onCommand(CommandSender $sender, Command $command, string $label, array $args): bool
    {
        if ($label === "areamsg") {
            if ($sender instanceof Player) {
                if ($sender->isOp()) {
                    if (isset($args[0])) {
                        switch ($args[0]) {
                            case "create":
                                if (!isset($this->pos1) && !isset($this->pos2)) {
                                    $sender->sendMessage("posãŒã‚»ãƒƒãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“");
                                    break;
                                }
                                $sender->sendForm(new createForm($this->pos1,$this->pos2));
                                break;
                            case "pos1":
                                $this->pos1 = $sender->getPosition();
                                $sender->sendMessage("pos1ã‚’è¨­å®šã—ã¾ã—ãŸ");
                                break;
                            case "pos2":
                                $this->pos2 = $sender->getPosition();
                                $sender->sendMessage("pos2ã‚’è¨­å®šã—ã¾ã—ãŸ");
                                break;
                            case "list":
                                $sender->sendForm(new ListForm());
                                break;
                            case "remove":
                                $sender->sendForm(new removeForm());
                        }
                    } else {
                        $sender->sendMessage("/areamsg < create | pos1 | pos2 | list | remove >");
                    }
                } else {
                    $sender->sendMessage("ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯opå°‚ç”¨ã§ã™");
                }
            } else {
                $sender->sendMessage("ã‚µãƒ¼ãƒãƒ¼å†…ã‹ã‚‰ä½¿ã£ã¦ãã ã•ã„");
            }
        }
        return true;
    }
}<?php


namespace rain1208\areaMessage;


use SQLite3;

class SQLiteDatabase
{
    private $db;

    public function __construct(Main $plugin)
    {
        $file = $plugin->getDataFolder()."config.db";
        if (file_exists($file)) {
            $this->db = new SQLite3($file,SQLITE3_OPEN_READWRITE);
        } else {
            $this->db = new SQLite3($file,SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE);
        }

        $this->db->exec("CREATE TABLE IF NOT EXISTS config".
            "(name TEXT NOT NULL PRIMARY KEY,".
            " world TEXT NOT NULL,".
            " posX TEXT NOT NULL,".
            " posY TEXT NOT NULL,".
            " posZ TEXT NOT NULL,".
            " message TEXT NOT NULL)"
        );
    }

    public function createAreaMessage(string $name,string $world,string $posX,string $posY,string $posZ,string $message) {
        $stmt = $this->db->prepare("INSERT INTO config(name, world, posX, posY, posZ, message) VALUES (:name, :world, :posX, :posY, :posZ, :message)");
        $stmt->bindValue(":name",$name,SQLITE3_TEXT);
        $stmt->bindValue(":world",$world,SQLITE3_TEXT);
        $stmt->bindValue(":posX",$posX,SQLITE3_TEXT);
        $stmt->bindValue(":posY",$posY,SQLITE3_TEXT);
        $stmt->bindValue(":posZ",$posZ,SQLITE3_TEXT);
        $stmt->bindValue(":message",$message,SQLITE3_TEXT);
        $stmt->execute();
    }

    public function getData($world):array {
        $stmt = $this->db->query("SELECT * FROM config WHERE world = '$world'");
        $result = [];
        while ($res = $stmt->fetchArray(2)) {
            array_push($result,$res);
        }
        return $result;
    }

    public function getName():array {
        $stmt = $this->db->query("SELECT name FROM config");
        $result = [];
        while ($res = $stmt->fetchArray(1)) {
            array_push($result,$res);
        }
        return $result;
    }

    public function getDataByName(string $name):array {
        $stmt = $this->db->query("SELECT * FROM config");
        $result = $stmt->fetchArray(SQLITE3_ASSOC);
        return $result === false? null : $result;
    }

    public function changeMessage(string $name,string $message) {
        $stmt = $this->db->prepare("UPDATE config SET message = '$message' WHERE name = '$name'");
        $stmt->execute();
    }

    public function removeArea(string $name) {
        $stmt = $this->db->prepare("DELETE FROM config WHERE name = :name");
        $stmt->bindValue(":name",$name,SQLITE3_TEXT);
        $stmt->execute();
    }
}³†&‰²1X°ÄÊñsw¥ýÅeŠ   GBMB