
<?php
echo "PocketMine-MP plugin ranks v1.0.0
This file has been generated using DevTools v1.15.0 at Tue, 03 May 2022 18:26:48 +0900
----------------
Name: ranks
Version: 1.0.0
Main: matsuyuki\\ranks\\rank
Api: 4.0.0
Depend: EconomyAPI
Description: 称号を変えるプラグイン。ショップも作れます。
Authors: 
Website: 
CreationDate: 1651570008
";
__HALT_COMPILER(); ?>
             E  a:9:{s:4:"name";s:5:"ranks";s:7:"version";s:5:"1.0.0";s:4:"main";s:20:"matsuyuki\ranks\rank";s:3:"api";s:5:"4.0.0";s:6:"depend";a:1:{i:0;s:10:"EconomyAPI";}s:11:"description";s:66:"称号を変えるプラグイン。ショップも作れます。";s:7:"authors";s:0:"";s:7:"website";s:0:"";s:12:"creationDate";i:1651570008;}   LICENSE  Ypb  ޘ0      
   plugin.yml%  Ypb%  
      	   README.md  Ypb  ~$o      (   src/matsuyuki/ranks/form/newrankform.php3  Ypb3  Ұ      +   src/matsuyuki/ranks/form/changerankform.php	  Ypb	  n      %   src/matsuyuki/ranks/form/menuform.php  Ypb  ^H         src/matsuyuki/ranks/rank.php?,  Ypb?,  "      This is free and unencumbered software released into the public domain.

Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.

In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

For more information, please refer to <http://unlicense.org/>name: ranks
main: matsuyuki\ranks\rank
api: 4.0.0
version: 1.0.0
author: matsuyuki
description: 称号を変えるプラグイン。ショップも作れます。
permissions:
  ranks.mkrankshop:
    description: この権限を持っている人は、称号ショップを作成・削除することができる
    default: op
  ranks.mkoriginalrank:
    description: この権限を持っている人は、economyAPIのmoneyを使用して自分の称号を作ることができる
    default: true
  ranks.changerank:
    description: この権限を持っている人は、称号履歴を用いて称号を変更することができる
    default: true
  ranks.usemenuform:
    description: この権限を持っている人は、メニュー画面を使うことができる(各機能を使う際はそれぞれの権限が必要)
    default: true
  ranks.changecost:
    description: この権限を持っている人は、称号の作成にかかる費用を変えることができる
    default: op
commands:
  mkrank:
    description: オリジナルの称号を作成します
    usage: "/mkrank"
    permission: ranks.mkoriginalrank
  chgrank:
    description: 称号を変更します
    usage: "/chgrank"
    permission: ranks.changerank
  rank:
    description: 称号のメニュー画面を開きます
    usage: "/rank"
    permission: ranks.usemenuform
  chgrankcost:
    description: 称号の新規作成にかかる費用を変えます
    usage: "/chgrankcost <費用(半角数字)>"
    permission: ranks.changecost
depend:
  - EconomyAPI
# ranks - 履歴付き称号プラグイン for pmmp4
ゲーマータグの横に称号を表示するプラグインです。
<br>オリジナル称号の作成、称号のショップ看板の作成、過去に作成/購入した称号の変更等ができます。
<br>**動作には[EconomyAPI](https://poggit.pmmp.io/p/EconomyAPI/5.7.3-PM4)が必要です**。

## 特徴

- 鯖民が自分の称号を作ることができます
    - 称号を作る際にゲーム内マネーを取ることもできます
    - 作成する称号に文字数制限を課すこともできます(§は文字数制限にカウントされません)
- 運営は称号のショップ看板を作ることができます
    - 販売値段は称号ごとに自由に設定できます
    - 購入時に、購入者にメッセージを送ることもできます
- 一度作成/購入した称号は、後から何度でも自由に変更できます
- 称号の購入/変更はformによるGUIで行うため、直観的に操作できます
- 初めて参加したプレイヤーには、予め設定した称号が自動で付与されます(初期状態では、「§a鯖民」)

## コマンド

コマンド | 概要 | デフォルト権限
:---:|:---|:---
/mkrank | オリジナルの称号を作ることができます<br>/rankと打ってから「称号を新規作成」を選択しても同じことができます | 全員
/chgrank | 今までの購入/作成履歴から称号を変更できます<br>/rankと打ってから「履歴から称号を変更」を選択しても同じことができます | 全員
/chgrankcost | 称号の作成にかかる費用を変更できます | OPのみ

## 使用方法

ranks.phar もしくは ranksフォルダ をpluginsフォルダの中に入れてください。ranksフォルダで使用する場合は、.pharとしてアーカイブ化されていないファイルを読み込むために[DevTools](https://poggit.pmmp.io/p/DevTools)が必要です。

## 称号の作成費用/文字数制限/初期称号を変えるには

plugin_data/ranks/config.yml内にある、
<br>「mkcost」の欄を変えると称号作成費用が、
<br>「len」の欄を変えると文字数制限が、
<br>「init」の欄を変えると初期称号が
<br>かわります(作成費用は「/chgrankcost」でも変えられます)。

## データの保存先

データは、plugin_data/ranks内にjsonとyaml形式で保存されています。

ファイル名 | 概要
:---:|:---
rankshop.json | 称号ショップ看板に関するデータを保存しています。
rank.json | プレイヤーの称号履歴などを保存しています。
config.yml | プラグインの設定です。

## 表示のされ方

チャット時:
> <[称号]プレイヤー名> テキスト

タグ:
> [称号]プレイヤー名

## ライセンスの変更について

simplemailプラグインとは異なるライセンスを使用しました(wtfpl->The Unlicense)。
<br>使用の際はご注意ください。

## Thanks

「一度作成/購入した称号は履歴から自由に変更できる」という案は SAGAと申す#5262 さんから頂きました。この場を借りて御礼申し上げます。
<?php

namespace matsuyuki\ranks\form;

use pocketmine\player\Player;
use pocketmine\utils\Config;
use pocketmine\form\Form;
use matsuyuki\ranks\rank;
use onebone\economyapi\EconomyAPI;

class newrankform implements Form {
    
    public function __construct(Player $player, rank $rank, string $err = "", string $default = "") {

        $datafolder = $rank->getDataFolder();
        $this->rank = $rank;
        $this->player = $player;
        $this->playername = $player->getName();
        $this->cfrank = new Config($datafolder. "rank.json", Config::JSON);
        $this->cfconfig = new Config($datafolder. "config.yml", Config::YAML, [
            "mkcost" => 100000,
            "len" => 10,
            "initrank" => "§a鯖民"
        ]);
        $this->cfconfig->reload();
        $this->err = $err;
        if ($err === "" && EconomyAPI::getInstance()->myMoney($player->getName()) < $this->cfconfig->get("mkcost")) {
            $this->err = "\n§l§cあなたは称号を作成できるだけのお金を持っていません。\n§l§cこのまま進んでも、称号は作成できません。";
        }
        $this->default = $default;

    }

    public function handleResponse(Player $player, $data):void {

        if ($data === null) {
            return;
        }
        $this->cfrank->reload();
        $playername = $player->getName();
        $rankdata = $this->cfrank->get($playername);
        if ($data[3] === false) {
            $player->sendForm(new newrankform($player, $this->rank,
             "\n§l§c称号を作成するには、支払い確認ボタンにチェックを入れてください。", $data[1]));
            return;
        }
        if (substr($data[1], -1) === "§") { //最後の文字列を取得する
            $player->sendForm(new newrankform($player, $this->rank,
            "\n§l§c称号の最後にセクション記号を置くことはできません。", $data[1]));
           return;
        }
        $ranklen = mb_strlen($data[1]) - (substr_count($data[1], "§") * 2) + (substr_count($data[1], "§§") * 2);
        if ($ranklen > $this->cfconfig->get("len")) { //§除いた文字列が指定文字以上
            $player->sendForm(new newrankform($player, $this->rank,
            "\n§l§c称号の長さが上限を越しています。(". $ranklen. ">". $this->cfconfig->get("len"). ")", $data[1]));
           return;
        }
        if ($ranklen == 0) { //称号の長さが0文字
            $player->sendForm(new newrankform($player, $this->rank,
            "\n§l§c空の称号を作ることはできません。", $data[1]));
           return;
        }
        if (EconomyAPI::getInstance()->myMoney($playername) < $this->cfconfig->get("mkcost")) {
            $player->sendForm(new newrankform($player, $this->rank,
            "\n§l§cあなたは称号を作成できるだけのお金を持っていません。", $data[1]));
           return;
        }
        $exist = false;
        foreach ($rankdata["history"] as $eachrank) {
           if ($eachrank === $data[1]) {
              $exist = true;
           }
        }
        if ($exist === true) {
            $player->sendForm(new newrankform($player, $this->rank,
            "\n§l§c既に同じ称号を作成済みです。", $data[1]));
           return;
        }
        array_unshift($rankdata["history"], $data[1]);
        EconomyAPI::getInstance()->reduceMoney($playername, $this->cfconfig->get("mkcost"));
        $this->cfrank->set($playername, $rankdata);
        $this->cfrank->save();
        if ($data[2] === true) {
            $player->setDisplayName("[". $data[1]. "§r] ". $playername);
            $player->setNameTag("[". $data[1]. "§r] ". $playername);
        }
        $player->sendMessage("§a【ranks】§f称号を作成しました！");
    }

    public function jsonSerialize() {

        $this->cfconfig->reload();
        $cost = $this->cfconfig->get("mkcost");
        $moneyprefix = EconomyAPI::getInstance()->getMonetaryUnit();
        return [
            "type" => "custom_form",
            "title" => "称号/新しい称号を作る",
            "content" => [
                [
                    "type" => "label",
                    "text" => "新しい称号を作ります。\n後から他の称号に変更した場合でも、この称号は無料で再度つけることができます。\n称号の最大文字数は". $this->cfconfig->get("len"). "文字です。". $this->err
                ],
                [
                    "type" => "input",
                    "text" => "作成する称号:",
                    "placeholder" => "作成する称号を入力...",
                    "default" => $this->default
                ],
                [
                    "type" => "toggle",
                    "text" => "現在の称号を作成した称号に変える",
                    "default" => false
                ],
                [
                    "type" => "toggle",
                    "text" => "(支払い確認)新しい称号を作成するには、ゲーム内マネー". $cost. $moneyprefix. "が必要であることを理解しています。",
                    "default" => false
                ]
            ]
        ];

    }
}<?php

namespace matsuyuki\ranks\form;

use pocketmine\player\Player;
use pocketmine\utils\Config;
use pocketmine\form\Form;
use matsuyuki\ranks\rank;

class changerankform implements Form {
    
    public function __construct(Player $player, rank $rank, string $err = "") {

        $datafolder = $rank->getDataFolder();
        $this->rank = $rank;
        $this->player = $player;
        $this->playername = $player->getName();
        $this->cfrank = new Config($datafolder. "rank.json", Config::JSON);
        $this->err = $err;

    }

    public function handleResponse(Player $player, $data):void {

        if ($data === null) {
            return;
        }
        $this->cfrank->reload();
        $playername = $player->getName();
        $rankdata = $this->cfrank->get($this->playername);
        $ranks = $rankdata["history"];
        if (count($ranks) === 0) {
            return;
        } else {
            $rank = $ranks[$data];
            $rankdata["now"] = $rank;
            $player->setDisplayName("[". $rank. "§r] ". $playername);
            $player->setNameTag("[". $rank. "§r] ". $playername);
            $this->cfrank->set($playername, $rankdata);
            $this->cfrank->save();
            $player->sendMessage("§a【ranks】§f称号を変更しました！");
        }
        
    }

    public function jsonSerialize() {

        $this->cfrank->reload();
        $ranks = $this->cfrank->get($this->playername);
        $ranks = $ranks["history"];
        if (count($ranks) === 0) {

            return [
                "type" => "form",
                "title" => "称号/称号を変更する",
                "content" => "§c§l称号がありません",
                "buttons" => [
                    ["text" => "§l閉じる"]
                ]
            ];

        } else {

            $buttons = [];
            foreach ($ranks as $rank) {
                $buttons[] = ["text" => $rank];
            }
            return [
                "type" => "form",
                "title" => "称号/称号を変更する",
                "content" => "変更する称号を選択してください",
                "buttons" => $buttons
            ];

        }

    }
}<?php

namespace matsuyuki\ranks\form;

use pocketmine\player\Player;
use pocketmine\utils\Config;
use pocketmine\form\Form;
use matsuyuki\ranks\rank;
use matsuyuki\ranks\form\changerankform;
use matsuyuki\ranks\form\newrankform;
use onebone\economyapi\EconomyAPI;

class menuform implements Form {
    
    public function __construct(Player $player, rank $rank) {

        $datafolder = $rank->getDataFolder();
        $this->rank = $rank;
        $this->player = $player;
        $this->playername = $player->getName();
        $this->cfrank = new Config($datafolder. "rank.json", Config::JSON);

    }

    public function handleResponse(Player $player, $data):void {

        if ($data === null) {
            return;
        }
        switch ($data) {
            case 0: //履歴から称号を変更
                if (!$player->hasPermission("ranks.changerank")) {
                    $player->sendMessage("§c【ranks:Err】§f実行権限がありません");
                    return;
                }
                $player->sendForm(new changerankform($player, $this->rank));
                break;
            case 1: //称号を新規作成
                if (!$player->hasPermission("ranks.mkoriginalrank")) {
                    $player->sendMessage("§c【ranks:Err】§f実行権限がありません");
                    return;
                }
                $player->sendForm(new newrankform($player, $this->rank));
                break;
        }
        
    }

    public function jsonSerialize() {

        $this->cfrank->reload();
        $rank = $this->cfrank->get($this->playername);
        $rank = $rank["now"];
        return [
            "type" => "form",
            "title" => "称号/メニュー画面",
            "content" => "§7現在のテキストサンプル: §f<[". $rank. "§r§f]". $this->playername. "§r§f> テキスト\n§7所持金: §f"
            . EconomyAPI::getInstance()->myMoney($this->playername). EconomyAPI::getInstance()->getMonetaryUnit(),
            "buttons" => [
                ["text" => "§l履歴から称号を変更"],
                ["text" => "§l称号を新規作成"]
            ]
        ];
    }
}<?php

namespace matsuyuki\ranks; 

use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener; 
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\player\Player;
use pocketmine\utils\Config;
use pocketmine\event\block\SignChangeEvent;
use onebone\economyapi\EconomyAPI;
use pocketmine\block\utils\SignText;
use pocketmine\event\player\PlayerJoinEvent;
use pocketmine\event\block\BlockBreakEvent;
use pocketmine\event\player\PlayerInteractEvent;
use matsuyuki\ranks\form\changerankform;
use matsuyuki\ranks\form\menuform;
use matsuyuki\ranks\form\newrankform;

class rank extends PluginBase implements Listener { 

   public function onEnable():void {

      $this->getServer()->getPluginManager()->registerEvents($this, $this);
      $this->cfrank = new Config($this->getDataFolder() ."rank.json", Config::JSON);
      $this->cfconfig = new Config($this->getDataFolder() ."config.yml", Config::YAML, [
         "mkcost" => 100000,
         "len" => 10,
         "initrank" => "§a鯖民"
      ]);
      $this->cfshop = new Config($this->getDataFolder() ."rankshop.json", Config::JSON, [
         "shopdata" => []
      ]);
      $this->confirm = [];

   }

   public function onJoin(PlayerJoinEvent $event) {

      $player = $event->getPlayer();
      $playername = $player->getName();
      $this->cfrank->reload();
      $this->cfconfig->reload();
      $config = $this->cfconfig->getAll();
      $cfrank = $this->cfrank->getAll();
      if (!array_key_exists($playername, $cfrank)) { //初参加
         $cfrank[$playername]["now"] = $config["initrank"];
         $cfrank[$playername]["history"][] = $config["initrank"];
         $this->cfrank->set($playername, $cfrank[$playername]);
         $this->cfrank->save();
         $this->cfrank->reload();
         $cfrank = $this->cfrank->getAll();
      }
      $player->setDisplayName("[". $cfrank[$playername]["now"]. "§r] ". $playername);
      $player->setNameTag("[". $cfrank[$playername]["now"]. "§r] ". $playername);

   }

   public function onSignChange(SignChangeEvent $event) {

      if ($event->getNewText()->getLine(3) === "mkrankshop") {

         if (!$event->getPlayer()->hasPermission("ranks.mkrankshop")) { //作成者が権限を持っていない
            $event->getPlayer()->sendMessage("§c【ranks:Err】§fあなたはこの看板を作る権限を持っていません");
            return;
         }
         $block = $event->getBlock();
         $rank = $event->getNewText()->getLine(0);
         $price = $event->getNewText()->getLine(1);
         $message = $event->getNewText()->getLine(2);
         if (!is_numeric($price)) { //費用が数値じゃない
            $event->getPlayer()->sendMessage("§c【ranks:Err】§f費用(看板2行目)は数値である必要があります");
            return;
         }
         $position = $block->getPosition()->getX(). ":". $block->getPosition()->getY(). ":".
            $block->getPosition()->getZ(). ":". $block->getPosition()->getWorld()->getFolderName();
         $rankshopdata = [
            "rank" => $rank,
            "price" => $price,
            "message" => $message,
            "creator" => $event->getPlayer()->getName(),
            "position" => $position
         ];
         $this->cfshop->reload();
         $allrankshopdata = $this->cfshop->get("shopdata");
         foreach ($allrankshopdata as $index => $eachshopdata) { //shopdataが重複してたら削除
            if ($rankshopdata["position"] === $eachshopdata["position"]) {
               unset($allrankshopdata[$index]);
               $allrankshopdata = array_values($allrankshopdata);
            }
         }
         $allrankshopdata[] = $rankshopdata;
         $this->cfshop->set("shopdata", $allrankshopdata);
         $this->cfshop->save();
         $signcontents = [
            "§l§b【称号ショップ】",
            $rank,
            "§l§0価格: §b". $price. " ".EconomyAPI::getInstance()->getMonetaryUnit(),
            "§l§a看板タップで購入!"
         ];
         $event->setNewText(new SignText($signcontents));
         
      }

   }

   public function onTap(PlayerInteractEvent $event):void {

      $block = $event->getBlock();
      if ($block->getId() != 63 && $block->getId() != 68) { //タップしたブロックが看板じゃないなら返す
         return;
      }
      $player = $event->getPlayer();
      $playername = $player->getName();
      $position = $block->getPosition()->getX(). ":". $block->getPosition()->getY(). ":".
      $block->getPosition()->getZ(). ":". $block->getPosition()->getWorld()->getFolderName();
      $this->cfshop->reload();
      $shopdatas = $this->cfshop->get("shopdata"); //全部のショップデータ
      $shopdata = null; //看板のショップデータ
      foreach ($shopdatas as $eachshopdata) {
         if ($eachshopdata["position"] === $position) {
            $shopdata = $eachshopdata;
         }
      }
      if ($shopdata === null) { //タップした看板が称号の物ではないなら返す
         return;
      }
      if (!array_key_exists($playername, $this->confirm)) { //もし一度も確認してないなら
         $this->confirm[$playername] = 1; //1970年1月1日00:00:01に確認したことにする
      }
      if (time() - $this->confirm[$playername] > 10) { //最後の確認から10秒以上が経過
         $player->sendMessage("§a§l【ranks:購入確認】");
         $player->sendMessage("§7称号名: §r". $shopdata["rank"]);
         $player->sendMessage("§7値段: §b". $shopdata["price"]. EconomyAPI::getInstance()->getMonetaryUnit());
         $player->sendMessage("§7作成者: §b". $shopdata["creator"]);
         $player->sendMessage("§f称号を購入する場合は、再度看板をタップしてください。");
         $this->confirm[$playername] = time(); //確認時間を更新
         return;
      }

      $this->cfrank->reload();
      $rankdata = $this->cfrank->get($playername);
      $exist = false;
      foreach ($rankdata["history"] as $eachrank) {
         if ($eachrank === $shopdata["rank"]) {
            $exist = true;
         }
      }
      if ($exist === true) {
         $player->sendMessage("§c【ranks:Err】§fあなたはすでにこの称号を持っています。");
         return;
      }
      array_unshift($rankdata["history"], $shopdata["rank"]);
      EconomyAPI::getInstance()->reduceMoney($playername, $shopdata["price"]);
      $this->cfrank->set($playername, $rankdata);
      $this->cfrank->save();
      $player->sendMessage("§a【ranks】§f称号を購入しました！");
      if (mb_strlen($shopdata["message"]) != 0) {
         $player->sendMessage("§7作成者からのメッセージ: §f". $shopdata["message"]);
      }

   }

   public function onBreak(BlockBreakEvent $event):void {

      $block = $event->getBlock();
      if ($block->getId() != 63 && $block->getId() != 68) { //タップしたブロックが看板じゃないなら返す
         return;
      }
      $player = $event->getPlayer();
      $playername = $player->getName();
      $position = $block->getPosition()->getX(). ":". $block->getPosition()->getY(). ":".
      $block->getPosition()->getZ(). ":". $block->getPosition()->getWorld()->getFolderName();
      $this->cfshop->reload();
      $shopdatas = $this->cfshop->get("shopdata"); //全部のショップデータ
      $delindex = null; //削除するデータのインデックス
      foreach ($shopdatas as $index => $eachshopdata) { 
         if ($position === $eachshopdata["position"]) {
            $delindex = $index;
         }
      }
      if ($delindex === null) { //壊した看板が称号の物ではないなら返す
         return;
      }
      if (!$player->hasPermission("ranks.mkrankshop")) { //破壊者が権限を持っていない
         $player->sendMessage("§c【ranks:Err】§fあなたはこの看板を壊す権限を持っていません。");
         $event->cancel();
         return;
      } else {
         unset($shopdatas[$index]);
         $shopdatas = array_values($shopdatas);
         $this->cfshop->set("shopdata", $shopdatas);
         $this->cfshop->save;
         $player->sendMessage("§a【ranks】§f称号看板を削除しました。");
      }

   }

   public function onCommand(CommandSender $sender, Command $command, string $label, array $args):bool {
     
      switch ($command->getName()) {
         case "mkrank":

            if (!$sender instanceof Player) {
               $sender->sendMessage("§c【ranks:Err】§fコンソールからは実行できません");
               return false;
            }
            if (!$sender->hasPermission("ranks.mkoriginalrank")) {
               $sender->sendMessage("§c【ranks:Err】§f実行権限がありません");
               return false;
            }
            $sender->sendForm(new newrankform($sender, $this));
            return true;

         case "chgrank":

            if (!$sender instanceof Player) {
               $sender->sendMessage("§c【ranks:Err】§fコンソールからは実行できません");
               return false;
            }
            if (!$sender->hasPermission("ranks.changerank")) {
               $sender->sendMessage("§c【ranks:Err】§f実行権限がありません");
               return false;
            }
            $sender->sendForm(new changerankform($sender, $this));
            return true;

         case "rank":

            if (!$sender instanceof Player) {
               $sender->sendMessage("§c【ranks:Err】§fコンソールからは実行できません");
               return false;
            }
            if (!$sender->hasPermission("ranks.usemenuform")) {
               $sender->sendMessage("§c【ranks:Err】§f実行権限がありません");
               return false;
            }
            $sender->sendForm(new menuform($sender, $this));
            return true;

         case "chgrankcost":

            if (!$sender->hasPermission("ranks.changecost")) {
               $sender->sendMessage("§c【ranks:Err】§f実行権限がありません");
               return false;
            }
            if (empty($args[0])) {
               $sender->sendMessage("§c【ranks:Err】§f/chgrankcost <費用> のように使用してください。");
               return false;
            }
            if (!is_numeric($args[0])) {
               $sender->sendMessage("§c【ranks:Err】§fあなたが入力した文字(". $args[0]. ")は、数値に変換できないか大きすぎます。半角数字で入力してください。");
               return false;
            }
            if ((int) $args[0] < 0) {
               $sender->sendMessage("§c【ranks:Err】§f費用を0未満にすることはできません(". $args[0]. "<0)。");
               return false;
            }
            $this->cfconfig->reload();
            $oldmkcost = $this->cfconfig->get("mkcost");
            $this->cfconfig->set("mkcost", (int) $args[0]);
            $this->cfconfig->save();
            $sender->sendMessage("§a【ranks】§f作成費用を変更しました！(". (string) $oldmkcost. "->". $args[0]. ")");
            return true;

      }
      

   }

}
Q:p>Яqñ3k\   GBMB