跳到主要内容

Paper项目设置

由于Paper团队主要使用IntelliJ IDEA,本指南将重点介绍该IDE。 但是,以下步骤也适用于其他IDE,只需做一些小的改动。

Paper团队使用Gradle作为其构建系统,其工具都是为Gradle实现的。 下面的大部分代码可以修改为适用于其他构建系统(如Maven),但本指南仅涵盖Gradle。

这里了解如何从Maven迁移到Gradle。

创建新项目

打开你的IDE并选择创建新项目的选项。 在IntelliJ中,你将可以选择要创建的项目类型 - 选择New Project。 选择Gradle - Kotlin DSL并点击Create

你将进入build.gradle.kts文件,在这里你可以添加你的依赖。

添加Paper作为依赖

要添加Paper作为依赖,你需要将Paper仓库添加到你的build.gradle.ktspom.xml文件中,以及依赖本身。

设置src目录

备注

如果你的IDE自动创建了src目录,你可以跳过这一步。

要设置src目录,你需要创建一个名为src的新目录,然后在其中创建一个名为main的新目录。 在main内,创建两个名为javaresources的新目录。

它应该看起来像这样:

...
example-plugin
├── build.gradle.kts
├── settings.gradle.kts
└── src
└── main
├── java
└── resources
...

设置java目录

你将在java目录中放置你的Java源文件。你首先需要创建一些包来组织你的代码。 对于这个例子,我们将创建三个名为io.papermc.testplugin的包,然后在其中创建一个名为ExamplePlugin的类。

...
example-plugin
├── build.gradle.kts
├── settings.gradle.kts
└── src
└── main
├── java
│ └── io
│ └── papermc
│ └── testplugin
│ └── ExamplePlugin.java
└── resources
...

你可以看到这里ExamplePlugin类位于io.papermc.testplugin包中。 包是一种组织代码的方式 - 本质上,它是一个文件夹。Java包用于对相关类进行分组。 如果你想了解更多,Oracle有一个关于的指南。

命名包时,你应该使用反向顺序的域名。例如,如果你的域名是papermc.io, 你的包名应该是io.papermc。如果你没有域名,你可以使用类似你的GitHub用户名的东西。 如果你是Linus Torvalds,你的包将是io.github.torvalds

然后是你的项目名称。 例如,如果你的项目叫做ExamplePlugin,你的包将是io.github.torvalds.exampleplugin。 这允许每个插件都有一个唯一的包名。

_main_类

主类是你的插件的入口点,并且将是你的插件中唯一继承 JavaPlugin的类。 这是你的ExamplePlugin类可能的样子:

ExamplePlugin.java
package io.papermc.testplugin;

import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class ExamplePlugin extends JavaPlugin implements Listener {

@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(this, this);
}

@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
event.getPlayer().sendMessage(Component.text("你好, " + event.getPlayer().getName() + "!"));
}

}

设置resources

resources目录是你放置插件的plugin.yml文件的地方。有关更多信息,请参见Plugin YML页面。

使用Minecraft Development IntelliJ插件

或者,你可以使用Minecraft Development IntelliJ插件 来创建新项目。

信息

本教程仅适用于IntelliJ IDEA。如果你使用其他IDE,请按照上述手动项目设置指南进行操作。

安装Minecraft Development插件

首先你需要安装Minecraft Development插件。 你可以通过转到File > Settings > Plugins并在Marketplace部分搜索Minecraft Development来完成此操作。

安装插件后,你需要重启IntelliJ。 要重启,你可以点击安装插件后出现的Restart IDE按钮。

创建新项目

安装插件后,你可以通过转到File > New > Project...并从选项列表中选择Minecraft来创建新项目。

你将被要求提供一些关于你的项目的信息。

字段说明
Name你的项目名称。
Location你的项目位置。这是项目文件将存储的位置。
Platform Type你正在开发的平台类型。这应该是Plugin
Platform你正在开发的平台。这应该是Paper
Minecraft Version你正在开发的Minecraft版本。
Plugin Name你的插件名称。
Main Class你的插件的主类。这应该是继承JavaPlugin的类。
Optional Settings在这里你可以定义作者、网站、描述等内容。这些是可选的,插件工作不需要它们。
Build System你想使用的构建系统。Paper推荐使用Gradle,但如果你喜欢也可以使用Maven。
Paper Manifest是否要使用新的Paper插件。目前不推荐这样做,因为它仍在开发中。
Group ID你的项目的组ID。这用于Maven和Gradle。这通常是你的域名的反向。如果你不知道应该在这里放什么,你可以使用类似io.github.<yourname>的东西,或者如果你没有GitHub,你可以使用me.<yourname>
Artifact ID你的项目的工件ID。这用于Maven和Gradle。这通常是你的项目名称。这通常与Name字段相同。
Version你的项目的版本。这用于Maven和Gradle。这通常是1.0-SNAPSHOT,现在并不重要。
JDK你想使用的JDK。这可以是Java 21及以上的任何版本。

现在你可以点击Create按钮,IntelliJ将为你创建项目。 如果一切顺利,你应该看到类似这样的内容:

插件重映射

从1.20.5开始,Paper使用Mojang映射的运行时而不是将服务器重新混淆为Spigot映射。 如果你使用Spigot/Bukkit插件,你的插件将被假定为Spigot映射。 这意味着服务器在首次加载时必须反混淆并重新映射插件JAR。

信息

paperweight-userdev已经自动设置了这个属性。有关更多信息,请参见userdev文档。

Mojang映射

要告诉服务器你的插件是Mojang映射的,你需要将以下代码添加到你的构建脚本中:

Paper插件

如果你使用Paper插件,不需要这一步,因为插件将被假定为Mojang映射。

tasks.jar {
manifest {
attributes["paperweight-mappings-namespace"] = "mojang"
}
}
// 如果你配置了shadowJar
tasks.shadowJar {
manifest {
attributes["paperweight-mappings-namespace"] = "mojang"
}
}

Spigot映射

如果你明确想告诉服务器你的插件是Spigot映射的,你需要将以下代码添加到你的构建脚本中:

tasks.jar {
manifest {
attributes["paperweight-mappings-namespace"] = "spigot"
}
}
// 如果你配置了shadowJar
tasks.shadowJar {
manifest {
attributes["paperweight-mappings-namespace"] = "spigot"
}
}

结论

现在你应该已经设置好了一个带有Paper依赖的项目。 你剩下要做的就是编译你的插件并在Paper服务器上运行它。

备注

如果你想简化测试插件的过程,你可以使用Run-Task Gradle插件。 它将自动下载Paper服务器并为你运行它。

信息

如果你使用IntelliJ,你可以使用在IDE右上角找到的Gradle GUI Build菜单来编译你的插件。 你的插件的输出JAR将在build/libs目录中。