謝罪ッ!
PMMPを全然触ってないので文法がガバガバだし動作しないかも(笑)
PMMP3.xの書き方です。暇があれば4.0の書き方も追記します。
ウンコード
実はずっと前にPvP鯖を運営していました。
その際に特殊なアイテムを実装しようということで、以下のようなコードを書いておりました。
class EventListener implements Listener {
public function onInteract(PlayerInteractEvent $event) {
$item = $event->getItem();
switch ($item->getId()) {
case 0:
// かっこいい機能
break;
case 1:
// 面白い機能
break;
case 2:
// 素晴らしい機能
break;
// このあともcase n:が永遠に続く。。。
}
}
}
1個の.phpファイルに複数のアイテムの処理を書いており、なんと1000行を超えてました。
今にしてみれば地獄のようなコードです。
マシな書き方
ブレイズパウダーを持ってブロックをタップすることで、半径10m以内のプレイヤーに✟闇の炎✟をくらわせるアイテムを例に書いていきます。
アイテムクラスを作る
pocketmine\item\Itemを継承したクラスを作成します。
ブロックをタップした際にonActivateが呼び出されるので、この中に処理を書きます。
<?php
// 省略
use pocketmine\block\Block;
use pocketmine\item\Item;
use pocketmine\item\ItemIds;
use pocketmine\level\sound\BlazeShootSound;
use pocketmine\math\Vector3;
use pocketmine\Player;
class XxDarknessBurstxX extends Item {
public function __construct() {
parent::__construct(ItemIds::BLAZE_POWDER, 0, 'XxDarknessBurstxX');
}
// オーバーライド
public function onActivate(Player $player, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector): bool {
$level = $player->getLevel();
$level->addSound(new BlazeShootSound($player)); // 発動音
foreach ($level->getPlayers() as $p) {
if ($player !== $p && $player->distance($p) <= 10) {
$p->setOnFire(10);
$p->sendTip("闇の炎に抱かれて消えろっ!");
}
}
}
}
作ったアイテムを登録する
先ほど作成したアイテム(XxDarknessBurstxX)をPocketMine-MPに登録したら完了です。プラグイン起動時に登録しましょう。
<?php
// 省略
use pocketmine\item\ItemFactory;
use pocketmine\plugin\PluginBase;
class Main extends PluginBase {
public function onEnable() {
ItemFactory::registerItem(new XxDarknessBurstxX(), true); // 第2引数は必ずtrueにしてください
}
}
いかがでしたか?
高評価とチャンネル登録お願いします。
Minecraftサーバ開発・運営 Advent Calendar 2021 次の記事はこちら → 非同期ってナンダ | @ribnil
ちな12月15日は神PMMPer ribnil の誕生日!
おめでとうribnil!
🍺Happy🚬Birthday👩