〜こちらでは様々なコードを解説し、皆様に理解していただけるよう努力します〜

プラグインの中で**秒後に処理を行いたい、
あるいは**秒ごとに処理を行いたい場合は
Schedulerを使う必要があります。
サンプルコードとして
「ブロックをタップしたら、10秒後にメッセージが来る」
コードを書こうと思います。

namespace Example;
//Exampleフォルダの下にあるよ―ということです
use pocketmine\event\Listener;
//ここでEventのインスタンスを作る
use pocketmine\event\player\PlayerInteractEvent;
//ここでPlayerがタップしたかのEvent
use pocketmine\plugin\PluginBase;
//これはクラス関係のものです よくわかっておりませんが書きましょう 基本です
use pocketmine\Player;
//これはPlayerの情報を読み込むAPIです これは主にタップしたのが誰かとかに使用します
use pocketmine\Server;
//これはServerのAPIです Plugin起動時に読み込みました等の文字を出力するときは必ず入れましょう
use pocketmine\scheduler\PluginTask;
//ここが今回の目玉のAPIです 何秒後とかの指定をしたり、測ったりしてくれるとこです
class ExamplePlugin extends PluginBase implements Listener{
/*ここは絶対に書きます クラス宣言です ExamplePlugin.phpなのでこれを書きます*/

public function onEnable(){
   $this->getServer()->getPluginManager()->registerEvents($this,$this);
}

public function onTouch(PlayerInteractEvent $event){
   $player = $event->getPlayer();//Playerデータを取得するコードです
   $task = new GiveItemTask($this, $player); //ポイント1
   $this->getServer()->getScheduler()->scheduleDelayedTask($task, 200); //ポイント2
}
}

class GiveItemTask extends PluginTask{
//二つ目のクラスです これは.phpをもう一個作ってもいいのですが大変です
   public function __construct(PluginBase $owner, Player $player) {
      parent::__construct($owner);
      $this->player = $player;//Playerデータの引き継ぎます(タップした時のEventから)
   }

   public function onRun($tick){
      $this->player->sendMessage("ホッキョクグマ");
   }
}

ポイントの解説
  • ポイント1
クラスのインスタンスを作成しています。インスタンスとは…とか
説明しだすと(少なくとも私の知識では)キリがないので
詳しく知りたい人は検索してください。
ここで重要なのはGiveItemTask,$this,$playerの3つです。
GiveItemTaskは少し下にあるclass GiveItemTask…のところの
クラス名と一緒ですね。
$thisと$playerはそれぞれGiveItemTaskに渡すデータです。
  • ポイント2
ここで先ほど作成したインスタンスを用い10秒後に処理を行うようにしています。
($task,200)のうち$taskは先ほど作成したインスタンスです。
200の部分は「何秒後に実行するか」を表していますが、
この部分で秒数をそのまま書いてはいけません
(秒数)x20を書いてください。
1秒後なら20、2秒後なら40、30秒後なら600です。

以上です 役に立てましたか?
こちらはカツオ様が記載したものを
少し手直ししたものです
お礼ならカツオ様に()

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

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