【PMMP】特殊道具的制作方法
道歉了!
我完全没有碰过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:が永遠に続く。。。
}
}
}
在一个.php文件中,编写了处理多个项目的代码,并且超过了1000行。现在回想起来,这段代码简直是地狱一般。
比较好的写法
通过点击带有火焰粉末的方块,我们来举一个例子,这个道具会让半径10米内的玩家受到✟黑暗火焰✟的影响。
创建一个物品类。
创建一个继承自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服务器开发与运营2021年圣诞节日历的下一篇文章在这里→ 非同步是什么 | @ribnil
12月15日是神PMMPer ribnil的生日!
祝ribnil生日快乐!
?幸福?生日?