MineWiki PowerNukkitX

PowerNukkitX

来自MineWiki
YYT讨论 | 贡献2022年6月13日 (一) 10:13的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

什么是PowerNukkitX?

简介

PowerNukkitX Logo

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-1.png

点击 窗口 -> 检查更新,打开更新检查窗口:

Powernukkitx-2.png

双击标有叉号的项目,挨个双击子项,启动器就会自动修复你点击的子项,直到所有的叉号都消失为止。

点击 服务端 -> 启动服务端,即可启动PowerNukkitX服务器:

如果出现此界面,输入chs并回车即可以中文模式启动PowerNukkitX服务端。

Powernukkitx-3.png

启动器

启动PNX

为什么用启动器

Bootstrap,启动器,是PNX官方提供的用于启动PowerNukkitX的工具。

它可以通过命令行和图形界面两种方式使用,提供了简单易用的开服体验,具有以下优点:

  • 快捷开服,无需复杂配置
  • 占用资源少,不会对核心运行造成明显影响
  • 自动配置java环境,自动检测并使用性能最高的Java启动PNX
  • 方便安装依赖库、更新服务端核心
  • 可以在只有Java8的面板服启动PNX
  • 自动配置复杂的启动参数

启动器的使用方式,详见“快速入门”章节。

不使用启动器开服

当然,你也可以不用启动器开服,但开服的配置将会较为复杂,传统的开服命令不再适合PNX。

首先,你需要前往Github action,选择一个完整的构建任务,点开进入构建详情界面,找到如下的构建物界面:

Powernukkitx-4.png

确定你登录了Github后,点击下载PowerNukkitX-CorePowerNukkitX-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负担。