Pocketmine-MP非公式日本語wikiです。Pocketmine-MPに関する情報を発信しています。

*プラグイン作成時のあるある



プラグインを作ってる時に良くやってしまう事を幾つか紹介します。


} (END) をつけ忘れる。


プラグインを作る時に必ず必要なのが、{ <-これ。
しかし、{は必ず}で閉じないとエラーが出るのです。
    public function onEnable(){
                     $n = "TestPlugin"
                     $this->getServer()->getPluginManager()->registerEvents($this, $this); 
                     $this->getLogger->info($n"を読み込みました。");

お気づきかも知れませんが、これではエラーが起きてしまいます。(SyntaxError)

なので、ちゃんと}で閉じてあげましょうか。

      public funtion onEnable(){
                      $n = "TestPlugin"
                      $this->getServer()->getPluginManager()->registerEvents($this, $this);
                      $this->getLogger->info($n"を読み込みました。");
              }

はい。これでちゃんと閉じてあげたので、エラーは起きなくなります。
こんな感じでプラグインというものは、凄く繊細なのでちょっとしたことでもエラーを吐きます。
プラグインを作る際には十分に注意しましょう。

プラグイン開発動画(おすすめ)


【PocketMine】サーバjoin時にメッセージを送るプラグインの作り方 - YouTube


public functionの中にpublic functionを入れてしまう


public functionはプラグインにおいて、必要不可欠なコードになります。
しかし、public functionの中にもう一つpublic functionを入れてしまうと、エラーを吐きます。

public function onEnable{()
               $this->getServer()->getPluginManager()->registerEvents($this,$this);
               $this->getLogger->info("プラグインを読み込みました。");
 public function onCommand(CommandSender $sender, Command $command, $label, array $args){
              }
     }

明らかにおかしいコードですが、分からない人のために解説します。
冒頭でも言ったように、 public functionの中にpublic functionが入っています。
そのまま書くとpublic functionpublic functionと認識されています。
なのでこうしなければなりません。

public function onEnable(){
                 $this->getServer()->getPluginManager()->registerEvents($this,$this);
                 $this->getLogger->info("プラグインを読み込みました。");
               }
public function onCommand(CommandSender $sender, Command $command, $label, array $args){
      }

はい。これでエラーは出なくなりました。
ですがこんなコード書いても一部分しか書いてないので、これを書いたプラグインはエラー出ますがね(^^)

未定義の変数を使用している


コード内で未定義の変数を使用しており、エラーが起こる事例が多々あります。
定義については
$○○ = ○○; //変数
$this->○○ = ○○; //メンバ変数
global $○○; //グローバル変数
などというように、変数の種類や定義の方法はさまざまありますが未定義の変数を使用すると
Notice: Undefined variable と表示されます。
エラー文から、周辺のコードの見直しをしましょう。

「;」(セミコロン)をつけ忘れる


皆さんは、中学校などの英語で、セミコロン;を使いましたよね?
実は、php言語にはセミコロンが欠かせません。(実はというほどでもない)
プラグインのコード内でのセミコロンの役割といえば、簡単に言うと、日本文の「。」の役割を果たします。
セミコロンはコードの一文一文の最後に使用します。
サーバーはセミコロンが無いコードは読み込むとエラーを出します。

<?php

namespace TestPlugin

use pocketmine\Server
use pocketmine\Player
use pocketmine\plugin\PluginBase
use pocketmine\event\player\PlayerChatEvent
use pocketmine\command\Command
use pocketmine\command\CommandSender
use pocketmine\event\Listener

class TestPlugin extends PluginBase implements Listener{

見た感じ、プラグイン開発者様なら、分かりますが、解説します。
セミコロンが付いてないの!ポカ───( ゚д゚ )───ン
はい。直しますね。

<?php

namespace TestPlugin;

use pocketmine\Server;
use pocketmine\Player;
use pocketmine\plugin\PluginBase;
use pocketmine\event\player\PlayerChatEvent;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\event\Listener;

class TestPlugin extends PluginBase implements Listener{

直しました。
全ての行の最後にセミコロンを装着しました。
ただ、例外があり、{の行にはセミコロンは装着しません。
なので、class宣言の行にはセミコロンは装着しません。

 $sender->sendMessage("You can not run this command , but it is possible to be executed .");
                   }
こんな感じで、sendMessageなどの( )にもセミコロンは装着します。
セミコロンの装着のし忘れによるクラッシュなどはSyntaxError(シンタックスエラー)として処理されます。
クラッシュダンプが生成されるはずなので、それを見ながら修復すれば、確実にプラグインの開発に成功します。
以上の事を注意しながらコードを書いていけばエラーを出さずにプラグインが書ける(ハズ)ので、頑張ってくださいね。

メニュー

トップページ
メンバー募集メンバーページ

カウンター

訪問者数

アクセス数

フリーエリア



メンバーのみ編集できます