欢迎来到Minecraft插件百科!
对百科编辑一脸懵逼?
帮助:快速入门
带您快速熟悉百科编辑!
因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289
查看“Paper/Paper 项目的搭建”的源代码
←
Paper/Paper 项目的搭建
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于这些用户组的用户执行:
用户
、
自动确认用户
、
巡查者
您可以查看和复制此页面的源代码。
<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 == '''此处为插件开发的高阶内容,直接在代码中调用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>
返回
Paper/Paper 项目的搭建
。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
编辑相关
百科公告
编辑帮助
互助客栈
贡献分数
测试沙盒
发布条目
插件分类
管理
安全
聊天
编程
经济
修正
娱乐
综合
信息
机械
角色
传送
网页
整地
创世
付费
其它
工具
链入页面
相关更改
特殊页面
页面信息
相关网站
MCMOD百科
Minecraft中文百科
Minecraft纪念论坛
Minecraft百度贴吧
虚无世界Wiki