<?php echo "Altay plugin if v0.1\nThis file has been generated using Turanic at Mon, 27 Aug 2018 15:46:32 +0900.\n----------------\n";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(); ?>
e             ÿ   a:9:{s:4:"name";s:2:"if";s:7:"version";s:3:"0.1";s:4:"main";s:10:"aieuo\Main";s:3:"api";a:1:{i:0;s:13:"3.0.0-ALPHA11";}s:6:"depend";a:0:{}s:11:"description";s:0:"";s:7:"authors";a:1:{i:0;s:5:"aieuo";}s:7:"website";s:0:"";s:12:"creationDate";i:1535352392;}
   plugin.ymlÆ   Hžƒ[Æ   c{ñƶ         src/aieuo/Main.phpÑ<  Hžƒ[Ñ<  UüŠº¶      name: if
main: aieuo\Main
version: 0.1
api: [3.0.0-ALPHA11]
load: POSTWORLD
author: aieuo
commands:
 if:
  description: "もしならする"
  usage: "usage /if <add | del | check>"
  permission: op<?php
namespace aieuo;

use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\Player;
use pocketmine\item\Item;
use pocketmine\level\Position;

use pocketmine\event\player\PlayerInteractEvent;

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

use pocketmine\event\server\DataPacketReceiveEvent;
use pocketmine\network\mcpe\protocol\ModalFormResponsePacket;
use pocketmine\network\mcpe\protocol\ModalFormRequestPacket;

class Main extends PluginBase implements Listener{

    const IF_TAKEMONEY = 0;
    const IF_HAVEINGITEM = 1;
    const IF_EXISTITEM = 2;
    const IF_ISSNEAKING = 3;
    const IF_OVERMONEY = 4;

    const COMMAND = 100;
    const SENDMESSAGE = 101;
    const SENDTIP = 102;
    const TELEPORT = 103;
    const BROADCASTMESSAGE = 104;
    const COMMAND_CONSOLE = 105;
    const DO_NOTHING = 106;

	public function onEnable(){
        $this->getServer()->getPluginManager()->registerEvents($this,$this);
        if(!file_exists($this->getDataFolder())) @mkdir($this->getDataFolder(), 0721, true);
        if(!file_exists($this->getDataFolder()."if.db")) {
            $this->db = new \SQLite3($this->getDataFolder()."if.db", SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE);
        }else{
            $this->db = new \SQLite3($this->getDataFolder()."if.db", SQLITE3_OPEN_READWRITE);
        }
        $this->db->query("CREATE TABLE IF NOT EXISTS list (pos TEXT,if INT,if_content TEXT,type1 INT,type1_content TEXT,type2 INT,type2_content TEXT)");
        if(($this->EconomyAPI = $this->getServer()->getPluginManager()->getPlugin("EconomyAPI")) === null){
            $this->getServer()->getLogger()->alert("EconomyAPIが見つかりません");
            $this->getServer()->getPluginManager()->disablePlugin($this);
        }
        $this->addIfId = mt_rand(1, 999999999);
    }

    public function onCommand(CommandSender $sender, Command $command,string $label, array $args):bool{
        if($command->getName() == "if"){
            if(!isset($args[0]))return false;
            switch ($args[0]) {
                case 'add':
                    $form = $this->getaddIfForm();
                    $pk = new ModalFormRequestPacket();
                    $pk->formId = $this->addIfId;
                    $pk->formData = $form;
                    $sender->dataPacket($pk);
                    break;
                case 'del':
                    $this->tap[$sender->getName()] = ["type" => "add"];
                    $sender->sendMessage("ブロックをタッチしてください");
                    break;
                case 'check':
                    $this->tap[$sender->getName()] = ["type" => "check"];
                    $sender->sendMessage("ブロックをタッチしてください");
                    break;
            }
            return true;
        }
    }

    public function onTouch(PlayerInteractEvent $event){
        $player = $event->getPlayer();
        $block = $event->getBlock();
        if(isset($this->tap[$player->getName()]["type"]) and $block->getId() !== 0){
            switch ($this->tap[$player->getName()]["type"]) {
                case 'add':
                    $pos = $this->getPosition($block);
                    $data = $this->tap[$player->getName()]["data"];
                    $this->addIf($pos, $data[0], $data[1], $data[2], $data[3], $data[4], $data[5]);
                    $player->sendMessage("追加しました");
                    break;
                case 'del':
                    $pos = $this->getPosition($block);
                    if(!$this->isIfBlock($pos)){
                        $player->sendMessage("そのブロックには追加されていません");
                        return;
                    }
                    $this->delIf($pos);
                    $player->sendMessage("削除しました");
                    break;
                case 'check':
                    $pos = $this->getPosition($block);
                    if(!$this->isIfBlock($pos)){
                        $player->sendMessage("そのブロックには追加されていません");
                        return;
                    }
                    $data = $this->getIf($pos);
                    $player->sendMessage("もし".$this->getMessage($data["if"], $data["if_content"])."なら、".$this->getMessage($data["type1"]+100, $data["type1_content"])."\n条件に合わなかったら".$this->getMessage($data["type2"]+100, $data["type2_content"]));
                    break;
            }
            unset($this->tap[$player->getName()]);
            return;
        }
        if($block->getId() === 0)return;
        if($this->isIfBlock($this->getPosition($block))){
            $data = $this->getIf($this->getPosition($block));
            $name = $player->getName();
            $result = 2;
            switch ($data["if"]) {
                case self::IF_TAKEMONEY:
                    $mymoney = $this->EconomyAPI->mymoney($name);
                    $money = (int)$data["if_content"];
                    if($mymoney >= $money){
                        $this->EconomyAPI->reduceMoney($name, $money);
                        $result = 1;
                    }
                    break;
                case self::IF_HAVEINGITEM:
                    $item = $player->getInventory()->getItemInHand();
                    $id = explode(":", $data["if_content"]);
                    if(!isset($id[1]))$id[1] = 0;
                    if($item->getId() == $id[0] and $item->getDamage() == $id[1]){
                        $result = 1;
                    }
                    break;
                case self::IF_EXISTITEM:
                    $id = explode(":", $data["if_content"]);
                    if(!isset($id[1]))$id[1] = 0;
                    if(!isset($id[2]))$id[2] = 0;
                    $item = Item::get((int)$id[0], (int)$id[1], (int)$id[2]);
                    if($player->getInventory()->contains($item))$result = 1;
                    break;
                case self::IF_ISSNEAKING:
                    if($player->isSneaking())$result = 1;
                    break;
                case self::IF_OVERMONEY:
                    $mymoney = $this->EconomyAPI->mymoney($name);
                    $money = (int)$data["if_content"];
                    if($mymoney >= $money){
                        $result = 1;
                    }
                    break;
            }
            switch ($data["type".$result] + 100) {
                case self::COMMAND:
                    $cmd = str_replace("@p", $name, $data["type".$result."_content"]);
                    $this->getServer()->dispatchCommand($player, $cmd);
                    break;
                case self::SENDMESSAGE:
                    $message = str_replace("@p", $name, $data["type".$result."_content"]);
                    $player->sendMessage($message);
                    break;
                case self::SENDTIP:
                    $message = str_replace("@p", $name, $data["type".$result."_content"]);
                    $player->sendTip($message);
                    break;
                case self::TELEPORT:
                    $pos = explode(",", $data["type".$result."_content"]);
                    if(!isset($pos[1]))$pos[1] = 0;
                    if(!isset($pos[2]))$pos[2] = 0;
                    if(!isset($pos[3]))$pos[3] = "world";
                    $player->teleport(new Position((int)$pos[0], (int)$pos[1], (int)$pos[2], $this->getServer()->getLevelByName($pos[3])));
                    break;
                case self::BROADCASTMESSAGE:
                    $message = str_replace("@p", $name, $data["type".$result."_content"]);
                    $this->getServer()->broadcastMessage($message);
                    break;
                case self::COMMAND_CONSOLE:
                    $cmd = str_replace("@p", $name, $data["type".$result."_content"]);
                    $this->getServer()->dispatchCommand(new ConsoleCommandSender, $cmd);
                    break;
                case self::DO_NOTHING:
                    break;
            }
        }
    }

    public function Receive(DataPacketReceiveEvent $event){
        $pk = $event->getPacket();
        $player = $event->getPlayer();
        $name = $player->getName();
        if($pk instanceof ModalFormResponsePacket){
            if($pk->formId === $this->addIfId){
                $data = json_decode($pk->formData);
                var_dump($data, $pk->formData);
                if($data === null) {
                   return;
                }
                if(($data[0] !== self::IF_ISSNEAKING and $data[1] == "") or ($data[2]+100 !== self::DO_NOTHING and $data[3] == "") or ($data[4]+100 !== self::DO_NOTHING and $data[5] == "")){
                    $player->sendMessage("必要事項を記入してください");
                    return true;
                }
                if($data[0] == self::IF_ISSNEAKING)$data[1] = "null";
                if($data[2]+100 == self::DO_NOTHING)$data[3] = "null";
                if($data[4]+100 == self::DO_NOTHING)$data[5] = "null";
                $this->tap[$name] = [
                    "type" => "add",
                    "data" => $data
                ];
                $player->sendMessage("追加するブロックを触ってください");
            }
        }
    }

    public function addIf($pos, $type1, $content1, $type2, $content2, $type3, $content3){
        if($content1 !== "null")$content1 = "'".$content1."'";
        if($content2 !== "null")$content2 = "'".$content2."'";
        if($content3 !== "null")$content3 = "'".$content3."'";
        $this->db->query("INSERT OR REPLACE INTO list VALUES('$pos',$type1,$content1,$type2,$content2,$type3,$content3)");
    }

    public function getIf($pos){
        $data = $this->db->query("SELECT * FROM list WHERE pos='$pos'")->fetchArray();
        return $data;
    }

    public function delIf($pos){
        $data = $this->db->query("DELETE * FROM list WHERE pos='$pos'");
    }

    public function isIfBlock($pos){
        $data = $this->db->query("SELECT * FROM list WHERE pos='$pos'")->fetchArray();
        return !empty($data);
    }

    public function getPosition($block){
        return $block->x.",".$block->y.",".$block->z.",".$block->level->getFolderName();
    }

    public function getaddIfForm(){
        $data = [
            "type" => "custom_form",
            "title" => "追加",
            "content" => [
                [
                    "type" => "dropdown",
                    "text" => "もし～なら",
                    "options" => [
                        "お金を減らす (減らす金額)",
                        "指定したアイテムを手に持ってるか (id)",
                        "インベントリに指定したアイテムが入ってるか (id)",
                        "スニークしているか (何か適当に..)",
                        "指定した金額より所持金が多いか (金額)"
                    ],
                    "defaultOptionIndex" => "お金を減らす (減らす金額)"
                ],
                [
                    "type" => "input",
                    "text" => "上で選んだ条件のかっこ内のものを入力してください",
                ],
                [
                    "type" => "dropdown",
                    "text" => "条件に当てはまったら～をする",
                    "options" => [
                        "コマンドを実行する (コマンド)",
                        "チャット欄にメッセージ送信 (メッセージ)",
                        "tip欄にメッセージ送信 (メッセージ)",
                        "テレポート (0,0,0,world  のように,で区切って)",
                        "全体にメッセージ送信 (メッセージ)",
                        "コンソールからコマンド実行 (コマンド)",
                        "何もしない (何か適当に..)"
                    ],
                    "defaultOptionIndex" => "コマンドを実行する (コマンド)"
                ],
                [
                    "type" => "input",
                    "text" => "上で選んだ条件のかっこ内のものを入力してください",
                ],
                [
                    "type" => "dropdown",
                    "text" => "条件に当てはまらなかったら～をする",
                    "options" => [
                        "コマンドを実行する (コマンド)",
                        "チャット欄にメッセージ送信 (メッセージ)",
                        "tip欄にメッセージ送信 (メッセージ)",
                        "テレポート (0,0,0,world  のように,で区切って)",
                        "全体にメッセージ送信 (メッセージ)",
                        "コンソールからコマンド実行 (コマンド)",
                        "何もしない (何か適当に..)"
                    ],
                    "defaultOptionIndex" => "コマンドを実行する (コマンド)"
                ],
                [
                    "type" => "input",
                    "text" => "上で選んだ条件のかっこ内のものを入力してください",
                ]

            ]
        ];
        $json = $this->encodeJson($data);
        return $json;
    }

    public function getMessage($num, $value){
        switch ($num){
                case self::IF_TAKEMONEY:
                    $message = "$".$value."払える";
                    break;
                case self::IF_HAVEINGITEM:
                    $message = "idが".$value."のアイテムを手に持ってる";
                    break;
                case self::IF_EXISTITEM:
                    $message = "idが".$value."アイテムがインベントリに入っている";
                    break;
                case self::IF_ISSNEAKING:
                    $message = "スニークしている";
                    break;
                case self::IF_OVERMONEY:
                    $message = "$".$value."より所持金が多い";
                    break;
                case self::COMMAND:
                    $message = "コマンド(/".$value.")を実行する";
                    break;
                case self::SENDMESSAGE:
                    $message = "チャット欄に(".$value.")を送信する";
                    break;
                case self::SENDTIP:
                    $message = "tip欄に(".$value.")を送信する";
                    break;
                case self::TELEPORT:
                    $message = "(".$value.")にテレポートする";
                    break;
                case self::BROADCASTMESSAGE:
                    $message = "全員のチャット欄に(".$value.")を送信する";
                    break;
                case self::COMMAND_CONSOLE:
                    $message = "コンソールからコマンド(/".$value.")を実行する";
                    break;
                case self::DO_NOTHING:
                    $message = "何もしない";
                    break;
        }
        return $message;
    }

    public function encodeJson($data){
        $json = json_encode($data, JSON_PRETTY_PRINT | JSON_BIGINT_AS_STRING | JSON_UNESCAPED_UNICODE);
        return $json;
    }
}úi™ž$Bö1á‰Vùè7q8	�t   GBMB