- 欢迎来到Minecraft插件百科!
- 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
- 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289
检查单独更改
本页面允许您检查防滥用过滤器根据某次单独更改所生成的变量,并使用过滤器进行测试。
根据本次更改生成的变量
变量 | 值 |
---|---|
编辑是否被标记为小编辑 (minor_edit) | |
用户账户名称 (user_name) | Tumuidle |
用户所在群组(包括隐藏群组) (user_groups) | *
user
autoconfirmed
|
页面编号 (article_articleid) | 7774 |
页面名字空间 (article_namespace) | 0 |
页面标题(不含名字空间) (article_text) | Paper/Paper 项目的搭建 |
完整页面标题 (article_prefixedtext) | Paper/Paper 项目的搭建 |
最后十位对该页面贡献的用户 (article_recent_contributors) | Poikcue
|
操作 (action) | edit |
编辑摘要/原因 (summary) | |
旧的内容模型 (old_content_model) | wikitext |
新的内容模型 (new_content_model) | wikitext |
编辑前的旧页面,wiki代码格式 (old_wikitext) | <blockquote>本文的图片都是由译者提供的。供新手开发者找到文章提到的选项。
</blockquote>
由于Paper团队主要使用 [https://www.jetbrains.com/idea/ IntelliJ IDEA] 进行开发,所以本指南将以该IDE作为重点。<br />
不过,下文应当也适用于其它IDE,仅需针对性的作一些微小的修改即可。
Paper 团队使用 [https://gradle.org/ Gradle] 作为 Paper 等项目的构建工具,其插件开发工具链使用 Gradle 对项目进行依赖管理。 在经过修改后,下文代码也将适用于其它构建工具,例如Maven。不过本文所提供的代码将只涉及Gradle。 阅读[https://docs.gradle.org/current/userguide/migrating_from_maven.html 此文档]学习如何从 Maven 迁移到Gradle。
=== 创建新项目 ===
打开你的 IDE 然后点击创建新项目的按钮。<br />
在 Intellij 中,你需要选择你想要创建的项目类型 —— 首先选中 <code>New Project</code>,然后选择 <code>Gradle - Kotlin DSL</code> 后单击 <code>Create</code>。
接着,IDE 将自动为你打开可用于管理项目依赖的 <code>build.gradle.kts</code> 文件。
<span id="将-paper-作为依赖项添加"></span>
=== 将 Paper 作为依赖项添加 ===
要将 Paper 作为插件项目的一个依赖项,你需要将 Paper 仓库 ( <code>repository</code> ) 和 Paper 依赖 ( <code>dependency</code> ) 添加到你的 <code>build.gradle.kts</code> 文件中。
<syntaxhighlight lang="kotlin">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))
}
</syntaxhighlight>
<span id="创建-src-目录"></span>
=== 创建 <code>src</code> 目录 ===
<blockquote>'''跳过'''<br />
如果 IDE 已经为你的项目自动创建 <code>src</code> 目录,你就可以跳过这一步了。
</blockquote>
要创建 <code>src</code> 目录,你需要新建一个名为 <code>src</code> 的文件夹,然后在里面创建子目录,叫做 <code>main</code>。<br />
接下来,在<code>main</code>之中创建两个文件夹,分别命名为 <code>java</code> 和 <code>resources</code>。
该文件夹的目录结构形如下:
<pre>...
example-plugin
├── build.gradle.kts
├── settings.gradle.kts
└── src
└── main
├── java
└── resources
...
</pre>
<span id="创建-java-目录"></span>
=== 创建 <code>java</code> 目录 ===
Java 源代码存放在 <code>java</code> 目录中。你必须先创建一些包来管理你的 Java 代码。 拿下面这个结构举例,我们创建了一个三层的包并将其命名为 <code>io.papermc.testplugin</code>。而在包中有一个<code>ExamplePlugin</code> 类 ( <code>class</code> )。
<pre>...
example-plugin
├── build.gradle.kts
├── settings.gradle.kts
└── src
└── main
├── java
│ └── io
│ └── papermc
│ └── testplugin
│ └── ExamplePlugin.java
└── resources
...
</pre>
=== 包 ===
可以看到,<code>ExamplePlugin</code> 类在 <code>io.papermc.testplugin</code> 包中。<br />
包用于管理代码。本质上,包就是个文件夹。在 Java 中,我们用包来管理一组相互间有一定关联的类。<br />
如果你想要了解更多关于包的信息,你可以在 Oracle 的指南中[https://docs.oracle.com/javase/tutorial/java/package/packages.html 查看]。
要为你的包[https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html 命名],你需要将域名颠倒顺序排列。比如有一个叫做 <code>papermc.io</code>的域名,你的包就应该命名为 <code>io.papermc</code>。<br />
如果你还没有一个域名,你可以将你的 GitHub 用户名作为包名(格式大概是:io.github.用户名)。<br />
若你的名字叫做 Linus Torvalds,你的包应该是 <code>io.github.torvalds</code>。
跟随域名的应该是你的项目名。<br />
比如,你有一个的工程叫做 <code>ExamplePlugin</code>,你的包应该是<code>io.github.torvalds.exampleplugin</code>。<br />
你的每个插件都会有一个独一无二的包名。
=== 主类 ===
主类是你的插件中所有代码执行的起点,是唯一一个继承 <code>JavaPlugin</code> 的类。<br />
下面是一个 <code>ExamplePlugin</code> 类的示例:
<syntaxhighlight lang="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("Hello, " + event.getPlayer().getName() + "!"));
}
}
</syntaxhighlight>
<span id="创建-resources-目录"></span>
=== 创建 <code>resources</code> 目录 ===
<code>resources</code> 文件夹是在你的插件中存放 <code>plugin.yml</code> 的地方。在[https://mineplugin.org/Paper/Paper_Plugin_YML 这里]了解更多关于plugin.yml的信息。
=== 最后 ===
现在,你就有一个将 Paper 作为依赖的插件项目啦!<br />
接下来,编译你的插件,然后在 Paper 服务器上运行插件,就大功告成了。
<div class="tip">
如果你想要精简测试插件的流程,你可以使用 [https://github.com/jpenilla/run-paper Run-Paper] Gradle task。<br />
它将帮你自动下载一个 Paper 服务端并运行,以便测试你的插件。
</div>
<blockquote>'''提示'''<br />
如果你正在使用 IntelliJ,你可以使用 Gradle 图形界面中的 <code>Build</code> 菜单来编译你的插件 - 它应该位于你的 IDE 的右上角。<br />
编译成功后输出的 jar 文件应该存放在 <code>build/libs</code> 文件夹中。<br />
</blockquote> |
编辑后的新页面,wiki代码格式 (new_wikitext) | <blockquote>本文的图片都是由译者提供的。供新手开发者找到文章提到的选项。
</blockquote>
由于Paper团队主要使用 [https://www.jetbrains.com/idea/ IntelliJ IDEA] 进行开发,所以本指南将以该IDE作为重点。<br />
不过,下文应当也适用于其它IDE,仅需针对性的作一些微小的修改即可。
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 />
在 Intellij 中,你需要选择你想要创建的项目类型 —— 首先选中 <code>New Project</code>,然后选择 <code>Gradle - Kotlin DSL</code> 后单击 <code>Create</code>。
接着,IDE 将自动为你打开可用于管理项目依赖的 <code>build.gradle.kts</code> 文件。
<span id="将-paper-作为依赖项添加"></span>
=== 将 Paper 作为依赖项添加 ===
要将 Paper 作为插件项目的一个依赖项,你需要将 Paper 仓库 ( <code>repository</code> ) 和 Paper 依赖 ( <code>dependency</code> ) 添加到你的 <code>build.gradle.kts</code> 文件中。
<syntaxhighlight lang="kotlin">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))
}
</syntaxhighlight>
<span id="创建-src-目录"></span>
=== 创建 <code>src</code> 目录 ===
<blockquote>'''跳过'''<br />
如果 IDE 已经为你的项目自动创建 <code>src</code> 目录,你就可以跳过这一步了。
</blockquote>
要创建 <code>src</code> 目录,你需要新建一个名为 <code>src</code> 的文件夹,然后在里面创建子目录,叫做 <code>main</code>。<br />
接下来,在<code>main</code>之中创建两个文件夹,分别命名为 <code>java</code> 和 <code>resources</code>。
该文件夹的目录结构形如下:
<pre>...
example-plugin
├── build.gradle.kts
├── settings.gradle.kts
└── src
└── main
├── java
└── resources
...
</pre>
<span id="创建-java-目录"></span>
=== 创建 <code>java</code> 目录 ===
Java 源代码存放在 <code>java</code> 目录中。你必须先创建一些包来管理你的 Java 代码。 拿下面这个结构举例,我们创建了一个三层的包并将其命名为 <code>io.papermc.testplugin</code>。而在包中有一个<code>ExamplePlugin</code> 类 ( <code>class</code> )。
<pre>...
example-plugin
├── build.gradle.kts
├── settings.gradle.kts
└── src
└── main
├── java
│ └── io
│ └── papermc
│ └── testplugin
│ └── ExamplePlugin.java
└── resources
...
</pre>
=== 包 ===
可以看到,<code>ExamplePlugin</code> 类在 <code>io.papermc.testplugin</code> 包中。<br />
包用于管理代码。本质上,包就是个文件夹。在 Java 中,我们用包来管理一组相互间有一定关联的类。<br />
如果你想要了解更多关于包的信息,你可以在 Oracle 的指南中[https://docs.oracle.com/javase/tutorial/java/package/packages.html 查看]。
要为你的包[https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html 命名],你需要将域名颠倒顺序排列。比如有一个叫做 <code>papermc.io</code>的域名,你的包就应该命名为 <code>io.papermc</code>。<br />
如果你还没有一个域名,你可以将你的 GitHub 用户名作为包名(格式大概是:io.github.用户名)。<br />
若你的名字叫做 Linus Torvalds,你的包应该是 <code>io.github.torvalds</code>。
跟随域名的应该是你的项目名。<br />
比如,你有一个的工程叫做 <code>ExamplePlugin</code>,你的包应该是<code>io.github.torvalds.exampleplugin</code>。<br />
你的每个插件都会有一个独一无二的包名。
=== 主类 ===
主类是你的插件中所有代码执行的起点,是唯一一个继承 <code>JavaPlugin</code> 的类。<br />
下面是一个 <code>ExamplePlugin</code> 类的示例:
<syntaxhighlight lang="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("Hello, " + event.getPlayer().getName() + "!"));
}
}
</syntaxhighlight>
<span id="创建-resources-目录"></span>
=== 创建 <code>resources</code> 目录 ===
<code>resources</code> 文件夹是在你的插件中存放 <code>plugin.yml</code> 的地方。在[https://mineplugin.org/Paper/Paper_Plugin_YML 这里]了解更多关于plugin.yml的信息。
=== 最后 ===
现在,你就有一个将 Paper 作为依赖的插件项目啦!<br />
接下来,编译你的插件,然后在 Paper 服务器上运行插件,就大功告成了。
<div class="tip">
如果你想要精简测试插件的流程,你可以使用 [https://github.com/jpenilla/run-paper Run-Paper] Gradle task。<br />
它将帮你自动下载一个 Paper 服务端并运行,以便测试你的插件。
</div>
<blockquote>'''提示'''<br />
如果你正在使用 IntelliJ,你可以使用 Gradle 图形界面中的 <code>Build</code> 菜单来编译你的插件 - 它应该位于你的 IDE 的右上角。<br />
编译成功后输出的 jar 文件应该存放在 <code>build/libs</code> 文件夹中。<br />
</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> |
编辑产生的差异 (edit_diff) | @@ -5,4 +5,32 @@
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+
+
+== 手动创建 ==
=== 创建新项目 ===
@@ -134,2 +162,53 @@
编译成功后输出的 jar 文件应该存放在 <code>build/libs</code> 文件夹中。<br />
</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>
|
编辑增加的行 (added_lines) |
== 使用 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+
== 手动创建 ==
== 使用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>
|
编辑后的新页面,已解析为HTML源码 (new_html) | <div class="mw-parser-output"><blockquote><p>本文的图片都是由译者提供的。供新手开发者找到文章提到的选项。
</p></blockquote>
<p>由于Paper团队主要使用 <a class="external text" href="https://www.jetbrains.com/idea/">IntelliJ IDEA</a> 进行开发,所以本指南将以该IDE作为重点。<br />
不过,下文应当也适用于其它IDE,仅需针对性的作一些微小的修改即可。
</p><p>Paper 团队使用 <a class="external text" href="https://gradle.org/">Gradle</a> 作为 Paper 等项目的构建工具,其插件开发工具链使用 Gradle 对项目进行依赖管理。 在经过修改后,下文代码也将适用于其它构建工具,例如Maven。不过本文所提供的代码将只涉及Gradle。 阅读<a class="external text" href="https://docs.gradle.org/current/userguide/migrating_from_maven.html">此文档</a>学习如何从 Maven 迁移到Gradle。
</p>
<div id="toc" class="toc"><div class="toctitle" lang="zh-CN" dir="ltr"><h2>目录</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#.E4.BD.BF.E7.94.A8_Minecraft_Development"><span class="tocnumber">1</span> <span class="toctext">使用 Minecraft Development</span></a>
<ul>
<li class="toclevel-2 tocsection-2"><a href="#.E5.AE.89.E8.A3.85_Minecraft_Development.E6.8F.92.E4.BB.B6"><span class="tocnumber">1.1</span> <span class="toctext">安装 Minecraft Development插件</span></a></li>
<li class="toclevel-2 tocsection-3"><a href="#.E5.88.9B.E5.BB.BA.E9.A1.B9.E7.9B.AE"><span class="tocnumber">1.2</span> <span class="toctext">创建项目</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-4"><a href="#.E6.89.8B.E5.8A.A8.E5.88.9B.E5.BB.BA"><span class="tocnumber">2</span> <span class="toctext">手动创建</span></a>
<ul>
<li class="toclevel-2 tocsection-5"><a href="#.E5.88.9B.E5.BB.BA.E6.96.B0.E9.A1.B9.E7.9B.AE"><span class="tocnumber">2.1</span> <span class="toctext">创建新项目</span></a></li>
<li class="toclevel-2 tocsection-6"><a href="#.E5.B0.86_Paper_.E4.BD.9C.E4.B8.BA.E4.BE.9D.E8.B5.96.E9.A1.B9.E6.B7.BB.E5.8A.A0"><span class="tocnumber">2.2</span> <span class="toctext">将 Paper 作为依赖项添加</span></a></li>
<li class="toclevel-2 tocsection-7"><a href="#.E5.88.9B.E5.BB.BA_src_.E7.9B.AE.E5.BD.95"><span class="tocnumber">2.3</span> <span class="toctext">创建 src 目录</span></a></li>
<li class="toclevel-2 tocsection-8"><a href="#.E5.88.9B.E5.BB.BA_java_.E7.9B.AE.E5.BD.95"><span class="tocnumber">2.4</span> <span class="toctext">创建 java 目录</span></a></li>
<li class="toclevel-2 tocsection-9"><a href="#.E5.8C.85"><span class="tocnumber">2.5</span> <span class="toctext">包</span></a></li>
<li class="toclevel-2 tocsection-10"><a href="#.E4.B8.BB.E7.B1.BB"><span class="tocnumber">2.6</span> <span class="toctext">主类</span></a></li>
<li class="toclevel-2 tocsection-11"><a href="#.E5.88.9B.E5.BB.BA_resources_.E7.9B.AE.E5.BD.95"><span class="tocnumber">2.7</span> <span class="toctext">创建 resources 目录</span></a></li>
<li class="toclevel-2 tocsection-12"><a href="#.E6.9C.80.E5.90.8E"><span class="tocnumber">2.8</span> <span class="toctext">最后</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-13"><a href="#.E4.BD.BF.E7.94.A8Paperweight_Userdev"><span class="tocnumber">3</span> <span class="toctext">使用Paperweight Userdev</span></a>
<ul>
<li class="toclevel-2 tocsection-14"><a href="#.E6.B7.BB.E5.8A.A0_Paperweight_Userdev_.E6.8F.92.E4.BB.B6"><span class="tocnumber">3.1</span> <span class="toctext">添加 Paperweight Userdev 插件</span></a></li>
<li class="toclevel-2 tocsection-15"><a href="#.E6.B7.BB.E5.8A.A0.E5.BC.80.E5.8F.91.E5.8C.85.E4.BE.9D.E8.B5.96"><span class="tocnumber">3.2</span> <span class="toctext">添加开发包依赖</span></a></li>
<li class="toclevel-2 tocsection-16"><a href="#Gradle.E4.BB.BB.E5.8A.A1"><span class="tocnumber">3.3</span> <span class="toctext">Gradle任务</span></a></li>
</ul>
</li>
</ul>
</div>
<h2><span id="使用_Minecraft_Development"></span><span class="mw-headline" id=".E4.BD.BF.E7.94.A8_Minecraft_Development">使用 Minecraft Development</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=1" title="编辑小节:使用 Minecraft Development">编辑</a><span class="mw-editsection-bracket">]</span></span></h2>
<h3><span id="安装_Minecraft_Development插件"></span><span class="mw-headline" id=".E5.AE.89.E8.A3.85_Minecraft_Development.E6.8F.92.E4.BB.B6">安装 Minecraft Development插件</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=2" title="编辑小节:安装 Minecraft Development插件">编辑</a><span class="mw-editsection-bracket">]</span></span></h3>
<p>打开IntelliJ IDEA,在主界面中选中 Customize(自定义) -> All Settings (全部设置) -> Plugins (插件),在顶部选中Marketplace
</p><p>搜索Minecraft Development,点击安装,完成后重启IntelliJ IDEA
</p>
<h3><span id="创建项目"></span><span class="mw-headline" id=".E5.88.9B.E5.BB.BA.E9.A1.B9.E7.9B.AE">创建项目</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=3" title="编辑小节:创建项目">编辑</a><span class="mw-editsection-bracket">]</span></span></h3>
<p>在创建项目对话框中选中 Minecraft,Platform Type(平台类型)为Plugin,Platform(平台)为Bukkit
</p><p>Bukkit Platform按照情况选择,Spigot兼容大部分Bukkit服务端,Paper则在Spigot的基础上有新增API
</p><p>Minecraft Version(Minecraft版本)视情况选择,Plugin Name(Plugin名称)为插件名称,主类可以直接使用自动生成的名称
</p><p>Optional Settings中为可选项,按需填写
</p><p>构建系统 Gradle/Maven
</p><p>Paper Manifest -> Use paper-plugin.yml 此项启用后将作为Paper插件,不再支持Spigot和Bukkit服务端
</p><p>构建系统与创建常规项目同理
</p><p>JDK按照Minecraft版本选择,1.16以下使用JDK8+,1.17使用JDK16+,1.18开始使用JDK17+
</p>
<h2><span id="手动创建"></span><span class="mw-headline" id=".E6.89.8B.E5.8A.A8.E5.88.9B.E5.BB.BA">手动创建</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=4" title="编辑小节:手动创建">编辑</a><span class="mw-editsection-bracket">]</span></span></h2>
<h3><span id="创建新项目"></span><span class="mw-headline" id=".E5.88.9B.E5.BB.BA.E6.96.B0.E9.A1.B9.E7.9B.AE">创建新项目</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=5" title="编辑小节:创建新项目">编辑</a><span class="mw-editsection-bracket">]</span></span></h3>
<p>打开你的 IDE 然后点击创建新项目的按钮。<br />
在 Intellij 中,你需要选择你想要创建的项目类型 —— 首先选中 <code>New Project</code>,然后选择 <code>Gradle - Kotlin DSL</code> 后单击 <code>Create</code>。
</p><p>接着,IDE 将自动为你打开可用于管理项目依赖的 <code>build.gradle.kts</code> 文件。
</p><p><span id=".E5.B0.86-paper-.E4.BD.9C.E4.B8.BA.E4.BE.9D.E8.B5.96.E9.A1.B9.E6.B7.BB.E5.8A.A0"></span>
</p>
<h3><span id="将_Paper_作为依赖项添加"></span><span class="mw-headline" id=".E5.B0.86_Paper_.E4.BD.9C.E4.B8.BA.E4.BE.9D.E8.B5.96.E9.A1.B9.E6.B7.BB.E5.8A.A0">将 Paper 作为依赖项添加</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=6" title="编辑小节:将 Paper 作为依赖项添加">编辑</a><span class="mw-editsection-bracket">]</span></span></h3>
<p>要将 Paper 作为插件项目的一个依赖项,你需要将 Paper 仓库 ( <code>repository</code> ) 和 Paper 依赖 ( <code>dependency</code> ) 添加到你的 <code>build.gradle.kts</code> 文件中。
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span></span><span class="n">repositories</span> <span class="p">{</span>
<span class="n">mavenCentral</span><span class="p">()</span>
<span class="n">maven</span><span class="p">(</span><span class="s">"https://repo.papermc.io/repository/maven-public/"</span><span class="p">)</span>
<span class="p">}</span>
<span class="n">dependencies</span> <span class="p">{</span>
<span class="n">compileOnly</span><span class="p">(</span><span class="s">"io.papermc.paper:paper-api:1.19.2-R0.1-SNAPSHOT"</span><span class="p">)</span>
<span class="p">}</span>
<span class="n">java</span> <span class="p">{</span>
<span class="n">toolchain</span><span class="p">.</span><span class="n">languageVersion</span><span class="p">.</span><span class="k">set</span><span class="p">(</span><span class="n">JavaLanguageVersion</span><span class="p">.</span><span class="n">of</span><span class="p">(</span><span class="m">17</span><span class="p">))</span>
<span class="p">}</span>
</pre></div>
<p><span id=".E5.88.9B.E5.BB.BA-src-.E7.9B.AE.E5.BD.95"></span>
</p>
<h3><span id="创建_src_目录"></span><span class="mw-headline" id=".E5.88.9B.E5.BB.BA_src_.E7.9B.AE.E5.BD.95">创建 <code>src</code> 目录</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=7" title="编辑小节:创建 src 目录">编辑</a><span class="mw-editsection-bracket">]</span></span></h3>
<blockquote><p><b>跳过</b><br />
</p><p>如果 IDE 已经为你的项目自动创建 <code>src</code> 目录,你就可以跳过这一步了。
</p>
</blockquote>
<p>要创建 <code>src</code> 目录,你需要新建一个名为 <code>src</code> 的文件夹,然后在里面创建子目录,叫做 <code>main</code>。<br />
接下来,在<code>main</code>之中创建两个文件夹,分别命名为 <code>java</code> 和 <code>resources</code>。
</p><p>该文件夹的目录结构形如下:
</p>
<pre>...
example-plugin
├── build.gradle.kts
├── settings.gradle.kts
└── src
└── main
├── java
└── resources
...
</pre>
<p><span id=".E5.88.9B.E5.BB.BA-java-.E7.9B.AE.E5.BD.95"></span>
</p>
<h3><span id="创建_java_目录"></span><span class="mw-headline" id=".E5.88.9B.E5.BB.BA_java_.E7.9B.AE.E5.BD.95">创建 <code>java</code> 目录</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=8" title="编辑小节:创建 java 目录">编辑</a><span class="mw-editsection-bracket">]</span></span></h3>
<p>Java 源代码存放在 <code>java</code> 目录中。你必须先创建一些包来管理你的 Java 代码。 拿下面这个结构举例,我们创建了一个三层的包并将其命名为 <code>io.papermc.testplugin</code>。而在包中有一个<code>ExamplePlugin</code> 类 ( <code>class</code> )。
</p>
<pre>...
example-plugin
├── build.gradle.kts
├── settings.gradle.kts
└── src
└── main
├── java
│ └── io
│ └── papermc
│ └── testplugin
│ └── ExamplePlugin.java
└── resources
...
</pre>
<h3><span id="包"></span><span class="mw-headline" id=".E5.8C.85">包</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=9" title="编辑小节:包">编辑</a><span class="mw-editsection-bracket">]</span></span></h3>
<p>可以看到,<code>ExamplePlugin</code> 类在 <code>io.papermc.testplugin</code> 包中。<br />
包用于管理代码。本质上,包就是个文件夹。在 Java 中,我们用包来管理一组相互间有一定关联的类。<br />
如果你想要了解更多关于包的信息,你可以在 Oracle 的指南中<a class="external text" href="https://docs.oracle.com/javase/tutorial/java/package/packages.html">查看</a>。
</p><p>要为你的包<a class="external text" href="https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html">命名</a>,你需要将域名颠倒顺序排列。比如有一个叫做 <code>papermc.io</code>的域名,你的包就应该命名为 <code>io.papermc</code>。<br />
如果你还没有一个域名,你可以将你的 GitHub 用户名作为包名(格式大概是:io.github.用户名)。<br />
若你的名字叫做 Linus Torvalds,你的包应该是 <code>io.github.torvalds</code>。
</p><p>跟随域名的应该是你的项目名。<br />
比如,你有一个的工程叫做 <code>ExamplePlugin</code>,你的包应该是<code>io.github.torvalds.exampleplugin</code>。<br />
你的每个插件都会有一个独一无二的包名。
</p>
<h3><span id="主类"></span><span class="mw-headline" id=".E4.B8.BB.E7.B1.BB">主类</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=10" title="编辑小节:主类">编辑</a><span class="mw-editsection-bracket">]</span></span></h3>
<p>主类是你的插件中所有代码执行的起点,是唯一一个继承 <code>JavaPlugin</code> 的类。<br />
下面是一个 <code>ExamplePlugin</code> 类的示例:
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span></span><span class="kn">package</span> <span class="nn">io.papermc.testplugin</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">net.kyori.adventure.text.Component</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.bukkit.Bukkit</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.bukkit.event.EventHandler</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.bukkit.event.Listener</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.bukkit.event.player.PlayerJoinEvent</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.bukkit.plugin.java.JavaPlugin</span><span class="o">;</span>
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">ExamplePlugin</span> <span class="kd">extends</span> <span class="n">JavaPlugin</span> <span class="kd">implements</span> <span class="n">Listener</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onEnable</span><span class="o">()</span> <span class="o">{</span>
<span class="n">Bukkit</span><span class="o">.</span><span class="na">getPluginManager</span><span class="o">().</span><span class="na">registerEvents</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="o">}</span>
<span class="nd">@EventHandler</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onPlayerJoin</span><span class="o">(</span><span class="n">PlayerJoinEvent</span> <span class="n">event</span><span class="o">)</span> <span class="o">{</span>
<span class="n">event</span><span class="o">.</span><span class="na">getPlayer</span><span class="o">().</span><span class="na">sendMessage</span><span class="o">(</span><span class="n">Component</span><span class="o">.</span><span class="na">text</span><span class="o">(</span><span class="s">"Hello, "</span> <span class="o">+</span> <span class="n">event</span><span class="o">.</span><span class="na">getPlayer</span><span class="o">().</span><span class="na">getName</span><span class="o">()</span> <span class="o">+</span> <span class="s">"!"</span><span class="o">));</span>
<span class="o">}</span>
<span class="o">}</span>
</pre></div>
<p><span id=".E5.88.9B.E5.BB.BA-resources-.E7.9B.AE.E5.BD.95"></span>
</p>
<h3><span id="创建_resources_目录"></span><span class="mw-headline" id=".E5.88.9B.E5.BB.BA_resources_.E7.9B.AE.E5.BD.95">创建 <code>resources</code> 目录</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=11" title="编辑小节:创建 resources 目录">编辑</a><span class="mw-editsection-bracket">]</span></span></h3>
<p><code>resources</code> 文件夹是在你的插件中存放 <code>plugin.yml</code> 的地方。在<a class="external text" href="https://mineplugin.org/Paper/Paper_Plugin_YML">这里</a>了解更多关于plugin.yml的信息。
</p>
<h3><span id="最后"></span><span class="mw-headline" id=".E6.9C.80.E5.90.8E">最后</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=12" title="编辑小节:最后">编辑</a><span class="mw-editsection-bracket">]</span></span></h3>
<p>现在,你就有一个将 Paper 作为依赖的插件项目啦!<br />
接下来,编译你的插件,然后在 Paper 服务器上运行插件,就大功告成了。
</p>
<div class="tip">
<p>如果你想要精简测试插件的流程,你可以使用 <a class="external text" href="https://github.com/jpenilla/run-paper">Run-Paper</a> Gradle task。<br />
它将帮你自动下载一个 Paper 服务端并运行,以便测试你的插件。
</p><p><br />
</p>
</div>
<blockquote><p><b>提示</b><br />
</p><p>如果你正在使用 IntelliJ,你可以使用 Gradle 图形界面中的 <code>Build</code> 菜单来编译你的插件 - 它应该位于你的 IDE 的右上角。<br />
编译成功后输出的 jar 文件应该存放在 <code>build/libs</code> 文件夹中。<br />
</p>
</blockquote>
<h2><span id="使用Paperweight_Userdev"></span><span class="mw-headline" id=".E4.BD.BF.E7.94.A8Paperweight_Userdev">使用Paperweight Userdev</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=13" title="编辑小节:使用Paperweight Userdev">编辑</a><span class="mw-editsection-bracket">]</span></span></h2>
<p><a class="external text" href="https://docs.papermc.io/paper/dev/userdev">官方文档</a>
</p><p>paperweight是Paper的定制构建工具的名称。Gradle插件部分提供了在开发期间访问内部代码(也称为NMS)的功能。
</p><p>通过API在下载页面上提供的Paper服务器jar是Paperclip jar。它们使用Spigot的映射,这些映射本质上是一些类型名称,但完全混淆了字段和方法。这使得它很难在开发环境中使用。这个插件允许您在开发期间使用完全去混淆的类型、名称和字段,然后重新映射您的插件,因此它仍然可以与混淆的服务器一起使用。
</p><p><b>重新混淆不适用于反射。查看类似于 <a class="external text" href="https://github.com/jpenilla/reflection-remapper">这个库</a> 的东西,以便能够在反射中使用没有混淆的名称。</b>
</p>
<h3><span id="添加_Paperweight_Userdev_插件"></span><span class="mw-headline" id=".E6.B7.BB.E5.8A.A0_Paperweight_Userdev_.E6.8F.92.E4.BB.B6">添加 Paperweight Userdev 插件</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=14" title="编辑小节:添加 Paperweight Userdev 插件">编辑</a><span class="mw-editsection-bracket">]</span></span></h3>
<p>Paperweight仅支持Gradle,暂不支持Maven
</p><p>具体的添加方法请见 <a class="external autonumber" href="https://plugins.gradle.org/plugin/io.papermc.paperweight.userdev">[1]</a>
</p>
<h3><span id="添加开发包依赖"></span><span class="mw-headline" id=".E6.B7.BB.E5.8A.A0.E5.BC.80.E5.8F.91.E5.8C.85.E4.BE.9D.E8.B5.96">添加开发包依赖</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=15" title="编辑小节:添加开发包依赖">编辑</a><span class="mw-editsection-bracket">]</span></span></h3>
<p>如果你现在尝试加载Gradle项目,你会收到一个错误,说你必须声明一个开发包依赖。你可以通过在 build.gradle.kts / build.gradle 文件中添加依赖包来实现。
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span></span><span class="n">dependencies</span> <span class="o">{</span>
<span class="c1">// 其他依赖</span>
<span class="n">paperweight</span><span class="o">.</span><span class="na">paperDevBundle</span><span class="o">(</span><span class="s2">"1.20.4-R0.1-SNAPSHOT"</span><span class="o">)</span>
<span class="o">}</span>
</pre></div>
<p>开发包已含有paper-api,应当从依赖中移除此项
</p><p>对于Paper 1.20.4,其中的版本为 1.20.4-R0.1-SNAPSHOT
</p>
<h3><span id="Gradle任务"></span><span class="mw-headline" id="Gradle.E4.BB.BB.E5.8A.A1">Gradle任务</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/Paper_%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%90%AD%E5%BB%BA&action=edit&section=16" title="编辑小节:Gradle任务">编辑</a><span class="mw-editsection-bracket">]</span></span></h3>
<p>reobfJar任务创建一个插件jar,它被重新混淆为Spigot的运行时映射。这意味着它可以在标准的Paper服务器上工作。(类似forgegradle reobfJar)
</p><p>输出将在build/libs文件夹中。文件名包含-dev的jar是mojang映射的(没有重新混淆),在大多数服务器上都不能工作。
</p>
<blockquote>
<p><b>提示</b><br />
如果你在构建脚本中应用了Gradle Shadow插件,paperweight-userdev将检测到这一点,并使用shadowJar作为reobfJar任务的输入。
</p><p>build/lib中的-dev-all.jar文件是shadowJar的,但没有经过重新混淆处理的jar文件。
</p>
</blockquote>
<p>可使用此方法将reobfJar与默认build同时运行
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span></span><span class="n">tasks</span><span class="o">.</span><span class="na">assemble</span> <span class="o">{</span>
<span class="n">dependsOn</span><span class="o">(</span><span class="n">reobfJar</span><span class="o">)</span>
<span class="o">}</span>
</pre></div>
<!--
NewPP limit report
Cached time: 20240321124507
Cache expiry: 86400
Dynamic content: false
CPU time usage: 0.032 seconds
Real time usage: 0.671 seconds
Preprocessor visited node count: 133/1000000
Preprocessor generated node count: 232/1000000
Post‐expand include size: 0/2097152 bytes
Template argument size: 0/2097152 bytes
Highest expansion depth: 2/40
Expensive parser function count: 0/100
Unstrip recursion depth: 0/20
Unstrip post‐expand size: 5077/5000000 bytes
-->
<!--
Transclusion expansion time report (%,ms,calls,template)
100.00% 0.000 1 -total
-->
</div> |
更改的Unix时间戳 (timestamp) | 1711025106 |