|
|
| | | |
| 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+ |
| + | |
| + | == 手动创建 == |
| | | |
| === 创建新项目 === | | === 创建新项目 === |
|
|
| 编译成功后输出的 jar 文件应该存放在 <code>build/libs</code> 文件夹中。<br /> | | 编译成功后输出的 jar 文件应该存放在 <code>build/libs</code> 文件夹中。<br /> |
| </blockquote> | | </blockquote> |
| + | |
| + | == 使用Paperweight Userdev == |
| + | |
| + | [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> |