PowerNukkitX
什么是PowerNukkitX?
简介
PowerNukkitX(简称PNX)是由包括BlocklyNukkit团队在内的中国Nukkit开发者们负责开发维护的Nukkit分支版本,修复了众多BUG,改善了性能,及时跟进新版本支持、支持1.18所有新方块和新物品、支持新版下界、支持史诗地形生成器(Terra)。在这些大更改的情况下,PNX仍然保持了良好的插件兼容性,Nukkit生态中的数千个插件仍然可以在PNX上运行。 得益于完全开源的代码,您在遵守开源协议的情况下使用PowerNukkitX没有任何法律风险,内部的数十万API可以随意调用,您可以深入查看实现,通过JVM生态中的各种工具及其方便地进行开发、调试、注入、拦截。也正因如此,Nukkit生态丰富多彩,成百上千各种各样的插件供您选择,您可以用您喜欢的任意JVM语言编写插件,如Java,Kotlin,Scala,Python,Javascript,Lua……
大多数为Nukkit制作的插件都可以在PowerNukkitX上使用,但某些插件在运行时可能会出一些错误等或不支持PowerNukkitX添加的新内容。
为什么我们要开发PNX?
最直接的原因就是:只有核心强,生态才能强。
我们可以毫不掩饰地说,去重之后,Nukkit生态是基岩版作品最多的生态之一,也是基岩版最高技术力的圈子之一。但是,Nukkit核心在开发团队被CubeCraft买去开发Geyser 项目之后,开发强度急剧下降,随着国外众多开发者进入JE圈子,国内BDS圈子向心力逐渐加强,Nukkit系核心渐渐地不再能跟上be社区发展的步伐。作为自由开源精神的践行者, 作为Nukkit生态的主力,我们有必要接过Nukkit系服务端开发的任务,续写被EaseCation遗忘的的国人核心开发的篇章。
优势和差异
- 最新版mcbe协议支持
- 1.18全物品方块及其功能支持
- 384格世界支持
- 新版下界生物群系支持
- 史诗地形生成器
- 修复众多bug
- 自定义物品、方块(WIP)
- 全开源、全API开放、插件众多
- 更高性能,多核优化(堆核而非堆cpu频率)
联系链接
快速入门
跟随本教程,十分钟(不包括下载耗时)开启您的第一个PowerNukkitX服务器。
本教程将带您使用PowerNukkitX的启动器(Bootstrap)来快速安装并启动服务器。
配置环境
下载启动器
稳定版:点击下载稳定版启动器master-ef2e75c
最新版: 前往自动构建页面,打开您要下载的版本的构建界面并下载PowerNukkitX-Bootstrap 构件,下载完成后解压。
安装Java环境
Windows
下载OpenJDK17安装包 并按照提示安装,一路默认下一步即可完成安装。
Linux
Ubuntu系统安装:
sudo apt update && sudo apt upgrade -y
sudo apt-get install openjdk-17-jre
启动服务器
命令行启动
将启动器jar包复制到你要开服的文件夹中,并在此文件夹下输入命令:
java -jar Bootstrap-0.0.1-beta-shaded.jar
随后启动器将自动开始配置,按照控制台给出的提示,启动器会自动下载配置好PNX需要的java环境,下载并安装PNX核心及依赖库,随后服务器会自动启动。
如果您在关服后想要再次开服,再次输入上面的命令即可。
正常开服界面如下:欲关闭服务器,输入stop
即可。
图形界面启动
如果您使用Windows系统、MacOS系统或带有图形界面的Linux系统,可以通过图形界面来管理并启动服务器。
在Windows或MacOS上,如果您已经正确地配置了Java运行环境,您可以直接双击启动器jar包来打开PNX界面;在Linux上,您可以通过java -jar Bootstrap-0.0.1-beta-shaded.jar --gui
来在安装了图形界面的系统中打开PNX界面,PNX正确启动后会显示如下界面:
点击 窗口 -> 检查更新,打开更新检查窗口:
双击标有叉号的项目,挨个双击子项,启动器就会自动修复你点击的子项,直到所有的叉号都消失为止。
点击 服务端 -> 启动服务端,即可启动PowerNukkitX服务器:
如果出现此界面,输入chs
并回车即可以中文模式启动PowerNukkitX服务端。
启动器
启动PNX
为什么用启动器
Bootstrap,启动器,是PNX官方提供的用于启动PowerNukkitX的工具。
它可以通过命令行和图形界面两种方式使用,提供了简单易用的开服体验,具有以下优点:
- 快捷开服,无需复杂配置
- 占用资源少,不会对核心运行造成明显影响
- 自动配置java环境,自动检测并使用性能最高的Java启动PNX
- 方便安装依赖库、更新服务端核心
- 可以在只有Java8的面板服启动PNX
- 自动配置复杂的启动参数
启动器的使用方式,详见“快速入门”章节。
不使用启动器开服
当然,你也可以不用启动器开服,但开服的配置将会较为复杂,传统的开服命令不再适合PNX。
首先,你需要前往Github action,选择一个完整的构建任务,点开进入构建详情界面,找到如下的构建物界面:
确定你登录了Github后,点击下载PowerNukkitX-Core
和PowerNukkitX-Libs
,这将分别下载PNX服务端核心和依赖库的压缩包。
下载成功后,解压上述安装包,将服务端核心跟依赖库分别解压到不同的文件夹中。
接下来,找到你的java17的安装路径,在此路径下找到对应的java二进制文件的绝对路径,记录下来。
现在,你可以着手开始编写你的开服命令了。
开服命令模板如下:
%JAVA% -Dfile.encoding=UTF-8 -Djansi.passthrough=true -Dterminal.ansi=true --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED -cp %PNX%%CP_SPLIT%%LIBS_PATH% cn.nukkit.Nukkit
请您将上述模板中的占位符(两侧为%的文字,包括百分号)按照如下说明进行替换:
占位符 | 替换为 |
---|---|
JAVA | java17二进制文件绝对路径 |
PNX | PNX核心jar包路径 |
CP_SPLIT | 系统路径分隔符,Windows为;,Linux为: |
LIBS_PATH | 存放依赖库的文件夹路径 |
在命令行上输入您修改完的开服命令,即可启动PNX服务端。
注意,您需要留心依赖库变化,如果依赖库发生变化,您需要手动重新下载依赖库重复上述步骤,依赖库如有变化,恕不另行通知。
启动器命令行参数
当您从命令行启动时,您可以添加一些参数以使用启动器的更多功能。
help
用法:-h
--help
说明:显示命令行帮助
version
用法:--version
--version=[item:string]
参数:
- item 指定检查更新的项目,可选
pnx
java
bootstrap
说明:检测并显示当前服务端核心、Java和启动器的版本
autoRestart
用法:--autoRestart
说明:服务端关闭后自动重启
updatePNX
用法:--updatePNX
说明:更新PNX服务端核心
updateLibs
用法:--updateLibs
说明:更新依赖库
updateBootstrap
用法:--updateBootstrap
说明:更新启动器
updateComponents
用法:--updateComponents
说明:更新附加组件
启动器配置文件
PNX启动器具有一系列易于使用的默认配置,同时也允许用户自定义自己的配置,用户自定义配置的优先级高于默认配置。
PNX启动器的用户配置文件为启动器同级目录的bootstrap.ini
,默认不会自动创建,您需要手动创建。
默认配置
配置键 | 默认值 | 说明 |
---|---|---|
language | 启动器使用语言的语言代码,如zh-cn(简体中文),en-us(美式英文) | |
start-cmd | %JAVA% -Dfile.encoding=UTF-8 -Djansi.passthrough=true -Dterminal.ansi=true --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED -cp %PNX%%CP_SPLIT%libs/* cn.nukkit.Nukkit | 默认PNX启动命令 |
min-restart-time | 30000 | 最小重启间隔时间(ms),两次启动小于此时间就不再自动重启 |
auto-restart | false | 是否默认自动重启 |
gui-terminal-color | PowerNukkitX | 图形界面终端配色(PowerNukkitX/Windows) |
displayLaunchCommand | false | 是否在CLI界面输出PNX启动命令 |
preferredJVM | GraalVM | 优先使用名称中带有此配置项的JVM启动PNX |
graalvm.version | 22.0.0.2 | 要下载的GraalVM版本 |
graalvm.win-x86 | https://download.fastgit.org/graalvm/graalvm-ce-builds/releases/download/vm-22.0.0.2/graalvm-ce-java17-windows-amd64-22.0.0.2.zip | |
graalvm.linux-x86 | https://download.fastgit.org/graalvm/graalvm-ce-builds/releases/download/vm-22.0.0.2/graalvm-ce-java17-linux-amd64-22.0.0.2.zip | |
graalvm.linux-aarch | https://download.fastgit.org/graalvm/graalvm-ce-builds/releases/download/vm-22.0.0.2/graalvm-ce-java17-linux-aarch64-22.0.0.2.zip | |
graalvm.darwin-x86 | https://download.fastgit.org/graalvm/graalvm-ce-builds/releases/download/vm-22.0.0.2/graalvm-ce-java17-darwin-amd64-22.0.0.2.zip | |
adopt.version | 17.0.2_8 | 要下载的AdoptOpenJDK版本 |
adopt.win-x86 | https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/17/jre/x64/windows/OpenJDK17U-jre_x64_windows_hotspot_17.0.2_8.zip | |
adopt.linux-x86 | https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/17/jre/x64/linux/OpenJDK17U-jre_x64_linux_hotspot_17.0.2_8.tar.gz | |
adopt.linux-aarch | https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/17/jre/aarch64/linux/OpenJDK17U-jre_aarch64_linux_hotspot_17.0.2_8.tar.gz | |
adopt.linux-arm | https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/17/jre/arm/linux/OpenJDK17U-jre_arm_linux_hotspot_17.0.2_8.tar.gz | |
adopt.darwin-x86 | https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/17/jre/x64/mac/OpenJDK17U-jre_x64_mac_hotspot_17.0.2_8.tar.gz | |
adopt.darwin-aarch | https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/17/jre/aarch64/mac/OpenJDK17U-jre_aarch64_mac_hotspot_17.0.2_8.tar.gz |
FAQ
常见开服问题
java.lang.reflect.InaccessibleObjectException
简易处理方式
启动命令在-jar
前面加上--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED
例如:
Java17目录\bin\java --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED -jar powernukkitx-1.6.0.0-PNX-SNAPSHOT-shaded.jar
完美解决
查看报错内容中如下部分:
module A does not "opens B" to unnamed module @C
在启动命令-jar
前加上--add-opens A/B=ALL-UNNAMED
(A/B中的内容为相关模块名称,可看以下示例)即可,每个不同报错都要这么做
示例:
如果报错内容为:module java.base
does not "opens java.lang
" to unnamed module @?????? 那参数配置则为
--add-opens java.base/java.lang=ALL-UNNAMED
java.lang.UnsupportedClassVersionError
请更换java到java17,下载链接
登陆服务器提示“无法连接:过期的服务器!”
这种情况发生有两种可能性
一:服务端协议更新导致服务器过期,等待服务端更新协议
二:本机电脑的世界与服务端时间相差过大导致无法进入服务器,解决办法为同步本地时间或者在server.properties中设置check-login-time=off
Terra问题
什么是terra
Terra是一个第三方开源地形生成器,pnx在terra分支中整合了Terra,您可以在pnx中使用terra生成史诗般的地图。
启动Terra
要将terra应用到您的世界中,需要如下两步:
在server.properties
中,设置:
use-terra=on
在nukkit.yml
中,设置:
worlds:
世界名称:
seed: 世界种子
generator: terra:default
然后,重新启动服务器,即可体验terra地形生成器。
黑色生物群系
因为Terra会将未完成的生物群系用黑色混凝土方块标注,所以会有这些黑色生物群系。
如果不希望它们出现,可以使用PNX提供的没有未完成的生物群系的配置包。下载PNX配置包
下载完成后,请使用默认配置包替换掉./terra/packs/default.zip
。重新启动服务器即可完成更改。
为什么设置不生效
- 如果您的世界先前使用的不是terra生成器,那么设置不会生效,您需要使用一个新的地图。
- 如果您的使用的分支不包含terra生成器(terra分支核心文件大小为35MB),您需要更换服务端核心。
占用的内存太多
很抱歉,由于terra算法复杂,自定义性极高,启动时使用大约300MB内存在所难免。我们已经尽力优化了。
如果您真的希望减少内存使用,可以尝试修改./terra/config/yml
:
cache:
structure: 0 # 默认32
sampler: 0 # 默认128
biome-provider: 0 # 默认32
请注意,这样做会影响性能,加重CPU负担。