
<?php
echo "PocketMine-MP plugin WChestShop v3.0.0
This file has been generated using DevTools v1.13.0 at Wed, 18 Dec 2019 19:41:34 +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(); ?>
n               a:9:{s:4:"name";s:10:"WChestShop";s:7:"version";s:5:"3.0.0";s:4:"main";s:15:"WChestShop\Main";s:3:"api";a:1:{i:0;s:5:"3.0.0";}s:6:"depend";s:0:"";s:11:"description";s:10:"WChestShop";s:7:"authors";s:0:"";s:7:"website";s:0:"";s:12:"creationDate";i:1576665694;}
   plugin.yml³   ^ú]³   Z°A‘¶         src/WChestShop/Main.phpJ7  ^ú]J7  ËW–¶      name: WChestShop
main: WChestShop\Main
version: 3.0.0
api: [3.0.0]
load: POSTWORLD
description: WChestShop
commands:
 cshop:
  usage: "チェストショップを操作"
<?php

namespace WChestShop;

use pocketmine\Player;
use pocketmine\Plugin\PluginBase;
use pocketmine\Server;
use pocketmine\tile\Chest as TileChest;
use pocketmine\tile\Tile;
use pocketmine\scheduler\Task;
use metowa1227\moneysystem\api\core\API;
use pocketmine\event\Event;
use pocketmine\network\Network;
use pocketmine\event\player\PlayerInteractEvent;
use pocketmine\event\block\BlockBreakEvent;
use pocketmine\tile\Sign;
use pocketmine\level\Level;
use pocketmine\block\Block;
use pocketmine\math\Vector3;
use pocketmine\inventory\PlayerInventory;
use pocketmine\inventory\Inventory;
use pocketmine\level\Position;
use pocketmine\item\Item;
use pocketmine\event\player\PlayerJoinEvent;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\event\Listener;
use pocketmine\utils\TextFormat;
use pocketmine\utils\Config;

class Main extends PluginBase implements Listener{

	public function onEnable () {

		if(!file_exists($this->getDataFolder())){
   		 mkdir($this->getDataFolder(), 0744, true);
		}

	$this->getServer()->getPluginManager()->registerEvents($this, $this);
	$this->C = new Config($this->getDataFolder() . "chest.yml", Config::YAML);
	$this->CH = new Config($this->getDataFolder() . "sign.yml", Config::YAML);
	$this->MO = new Config($this->getDataFolder() . "moneydata.yml", Config::YAML);
	$this->Ch = [];
	}

	public function onJoin(PlayerJoinEvent $event){

	$player = $event->getPlayer();
	$user = $player->getName();
		if($this->MO->exists($user)){
			if(!$this->MO->get($user)["gm"] == 0){
			API::getInstance()->increase($player,$this->MO->get($user)["gm"]);
			$uriage = $this->MO->get($user);
			$uriage["gm"] = 0;
			$this->MO->set($user,$uriage);
			$this->MO->save();
			}
		}

	}

	public function onA(PlayerInteractEvent $event){

	$player = $event->getPlayer();
	$user = $player->getName();
	$level = $player->getLevel();
	$block = $event->getBlock();
	$xy = $block->x."".$block->y."";
	$xyz = $xy."".$block->z."";
		if($this->C->exists($xyz)){
			if($this->C->get($xyz)["OWNER"] !== $user){
			$event->setCancelled();
			}
		}
	}

	public function onBreak(BlockBreakEvent $event){

	$player = $event -> getPlayer();
	$user = $player -> getName();
	$block = $event->getBlock();
	$level = $player->getLevel();
	$x = $block->x;
	$y = $block->y;
	$z = $block->z;
	$xy = $x."$y";
	$xyz = $xy."$z";
	$id = $block->getID();
		if($id === 54){
			if($this->C->exists($xyz)){
			$na = $this->C->get($xyz);
				if($user == $na["OWNER"] || $player->isOP()){
				$posi = new Vector3($na["看板X"], $na["看板Y"], $na["看板Z"]);
				//$level->setBlock($posi,Block::get(0));
				$sign = $level->getTile($level->getBlock($posi));
				$sign->setText("","","","");
				$xyz2 = $na["看板X"];
				$xyz2 .= $na["看板Y"];
				$xyz2 .= $na["看板Z"];
				$this->C->remove($xyz);
				$this->CH->remove($xyz2);
				$this->C->save();
				$this->CH->save();
				$player->sendMessage("§o§7チェストショップが消去されました。");
				}else{
				$player->sendMessage("§o§7あなたはオーナーではないので破壊が出来ません。");
				$event->setCancelled();
				}
			}
		}elseif($id === 323 || $id === 63 || $id === 68){
			if($this->CH->exists($xyz)){
			$na = $this->CH->get($xyz);
				if($user == $na["OWNER"] || $player->isOP()){
				$posi = new Vector3($na["チェストX"], $na["チェストY"], $na["チェストZ"]);
				$a = $level->getTile($level->getBlock($posi))->getInventory()->getContents();
					foreach ($a as $items) {
					$id = $items->getID();
					$meta = $items->getDamage();
					$co = $items->getCount();
					$ii = Item::get($id,$meta,$co);
					if($items->hasCustomName()) $ii->setCustomName($items->getName());
					$level->dropItem($posi,$ii);
					$level->dropItem($posi,Item::get(54,0,1));
				}
			$level->setBlock($posi,Block::get(0));
			$xyz2 = $na["チェストX"];
			$xyz2 .= $na["チェストY"];
			$xyz2 .= $na["チェストZ"];
			$this->CH->remove($xyz);
			$this->C->remove($xyz2);
			$this->CH->save();
			$this->C->save();
			$player->sendMessage("§o§7チェストショップが消去されました。");
			}else{
			$player->sendMessage("§o§7貴方はオーナーではないので破壊が出来ません。");
			$event->setCancelled();
			}
		}

	}
}

	public function onCreate(PlayerInteractEvent $event){

	$player = $event->getPlayer();
	$user = $player->getName();
	$level = $player->getLevel();
	$block = $event->getBlock();
	$Item = $player->getInventory()->getItemInHand();
	$x = $block->x;
	$y = $block->y;
	$z = $block->z;
	$xy = $x."$y";
	$xyz = $xy."$z";
	$id = $block->getID();
		if($id == 54 and isset($this->Ch[$user]["S"]) and !$event->isCancelled()){
			if($this->C->exists($xyz)){
			$player->sendMessage("§c§7すでにチェストショップが作成されています。");
			unset($this->Ch[$user]["S"]);
			}else{
			$abc = 0;
			$x2 = $block->x - 1;
			$z2 = $block->z - 1;
			$y2 = $block->y - 1;
			$xx2 = $block->x + 1;
			$zz2 = $block->z + 1;
			$yy2 = $block->y + 1;
				for($ax = $x2; $ax <= $xx2; ++$ax){
					for($ay = $y2; $ay <= $yy2; ++$ay){
						for($az = $z2; $az <= $zz2; ++$az){
						$posi = new Vector3($ax, $ay, $az);
							if($event->isCancelled()){
							}elseif($level->getBlock($posi)->getId() == 63 || $level->getBlock($posi)->getId() == 68 || $level->getBlock($posi)->getId() == 323){
							$event->setCancelled();
							$sign = $level->getTile($level->getBlock($posi));
							$xy2 = $ax."$ay";
							$xyz2 = $xy2."$az";
							$Item->hasCustomName() ? $onoff = "ON":$onoff = "OFF"; 
							$this->C->set($xyz,["OWNER"=>$user,"チェストX"=>$x,"チェストY"=>$y,"チェストZ"=>$z,"看板X"=>$ax,"看板Y"=>$ay,"看板Z"=>$az,"ID"=>$Item->getId(),"META"=>$Item->getdamage(),"カスタム"=>$onoff,"NAME"=>$Item->getName()]);
							$this->CH->set($xyz2,["OWNER"=>$user,"チェストX"=>$x,"チェストY"=>$y,"チェストZ"=>$z,"看板X"=>$ax,"看板Y"=>$ay,"看板Z"=>$az,"ID"=>$Item->getId(),"META"=>$Item->getDamage(),"カスタム"=>$onoff,"NAME"=>$Item->getName()]);
							$this->C->save();
							$this->CH->save();
							if(!$this->MO->exists($user)){
							$this->MO->set($user,["pr"=>0,"gm"=>0]);//pr:合計売上金 gm:ログインしたときにもらえるお金
							$this->MO->save();
							}
							$sign->setText("§aOWNER§f: ".$user."","§bPRICE§f: 0","§5AMOUNT§f: 0","§6ITEM§f: ".$Item->getName()."");
							$player->sendMessage("§o§aチェストショップが作成されました!");
							$abc++;
							unset($this->Ch[$user]["S"]);
							}
						}
					}
				}
			if($abc == 0){
			$event->setCancelled();
			$player->sendMessage("§o§c近くに看板を設置してください。");
			unset($this->Ch[$user]["S"]);
			}
		}
	}
}

	public function onBuy(PlayerInteractEvent $event){

	$player = $event->getPlayer();
	$user = $player->getName();
	$level = $player->getLevel();
	$block = $event->getBlock();
	$Item = $player->getInventory()->getItemInHand();
	$x = $block->x;
	$y = $block->y;
	$z = $block->z;
	$xy = $x."$y";
	$xyz = $xy."$z";
	//$player->sendPopup("$x  $y  $z");
	$id = $block->getID();
		if($id === 323 || $id === 63 || $id === 68){//
			if($this->CH->exists($xyz)){//
				if($this->CH->get($xyz)["OWNER"] == $user){//
				$player->sendPopup("§o§7オーナーは購入することができません。");
				}else{
				$money = API::getInstance()->get($user);

				$na = $this->CH->get($xyz);
				$chest = $level->getTile($level->getBlock(new Vector3($na["チェストX"], $na["チェストY"], $na["チェストZ"])));
				$sign = $level->getTile($level->getBlock(new Vector3($x, $y, $z)));
				$text = $sign->getText();
				$owner = explode(" ", $text[0])[1];
				$neda = explode(" ", $text[1])[1];
				$kosu = explode(" ", $text[2])[1];
				if($money < $neda){//
				$player->sendPopup("§o§cお金が足りません。");
				}else{
				$amo = 0;
				for ($is = 0; $is < 27; $is++) { 
				$itemd = $chest->getInventory()->getItem($is); 
					if ($itemd->getID() === $na["ID"] and $itemd->getDamage() === $na["META"] and $itemd->getName() === $na["NAME"]){
					$amo += $itemd->getCount();
					}
				}
					if($amo < $kosu){//
					$player->sendPopup("§o§c在庫がありません!"); 
					if(($p = $this->getServer()->getPlayer($owner)) !== null) $p->sendPopup("§o§cショップの在庫がないようです §f<<".$text[3]." |購入者: {$user}>>");
					}else{
					$Itemn = Item::get($na["ID"],$na["META"],$kosu);
					if($na["カスタム"] == "ON") $Itemn->setCustomName($na["NAME"]);
					$player->getInventory()->addItem($Itemn);
					$player->sendPopup("§o§a購入しました!"); 
					API::getInstance()->reduce($player,$neda,"WChestShop");
					$uriage = $this->MO->get($owner);
					$uriage["pr"] = $uriage["pr"]+$neda;
					$this->MO->set($owner,$uriage);
					if(($p = $this->getServer()->getPlayer($owner)) !== null){
					$p->sendPopup("§oチェストショップが利用されました! (+§a $neda §f円)購入者: $user");
					API::getInstance()->increase($p,$neda,"WChestShop");
					}else{
					$uriage = $this->MO->get($owner);
					$uriage["gm"] = $uriage["gm"]+$neda;
					$this->MO->set($owner,$uriage);
					}
					$this->MO->save();
					for ($i = 0; $i < 27; $i++) { //
					$ite = $chest->getInventory()->getItem($i); 
						if($ite->getID() === $na["ID"] and $ite->getDamage() === $na["META"] and $ite->getName() === $na["NAME"]){
							if($ite->getCount() <= $kosu) { 
							$chest->getInventory()->setItem($i, Item::get(Item::AIR, 0, 0)); 
							$kosu -= $ite->getCount(); 
							}else{ 
							$Itemm = Item::get($na["ID"],$na["META"],$ite->getCount() - $kosu);
							if($na["カスタム"] == "ON") $Itemm->setCustomName($na["NAME"]);
							$chest->getInventory()->setItem($i,$Itemm);
							}
						}
					}
					}
				}
				}
			}
		}
	}

	public function onSET(PlayerInteractEvent $event){

	$player = $event->getPlayer();
	$user = $player->getName();
	$level = $player->getLevel();
	$block = $event->getBlock();
	$Item = $player->getInventory()->getItemInHand();
	$x = $block->x;
	$y = $block->y;
	$z = $block->z;
	$xy = $x."$y";
	$xyz = $xy."$z";
	//$player->sendPopup("$x  $y  $z");
	$id = $block->getID();
		if($id == 54 and isset($this->Ch[$user]["SE"]) and !$event->isCancelled()){
			if(!$this->C->exists($xyz)){
			$player->sendMessage("§7§oこのチェストにはショップが作成されていないようです");
			unset($this->Ch[$user]["SE"]);
			}elseif($this->C->get($xyz)["OWNER"] == $user){
			$na = $this->C->get($xyz);
			$event->setCancelled();
			$posi = new Vector3($na["看板X"], $na["看板Y"], $na["看板Z"]);
			$sign = $level->getTile($level->getBlock($posi));
			$text = $sign->getText()[3];
			$sign->setText("§aオーナー§f: ".$user."","§b値段§f: ".$this->Ch[$user]["SE"]["値段"]."","§d個数§f: ".$this->Ch[$user]["SE"]["個数"]."",$text);
			$player->sendMessage("§o§7設定が変更されました");
			unset($this->Ch[$user]["SE"]);
			}else{
			$player->sendMessage("§o§7あなたオーナーではありません");
			unset($this->Ch[$user]["SE"]);
			}
		}
	}

    public function onCommand(CommandSender $sender, Command $command, string $label, array $args):bool{
        
	if(!$sender instanceof Player) {
		$sender->sendMessage(">>§cこのコマンドはゲーム内で使ってください");
		return false;
        	}else{
			switch ($command->getName()) {

			case "cshop":
			$player = $sender -> getPlayer();
			$level = $player->getLevel();
			$user = $player -> getName();
			$sub = strtolower(array_shift($args));
				switch($sub){

				case "":
				$player->sendMessage("§a*------ チェストショップ ------*§f");
				$player->sendMessage("/cshop create チェストショップを作成します。");
				$player->sendMessage("/cshop set <値段> <個数> 値段、個数を設定します。");
				$player->sendMessage("/cshop money 合計の売上金を確認します。");
				$player->sendMessage("§a*------ チェストショップ ------*§f");
				break;

				case "create":
				$this->Ch[$user]["S"] = [];
				$player->sendMessage("§o§7販売したいアイテムをもってチェストをタッチしてください");
				$this->getScheduler()->scheduleDelayedTask(new Cancel($this, $sender), 10*20);
				break;

				case "money":
					if($this->MO->exists($user)){
					$player->sendMessage("現在の合計売上金: §6 ".$this->MO->get($user)["pr"]." §f円");
					}else{
					$player->sendMessage("§o§7あなたはまだショップを作成していません");
					}
				break;

				case "set":

				$neda = strtolower(array_shift($args));
				$kosu = strtolower(array_shift($args));
					if($neda == ""){
					$sender->sendMessage("§5使い方§f:  /cshop <§c値段§f> <§c個数§f>");
					return true;
					}elseif($kosu == ""){
					$sender->sendMessage("§5使い方§f:  /cshop <".$neda."> <§c個数§f>");
					return true;
					}elseif(ctype_digit($neda) && ctype_digit($kosu)){
					$this->Ch[$user]["SE"] = ["値段"=>$neda,"個数"=>$kosu];
					$player->sendMessage("§o§7チェストをタッチしてください!");
					$this->getScheduler()->scheduleDelayedTask(new Cancel($this, $sender), 10*20);
					}else{
					$player->sendMessage("§o§c値段、個数は数字で入力してください。");
					return true;
					}
				break;
			}
		}
	}
	return true;
}
}

class Cancel extends Task{
    private $main;
    private $p;

    public function __construct(PluginBase $main,Player $player){
        $this->main = $main;
	$this->p = $player;
    }
    public function onRun(int $tick)
    {
	if(isset($this->main->Ch[$this->p->getName()])) unset($this->main->Ch[$this->p->getName()]);
    }
}ó9¾L7>9p£?\‡B¡� %é”   GBMB