Paper MC:使用 IDEA 创建一个 Paper Plugin 项目并流式运行

创建项目

本文撰写时使用的 IDEA 版本为 2022.3.3(Ultimate Edition),如果你的界面和文中图片不一致,请检查你的 IDEA 版本

打开 IDEA,新建一个项目(File -> New Project),在下图所示的界面中创建一个项目:

  • Name:输入项目的名字,建议使用插件名;
  • Language:选择 Java
  • Build system:Paper 的开发团队使用的依赖管理器是 Gradle,故其文档给出的方法也是使用 Gradle。本文在此选择 Gradle;
  • JDK:Minecraft 1.18 及以上需要使用 JDK17;
  • Gradle DSL:跟从 Paper 文档选择 Kotlin;

设置完成后,点击 Create 按钮创建一个新的项目。

image-20230425135302361

配置依赖

打开 build.gradle.kts 文件,这个文件是 Gradle 的配置文件,你可以在这里配置项目中需要使用的依赖、编译选项等等。

由于我们是 Paper 的插件项目,我们需要使用到 Paper 的 API,所以我们要引入 Paper 依赖,修改后的 build.gradle.kts 文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
plugins {
id("java")
}

group = "org.example"
version = "1.0-SNAPSHOT"

repositories {
mavenCentral()
// 添加 Paper MC 仓库
maven("https://repo.papermc.io/repository/maven-public/")
}

dependencies {
testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.1")
// 添加 paper-api 依赖,此处使用的 API 版本是 1.19.3-R0.1-SNAPSHOT
compileOnly("io.papermc.paper:paper-api:1.19.3-R0.1-SNAPSHOT")
}

java {
// 设置使用的 Java 语言版本为 17
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
}

tasks.getByName<Test>("test") {
useJUnitPlatform()
}

修改后,点击下图的红框中的按钮 Load Gradle Change,也可以使用快捷键 ctrl+shift+O,顾名思义,这一步是应用我们修改的配置项,Gradle 将根据配置文件的内容为我们下载 paper-api。等待其配置完成,即可完成依赖配置步骤。

image-20230425141740839

创建包和主类

官方建议的文件夹结构为:

1
2
3
4
5
6
7
8
9
10
11
ExamplePlugin
├── build.gradle.kts
├── settings.gradle.kts
└── src
└── main
├── java
│ └── io
│ └── example
│ └── exampleplugin
│ └── ExamplePlugin.java
└── resources

根据官方推荐的文件夹结构,首先,我们需要创建源代码的第一个包,请按以下步骤之一来做,以此保证你的包名不与其它步骤重复:

  • 如果你有一个域名 abc.io,那你应该创建 io.abc
  • 如果你没有域名,你可以使用你的 github 账户,例如你的 github 账户名为 abc,你应该将 io.example 包修改为 io.github.abc
  • 你也可以用你的邮箱,如果你的邮箱是 abc@gmail.com,你应该创建 com.gmail.abc

在创建好上面的包后,需要在其中再创建一个以你的插件名命名的包,注意包名应该为纯小写。

创建好包后,我们在最内层的包内创建一个主类

注意

如果你在创建类时 IDEA 没有给你任何帮助,例如没有为你自动生成包名,请设置 java 文件夹为你的代码根目录文件夹,具体步骤为右键 java 文件夹 -> Mark Directory as -> Sources Root,设置成功后文件夹颜色变为蓝色。

我们创建的类内容如下:

1
2
3
4
5
6
7
8
9
10
package org.example.exampleplugin;

import org.bukkit.plugin.java.JavaPlugin;

public class ExamplePlugin extends JavaPlugin{
@Override
public void onEnable() {
logger.info("Enabled Successfully");
}
}

添加 plugin.yml

在和 java 文件夹同级的 resources 文件夹中新建一个 plugin.yml 文件,输入以下内容:

1
2
3
4
5
6
name: ExamplePlugin
version: 1.0.0
main: org.example.exampleplugin.ExamplePlugin
description: A Plugin
author: MicrovenCN
api-version: 1.19

编译为 jar 文件

至此,我们已经可以编译我们的插件了,在 IDEA 的右上角新建一个运行配置文件(Current File -> Edit Configurations...

image-20230425143245877

在弹出的对话框中点击 + -> Gradle

image-20230425143345112

在右侧的 Run 一栏中输入 jar,代表我们要编译一个 jar 文件,填写完后点击 OK

image-20230425143450384

退出来后,我们可以看到原先 Current File 的位置已经多了我们刚刚配置好的选项,点击小三角按钮运行即可。执行完成后,控制台的输出如下所示,我们的 jar 文件位于 build/libs 文件夹中。

1
2
3
4
5
6
7
8
9
10
14:35:34: Executing 'jar'...

> Task :compileJava
> Task :processResources
> Task :classes
> Task :jar

BUILD SUCCESSFUL in 2s
3 actionable tasks: 3 executed
14:35:37: Execution finished 'jar'.

找不到编译时的控制台?

点击 IDEA 底部的 Build 按钮即可

image-20230425144652609

流式运行

每次都复制 jar 文件到服务端中,再重启服务端,这未免也过于麻烦了,还好我们可以利用 Gradle 的 Task 帮我们一次性搞定。

  1. 添加 Plugin 和 Task

    打开 build.gradle.kts 文件,在其中添加一个新的插件 id("xyz.jpenilla.run-paper") version "2.1.0"

    1
    2
    3
    4
    plugins {
    id("java")
    id("xyz.jpenilla.run-paper") version "2.1.0"
    }

    再在文件底部添加一个新的 task,在输入以下代码后 IDEA 会报错,不必理会,我们再次 Load Gradle Change(忘记了?看下前面是怎么做的。)

    1
    2
    3
    4
    5
    tasks {
    runServer {
    minecraftVersion("1.19.3")
    }
    }
  2. 添加 Run/Debug Configuration

    跟我们需要编译 jar 文件时一样,只不过这次我们在 Run 一栏中填的是 runServer,配置完成后点击运行。run-paper 将自动在 run 文件夹下搭建一个 Paper Spigot 服务端。

  3. 同意 Eula 协议

    首次启动后,控制台将提示如下:

    1
    You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

    此时我们需要打开 run/eula.txt,将其中的 eula=false 修改为 eula=true。修改后在此启动 runServer

  4. 开始使用

    此后,每当我们需要测试插件,只需要执行 runServer 即可,你也可以在 run 文件夹中对你的服务端进行配置。

    1
    2
    [14:45:00 INFO]: [ExamplePlugin] Enabling ExamplePlugin v1.0.0
    [14:45:00 INFO]: [ExamplePlugin] Enabled Successfully

    可以看到我们的插件已经成功启动了。

参考资料

Paper Project Setup | PaperMC Documentation

GitHub - jpenilla/run-task: Gradle plugins adding tasks to run Minecraft server and proxy software