快轉到主要內容

自製Nukkit伺服器插件入門:自訂指令 & 歡迎訊息

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

Nukkit的插件(plugin)是以Java寫成的,對Bukkit的開發者來說應會比較熟悉。

(Nukkit開服教學看 這裡)

本文教學如何在Windows上撰寫一個插件,放到伺服器上測試。

在玩家加入世界後會顯示一條歡迎訊息,還可以用指令呼叫自己的名字。

1. 安裝必要軟體
#

  1. 安裝 JDK

  2. 安裝 VSCode

  3. 下載 Maven,解壓縮放到C槽的ProgramFiles。

設定環境變數: Path指到maven資料夾底下的"bin"資料夾。

  1. 開啟VSCode,在左側安裝延伸模組: “Java Extension Pack”、“Maven or Java”,記得安裝擴充元件後要重新啟動VSCode。

  2. 按下F1,輸入maven,按下"Create Maven Project"

按"maven-archetype-quickstart",接著選取版本1.4

新增的專案可以取名為"com.example",接著輸入"exampleplugin"

再從電腦裡選取一個英文名稱的資料夾儲存專案,例如在桌面新建一個"test"。

終端機會開啟,輸入專案版本 (1.0)

輸入Y確認。

  1. 建立完成後,按左上角「檔案」,開啟資料夾,開啟剛剛建立的"exampleplugin"這個資料夾。

這個資料夾就是專案的「根目錄」。

到這邊為止,VScode應該會跳出很多提示,要求安裝其他擴充元件,全部同意。

2. 設定開發環境
#

  1. 建立Maven專案之後,開啟"pom.xml",加入以下xml,
<repositories>
    <repository>
      <id>potestas-repo</id>
      <url>https://repo.potestas.xyz/main/</url>
    </repository>
  </repositories>

這樣就能加入repository。

右下角會有提示,按下Always。

  1. 接著加入依賴庫,這樣能夠確保使用的是最新版的Nukkit。
  <dependency>
      <groupId>cn.nukkit</groupId>
      <artifactId>nukkit</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

於是會長這樣:

  1. 根目錄/src/main/,新建"resources"資料夾,裡面新建"plugin.yml",此為插件的基本資料。
name: ExamplePlugin
version: "1.0"
api: ["1.0.0"]
author: Ivon
description: A basic plugin for Nukkit
main: com.example.main

main代表的是插件的主程式位置。

3. 插件主程式碼
#

  1. 切換到/src/main/java/com/example/App.class,刪除全部程式碼,改成以下程式碼:
package com.example;

import cn.nukkit.plugin.PluginBase;
import cn.nukkit.utils.TextFormat;

public class main extends PluginBase {
    @Override
    public void onEnable() {
        this.getLogger().info(TextFormat.GREEN + "Plugin Enabled");
    }

    @Override
    public void onDisable()
    {
        this.getLogger().info(TextFormat.RED + "Plugin Disabled");
    }
}
  1. VSCode會自動把錯誤的地方標上波浪號,把滑鼠移過去,選取快速修復。按照建議將"App.java"改名"main.java",也就是plugin.yml裡寫的位置。

  2. 繼續新增程式碼。撰寫的時候若有用到沒匯入的類別,只要用快速修復匯入即可。

package com.example;

import cn.nukkit.plugin.PluginBase;
import cn.nukkit.utils.TextFormat;

import cn.nukkit.command.Command;
import cn.nukkit.command.CommandSender;
import cn.nukkit.event.EventHandler;
import cn.nukkit.event.Listener;
import cn.nukkit.event.player.PlayerJoinEvent;
import cn.nukkit.event.player.PlayerQuitEvent;

public class main extends PluginBase implements Listener {

    // 遊戲載入時觸發
    @Override
    public void onLoad() {
        this.getLogger().info(TextFormat.GREEN + "插件已載入");
    }

    @Override
    public void onEnable() {
        this.getLogger().info(TextFormat.GREEN + "插件已啟用");
        this.getServer().getPluginManager().registerEvents(this, this);
    }

    @Override
    public void onDisable() {
        this.getLogger().info(TextFormat.RED + "插件已停用");
    }

    // 偵測指令
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] Args) {
        if (command.getName().toLowerCase().equals("sayhi")) {
            sender.sendMessage("你好," + TextFormat.GREEN + sender.getName());
            return true;
        }
        return true;
    }

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
        event.setJoinMessage("你好,歡迎" + event.getPlayer().getName() + "加入伺服器!");
    }

    @EventHandler
    public void onPlayerQuit(PlayerQuitEvent event) {
        event.setQuitMessage("再見," + event.getPlayer().getName());
    }

}
  1. 如果有新增指令,還要在plugin.yml註明,permission設定為op才可以使用。
name: ExamplePlugin
version: "1.0"
api: ["1.0.0"]
author: Ivon
description: A basic plugin for Nukkit
main: com.example.main
commands:
  sayhi:
    description: 你好指令
    usage: "/sayhi"
permissions:
  sayhi:
    default: op

4. 編譯成.jar檔案進行測試
#

  1. pom.xml<build><pluginManagement><plugins>標籤新增以下內容,mainClass裡寫的必須跟plugin.yml裡的main同一個位置。
  <!-- mainClass與plugins.yml的main位置相同 -->
        <plugin>
          <groupId>com.example</groupId>
          <artifactId>exampleplugin</artifactId>
          <version>1.0</version>
          <configuration>
            <archive>
              <manifest>
                <mainClass>
                  com.example.main
                </mainClass>
              </manifest>
            </archive>
          </configuration>
        </plugin>

就會變成這樣:

  1. 按終端機,新增終端機,輸入 mvn install,出現"BUILD SUCCESS"就表示成功。

  1. 產生的jar檔案會放在根目錄/target/

  2. 將jar檔案放到伺服器根目錄/plugins/,啟動伺服器。

  3. 終端機會看到插件載入的訊息。

進入遊戲,出現歡迎文字。

輸入指令"/sayhi",有出現提示,且成功呼叫自己的名字。

參考資料
#

相關文章

PocketMine、Nukkit的世界格式以及轉檔軟體
分類   遊戲攻略 Minecraft
標籤   Nukkit PocketMine Minecraft Server
Minecraft基岩版Nukkit開服教學
分類   遊戲攻略 Minecraft
標籤   Nukkit Minecraft Server
Add-On 自訂Minecraft NPC的對話框 & dialogue指令用法
分類   遊戲攻略 Minecraft
標籤   Minecraft Add-On Minecraft World Minecraft Command

留言板

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

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

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