- 欢迎来到Minecraft插件百科!
- 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
- 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289
Paper/Paper 项目的搭建:修订间差异
(创建页面,内容为“<blockquote>本文的图片都是由译者提供的。供新手开发者找到文章提到的选项。 </blockquote> 由于Paper团队主要使用 [https://www.jetbr…”) 标签:段首空两格 |
无编辑摘要 |
||
(未显示2个用户的4个中间版本) | |||
第5行: | 第5行: | ||
Paper 团队使用 [https://gradle.org/ Gradle] 作为 Paper 等项目的构建工具,其插件开发工具链使用 Gradle 对项目进行依赖管理。 在经过修改后,下文代码也将适用于其它构建工具,例如Maven。不过本文所提供的代码将只涉及Gradle。 阅读[https://docs.gradle.org/current/userguide/migrating_from_maven.html 此文档]学习如何从 Maven 迁移到Gradle。 | Paper 团队使用 [https://gradle.org/ Gradle] 作为 Paper 等项目的构建工具,其插件开发工具链使用 Gradle 对项目进行依赖管理。 在经过修改后,下文代码也将适用于其它构建工具,例如Maven。不过本文所提供的代码将只涉及Gradle。 阅读[https://docs.gradle.org/current/userguide/migrating_from_maven.html 此文档]学习如何从 Maven 迁移到Gradle。 | ||
== 使用 Minecraft Development == | |||
=== 安装 Minecraft Development插件 === | |||
打开IntelliJ IDEA,在主界面中选中 Customize(自定义) -> All Settings (全部设置) -> Plugins (插件),在顶部选中Marketplace | |||
搜索Minecraft Development,点击安装,完成后重启IntelliJ IDEA | |||
=== 创建项目 === | |||
在创建项目对话框中选中 Minecraft,Platform Type(平台类型)为Plugin,Platform(平台)为Bukkit | |||
Bukkit Platform按照情况选择,Spigot兼容大部分Bukkit服务端,Paper则在Spigot的基础上有新增API | |||
Minecraft Version(Minecraft版本)视情况选择,Plugin Name(Plugin名称)为插件名称,主类可以直接使用自动生成的名称 | |||
Optional Settings中为可选项,按需填写 | |||
构建系统 Gradle/Maven | |||
Paper Manifest -> Use paper-plugin.yml 此项启用后将作为Paper插件,不再支持Spigot和Bukkit服务端 | |||
构建系统与创建常规项目同理 | |||
JDK按照Minecraft版本选择,1.16以下使用JDK8+,1.17使用JDK16+,1.18开始使用JDK17+ | |||
== 手动创建 == | |||
=== 创建新项目 === | === 创建新项目 === | ||
打开你的 IDE 然后点击创建新项目的按钮。<br /> | 打开你的 IDE 然后点击创建新项目的按钮。<br /> | ||
在 Intellij 中,你需要选择你想要创建的项目类型 —— 首先选中 <code>New Project</code>,然后选择 <code>Gradle - Kotlin DSL</code> 后单击 <code>Create</code>。 | |||
接着,IDE 将自动为你打开可用于管理项目依赖的 <code>build.gradle.kts</code> 文件。 | 接着,IDE 将自动为你打开可用于管理项目依赖的 <code>build.gradle.kts</code> 文件。 | ||
第118行: | 第144行: | ||
=== 创建 <code>resources</code> 目录 === | === 创建 <code>resources</code> 目录 === | ||
<code>resources</code> 文件夹是在你的插件中存放 <code>plugin.yml</code> 的地方。在[https:// | <code>resources</code> 文件夹是在你的插件中存放 <code>plugin.yml</code> 的地方。在[https://mineplugin.org/Paper/Paper_Plugin_YML 这里]了解更多关于plugin.yml的信息。 | ||
=== 最后 === | === 最后 === | ||
第132行: | 第158行: | ||
</div> | </div> | ||
<blockquote>提示<br /> | <blockquote>'''提示'''<br /> | ||
如果你正在使用 IntelliJ,你可以使用 Gradle 图形界面中的 <code>Build</code> 菜单来编译你的插件 - 它应该位于你的 IDE 的右上角。<br /> | 如果你正在使用 IntelliJ,你可以使用 Gradle 图形界面中的 <code>Build</code> 菜单来编译你的插件 - 它应该位于你的 IDE 的右上角。<br /> | ||
编译成功后输出的 jar 文件应该存放在 <code>build/libs</code> 文件夹中。<br /> | 编译成功后输出的 jar 文件应该存放在 <code>build/libs</code> 文件夹中。<br /> | ||
</blockquote> | </blockquote> | ||
== 使用Paperweight Userdev == | |||
'''此处为插件开发的高阶内容,直接在代码中调用NMS可能会导致插件不再兼容其他版本服务端,如仅需调用Paper API请勿使用Paperweight''' | |||
[https://docs.papermc.io/paper/dev/userdev 官方文档] | |||
paperweight是Paper的定制构建工具的名称。Gradle插件部分提供了在开发期间访问内部代码(也称为NMS)的功能。 | |||
通过API在下载页面上提供的Paper服务器jar是Paperclip jar。它们使用Spigot的映射,这些映射本质上是一些类型名称,但完全混淆了字段和方法。这使得它很难在开发环境中使用。这个插件允许您在开发期间使用完全去混淆的类型、名称和字段,然后重新映射您的插件,因此它仍然可以与混淆的服务器一起使用。 | |||
'''重新混淆不适用于反射。查看类似于 [https://github.com/jpenilla/reflection-remapper 这个库] 的东西,以便能够在反射中使用没有混淆的名称。''' | |||
=== 添加 Paperweight Userdev 插件 === | |||
Paperweight仅支持Gradle,暂不支持Maven | |||
具体的添加方法请见 [https://plugins.gradle.org/plugin/io.papermc.paperweight.userdev] | |||
=== 添加开发包依赖 === | |||
如果你现在尝试加载Gradle项目,你会收到一个错误,说你必须声明一个开发包依赖。你可以通过在 build.gradle.kts / build.gradle 文件中添加依赖包来实现。 | |||
<syntaxhighlight lang="groovy"> | |||
dependencies { | |||
// 其他依赖 | |||
paperweight.paperDevBundle("1.20.4-R0.1-SNAPSHOT") | |||
} | |||
</syntaxhighlight> | |||
开发包已含有paper-api,应当从依赖中移除此项 | |||
对于Paper 1.20.4,其中的版本为 1.20.4-R0.1-SNAPSHOT | |||
=== Gradle任务 === | |||
reobfJar任务创建一个插件jar,它被重新混淆为Spigot的运行时映射。这意味着它可以在标准的Paper服务器上工作。(类似forgegradle reobfJar) | |||
输出将在build/libs文件夹中。文件名包含-dev的jar是mojang映射的(没有重新混淆),在大多数服务器上都不能工作。 | |||
<blockquote> | |||
'''提示'''<br /> | |||
如果你在构建脚本中应用了Gradle Shadow插件,paperweight-userdev将检测到这一点,并使用shadowJar作为reobfJar任务的输入。 | |||
build/lib中的-dev-all.jar文件是shadowJar的,但没有经过重新混淆处理的jar文件。 | |||
</blockquote> | |||
可使用此方法将reobfJar与默认build同时运行 | |||
<syntaxhighlight lang="groovy"> | |||
tasks.assemble { | |||
dependsOn(reobfJar) | |||
} | |||
</syntaxhighlight> |
2024年3月21日 (四) 12:48的最新版本
本文的图片都是由译者提供的。供新手开发者找到文章提到的选项。
由于Paper团队主要使用 IntelliJ IDEA 进行开发,所以本指南将以该IDE作为重点。
不过,下文应当也适用于其它IDE,仅需针对性的作一些微小的修改即可。
Paper 团队使用 Gradle 作为 Paper 等项目的构建工具,其插件开发工具链使用 Gradle 对项目进行依赖管理。 在经过修改后,下文代码也将适用于其它构建工具,例如Maven。不过本文所提供的代码将只涉及Gradle。 阅读此文档学习如何从 Maven 迁移到Gradle。
使用 Minecraft Development
安装 Minecraft Development插件
打开IntelliJ IDEA,在主界面中选中 Customize(自定义) -> All Settings (全部设置) -> Plugins (插件),在顶部选中Marketplace
搜索Minecraft Development,点击安装,完成后重启IntelliJ IDEA
创建项目
在创建项目对话框中选中 Minecraft,Platform Type(平台类型)为Plugin,Platform(平台)为Bukkit
Bukkit Platform按照情况选择,Spigot兼容大部分Bukkit服务端,Paper则在Spigot的基础上有新增API
Minecraft Version(Minecraft版本)视情况选择,Plugin Name(Plugin名称)为插件名称,主类可以直接使用自动生成的名称
Optional Settings中为可选项,按需填写
构建系统 Gradle/Maven
Paper Manifest -> Use paper-plugin.yml 此项启用后将作为Paper插件,不再支持Spigot和Bukkit服务端
构建系统与创建常规项目同理
JDK按照Minecraft版本选择,1.16以下使用JDK8+,1.17使用JDK16+,1.18开始使用JDK17+
手动创建
创建新项目
打开你的 IDE 然后点击创建新项目的按钮。
在 Intellij 中,你需要选择你想要创建的项目类型 —— 首先选中 New Project
,然后选择 Gradle - Kotlin DSL
后单击 Create
。
接着,IDE 将自动为你打开可用于管理项目依赖的 build.gradle.kts
文件。
将 Paper 作为依赖项添加
要将 Paper 作为插件项目的一个依赖项,你需要将 Paper 仓库 ( repository
) 和 Paper 依赖 ( dependency
) 添加到你的 build.gradle.kts
文件中。
repositories {
mavenCentral()
maven("https://repo.papermc.io/repository/maven-public/")
}
dependencies {
compileOnly("io.papermc.paper:paper-api:1.19.2-R0.1-SNAPSHOT")
}
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
}
创建 src
目录
跳过
如果 IDE 已经为你的项目自动创建
src
目录,你就可以跳过这一步了。
要创建 src
目录,你需要新建一个名为 src
的文件夹,然后在里面创建子目录,叫做 main
。
接下来,在main
之中创建两个文件夹,分别命名为 java
和 resources
。
该文件夹的目录结构形如下:
... example-plugin ├── build.gradle.kts ├── settings.gradle.kts └── src └── main ├── java └── resources ...
创建 java
目录
Java 源代码存放在 java
目录中。你必须先创建一些包来管理你的 Java 代码。 拿下面这个结构举例,我们创建了一个三层的包并将其命名为 io.papermc.testplugin
。而在包中有一个ExamplePlugin
类 ( class
)。
... 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 用户名作为包名(格式大概是:io.github.用户名)。
若你的名字叫做 Linus Torvalds,你的包应该是 io.github.torvalds
。
跟随域名的应该是你的项目名。
比如,你有一个的工程叫做 ExamplePlugin
,你的包应该是io.github.torvalds.exampleplugin
。
你的每个插件都会有一个独一无二的包名。
主类
主类是你的插件中所有代码执行的起点,是唯一一个继承 JavaPlugin
的类。
下面是一个 ExamplePlugin
类的示例:
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("Hello, " + event.getPlayer().getName() + "!"));
}
}
创建 resources
目录
resources
文件夹是在你的插件中存放 plugin.yml
的地方。在这里了解更多关于plugin.yml的信息。
最后
现在,你就有一个将 Paper 作为依赖的插件项目啦!
接下来,编译你的插件,然后在 Paper 服务器上运行插件,就大功告成了。
如果你想要精简测试插件的流程,你可以使用 Run-Paper Gradle task。
它将帮你自动下载一个 Paper 服务端并运行,以便测试你的插件。
提示
如果你正在使用 IntelliJ,你可以使用 Gradle 图形界面中的
Build
菜单来编译你的插件 - 它应该位于你的 IDE 的右上角。
编译成功后输出的 jar 文件应该存放在build/libs
文件夹中。
使用Paperweight Userdev
此处为插件开发的高阶内容,直接在代码中调用NMS可能会导致插件不再兼容其他版本服务端,如仅需调用Paper API请勿使用Paperweight
paperweight是Paper的定制构建工具的名称。Gradle插件部分提供了在开发期间访问内部代码(也称为NMS)的功能。
通过API在下载页面上提供的Paper服务器jar是Paperclip jar。它们使用Spigot的映射,这些映射本质上是一些类型名称,但完全混淆了字段和方法。这使得它很难在开发环境中使用。这个插件允许您在开发期间使用完全去混淆的类型、名称和字段,然后重新映射您的插件,因此它仍然可以与混淆的服务器一起使用。
重新混淆不适用于反射。查看类似于 这个库 的东西,以便能够在反射中使用没有混淆的名称。
添加 Paperweight Userdev 插件
Paperweight仅支持Gradle,暂不支持Maven
具体的添加方法请见 [1]
添加开发包依赖
如果你现在尝试加载Gradle项目,你会收到一个错误,说你必须声明一个开发包依赖。你可以通过在 build.gradle.kts / build.gradle 文件中添加依赖包来实现。
dependencies {
// 其他依赖
paperweight.paperDevBundle("1.20.4-R0.1-SNAPSHOT")
}
开发包已含有paper-api,应当从依赖中移除此项
对于Paper 1.20.4,其中的版本为 1.20.4-R0.1-SNAPSHOT
Gradle任务
reobfJar任务创建一个插件jar,它被重新混淆为Spigot的运行时映射。这意味着它可以在标准的Paper服务器上工作。(类似forgegradle reobfJar)
输出将在build/libs文件夹中。文件名包含-dev的jar是mojang映射的(没有重新混淆),在大多数服务器上都不能工作。
提示
如果你在构建脚本中应用了Gradle Shadow插件,paperweight-userdev将检测到这一点,并使用shadowJar作为reobfJar任务的输入。build/lib中的-dev-all.jar文件是shadowJar的,但没有经过重新混淆处理的jar文件。
可使用此方法将reobfJar与默认build同时运行
tasks.assemble {
dependsOn(reobfJar)
}