笔记提要
这篇笔记是 quantumBreak RPG 服务器的开发全记录,并在过程中提供一些 Spigot 插件开发的思路和不完全指北,以下是我的开发环境,希望您能通过本篇指南抛砖引玉,制作出属于您的优秀服务器!
开发环境
- 开发版本:Spigot 1.14.4 非paper等plus端
- 游戏版本:MineCraft 1.14.4 + forge 安装小地图和 WorldEdit 可视化
- 插件开发:IDEA 社区版 (小MacAir只有8G,节省内存)
- 文本编辑:Visual Studio Code
其他插件或者使用到的工具, 在开发过程中将会进行进一步介绍。
初始化项目
1. 安装 IDEA 中 MineCraft 开发辅助插件
您可以打开IDEA的插件页面,找到MineCraft打头的下载量最多的插件,安装这个可以让您更方便的创建项目,我们的项目也基于这个插件进行开发。
2. 利用插件创建 Spigot 项目
在您安装完插件后,新建项目就可以看到左边有 Minecraft 类型的选项了,选择 Minecraft 之后,下一步选择 Spigot Plugin,接下来就开始创建 Spigot 项目了。
3. 填写 Spigot 项目初始化选项
注意到 groupID
和 artifactID
,您可以将您的用户名填作 groupID
,将您的插件名填为 artifactID
。并且选择插件的构建工程为 maven
。
4. 填写 bukkit.yml 选项
在您完成了 groupID 和 artifactID 的填写并进入下一步,这里将要求您完善 bukkit.yml
中的内容,只需要填写 插件主类
和 插件主类包的路径
即可完成,注意在右下角选择您的服务器版本,我这里是 1.14.4
。
5. 完成创建
完成项目创建后, 点击 maven
更新项目依赖项即可完成项目初步部署。
初始化插件代码
Mocore.java
在你的主类中写入这样的代码,一个可以运行的插件就完成了,接下来将 编译输出
部署进工件里完成打包,就可以放入服务端的 plugins
文件夹进行加载了。
public final class Mocore extends JavaPlugin {
public static Plugin pluginInstance;
@Override
public void onEnable() {
pluginInstance = this;
}
}
Blockguard.java
新建一个 Blockguard.java
,载入下面的内容,这就是一个可以用于避免玩家破坏方块的监听器,并具有OP和例外功能。其核心在于创建一个 @EventHandler
public class Blockguard implements Listener {
public static boolean cancelledPlayerInteract = true;
public static boolean cancelledAdminInteract = true;
public static List<String> allowedBlockList = Collections.singletonList("ENDER_CHEST");
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
boolean isOpPlayer = event.getPlayer().isOp();
String eventBlockName = Objects.requireNonNull(event.getClickedBlock()).getBlockData().getMaterial().name();
boolean isAllowedBlock = allowedBlockList.contains(eventBlockName);
if (isAllowedBlock) {
return;
}
if (isOpPlayer) {
event.setCancelled(cancelledAdminInteract);
Message.broadcast(eventBlockName);
return;
}
event.setCancelled(cancelledPlayerInteract);
}
}
注册 EventListener
在插件 onEnable
方法中写入下面的代码就可以注册事件。
PluginManager pluginManager = pluginInstance.getServer().getPluginManager();
pluginManager.registerEvents(listener, pluginInstance);
下面是我的注册方式:
public static void easyRegisterEvent(Listener listener) {
PluginManager pluginManager = pluginInstance.getServer().getPluginManager();
pluginManager.registerEvents(listener, pluginInstance);
}
// 在初始化时
RegisterEvent.easyRegisterEvent(new Blockguard());
验收效果
通过创建工件打包成 .jar
就完成了初始化工作,接下来将打包出来的 .jar
放到你的服务端文件夹 plugins
中并在服务器中输入 /reload
进行重载就可以看到效果了~