Nukkit的插件(plugin)是以Java寫成的,對Bukkit的開發者來說應會比較熟悉。
(Nukkit開服教學看 這裡)
本文教學如何在Windows上撰寫一個插件,放到伺服器上測試。
在玩家加入世界後會顯示一條歡迎訊息,還可以用指令呼叫自己的名字。
1. 安裝必要軟體#
設定環境變數: Path指到maven資料夾底下的"bin"資料夾。
開啟VSCode,在左側安裝延伸模組: “Java Extension Pack”、“Maven or Java”,記得安裝擴充元件後要重新啟動VSCode。
按下F1,輸入maven,按下"Create Maven Project"
按"maven-archetype-quickstart",接著選取版本1.4
新增的專案可以取名為"com.example",接著輸入"exampleplugin"
再從電腦裡選取一個英文名稱的資料夾儲存專案,例如在桌面新建一個"test"。
終端機會開啟,輸入專案版本 (1.0)
輸入Y確認。
- 建立完成後,按左上角「檔案」,開啟資料夾,開啟剛剛建立的"exampleplugin"這個資料夾。
這個資料夾就是專案的「根目錄」。
到這邊為止,VScode應該會跳出很多提示,要求安裝其他擴充元件,全部同意。
2. 設定開發環境#
- 建立Maven專案之後,開啟"pom.xml",加入以下xml,
<repositories>
<repository>
<id>potestas-repo</id>
<url>https://repo.potestas.xyz/main/</url>
</repository>
</repositories>
- 接著加入依賴庫,這樣能夠確保使用的是最新版的Nukkit。
<dependency>
<groupId>cn.nukkit</groupId>
<artifactId>nukkit</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
- 在
根目錄/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. 插件主程式碼#
- 切換到
/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");
}
}
VSCode會自動把錯誤的地方標上波浪號,把滑鼠移過去,選取快速修復。按照建議將"App.java"改名"main.java",也就是plugin.yml裡寫的位置。
繼續新增程式碼。撰寫的時候若有用到沒匯入的類別,只要用快速修復匯入即可。
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());
}
}
- 如果有新增指令,還要在
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檔案進行測試#
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>
- 按終端機,新增終端機,輸入 mvn install,出現"BUILD SUCCESS"就表示成功。
輸入指令"/sayhi",有出現提示,且成功呼叫自己的名字。