PocketMine-MPのAPI変更について

yuko fuyutsuki

もでれーたー
Staff member
12 月 30, 2017
200
98
43
Japan/Tokyo
*変更点
変更点は以下の2つです。
  • スケジューラAPI
  • APIバージョンのALPHAを廃止
これらの対応方法をここにまとめます。

*対応方法
・スケジューラAPI

以下のようにコードを置き換えます。​
なお、実行しているクラスはPluginBaseを継承しているものとします。​
・DelayedTask, RepeatingTask, DelayedRepeatingTaskを使用していた場合:​
PHP:
use pocketmine\scheduler\PluginTask;

$task = new class($this) extends PluginTask {
  public function onRun(int $tick) {
    $plugin = $this->getOwner();// 過去はプラグインメインクラスをこう呼び出せました
    // 処理
  }
}
$this->getServer()->getScheduler()->scheduleDelayedTask($task, $tick);
$this->getServer()->getScheduler()->scheduleRepeatingTask($task, $tick);
$this->getServer()->getScheduler()->scheduleDelayedRepeatingTask($task, $delayTick, $repeatTick);
↓ getServer()を介する必要がなくなりました。​
↓ また、PluginTaskクラスは廃止されたので、代わりにTaskクラスを継承する必要があります。​
PHP:
use pocketmine\plugin\Plugin;
use pocketmine\scheduler\Task;

$task = new class($this) extends Task {
  public __construct(Plugin $owner) {
    $this->owner = $owner;// メインクラスを使いたい場合は手動で代入し、
  }

  public function onRun(int $tick) {
    $plugin = $this->owner;// メンバ変数を呼び出す必要があります
    // 処理
  }
}
$this->getScheduler()->scheduleDelayedTask($task, $tick);
$this->getScheduler()->scheduleRepeatingTask($task, $tick);
$this->getScheduler()->scheduleDelayedRepeatingTask($task, $delayTick, $repeatTick);
---------------------

・scheduleAsyncTask(非同期)を使用していた場合:​
PHP:
use pocketmine\scheduler\AsyncTask;
use pocketmine\Server;

$task = new class extends AsyncTask {
  public function onRun() {
    // 処理
  }

  public function onCompletion(Server $server) {
    // 完了時処理
  }
}
$this->getServer()->getScheduler()->scheduleAsyncTask($task);
↓ 呼び出すコードを変更する必要があります​
PHP:
use pocketmine\scheduler\AsyncTask;
use pocketmine\Server;

$task = new class extends AsyncTask {
  public function onRun() {
    // 処理
  }

  public function onCompletion(Server $server) {
    // 完了時処理
  }
}
$this->getServer()->getAsyncPool()->submitTask($task);
------------------

・API変更について
3.0.0のDevToolsを自分でビルドし....は面倒なのでビルドしておきました。​
予めプラグインのplugin.ymlのAPIを3.0.0に合わせてから使用して下さい。​
 
最後の編集: