<?php echo "PocketMine-MP plugin ImprisonmentLimitedEdition v1.0.0\nThis file has been generated using DevTools v1.12.10 at Sat, 16 Jun 2018 16:13:17 +0930\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(); ?>
I             ~  a:9:{s:4:"name";s:26:"ImprisonmentLimitedEdition";s:7:"version";s:5:"1.0.0";s:4:"main";s:37:"popkechupki\imprisonment\Imprisonment";s:3:"api";a:4:{i:0;s:5:"3.0.0";i:1;s:13:"3.0.0-ALPHA11";i:2;s:13:"3.0.0-ALPHA12";i:3;s:13:"3.0.0-ALPHA13";}s:6:"depend";a:0:{}s:11:"description";s:0:"";s:7:"authors";a:1:{i:0;s:11:"popkechupki";}s:7:"website";s:0:"";s:12:"creationDate";i:1529131397;}
   config.ymlõ  …±$[õ  cÍ)W¶      
   plugin.yml=  …±$[=  Ý^u­¶         prisoner-data.yml   …±$[   îzT¶         resources/config.ymlõ  …±$[õ  cÍ)W¶         resources/prisoner-data.ymlZ   …±$[Z   5l³¶      .   src/popkechupki/imprisonment/EventListener.php6  …±$[6  ‰B§¶      -   src/popkechupki/imprisonment/Imprisonment.php$  …±$[$  ˜‚5¶      *   src/popkechupki/imprisonment/UIManager.php¾
  …±$[¾
  -+×¶      # ç›£ç„ã®åº§æ¨™
prisonPosition:
  x-pos: 128
  y-pos: 72
  z-pos: 128
  level-pos: world

# {}ã§å›²ã¾ã‚Œã¦ã„ã‚‹éƒ¨åˆ†ã«ã¯åå‰ã‚„åˆ‘æœŸãŒå…¥ã‚Šã¾ã™ã€‚å…¥ã‚ŒãŸã„ã¨ã“ã‚ã«ãšã‚‰ã—ã¦ã‚‚ã‚‰ã£ã¦æ§‹ã„ã¾ã›ã‚“
# ã™ã¹ã¦ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«ã¤ãã‚¿ã‚°ã§ã™ã€‚ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®åå‰ãªã©ã‚’å…¥ã‚ŒãŸã‚Šã—ã¾ã™
Message0: "[Imprisonment] "
# ã‚³ãƒžãƒ³ãƒ‰ã‚’å®Ÿè¡Œã—ãŸã¨ãã«è¡¨ç¤ºã•ã‚Œã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ã™ã€‚ï¼ˆ%1$sã«ã¯å¯¾è±¡ã®äººã®åå‰ï¼‰
Message1: "%1$sã‚’æŠ•ç„ã—ã¾ã—ãŸï¼ˆåˆ‘æœŸ: çµ‚èº«ï¼‰"
Message3: "%1$sã‚’å‡ºæ‰€ã•ã›ã¾ã—ãŸ"
# ã“ã‚Œã‚ˆã‚Šä¸‹ã¯å›šäººã«å‘ã‘ã¦é€ä¿¡ã•ã‚Œã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ã™ï¼ˆ%1$sã«ã¯åˆ‘æœŸãŒå…¥ã‚Šã¾ã™ï¼‰
Message11: "æŠ•ç„ã•ã‚Œã¾ã—ãŸï¼ˆç„¡æœŸæ‡²å½¹ï¼‰"
Message13: "å‡ºæ‰€ã—ã¾ã—ãŸã€‚ã‚‚ã†æ‚ªã„ã“ã¨ã¯ã—ãªã„ã‚ˆã†ã«ã€‚"
Message14: "åˆ‘æœŸçµ‚äº†ã¾ã§ãƒ–ãƒ­ãƒƒã‚¯ã®ç ´å£Šã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™"
Message15: "åˆ‘æœŸçµ‚äº†ã¾ã§ãƒ–ãƒ­ãƒƒã‚¯ã®è¨­ç½®ã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™"
Message16: "åˆ‘æœŸçµ‚äº†ã¾ã§ãƒã‚±ãƒ„ã®ä½¿ç”¨ã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™"
Message17: "åˆ‘æœŸçµ‚äº†ã¾ã§ã‚³ãƒžãƒ³ãƒ‰ã®ä½¿ç”¨ã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™"
# ä½•ã‚‰ã‹ã®å‹•ä½œã‚’å®Ÿè¡Œã—ãŸã¨ãã«ç™ºç”Ÿã—ãŸéš›ã«è¡¨ç¤ºã•ã‚Œã‚‹ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ã™
EMessage1: "ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã‚²ãƒ¼ãƒ å†…ã‹ã‚‰ã®ã¿å®Ÿè¡Œå¯èƒ½ã§ã™"
EMessage5: "é¸æŠžã—ãŸãƒ—ãƒ¬ã‚¤ãƒ¤ãƒ¼ã¯ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã§ã™"
EMessage6: "ç¾åœ¨æŠ•ç„ã•ã‚Œã¦ã„ã‚‹ãƒ—ãƒ¬ã‚¤ãƒ¤ãƒ¼ã¯ã„ã¾ã›ã‚“"
EMessage7: "è‡ªåˆ†ã¯é¸æŠžã§ãã¾ã›ã‚“"
name: ImprisonmentLimitedEdition
main: popkechupki\imprisonment\Imprisonment
load: POSTWORLD
author: popkechupki
version: 1.0.0
api:
 - 3.0.0
 - 3.0.0-ALPHA11
 - 3.0.0-ALPHA12
 - 3.0.0-ALPHA13

commands:
  prison:
    description: ç›£ç„ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æ“ä½œãƒ•ã‚©ãƒ¼ãƒ ã‚’è¡¨ç¤º
    permission: op
--- []
...
# ç›£ç„ã®åº§æ¨™
prisonPosition:
  x-pos: 128
  y-pos: 72
  z-pos: 128
  level-pos: world

# {}ã§å›²ã¾ã‚Œã¦ã„ã‚‹éƒ¨åˆ†ã«ã¯åå‰ã‚„åˆ‘æœŸãŒå…¥ã‚Šã¾ã™ã€‚å…¥ã‚ŒãŸã„ã¨ã“ã‚ã«ãšã‚‰ã—ã¦ã‚‚ã‚‰ã£ã¦æ§‹ã„ã¾ã›ã‚“
# ã™ã¹ã¦ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«ã¤ãã‚¿ã‚°ã§ã™ã€‚ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®åå‰ãªã©ã‚’å…¥ã‚ŒãŸã‚Šã—ã¾ã™
Message0: "[Imprisonment] "
# ã‚³ãƒžãƒ³ãƒ‰ã‚’å®Ÿè¡Œã—ãŸã¨ãã«è¡¨ç¤ºã•ã‚Œã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ã™ã€‚ï¼ˆ%1$sã«ã¯å¯¾è±¡ã®äººã®åå‰ï¼‰
Message1: "%1$sã‚’æŠ•ç„ã—ã¾ã—ãŸï¼ˆåˆ‘æœŸ: çµ‚èº«ï¼‰"
Message3: "%1$sã‚’å‡ºæ‰€ã•ã›ã¾ã—ãŸ"
# ã“ã‚Œã‚ˆã‚Šä¸‹ã¯å›šäººã«å‘ã‘ã¦é€ä¿¡ã•ã‚Œã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ã™ï¼ˆ%1$sã«ã¯åˆ‘æœŸãŒå…¥ã‚Šã¾ã™ï¼‰
Message11: "æŠ•ç„ã•ã‚Œã¾ã—ãŸï¼ˆç„¡æœŸæ‡²å½¹ï¼‰"
Message13: "å‡ºæ‰€ã—ã¾ã—ãŸã€‚ã‚‚ã†æ‚ªã„ã“ã¨ã¯ã—ãªã„ã‚ˆã†ã«ã€‚"
Message14: "åˆ‘æœŸçµ‚äº†ã¾ã§ãƒ–ãƒ­ãƒƒã‚¯ã®ç ´å£Šã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™"
Message15: "åˆ‘æœŸçµ‚äº†ã¾ã§ãƒ–ãƒ­ãƒƒã‚¯ã®è¨­ç½®ã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™"
Message16: "åˆ‘æœŸçµ‚äº†ã¾ã§ãƒã‚±ãƒ„ã®ä½¿ç”¨ã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™"
Message17: "åˆ‘æœŸçµ‚äº†ã¾ã§ã‚³ãƒžãƒ³ãƒ‰ã®ä½¿ç”¨ã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™"
# ä½•ã‚‰ã‹ã®å‹•ä½œã‚’å®Ÿè¡Œã—ãŸã¨ãã«ç™ºç”Ÿã—ãŸéš›ã«è¡¨ç¤ºã•ã‚Œã‚‹ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ã™
EMessage1: "ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã‚²ãƒ¼ãƒ å†…ã‹ã‚‰ã®ã¿å®Ÿè¡Œå¯èƒ½ã§ã™"
EMessage5: "é¸æŠžã—ãŸãƒ—ãƒ¬ã‚¤ãƒ¤ãƒ¼ã¯ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã§ã™"
EMessage6: "ç¾åœ¨æŠ•ç„ã•ã‚Œã¦ã„ã‚‹ãƒ—ãƒ¬ã‚¤ãƒ¤ãƒ¼ã¯ã„ã¾ã›ã‚“"
EMessage7: "è‡ªåˆ†ã¯é¸æŠžã§ãã¾ã›ã‚“"
# ã“ã‚Œã‚ˆã‚Šä¸‹ã¯å…¥ç„è€…ã®ãƒ‡ãƒ¼ã‚¿ï¼ˆåå‰: åˆ‘æœŸçµ‚äº†æ—¥ï¼‰
steve: 'forever'
<?php
namespace popkechupki\imprisonment;

use pocketmine\Player;
use pocketmine\event\Listener;
use pocketmine\event\player\{PlayerJoinEvent, PlayerDeathEvent, PlayerBucketEvent, PlayerCommandPreprocessEvent, PlayerGameModeChangeEvent};
use pocketmine\event\block\{BlockBreakEvent, BlockPlaceEvent};
use pocketmine\event\server\DataPacketReceiveEvent;
use pocketmine\network\mcpe\protocol\ModalFormResponsePacket;
use pocketmine\utils\TextFormat;

use popkechupki\imprisonment\UIManager;

class EventListener implements Listener
{

  private $owner;

  function __construct(Imprisonment $plugin)
  {
    $this->owner = $plugin;
  }

  public function onReceive(DataPacketReceiveEvent $event)
  {
    $pk = $event->getPacket();
		if (!($pk instanceof ModalFormResponsePacket)) return;
		$player = $event->getPlayer();
		$id = $pk->formId;
		$data = json_decode($pk->formData);
		switch ($id) {
      case UIManager::FORM_SELECT_OPERATE:

        if ($pk->formData == "null\n") return;

        $this->sendSecondForm($data, $player);
        break;

      case UIManager::FORM_SELECT_OTU:

        if ($pk->formData == "null\n") return;

        $name = $this->owner->getOnlinePlayers()[$data[1]];
        if ($name == $player->getName()) {
          $player->sendMessage($this->owner->getTitle().$this->owner->getMessage("EMessage7"));
          return;
        }

        if ($this->owner->isOnline($name)) {
          $player->sendMessage($this->owner->getTitle().sprintf($this->owner->getMessage("Message1"), $name));
          $this->owner->toPrison($this->owner->getServer()->getPlayer($name), $name);
        } else {
          $player->sendMessage($this->owner->getTitle().$this->owner->getMessage("EMessage5"));
        }
        break;

      case UIManager::FORM_SELECT_DEOTU:

        if ($pk->formData == "null\n") return;

        $name = $this->owner->getPrisonerData()->getAll(true)[$data[1]];
        if ($name == $player->getName()) {
          $player->sendMessage($this->owner->getTitle().$this->owner->getMessage("EMessage7"));
          return;
        }

        if ($this->owner->isOnline($name)) {
          $player->sendMessage($this->owner->getTitle().sprintf($this->owner->getMessage("Message3"), $name));
          $this->owner->toRelease($this->owner->getServer()->getPlayer($name), $name);
        } else {
          $player->sendMessage($this->owner->getTitle().$this->owner->getMessage("EMessage5"));
        }
        break;
    }
  }

  public function sendSecondForm($data, $player): void
  {
    if ($data == 0) {
      $this->owner->uiManager->sendUI(UIManager::FORM_SELECT_OTU, $player);
    } else {
      if (count($this->owner->getPrisonerData()->getAll(true)) == 0) {
        $player->sendMessage($this->owner->getTitle().$this->owner->getMessage("EMessage6"));
        return;
      }
      
      $this->owner->uiManager->sendUI(UIManager::FORM_SELECT_DEOTU, $player);
    }
  }

  public function onPlayerJoin(PlayerJoinEvent $event): void
  {
    if ($this->owner->containPrisoner($event->getPlayer()->getName())) {
      $this->owner->teleportToPrison($event->getPlayer());
    }
  }

  public function onPlayerDeath(PlayerDeathEvent $event): void
  {
    if ($this->owner->containPrisoner($event->getPlayer()->getName())) {
      $this->owner->teleportToPrison($event->getPlayer());
    }
  }

  public function onPlayerBucket(PlayerBucketEvent $event): void
  {
    if ($this->owner->containPrisoner($event->getPlayer()->getName())) {
      $event->getPlayer()->sendMessage($this->owner->getTitle().$this->owner->getMessage("Message16"));
      $event->setCancelled();
    }
  }

  public function onPlayerCommandPreprocess(PlayerCommandPreprocessEvent $event): void
  {
    if ($this->owner->containPrisoner($event->getPlayer()->getName())) {
      if (substr($event->getMessage(), 0, 1) == "/") {
        $event->getPlayer()->sendMessage($this->owner->getTitle().$this->owner->getMessage("Message17"));
        $event->setCancelled();
      }
    }
  }

  public function onBlockBreak(BlockBreakEvent $event): void
  {
    if ($this->owner->containPrisoner($event->getPlayer()->getName())) {
      $event->getPlayer()->sendMessage($this->owner->getTitle().$this->owner->getMessage("Message14"));
      $event->setCancelled();
    }
  }

  public function onBlockPlace(BlockPlaceEvent $event): void
  {
    if ($this->owner->containPrisoner($event->getPlayer()->getName())) {
      $event->getPlayer()->sendMessage($this->owner->getTitle().$this->owner->getMessage("Message15"));
      $event->setCancelled();
    }
  }

  public function onPlayerGameModeChange(PlayerGameModeChangeEvent $event): void
  {
    if ($this->owner->containPrisoner($event->getPlayer()->getName())) {
      $event->setCancelled();
    }
  }

}
<?php
namespace popkechupki\imprisonment;

use pocketmine\Player;
use pocketmine\Server;
use pocketmine\plugin\PluginBase;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\level\Position;
use pocketmine\utils\Config;
use pocketmine\utils\TextFormat;

use popkechupki\imprisonment\EventListener;
use popkechupki\imprisonment\UIManager;

class Imprisonment extends PluginBase
{

  private $title;
  private $prisonPosition;

  public function onEnable(): void
  {
    $this->loadConfig();
    $this->initMessage();
    $this->initPrisonPosition();
    $this->uiManager = new UIManager($this);
    $this->getServer()->getPluginManager()->registerEvents(new EventListener($this), $this);
  }

  public function loadConfig(): void
  {
    $this->saveDefaultConfig();
    $this->reloadConfig();
    if(!file_exists($this->getDataFolder())) @mkdir($this->getDataFolder(), 0744, true);
    $this->config = new Config($this->getDataFolder()."config.yml", Config::YAML);
    $this->prisonerData = new Config($this->getDataFolder()."prisoner-data.yml", Config::YAML);
  }

  public function onCommand(CommandSender $sender, Command $command, string $label, array $params): bool
  {
    if (!$sender instanceof Player) {
      $this->getServer()->getLogger()->warning($this->getMessage("EMessage1"));
      return true;
    }

    $senderName = $sender->getName();
    if ($command->getName() == "prison") {
      $this->uiManager->sendUI(UIManager::FORM_SELECT_OPERATE, $sender);
      return true;
    }
    return false;
  }

  public function initMessage(): void
  {
    $this->title = $this->config->get("Message0");
  }

  public function initPrisonPosition(): void
  {
    $this->prisonPostion = $this->config->getAll()["prisonPosition"];
  }

  public function isOnline($targetPlayer): bool
  {
    if ($targetPlayer == null) {
      $sender->sendMessage($this->title.$this->getMessage("EMessage5"));
      return false;
    } else {
      return true;
    }
  }

  ///////////////
  //    API    //
  ///////////////

  public function toPrison($targetPlayer, $targetName): void
  {
    $targetPlayer->sendMessage($this->title.$this->getMessage("Message11"));
    $this->teleportToPrison($targetPlayer);
    $this->prisonerData->set($targetName, "forever");
    $this->prisonerData->save();
  }

  public function toRelease($targetPlayer, $targetName): void
  {
    $targetPlayer->sendMessage($this->title.$this->getMessage("Message13"));
    $targetPlayer->teleport($this->getServer()->getDefaultLevel()->getSafeSpawn());
    $this->prisonerData->remove($targetName);
    $this->prisonerData->save();
  }

  public function containPrisoner($targetName): bool
  {
    if (array_key_exists($targetName, $this->getPrisonerData()->getAll())) {
      return true;
    } else {
      return false;
    }
  }

  public function teleportToPrison($targetPlayer): void
  {
    $targetPlayer->teleport(new Position($this->prisonPostion["x-pos"],$this->prisonPostion["y-pos"],$this->prisonPostion["z-pos"],$this->getServer()->getLevelByName($this->prisonPostion["level-pos"])));
  }

  public function getOnlinePlayers()
  {
    $players = $this->getServer()->getOnlinePlayers();
    foreach ($players as $player) {
        $name = $player->getName();
        $form_arrays[] = $name;
    }
    return $form_arrays;
  }

  public function getConfigData($key)
  {
    return $this->config;
  }

  public function getPrisonerData(): Config
  {
    return $this->prisonerData;
  }

  public function getTitle(): string
  {
    return $this->title;
  }

  public function getMessage($key)
  {
    return $this->config->get($key);
  }

  public function getPrisonPosition()
  {
    return $this->prisonPostion;
  }
}
<?php
namespace popkechupki\imprisonment;

use pocketmine\network\mcpe\protocol\ModalFormRequestPacket;

class UIManager
{
  const FORM_SELECT_OPERATE = 2003;
  const FORM_SELECT_OTU = 2004;
  const FORM_SELECT_DEOTU = 2005;

  function __construct(Imprisonment $mainClass)
  {
    $this->owner = $mainClass;
  }

  public function sendUI($formId, $player): void
  {
    $pk = new ModalFormRequestPacket();
    $pk->formId = $formId;
    switch ($formId) {
      case self::FORM_SELECT_OPERATE:
        $pk->formData = $this->getFormSelectOperate();
        break;

      case self::FORM_SELECT_OTU:
        $pk->formData = $this->getFormSelectOtu();
        break;

      case self::FORM_SELECT_DEOTU;
        $pk->formData = $this->getFormSelectDeOtu();
        break;
    }
    $player->dataPacket($pk);
  }

  /**
   *ID: 2003
   */
  public function getFormSelectOperate()
  {
    $data = [];
    $data["type"] = "form";
    $data["title"] = "Imprisonment";
    $data["content"] = "å¸Œæœ›ã™ã‚‹æ“ä½œã‚’é¸æŠžã—ã¦ãã ã•ã„";

    $otu = ["text" => "æŠ•ç„ã™ã‚‹"];
    $data["buttons"][] = $otu;

    $deotu["text"] = "å‡ºæ‰€ã•ã›ã‚‹";
    $data["buttons"][] = $deotu;

    $json = $this->getEncodedJson($data);
    return $json;
  }

  /**
   *ID: 2004
   */
  public function getFormSelectOtu()
  {
    $data = [];
    $data["type"] = "custom_form";
    $data["title"] = "Imprisonment - Otu";

    $label["type"] = "label";
		$label["text"] = "æŠ•ç„ã™ã‚‹ãƒ—ãƒ¬ã‚¤ãƒ¤ãƒ¼ã‚’é¸æŠžã—ã¦ã€Œé€ä¿¡ã€ã‚’æŠ¼ã—ã¦ãã ã•ã„";
    $data["content"][] = $label;

    $dropdown["type"] = "dropdown";
    $dropdown["text"] = "ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã®ãƒ—ãƒ¬ã‚¤ãƒ¤ãƒ¼";
    $dropdown["options"] = $this->owner->getOnlinePlayers();
    $dropdown["default"] = null;
    $data["content"][] = $dropdown;

    $json = $this->getEncodedJson($data);
    return $json;
  }

  /**
   *ID: 2005
   */
  public function getFormSelectDeOtu()
  {
    $data = [];
    $data["type"] = "custom_form";
    $data["title"] = "Imprisonment - DeOtu";

    $label["type"] = "label";
		$label["text"] = "å‡ºæ‰€ã•ã›ã‚‹ãƒ—ãƒ¬ã‚¤ãƒ¤ãƒ¼ã‚’é¸æŠžã—ã¦ã€Œé€ä¿¡ã€ã‚’æŠ¼ã—ã¦ãã ã•ã„";
    $data["content"][] = $label;

    $dropdown["type"] = "dropdown";
    $dropdown["text"] = "æŠ•ç„ä¸­ã®ãƒ—ãƒ¬ã‚¤ãƒ¤ãƒ¼";
    $dropdown["options"] = $this->owner->getPrisonerData()->getAll(true);
    $dropdown["default"] = null;
    $data["content"][] = $dropdown;

    $json = $this->getEncodedJson($data);
    return $json;
  }

  public function getEncodedJson($data)
	{
		return json_encode($data, JSON_PRETTY_PRINT | JSON_BIGINT_AS_STRING | JSON_UNESCAPED_UNICODE);
	}
}
ö×EŽ’Ø†„êvtžðš±Û<¼y   GBMB