快轉到主要內容

自製PocketMine插件入門: 自訂指令 & 歡迎訊息

分類   遊戲攻略 Minecraft
標籤   PocketMine
🗓️ 民國110年 辛丑年
✍ 切換正體/簡體字
目錄

PocketMine的插件(plugin)是用世界上最好的語言PHP寫成的。

( PocketMine開伺服器教學)

以下教學在Windows做一個自訂指令的PM插件,並放到伺服器上測試。

1. 安裝必要軟體
#

如果只是單純寫php,不需要安裝這些有的沒的,手機也可以寫,但安裝這些工具可以方便除錯。

  1. 安裝 Windows版本的PHP,下載之後解壓縮,放到C槽的ProgramFiles。

設定環境變數,Path指向PHP資料夾。

  1. 本篇教學使用 VSCode編輯器,安裝"PHP Debug"和"PHP Intelephense"這二個熱門延伸模組後重啟VSCode。

  2. Github下載PocketMine原始碼,解壓縮,然後安裝VSCode上的 PocketMine IDE延伸模組,開啟這個延伸模組的設定值,填入src資料夾的位置,例如"C:Program FilesPocketMine-MP-stablesrc" (有引號)

  3. 下載 Development Tools for PocketMine-MP,把這個插件放到伺服器的plugins資料夾,以插件形式安裝。

2. 專案結構
#

插件的資料夾結構應該長這樣,頂層目錄是"MyPlugin":

MyPlugin
│  plugin.yml
│
└─src
    └─examplePlugin
            Main.php

src裡面的exmplePlugin資料夾可以自訂名字,而主程式就是Main.php。

首先編輯"plugin.yml",填入以下內容:

api: [3.0.0]
name: "MyPlugin"
version: 1.0
author: Ivon
commands:
 getsteak:
  description: "給予牛排"
  usage: /getsteak number
main: examplePlugin\Main
permissions:
 getsteak:
  default: true

name是這個插件的名字,不要有空白。

main所指的就是主程式位置(不需附檔名),記得要跟src/資料夾下的一致。

permission是權限,預設是所有玩家都可以使用。

此外,有使用到自訂指令的話,也可以在這裡註明,例如這裡有一個叫做"getsteak"的指令。

3. 插件程式碼
#

Main.php輸入以下內容:

<?php

//命名空間即src/下的路徑
namespace examplePlugin;

//會用到的PocketMine類別
use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\event\player\PlayerJoinEvent;
use pocketmine\utils\TextFormat;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\item\Item;
use pocketmine\Player;

class Main extends PluginBase implements Listener
{
    //插件載入時
    public function onLoad()
    {
        $this->getLogger()->info("插件載入中");
    }
    //插件啟用時
    public function onEnable()
    {
        $this->getServer()->getPluginManager()->registerEvents($this, $this);
        $this->getLogger()->info("插件已啟用");
    }
    //插件停用時
    public function onDisable()
    {
        $this->getLogger()->info("插件已停用");
    }

    //玩家進入世界時
    public function onJoin(PlayerJoinEvent $event)
    {
        $player = $event->getPlayer();
        $name = $player->getName();
        $this->getServer()->broadcastMessage(TextFormat::GREEN . "$name 加入了伺服器!");
    }

    //偵測指令
    public function onCommand(CommandSender $sender, Command $cmd, string $label, array $args): bool
    {
        //檢查是在遊戲中輸入或是終端機
        if (!$sender instanceof Player) {
            $sender->sendMessage("僅限遊戲中使用。");
        } else {
            if ($cmd->getName() == "getsteak") {
                if (!isset($args[0]) or (is_int($args[0]) and $args[0] > 0)) { //確認參數為0且為整數,否則就預設給4個
                    $args[0] = 4;
                }
                $sender->getInventory()->addItem(Item::get(364, 0, $args[0])); //給玩家牛排
                $sender->sendMessage("已獲得" . $args[0] . "個牛排!");
            }
        }
        return true;
    }
}

4. 測試插件
#

還不需要打包成phar,直接將專案資料夾複製到伺服器根目錄/plugins/下,接著啟動伺服器,就會有插件載入提示。

加入世界,除了預設的黃色提示訊息,多了綠色的歡迎訊息。

使用指令/getsteak 數字,出現提示。

確認可以獲得牛排。

5. 打包插件成.phar檔
#

插件以資料夾型態載入時可邊修改邊測試,但為避免影響到伺服器/plugins下的其他檔案,建議還是把開發中的專案分開放。

最後,可利用PocketMine DevTools將資料夾打包成.phar,上傳到 Poggit官方儲存庫給別人使用。

  1. 將要打包的插件資料夾放到伺服器根目錄/plugins/

  2. 啟動伺服器,確認PocketMine DevTool和你的插件都有成功載入。

終端機輸入"makeplugin 插件名字",例如"makeplugin MyPlugin",插件的名字需與plugin.yml裡面所寫的一致,不要有空格。

  1. 接著就會產生.phar檔案,位於根目錄/plugin_data/DevTools/裡面。以後把這個檔案直接放在/plugins資料夾就能載入插件。

參考資料
#

相關文章

PocketMine、Nukkit的世界格式以及轉檔軟體
分類   遊戲攻略 Minecraft
標籤   Nukkit PocketMine Minecraft Server
Android版PocketMine-MP使用教學
分類   遊戲攻略 Minecraft
標籤   PocketMine Android
PocketMine調整伺服器參數 & 指令 & 替換世界
分類   遊戲攻略 Minecraft
標籤   PocketMine

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。