解決済み (また)自作プラグインでエラー

すごろく

Member
12 月 27, 2018
66
22
8
(また)自分のプラグインでエラーが…
エラー内容
ParseError: "syntax error, unexpected 'case' (T_CASE)" (EXCEPTION) in "plugins/ShopPlugin-v1.0.0.phar/src/ShopPlugin/ShopPlugin" at line 118
"plugins/ShopPlugin-v1.0.0.phar/src/ShopPlugin/ShopPlugin"の中身
PHP:
<?php

namespace ShopPlugin;

use pocketmine\Player;
use pocketmine\Server;
use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\event\player\PlayerInteractEvent;
use pocketmine\event\player\PlayerJoinEvent;
use pocketmine\utils\Config;
use pocketmine\utils\TextFormat;
use pocketmine\event\server\DataPacketReceiveEvent;
use pocketmine\network\mcpe\protocol\ModalFormRequestPacket;
use pocketmine\item\Item;

use MixCoinSystem\MixCoinSystem;
use MoneyPlugin\MoneyPlugin;
use onebone\economyapi\EconomyAPI;

class ShopPlugin extends PluginBase implements Listener {

    public function onEnable() {
        $this->getServer()->getPluginManager()->registerEvents($this,$this);
        $this->getLogger()->info("ShopPluginが読み込まれました。");
        if (!file_exists($this->getDataFolder())) {
            @mkdir($this->getDataFolder(), 0744, true);
        }
        if(!file_exists($this->getDataFolder()."datas")) {
            @mkdir($this->getDataFolder()."datas", 0744, true);
        }
        $this->shops = new Config($this->getDataFolder()."datas" . "shops.yml", Config::YAML);
        $this->items = new Config($this->getDataFolder()."datas" . "items.yml", Config::YAML);
        $this->api = new Config($this->getDataFolder() . "api.yml",Config::YAML,array(
          //APIを決めます。
          //対応しているプラグインは、EconomyAPI、MixCoinSystem、MoneyPluginの3つです。
          "api" => "EconomyAPI"
        ));
        if($this->api->get("api") === "EconomyAPI") {
         if($this->getServer()->getPluginManager()->getPlugin("EconomyAPI") !== null) {
          $this->getLogger()->info("EconomyAPIを認識しました。");
         }else{
          $this->getLogger()->info("EconomyAPIを認識できません。プラグインが見つかりません。プラグインを追加してください。");
          $this->getServer()->shutdown();
         }
        }elseif($this->api->get("api") === "MixCoinSystem") {
         if($this->getServer()->getPluginManager()->getPlugin("MixCoinSystem") !== null) {
          $this->getLogger()->info("MixCoinSystemを認識しました。");
         }else{
          $this->getLogger()->info("MixCoinSystemを認識できません。プラグインが見つかりません。プラグインを追加してください。");
          $this->getServer()->shutdown();
         }
        }elseif($this->api->get("api") === "MoneyPlugin") {
         if($this->getServer()->getPluginManager()->getPlugin("MoneyPlugin") !== null) {
          $this->getLogger()->info("MoneyPluginを認識しました。");
         }else{
          $this->getLogger()->info("MoneyPluginを認識できません。プラグインが見つかりません。プラグインを追加してください。");
          $this->getServer()->shutdown();
         }
        }else{
         $this->getLogger()->info("そのプラグインに対応していない、もしくは、api.ymlに問題があります。");
         $this->getServer()->shutdown();
        }
    }

    public function onDisable() {
        $this->getLogger()->info("ご利用ありがとうございました。");
    }

    public function onCommand(CommandSender $sender, Command $command, string $label, array $args): bool{
          $pname = $sender->getName();
        switch($command->getName()){

       
        case "shop":
            if($sender->getName() === "CONSOLE"){
             $sender->sendMessage("[Shop] /shopは、ゲームから実行してください。");
            }elseif(!isset($args[0])){
             $sender->sendMessage("[Shop] 使い方:/shop <ショップ名> <アイテムID>");
            }elseif(!($this->shops->get($args[0]))) {
             $sender->sendMessage("[Shop] 存在するショップを入力してください。");
            }elseif(!isset($args[1])){
             $sender->sendMessage("[Shop]使い方:/shop <ショップ名> <アイテムID>");
            }elseif(!is_numeric($args[1])){
             $sender->sendMessage("[Shop] 数字のみを入力してください。");
            }elseif($this->items->get($args[0],$args[1]) == null){
             $sender->sendMessage("[Shop] そのアイテムは販売されていません。");
            }else{
             if($this->api->get("api") === "EconomyAPI"){
              if($this->items->get($args[0],$args[1]) > EconomyAPI::getInstance()->mymoney($pname)){
               $sender->sendMessage("[Shop] 所持金が足りません。");
              }else{
               EconomyAPI::getInstance()->reduceMoney($pname,$this->items->get($args[0],$args[1]));
               Item::get($args[1]);
               $sender->sendMessage("[Shop] 取引が完了しました。");
              }
            }elseif($this->api->get("MixCoinSystem")){
             if($this->items->get($args[0],$args[1]) > MixCoinSystem::getInstance()->GetCoin($pname)){
               $sender->sendMessage("[Shop] 所持金が足りません。");
              }else{
               MixCoinSystem::getInstance()->MinusCoin($pname,$this->items->get($args[0],$args[1]));
               Item::get($args[1]);
               $sender->sendMessage("[Shop] 取引が完了しました。");
              }
            }elseif($this->api->get("api") === "MoneyPlugin"){
             if($this->items->get($args[0],$args[1]) > MoneyPlugin::getInstance()->getMoney($pname)){
               $sender->sendMessage("[Shop] 所持金が足りません。");
              }else{
               MoneyPlugin::getInstance()->removemoney($pname,$this->items->get($args[0],$args[1]));
               Item::get($args[1]);
               $sender->sendMessage("[Shop] 取引が完了しました。");
              }
            }
        break;

        case "shopadd":
            if(!(isset($args[0]))){
             $sender->sendMessage("[Shop] 使い方:/shopadd <ショップ名>");
            }elseif(!$sender->isOp()){
             $sender->sendMessage("[Shop] OP以外は実行できません。");
            }elseif($this->shops->get($args[0]) !== null){
             $sender->sendMessage("[Shop] そのShopは既に作成されています。作成されていないShopを追加してください。");
            }else{
             $this->shops->set($args[0]);
             $sender->sendMessage("[Shop] ショップ" . $args[0] . "を作成しました。");
             $this->shops->save();
            }
        break;

        case "shopdel":
            if(!($sender->isOp())){
             $sender->sendMessage("[Shop] OP以外は使用できません。");
            }elseif(!isset($args[0])){
             $sender->sendMessage("[Shop] 使い方:/shopdel <ショップ名>");
            }elseif($this->shops->get($args[0]) == null){
             $sender->sendMessage("[Shop] 作成されていないShopが選択されています。作成されているショップを入力してください。");
            }else{
             $sender->sendMessage("[Shop] Shop" . $args[0] ."を削除しました。");
             $this->shops->remove($args[0]);
             $this->shops->save();
            }
        break;

        case "itemadd":
            if(!($sender->isOp())){
             $sender->sendMessage("OPのみ実行できます。");
            }elseif(!isset($args[0])){
             $sender->sendMessage("[Shop] 使い方:/itemadd <ショップ名> <アイテムID> <値段>");
            }elseif($this->shops->get($args[0]) == null){
             $sender->sendMessage("[Shop] 選択されたShopは作成されていません。作成するか別のShopを選択してください。");
            }elseif(!isset($args[1])){
             $sender->sendMessage("[Shop] 使い方:/itemadd <ショップ名> <アイテムID> <値段>");
            }elseif(!is_numeric($args[1])){
             $sender->sendMessage("[Shop] アイテムIDは数字なので、数字以外入力できません。");
            }elseif(!isset($args[2])){
             $sender->sendMessage("[Shop] 使い方:/itemadd <ショップ名> <アイテムID> <値段>");
            }elseif(!is_numeric($args[2])){
             $sender->sendMessage("[Shop] 値段は数字のみを入力してください。");
            }elseif(0>= $args[2]){
             $sender->sendMessage("[Shop] 値段は1以上を入力してください。");
            }else{
             $this->items->set($args[0],$args[1],$args[2]);
             $this->items->save();
             $sender->sendMessage("[Shop] 商品を増やしました。");
            }
        break;

        case "itemdel":
            if(!($sender->isOp())){
             $sender->sendMessage("[Shop] OPのみ実行できます。");
            }elseif(!isset($args[0])){
             $sender->sendMessage("[Shop] 使い方:/itemdel <ショップ名> <アイテムID>");
            }elseif($this->shops->get($args[0]) == null){
             $sender->sendMessage("[Shop] 選択されたShopが作成されていません。作成するか別のShopを選択してください。");
            }elseif(!isset($args[1])){
             $sender->sendMessage("[Shop] 使い方:/itemdel <ショップ名> <アイテムID>");
            }elseif(!is_numeric($args[1])){
             $sender->sendMessage("[Shop] アイテムIDは数字です。数字のみを入力してください。");
            }elseif($this->shops->get($args[0],$args[1]) == null){
             $sender->sendMessage("[Shop] 入力されたアイテムIDは、ショップで販売されていません。販売されているものを入力してください。");
            }else{
             $this->items->remove($args[0],$args[1]);
             $this->items->save();
             $sender->sendMessage("[Shop] 削除が完了しました。");
             }
        break;

        case "shoplist":
            foreach($this->shops->get() as $allshop){
             $sender->sendMessage($allshop);
            }
        }
        return true;
    }

}
 
  • Like
Reactions: awa

awa

Well-known member
1月 8, 2018
169
72
28
新潟
github.com
(また)自分のプラグインでエラーが…
エラー内容
ParseError: "syntax error, unexpected 'case' (T_CASE)" (EXCEPTION) in "plugins/ShopPlugin-v1.0.0.phar/src/ShopPlugin/ShopPlugin" at line 118
"plugins/ShopPlugin-v1.0.0.phar/src/ShopPlugin/ShopPlugin"の中身
PHP:
<?php

namespace ShopPlugin;

use pocketmine\Player;
use pocketmine\Server;
use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\event\player\PlayerInteractEvent;
use pocketmine\event\player\PlayerJoinEvent;
use pocketmine\utils\Config;
use pocketmine\utils\TextFormat;
use pocketmine\event\server\DataPacketReceiveEvent;
use pocketmine\network\mcpe\protocol\ModalFormRequestPacket;
use pocketmine\item\Item;

use MixCoinSystem\MixCoinSystem;
use MoneyPlugin\MoneyPlugin;
use onebone\economyapi\EconomyAPI;

class ShopPlugin extends PluginBase implements Listener {

    public function onEnable() {
        $this->getServer()->getPluginManager()->registerEvents($this,$this);
        $this->getLogger()->info("ShopPluginが読み込まれました。");
        if (!file_exists($this->getDataFolder())) {
            @mkdir($this->getDataFolder(), 0744, true);
        }
        if(!file_exists($this->getDataFolder()."datas")) {
            @mkdir($this->getDataFolder()."datas", 0744, true);
        }
        $this->shops = new Config($this->getDataFolder()."datas" . "shops.yml", Config::YAML);
        $this->items = new Config($this->getDataFolder()."datas" . "items.yml", Config::YAML);
        $this->api = new Config($this->getDataFolder() . "api.yml",Config::YAML,array(
          //APIを決めます。
          //対応しているプラグインは、EconomyAPI、MixCoinSystem、MoneyPluginの3つです。
          "api" => "EconomyAPI"
        ));
        if($this->api->get("api") === "EconomyAPI") {
         if($this->getServer()->getPluginManager()->getPlugin("EconomyAPI") !== null) {
          $this->getLogger()->info("EconomyAPIを認識しました。");
         }else{
          $this->getLogger()->info("EconomyAPIを認識できません。プラグインが見つかりません。プラグインを追加してください。");
          $this->getServer()->shutdown();
         }
        }elseif($this->api->get("api") === "MixCoinSystem") {
         if($this->getServer()->getPluginManager()->getPlugin("MixCoinSystem") !== null) {
          $this->getLogger()->info("MixCoinSystemを認識しました。");
         }else{
          $this->getLogger()->info("MixCoinSystemを認識できません。プラグインが見つかりません。プラグインを追加してください。");
          $this->getServer()->shutdown();
         }
        }elseif($this->api->get("api") === "MoneyPlugin") {
         if($this->getServer()->getPluginManager()->getPlugin("MoneyPlugin") !== null) {
          $this->getLogger()->info("MoneyPluginを認識しました。");
         }else{
          $this->getLogger()->info("MoneyPluginを認識できません。プラグインが見つかりません。プラグインを追加してください。");
          $this->getServer()->shutdown();
         }
        }else{
         $this->getLogger()->info("そのプラグインに対応していない、もしくは、api.ymlに問題があります。");
         $this->getServer()->shutdown();
        }
    }

    public function onDisable() {
        $this->getLogger()->info("ご利用ありがとうございました。");
    }

    public function onCommand(CommandSender $sender, Command $command, string $label, array $args): bool{
          $pname = $sender->getName();
        switch($command->getName()){

      
        case "shop":
            if($sender->getName() === "CONSOLE"){
             $sender->sendMessage("[Shop] /shopは、ゲームから実行してください。");
            }elseif(!isset($args[0])){
             $sender->sendMessage("[Shop] 使い方:/shop <ショップ名> <アイテムID>");
            }elseif(!($this->shops->get($args[0]))) {
             $sender->sendMessage("[Shop] 存在するショップを入力してください。");
            }elseif(!isset($args[1])){
             $sender->sendMessage("[Shop]使い方:/shop <ショップ名> <アイテムID>");
            }elseif(!is_numeric($args[1])){
             $sender->sendMessage("[Shop] 数字のみを入力してください。");
            }elseif($this->items->get($args[0],$args[1]) == null){
             $sender->sendMessage("[Shop] そのアイテムは販売されていません。");
            }else{
             if($this->api->get("api") === "EconomyAPI"){
              if($this->items->get($args[0],$args[1]) > EconomyAPI::getInstance()->mymoney($pname)){
               $sender->sendMessage("[Shop] 所持金が足りません。");
              }else{
               EconomyAPI::getInstance()->reduceMoney($pname,$this->items->get($args[0],$args[1]));
               Item::get($args[1]);
               $sender->sendMessage("[Shop] 取引が完了しました。");
              }
            }elseif($this->api->get("MixCoinSystem")){
             if($this->items->get($args[0],$args[1]) > MixCoinSystem::getInstance()->GetCoin($pname)){
               $sender->sendMessage("[Shop] 所持金が足りません。");
              }else{
               MixCoinSystem::getInstance()->MinusCoin($pname,$this->items->get($args[0],$args[1]));
               Item::get($args[1]);
               $sender->sendMessage("[Shop] 取引が完了しました。");
              }
            }elseif($this->api->get("api") === "MoneyPlugin"){
             if($this->items->get($args[0],$args[1]) > MoneyPlugin::getInstance()->getMoney($pname)){
               $sender->sendMessage("[Shop] 所持金が足りません。");
              }else{
               MoneyPlugin::getInstance()->removemoney($pname,$this->items->get($args[0],$args[1]));
               Item::get($args[1]);
               $sender->sendMessage("[Shop] 取引が完了しました。");
              }
            }
        break;

        case "shopadd":
            if(!(isset($args[0]))){
             $sender->sendMessage("[Shop] 使い方:/shopadd <ショップ名>");
            }elseif(!$sender->isOp()){
             $sender->sendMessage("[Shop] OP以外は実行できません。");
            }elseif($this->shops->get($args[0]) !== null){
             $sender->sendMessage("[Shop] そのShopは既に作成されています。作成されていないShopを追加してください。");
            }else{
             $this->shops->set($args[0]);
             $sender->sendMessage("[Shop] ショップ" . $args[0] . "を作成しました。");
             $this->shops->save();
            }
        break;

        case "shopdel":
            if(!($sender->isOp())){
             $sender->sendMessage("[Shop] OP以外は使用できません。");
            }elseif(!isset($args[0])){
             $sender->sendMessage("[Shop] 使い方:/shopdel <ショップ名>");
            }elseif($this->shops->get($args[0]) == null){
             $sender->sendMessage("[Shop] 作成されていないShopが選択されています。作成されているショップを入力してください。");
            }else{
             $sender->sendMessage("[Shop] Shop" . $args[0] ."を削除しました。");
             $this->shops->remove($args[0]);
             $this->shops->save();
            }
        break;

        case "itemadd":
            if(!($sender->isOp())){
             $sender->sendMessage("OPのみ実行できます。");
            }elseif(!isset($args[0])){
             $sender->sendMessage("[Shop] 使い方:/itemadd <ショップ名> <アイテムID> <値段>");
            }elseif($this->shops->get($args[0]) == null){
             $sender->sendMessage("[Shop] 選択されたShopは作成されていません。作成するか別のShopを選択してください。");
            }elseif(!isset($args[1])){
             $sender->sendMessage("[Shop] 使い方:/itemadd <ショップ名> <アイテムID> <値段>");
            }elseif(!is_numeric($args[1])){
             $sender->sendMessage("[Shop] アイテムIDは数字なので、数字以外入力できません。");
            }elseif(!isset($args[2])){
             $sender->sendMessage("[Shop] 使い方:/itemadd <ショップ名> <アイテムID> <値段>");
            }elseif(!is_numeric($args[2])){
             $sender->sendMessage("[Shop] 値段は数字のみを入力してください。");
            }elseif(0>= $args[2]){
             $sender->sendMessage("[Shop] 値段は1以上を入力してください。");
            }else{
             $this->items->set($args[0],$args[1],$args[2]);
             $this->items->save();
             $sender->sendMessage("[Shop] 商品を増やしました。");
            }
        break;

        case "itemdel":
            if(!($sender->isOp())){
             $sender->sendMessage("[Shop] OPのみ実行できます。");
            }elseif(!isset($args[0])){
             $sender->sendMessage("[Shop] 使い方:/itemdel <ショップ名> <アイテムID>");
            }elseif($this->shops->get($args[0]) == null){
             $sender->sendMessage("[Shop] 選択されたShopが作成されていません。作成するか別のShopを選択してください。");
            }elseif(!isset($args[1])){
             $sender->sendMessage("[Shop] 使い方:/itemdel <ショップ名> <アイテムID>");
            }elseif(!is_numeric($args[1])){
             $sender->sendMessage("[Shop] アイテムIDは数字です。数字のみを入力してください。");
            }elseif($this->shops->get($args[0],$args[1]) == null){
             $sender->sendMessage("[Shop] 入力されたアイテムIDは、ショップで販売されていません。販売されているものを入力してください。");
            }else{
             $this->items->remove($args[0],$args[1]);
             $this->items->save();
             $sender->sendMessage("[Shop] 削除が完了しました。");
             }
        break;

        case "shoplist":
            foreach($this->shops->get() as $allshop){
             $sender->sendMessage($allshop);
            }
        }
        return true;
    }

}
90行目の
PHP:
}else{
を閉じてません
 
  • Like
Reactions: すごろく