From 2f64dcfe118bf94b43c662770f6f3b655f64eb31 Mon Sep 17 00:00:00 2001 From: momo-OwO-qwq Date: Sat, 28 Mar 2026 22:09:48 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D=20Linux?= =?UTF-8?q?=20=E6=96=87=E6=A1=A3=E4=B8=AD=E6=9F=90=E4=BA=9B=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E6=97=A0=E6=B3=95=E6=98=BE=E7=A4=BA=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/docs/general/advance/linux/start.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/docs/general/advance/linux/start.mdx b/src/content/docs/general/advance/linux/start.mdx index cee5ff64..cd00badc 100644 --- a/src/content/docs/general/advance/linux/start.mdx +++ b/src/content/docs/general/advance/linux/start.mdx @@ -53,7 +53,7 @@ OpenJDK 64-Bit Server VM Zulu21.32+17-CA (build 21.0.2+13-LTS, mixed mode, shari 不熟悉 wget 时,先使用 Windows 前往 [Zulu 下载](https://www.azul.com/downloads/?package=jdk#zulu),下载再使用 SFTP 软件上传到服务器 `/opt` 目录下。 -![](\_assets/Linux 开服/开服/1.png) +![](\_assets/Linux开服/开服/1.png) #### wegt 下载 @@ -61,17 +61,17 @@ OpenJDK 64-Bit Server VM Zulu21.32+17-CA (build 21.0.2+13-LTS, mixed mode, shari `wget https://cdn.azul.com/zulu/bin/zulu21.34.19-ca-jdk21.0.3-linux_x64.tar.gz` -![](\_assets/Linux 开服/开服/2.png) +![](\_assets/Linux开服/开服/2.png) ### 压缩包解压 解压压缩包: -![](\_assets/Linux 开服/开服/3.png) +![](\_assets/Linux开服/开服/3.png) 将目录重命名为 jdk21: -![](\_assets/Linux 开服/开服/4.png) +![](\_assets/Linux开服/开服/4.png) 这样就算是安装好了 (PS:这里的操作仅适用于开服使用,若需要其他需要 jdk 的操作请使用包管理器安装 openjdk) From 2a2b57c03d2244a06740fd69d8a632fc218c6820 Mon Sep 17 00:00:00 2001 From: momo-OwO-qwq Date: Sun, 29 Mar 2026 01:47:05 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=F0=9F=92=84=20=E4=BF=AE=E6=94=B9=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E5=9B=BE=E6=A0=87=EF=BC=8C=E4=BD=BF=E5=85=B6=E7=BB=9F?= =?UTF-8?q?=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/docs/index.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx index 6a48c296..fb710a06 100644 --- a/src/content/docs/index.mdx +++ b/src/content/docs/index.mdx @@ -23,13 +23,13 @@ import LinkCard from "@components/LinkCard.astro"; 了解教程定位、阅读指引与基础要求 - + 基岩版服务器开服指南 高版本 Java 版服务器开服指南 - + 关于 NitWikit 的历史和发展 From 54fbbf260044ba58ff5441bc685f3d3028854498 Mon Sep 17 00:00:00 2001 From: momo-OwO-qwq Date: Fri, 3 Apr 2026 21:40:07 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=F0=9F=93=9D=20=E4=BF=AE=E6=94=B9=20/genera?= =?UTF-8?q?l=20=E5=92=8C=20/about=20=E4=B8=8B=E7=9A=84=E6=A0=87=E7=82=B9?= =?UTF-8?q?=E7=AC=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/docs/about/ad.md | 2 +- src/content/docs/about/intro.md | 15 ++-- .../docs/general/advance/bot/framework.mdx | 28 +++--- .../docs/general/advance/bot/general.mdx | 18 ++-- src/content/docs/general/advance/bot/intro.md | 2 +- .../docs/general/advance/bot/plugin.mdx | 31 +++---- .../advance/linux/connect-to-server.mdx | 30 +++---- .../general/advance/linux/keep-running.mdx | 44 ++++++---- .../docs/general/advance/linux/linux.md | 22 ++--- .../docs/general/advance/linux/start.mdx | 56 +++++++----- .../docs/general/basics/what-is-datapack.mdx | 8 +- .../docs/general/basics/what-is-lag.md | 52 +++++------- .../docs/general/basics/what-is-log.md | 13 +-- .../docs/general/basics/what-is-messy-code.md | 24 +++--- .../docs/general/basics/what-is-mod.md | 4 +- .../docs/general/basics/what-is-namespace.md | 32 +++---- .../docs/general/basics/what-is-permission.md | 22 ++--- .../docs/general/basics/what-is-plugin.md | 44 +++++----- .../general/basics/what-is-startup-script.md | 14 +-- .../docs/general/basics/what-is-world.md | 38 ++++----- .../choose-and-download-and-install-java.md | 16 ++-- src/content/docs/general/java/environment.mdx | 2 +- src/content/docs/general/java/faq.md | 6 +- src/content/docs/general/java/intro.md | 10 +-- src/content/docs/general/more/ask-for-help.md | 85 +++++++++---------- .../general/preparation/text-editor/intro.md | 6 +- .../general/preparation/text-editor/vscode.md | 4 +- .../docs/general/process/database/backup.md | 40 ++++----- .../general/process/database/configure.md | 12 +-- .../docs/general/process/database/install.md | 44 +++++----- .../docs/general/process/database/intro.md | 2 +- .../general/process/database/uninstall.md | 22 ++--- .../docs/general/process/database/use.md | 42 ++++----- .../general/process/deploy/purchase-server.md | 42 ++++----- 34 files changed, 424 insertions(+), 408 deletions(-) diff --git a/src/content/docs/about/ad.md b/src/content/docs/about/ad.md index 3128dcd9..f55e5460 100644 --- a/src/content/docs/about/ad.md +++ b/src/content/docs/about/ad.md @@ -2,4 +2,4 @@ title: 广告 --- -广告暂不开启 +广告暂不开启。 diff --git a/src/content/docs/about/intro.md b/src/content/docs/about/intro.md index cf5cc217..76c7b964 100644 --- a/src/content/docs/about/intro.md +++ b/src/content/docs/about/intro.md @@ -10,7 +10,7 @@ Cubic 在群友的建议中被选中,成为了新组织的名字 ## 驿站自述 -> 👋 你好!我是 NitWikit 项目和 8aka-Team 团队的建立者驿站 +> 👋 你好!我是 NitWikit 项目和 8aka-Team 团队的建立者 驿站 ![](_assets/me.png) @@ -26,20 +26,21 @@ Cubic 在群友的建议中被选中,成为了新组织的名字 打从一开始我就打算起一个让人耳目一新,一下就能记住的我的世界开服教程文档名字 -但是“教程指北”之类的创意早被人使用过了,那段时间“笨蛋”一词有点成为口头禅, +但是「教程指北」之类的创意早被人使用过了,那段时间「笨蛋」一词有点成为口头禅, 再加上这个教程本来就是写给新手的,我就叫它笨蛋文档了,雪萌起了英文版名字 NitWikit -MC 里傻子村民的英文就是 nitwit,后缀又和 Wiki 相近,所以组合成了 Nitwikit +MC 里傻子村民的英文就是 nitwit,后缀又和 Wiki 相近,所以组合成了 NitWikit #### 发展历程? -在笨蛋文档诞生很早之前我就有已经有过编写开服教程的想法,那时尝试过石墨文档,语雀,自建 GitBook。不过他们都夭折了。。。 +在笨蛋文档诞生很早之前我就有已经有过编写开服教程的想法,那时尝试过石墨文档,语雀,自建 GitBook。不过他们都夭折了…… 在笨蛋文档即将诞生的那段时间,我想编写一个文档来收录一些总有人问的问题,以及收录一些零碎的资源,下次回答别人问题的时候直接甩文档链接就好了, 又想到从前想写的开服教程,最终我决定编写一个从未有人做过的,详细无比的开服教程。 -一开始我只是拉着人才(他写反作弊部分)编写笨蛋文档,部署在 GitHub pages,然后 lilingfeng 和小杰自己跑来问我能不能参与维护, +一开始我只是拉着人才(他写反作弊部分)编写笨蛋文档,部署在 GitHub Pages,然后 lilingfeng 和小杰自己跑来问我能不能参与维护, 以及一些路人像是 gyc123456-1 来给我 PR,后面还有 lim114514 在我不知情的情况下帮我买好 yizhan.wiki 这个域名,雪萌帮我想英文名字, -画群头像,banner 图,MineBBS 宣传图,小涵想写 Bedrock 内容给文档拆成三块,突然冒出个糯米团子搞出个 VitePress 版文档, +画群头像,banner 图,MineBBS 宣传图,小涵想写 Bedrock 内容给文档拆成三块, +突然冒出个糯米团子搞出个 VitePress 版文档, 有那么几个我不认识的人和我认识的三七为笨蛋文档录制视频,千屈帮助编写了好多好多内容,修了好多 bug,甚至重写文档整个界面等等。 -不知不觉就有了六十多个贡献者,如果算上 GitHub 之外提供建议和帮助的人,远比这个数字要多。 +不知不觉就有了六十多个贡献者,如果算上 GitHub 之外提供建议和帮助的人,远比这个数字要多。 \ No newline at end of file diff --git a/src/content/docs/general/advance/bot/framework.mdx b/src/content/docs/general/advance/bot/framework.mdx index 0a23ad3f..af33f4b6 100644 --- a/src/content/docs/general/advance/bot/framework.mdx +++ b/src/content/docs/general/advance/bot/framework.mdx @@ -17,8 +17,8 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | -------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | 相关链接 | [GitHub 仓库](https://github.com/LLOneBot/LLOneBot) \| [文档站](https://llonebot.github.io/zh-CN/) | | 作者 | [LLOneBot](https://github.com/LLOneBot) | -| 介绍 | LiteLoaderQQNT 插件,实现 OneBot 11 和 Satori 协议,用于 QQ 机器人开发 | -| 下载 | [GitHub](https://github.com/LLOneBot/LLOneBot/releases) 或者 [LiteLoaderQQNT](https://github.com/LiteLoaderQQNT/LiteLoaderQQNT) 插件市场下载 | +| 介绍 | LiteLoaderQQNT 插件,实现 OneBot 11 和 Satori 协议,用于 QQ 机器人开发。 | +| 下载 | [GitHub](https://github.com/LLOneBot/LLOneBot/releases) 或者 [LiteLoaderQQNT](https://github.com/LiteLoaderQQNT/LiteLoaderQQNT) 插件市场下载。 | @@ -27,8 +27,8 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | -------- | ------------------------------------------------------------------------------------------------------------------------------------------- | | 相关链接 | [GitHub 仓库](https://github.com/NapNeko/NapCatQQ) \| [文档站](https://napneko.github.io/) | | 作者 | [NapNeko](https://github.com/NapNeko) | -| 介绍 | NapCatQQ 是现代化的基于 NTQQ 的 Bot 协议端实现 | -| 下载 | [GitHub](https://github.com/NapNeko/NapCatQQ/releases) 或者 [LiteLoaderQQNT](https://github.com/LiteLoaderQQNT/LiteLoaderQQNT) 插件市场下载 | +| 介绍 | NapCatQQ 是现代化的基于 NTQQ 的 Bot 协议端实现。 | +| 下载 | [GitHub](https://github.com/NapNeko/NapCatQQ/releases) 或者 [LiteLoaderQQNT](https://github.com/LiteLoaderQQNT/LiteLoaderQQNT) 插件市场下载。 | @@ -38,7 +38,7 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | -------- | --------------------------------------------------------------------------------------------------------- | | 相关链接 | [GitHub 仓库](https://github.com/MrXiaoM/overflow) \| [文档站](https://mirai.mrxiaom.top/docs/UserManual) | | 作者 | [MrXiaoM](https://github.com/MrXiaoM) | -| 介绍 | Overflow 是 mirai-core-api 的实现,对接 OneBot 11 标准,实现 mirai 的无缝迁移 | +| 介绍 | Overflow 是 mirai-core-api 的实现,对接 OneBot 11 标准,实现 mirai 的无缝迁移。 | | 下载 | [官网下载](https://mirai.mrxiaom.top/) | @@ -56,7 +56,7 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | -------- | ------------------------------------------------------------------------- | | 相关链接 | [GitHub 仓库](https://github.com/Hoshinonyaruko/Gensokyo) | | 作者 | [Hoshinonyaruko](https://github.com/Hoshinonyaruko) | -| 介绍 | 基于 OneBot QQ 官方机器人 Api Golang 原生实现 | +| 介绍 | 基于 OneBot QQ 官方机器人 API 的 Golang 原生实现。 | | 下载 | [GitHub](https://github.com/Hoshinonyaruko/Gensokyo/releases) | @@ -74,7 +74,7 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | -------- | ----------------------------------------------------------------------------------------------------------------- | | 相关链接 | [GitHub 仓库](https://github.com/whitechi73/OpenShamrock) \| [文档站](https://whitechi73.github.io/OpenShamrock/) | | 作者 | [whitechi73](https://github.com/whitechi73) | -| 介绍 | 基于 Lsposed(Non-Riru)实现 Kritor 标准的 QQ 机器人框架 | +| 介绍 | 基于 Lsposed(Non-Riru)实现 Kritor 标准的 QQ 机器人框架。 | | 下载 | [GitHub](https://github.com/whitechi73/OpenShamrock/releases) | @@ -84,7 +84,7 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | --------- | ------------------------------------------------------------------------------ | | 相关链接 | [GitHub 仓库](https://github.com/chrononeko/chronocat) | | 作者 | [chrononeko](https://github.com/chrononeko) | -| 介绍 | 模块化的 Satori 框架 | +| 介绍 | 模块化的 Satori 框架。 | | 下载 | [GitHub](https://github.com/chrononeko/chronocat/releases) | @@ -94,17 +94,17 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | --------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | 相关链接 | [GitHub 仓库](https://github.com/Mrs4s/go-cqhttp) \| [文档站](https://docs.go-cqhttp.org/) | | 作者 | [Mrs4s](https://github.com/Mrs4s) | -| 介绍 | 基于 Mirai 以及 MiraiGo 的 OneBot Golang 原生实现 | +| 介绍 | 基于 mirai 以及 MiraiGo 的 OneBot Golang 原生实现。 | | 下载 | [GitHub](https://github.com/Mrs4s/go-cqhttp/releases) | - + -| Mirai | ![](https://img.shields.io/badge/状态-不再积极维护-yellow?style=for-the-badge) | +| mirai | ![](https://img.shields.io/badge/状态-不再积极维护-yellow?style=for-the-badge) | | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 相关链接 | [GitHub 仓库](https://github.com/mamoe/mirai) \| [官方论坛](https://mirai.mamoe.net/) \| [用户手册](https://github.com/mamoe/mirai/blob/dev/docs/UserManual.md) | | 作者 | [mamoe](https://github.com/mamoe) | -| 介绍 | mirai 是一个在全平台下运行,提供 QQ Android 协议支持的高效率机器人库 | +| 介绍 | mirai 是一个在全平台下运行,提供 QQ Android 协议支持的高效率机器人库。 | | 下载 | [GitHub](https://github.com/iTXTech/mirai-console-loader/releases) | @@ -114,9 +114,9 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | --------------- | ------------------------------------------------------------------------------------------------------------------------------------ | | 相关链接 | [GitHub 仓库](https://github.com/LagrangeDev/Lagrange.Core) \| [文档站](https://lagrangedev.github.io/Lagrange.Doc/Lagrange.OneBot/) | | 作者 | [LagrangeDev](https://github.com/LagrangeDev) | -| 介绍 | Lagrange.Core 是一个开源的 NTQQ 协议实现,实现了 OneBot V11 的通信协议,可以和主流 Bot 框架进行通信 | +| 介绍 | Lagrange.Core 是一个开源的 NTQQ 协议实现,实现了 OneBot V11 的通信协议,可以和主流 Bot 框架进行通信。 | | 下载 | [GitHub](https://github.com/LagrangeDev/Lagrange.Core/releases) | -{/* autocorrect-enable */} +{/* autocorrect-enable */} \ No newline at end of file diff --git a/src/content/docs/general/advance/bot/general.mdx b/src/content/docs/general/advance/bot/general.mdx index 959c237a..9b597b94 100644 --- a/src/content/docs/general/advance/bot/general.mdx +++ b/src/content/docs/general/advance/bot/general.mdx @@ -6,11 +6,11 @@ sidebar: import { TabItem, Tabs } from "@astrojs/starlight/components"; -指一个独立程序运行的 QQ 机器人程序,这些机器人程序仅只有 QQ 消息处理功能,QQ 连接需要依赖 QQ 机器人框架 +指一个独立程序运行的 QQ 机器人程序,这些机器人程序仅只有 QQ 消息处理功能,QQ 连接需要依赖 QQ 机器人框架。 部分 QQ 机器人程序会依赖 Minecraft 插件来实现部分无法完成的功能。 -关于机器人框架详情请见 [通用 | 机器人框架](/general/advance/bot/framework) +关于机器人框架详情请见 [通用 | 机器人框架](/general/advance/bot/framework)。 {/* autocorrect-disable space-punctuation */} @@ -21,7 +21,7 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | 相关链接 | [Gitee 仓库](https://gitee.com/dlcn/dlscq) \| [文档站](https://gitee.com/dlcn/dlscq/wikis) | | 作者 | [21Hertz](https://gitee.com/dlcn) | | 支持平台 | Java 版和基岩版 | -| 介绍 | 一个无图形服务端管理程序,支持大多数主流服务端,主打长期稳定,使用 OneBot11 标准接入 QQ,理论上可支持任何命令行 | +| 介绍 | 一个无图形服务端管理程序,支持大多数主流服务端,主打长期稳定,使用 OneBot 11 标准接入 QQ,理论上可支持任何命令行。 | | 下载 | [Gitee](https://gitee.com/dlcn/dlscq/releases) | @@ -32,7 +32,7 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | 相关链接 | [Gitee 仓库](https://gitee.com/dlcn/dlsna) \| [文档站](https://gitee.com/dlcn/dlscq/wikis/%E5%85%B6%E4%BB%96%E6%A1%86%E6%9E%B6/%E5%AE%98%E6%96%B9%E9%A2%91%E9%81%93%E6%9C%BA%E5%99%A8%E4%BA%BA) | | 作者 | [21Hertz](https://gitee.com/dlcn) | | 支持平台 | Java 版和基岩版 | -| 介绍 | DLS-CQhttp 的一个分支,使用 QQ 开放平台 API 标准接入 QQ,继承了 DLS-CQhttp 一样的易用性 | +| 介绍 | DLS-CQhttp 的一个分支,使用 QQ 开放平台 API 标准接入 QQ,继承了 DLS-CQhttp 一样的易用性。 | | 下载 | [Gitee](https://gitee.com/dlcn/dlsna/releases) | @@ -43,7 +43,7 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | 相关链接 | [文档站](https://docs.inectar.cn/docs/easybot/intor) | | 作者 | [easybot-team](https://github.com/easybot-team/) | | 支持平台 | Java 版 MCDR Fabric/Quilt NeoForge Forge | -| 介绍 | 基于 .NET8.0+React 开发的跨平台群服互通框架,使用 OneBot11 标准接入 QQ,支持自定义脚本,高级图片渲染等功能 | +| 介绍 | 基于 .NET8.0+React 开发的跨平台群服互通框架,使用 OneBot 11 标准接入 QQ,支持自定义脚本,高级图片渲染等功能。 | | 下载 | [官网下载](https://docs.inectar.cn/download/easybot) | @@ -54,7 +54,7 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | 相关链接 | [GitHub 仓库](https://github.com/SereinDev/Serein) \| [文档站](https://sereindev.github.io/) | | 作者 | [SereinDev](https://github.com/SereinDev) | | 支持平台 | Java 版和基岩版 | -| 介绍 | 本身是一个服务器管理软件,但支持使用 QQ 机器人,使用 OneBot11 标准接入 QQ,有机器人相关配置并且有平台支持插件进行功能拓展 | +| 介绍 | 本身是一个服务器管理软件,但支持使用 QQ 机器人,使用 OneBot 11 标准接入 QQ,有机器人相关配置并且有平台支持插件进行功能拓展。 | | 下载 | [GitHub](https://github.com/SereinDev/Serein/releases) | @@ -65,7 +65,7 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | 相关链接 | [GitHub 仓库](https://github.com/summerkirakira/CirnoBot) \| [文档站](https://biaoju.site/cirnobot/) | | 作者 | [summerkirakira](https://github.com/summerkirakira) | | 支持 **Java 版** | Bukkit 及其分支 | -| 介绍 | 基于 NoneBot2 开发的机器人平台,可使用 OneBot11 标准接入 QQ,有机器人相关配置并且有平台支持插件进行功能拓展 | +| 介绍 | 基于 NoneBot2 开发的机器人平台,可使用 OneBot 11 标准接入 QQ,有机器人相关配置并且有平台支持插件进行功能拓展。 | | 下载 | [文档教程](https://biaoju.site/cirnobot/docs/%E7%AE%80%E5%8D%95%E4%B8%8A%E6%89%8B) | @@ -76,9 +76,9 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | 相关链接 | [GitHub 仓库](https://github.com/Minecraft-QQBot/BotServer) \| [文档站](https://qqbot.bugjump.xyz/) | | 作者 | [sparkbridge](https://github.com/sparkbridge) | | 支持 **Java 版** | Bukkit 及其分支 | -| 介绍 | 一款基于 NoneBot2 用多种方式与 Minecraft 交互的 Python QQ 机器人,可使用 OneBot11 标准接入 QQ,有机器人相关配置并且有平台支持插件进行功能拓展 | +| 介绍 | 一款基于 NoneBot2 用多种方式与 Minecraft 交互的 Python QQ 机器人,可使用 OneBot 11 标准接入 QQ,有机器人相关配置并且有平台支持插件进行功能拓展。 | | 下载 | [文档教程](https://qqbot.bugjump.xyz/%E6%96%87%E6%A1%A3/%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B.html) | -{/* autocorrect-enable */} +{/* autocorrect-enable */} \ No newline at end of file diff --git a/src/content/docs/general/advance/bot/intro.md b/src/content/docs/general/advance/bot/intro.md index 33025ee9..d76e98d2 100644 --- a/src/content/docs/general/advance/bot/intro.md +++ b/src/content/docs/general/advance/bot/intro.md @@ -6,7 +6,7 @@ sidebar: 搭建机器人能够让你实现群服消息互通、查询服务器状态、通过聊天即可管理服务器等功能,让你的玩家交流群与服务器连接起来。 -机器人通常分为两个部分,这两个部分分别负责控制 QQ 和对社交帐号执行程序。 +机器人通常分为两个部分,这两个部分分别负责控制 QQ 和对社交账号执行程序。 其中与 QQ 通信的部分叫 [框架](/general/advance/bot/framework)。机器人程序必须要通过网络或插件等方式与机器人框架连接,然后才能开始控制 QQ 实现对应功能。 diff --git a/src/content/docs/general/advance/bot/plugin.mdx b/src/content/docs/general/advance/bot/plugin.mdx index 49611b51..8317eee6 100644 --- a/src/content/docs/general/advance/bot/plugin.mdx +++ b/src/content/docs/general/advance/bot/plugin.mdx @@ -6,13 +6,14 @@ sidebar: import { TabItem, Tabs } from "@astrojs/starlight/components"; -指一个运行的 QQ 机器人的插件或者模组,这些插件或者模组负责进行 QQ 消息的处理,并且有一定的拓展性 +指一个运行的 QQ 机器人的插件或者模组,这些插件或者模组负责进行 QQ 消息的处理,并且有一定的拓展性。 -有的 QQ 机器人插件需要外部独立程序的辅助进行处理,但 QQ 连接仍然需要依赖 QQ 机器人框架 +有的 QQ 机器人插件需要外部独立程序的辅助进行处理,但 QQ 连接仍然需要依赖 QQ 机器人框架。 -部分插件模组或者外部独立程序会内置 QQ 机器人框架 +部分插件模组或者外部独立程序会内置 QQ 机器人框架。 + +关于机器人框架详情请见 [通用 | 机器人框架](/general/advance/bot/framework)。 -关于机器人框架详情请见 [通用 | 机器人框架](/general/advance/bot/framework) {/* autocorrect-disable space-punctuation */} @@ -24,9 +25,9 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | 作者 | [DreamVoid](https://github.com/DreamVoid) | | 支持 **Java 版** | Bukkit 及其分支 \| BungeeCord \| Waterfall \| Sponge \| Velocity | | 支持 **基岩版** | NukkitX | -| 介绍 | 一个基于 Mirai 的 Minecraft 服务端插件,能够让你在 Minecraft 服务器上使用 Mirai QQ 机器人程序,同时提供一些 API 帮助开发者简单的调用机器人接口为自己的插件实现多样的功能 | +| 介绍 | 一个基于 Mirai 的 Minecraft 服务端插件,能够让你在 Minecraft 服务器上使用 Mirai QQ 机器人程序,同时提供一些 API 帮助开发者简单的调用机器人接口为自己的插件实现多样的功能。 | | 下载 | [GitHub](https://github.com/DreamVoid/MiraiMC/releases) \| [Modrinth](https://modrinth.com/plugin/miraimc) | -| **注意事项** | 由于 Mirai 原生登陆平台已停止更新,并且 MiraiMC 插件自身不支持 Onebot 协议,您需要使用 [这个拓展](https://github.com/DreamVoid/MiraiMCAddon-Overflow) 来给 MiraiMC 添加 Onebot 协议支持 | +| **注意事项** | 由于 Mirai 原生登陆平台已停止更新,并且 MiraiMC 插件自身不支持 OneBot 协议,您需要使用 [这个拓展](https://github.com/DreamVoid/MiraiMCAddon-Overflow) 来给 MiraiMC 添加 OneBot 协议支持。 | @@ -36,7 +37,7 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | 相关链接 | [GitHub 仓库](https://github.com/sparkbridge/sparkbridge2) \| [文档站](https://sparkbridge.cn/) | | 作者 | [sparkbridge](https://github.com/sparkbridge) | | 支持 **基岩版** | LeviLaminaBDS | -| 介绍 | 轻量级、模块化和多功能的 Minecraft Bedrock Server BDS 服务器 QQ 机器人适配器,内置群服互通功能,支持插件接入,支持内核分离级别的二次开发 | +| 介绍 | 轻量级、模块化和多功能的 Minecraft Bedrock Server BDS 服务器 QQ 机器人适配器,内置群服互通功能,支持插件接入,支持内核分离级别的二次开发。 | | 下载 | [GitHub](https://github.com/sparkbridge/sparkbridge2/releases) | @@ -47,18 +48,18 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | 相关链接 | [GitHub 仓库](https://github.com/Nova-Committee/McBot) \| [Mcmod 文档](https://www.mcmod.cn/class/4903.html) | | 作者 | [Nova-Committee](https://github.com/Nova-Committee) | | 支持 **Java 版** | Forge \| Fabric \| Quite \| Rift | -| 介绍 | 基于 Forge、Fabric 等模组平台开发的 QQ 机器人模组,能让你在 Minecraft 模组服务器上使用 QQ 机器人程序,同时提供一些 API 帮助开发者拓展功能 | -| 下载 | [Modrinth](https://modrinth.com/mod/mcbot) \| [Mcmod](https://www.mcmod.cn/download/4903.html) \| [CruseForge](https://www.curseforge.com/minecraft/mc-mods/mcbot) | +| 介绍 | 基于 Forge、Fabric 等模组平台开发的 QQ 机器人模组,能让你在 Minecraft 模组服务器上使用 QQ 机器人程序,同时提供一些 API 帮助开发者拓展功能。 | +| 下载 | [Modrinth](https://modrinth.com/mod/mcbot) \| [Mcmod](https://www.mcmod.cn/download/4903.html) \| [CurseForge](https://www.curseforge.com/minecraft/mc-mods/mcbot) | -| McBot | ![](https://img.shields.io/badge/状态-积极维护-green?style=for-the-badge) | +| PlumBot | ![](https://img.shields.io/badge/状态-积极维护-green?style=for-the-badge) | | ---------------- | ---------------------------------------------------------------------------------------------------------------------------- | | 相关链接 | [GitHub 仓库](https://github.com/RegadPoleCN/PlumBot) \| [Modrinth 页面](https://modrinth.com/plugin/plumbot) | | 作者 | [RegadPoleCN](https://github.com/RegadPoleCN) | | 支持 **Java 版** | Bukkit 及其分支 | -| 介绍 | 一个可以安装在 Bukkit 等服务端上的 QQ 机器人插件,它能将你的 MC 服务器与 QQ 群或 KOOK 频道联通,支持消息转发,死亡转发等功能 | +| 介绍 | 一个可以安装在 Bukkit 等服务端上的 QQ 机器人插件,它能将你的 MC 服务器与 QQ 群或 KOOK 频道联通,支持消息转发,死亡转发等功能。 | | 下载 | [GitHub](https://github.com/RegadPoleCN/PlumBot/releases) \| [Modrinth](https://modrinth.com/plugin/plumbot) | @@ -69,7 +70,7 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | 相关链接 | [GitHub 仓库](https://github.com/alazeprt/AQQBot) | | 作者 | [alazeprt](https://github.com/alazeprt) | | 支持 **Java 版** | Bukkit 及其分支 | -| 介绍 | 一个轻量级、模块化和多功能的 Bukkit 服务器 QQ 机器人插件,内置群服互通功能,允许用户通过 QQ 群实行更多操作 | +| 介绍 | 一个轻量级、模块化和多功能的 Bukkit 服务器 QQ 机器人插件,内置群服互通功能,允许用户通过 QQ 群实行更多操作。 | | 下载 | [GitHub](https://github.com/alazeprt/AQQBot/releases) | @@ -80,7 +81,7 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | 相关链接 | [GitHub 仓库](https://github.com/Xinxin-ent/XinxinBotApi) \| [文档站](https://wiki.mcxin.cn/zh/%E6%96%B0%E9%91%AB%E6%8F%92%E4%BB%B6%E6%95%99%E7%A8%8B/XinxinBotApi) [官网](https://bbs.mcxin.cn/archives/216) | | 作者 | [Xinxin-ent](https://github.com/Xinxin-ent) | | 支持 **Java 版** | Bukkit 及其分支 | -| 介绍 | 一个可以安装在 Bukkit 等服务端上的 QQ 机器人插件,并且提供一些 API 帮助开发者拓展功能,配置复杂但效果较好 | +| 介绍 | 一个可以安装在 Bukkit 等服务端上的 QQ 机器人插件,并且提供一些 API 帮助开发者拓展功能,配置复杂但效果较好。 | | 下载 | [官网下载](https://bbs.mcxin.cn/archives/216) | @@ -91,9 +92,9 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | 相关链接 | [GitHub 仓库](https://github.com/NeoVoxelDev/NeoBot) \| [文档站](https://neobot-docs.netlify.app/) | | 作者 | [NeoVoxelDev](https://github.com/NeoVoxelDev) | | 支持 **Java 版** | Bukkit 及其分支 \| Folia \| Velocity | -| 介绍 | 一个轻量级、模块化且支持脚本化的 QQ 机器人插件,作为 AQQBot 的继任者,提供全功能脚本化能力,赋予用户高度自定义的灵活性 | +| 介绍 | 一个轻量级、模块化且支持脚本化的 QQ 机器人插件,作为 AQQBot 的继任者,提供全功能脚本化能力,赋予用户高度自定义的灵活性。 | | 下载 | [GitHub](https://github.com/NeoVoxelDev/NeoBot/releases) | -{/* autocorrect-enable */} +{/* autocorrect-enable */} \ No newline at end of file diff --git a/src/content/docs/general/advance/linux/connect-to-server.mdx b/src/content/docs/general/advance/linux/connect-to-server.mdx index 88fbe6e8..7e1718cc 100644 --- a/src/content/docs/general/advance/linux/connect-to-server.mdx +++ b/src/content/docs/general/advance/linux/connect-to-server.mdx @@ -9,7 +9,7 @@ Linux 系统上有一个工具被业界广泛使用,它就是 **SSH**。它虽 ## 开启 SSH 服务 -为了让客户能顺利连接服务器,云服务器的 sshd 服务一般默认开启。如果你使用的是家里云,或者云服务器的 sshd 服务确实没有开启 (比如你是只能通过服务商提供的 VNC 或者第三方远控软件连接的服务器,无法使用 SSH),那么你可能需要先开启 sshd 服务才能连接到服务器。 +为了让客户能顺利连接服务器,云服务器的 sshd 服务一般默认开启。如果你使用的是家里云,或者云服务器的 sshd 服务确实没有开启 (比如你是只能通过服务商提供的 VNC 或者第三方远控软件连接的服务器,无法使用 SSH),那么你可能需要先开启 sshd 服务才能连接到服务器。 在主流的使用 systemd 的 Linux 发行版中,执行 `systemctl enable --now sshd` 命令即可开启 sshd 服务,如果这些命令都报错,证明 sshd 服务存在问题,你可以把报错复制粘贴到搜索引擎上查询怎么修复这个问题。 开启 sshd 服务后,你就可以连接到这台服务器了。 @@ -19,9 +19,9 @@ Linux 系统上有一个工具被业界广泛使用,它就是 **SSH**。它虽 为了安全请不要在服务器上允许 root 用户登录 SSH!如果 SSH 被暴力破解的话会产生非常严重的后果! -最好可以禁用密码登录,仅允许密钥登录 +最好可以禁用密码登录,仅允许密钥登录。 -关于配置你服务器的 SSH 使其更安全,可以查看 [Arch Linux Wiki 的这篇文章](https://wiki.archlinuxcn.org/wiki/OpenSSH#%E4%BF%9D%E6%8A%A4) +关于配置你服务器的 SSH 使其更安全,可以查看 [Arch Linux Wiki 的这篇文章](https://wiki.archlinuxcn.org/wiki/OpenSSH#%E4%BF%9D%E6%8A%A4)。 ::: @@ -43,9 +43,9 @@ Linux 系统上有一个工具被业界广泛使用,它就是 **SSH**。它虽 ssh @
[-p port] ``` -如何要指定端口,你需要指定端口参数。在一些操作系统上这个参数是 `-p`,例如`ssh root@8aka.org -p 48291`,有一些工具上则是直接在后面输入端口。 +如何要指定端口,你需要指定端口参数。在一些操作系统上这个参数是 `-p`,例如 `ssh root@8aka.org -p 48291`,有一些工具上则是直接在后面输入端口。 例如 Xshell 是 `ssh root@8aka.org 48291`。 -你需要根据不同的工具的使用方式来确定 ssh 的命令格式。比如,你可以仅执行 `ssh` 命令 (等价于 `ssh --help`),然后让 SSH 工具提示你如何使用当前工具的这个命令,如果需要更详细的说明可以输入命令 `man ssh` +你需要根据不同的工具的使用方式来确定 ssh 的命令格式。比如,你可以仅执行 `ssh` 命令 (等价于 `ssh --help`),然后让 SSH 工具提示你如何使用当前工具的这个命令,如果需要更详细的说明可以输入命令 `man ssh`, 在输入完这行命令后,服务器通常会要求你输入该用户的密码。 @@ -53,11 +53,11 @@ ssh @
[-p port] 1. 使用 `ssh-keygen` 命令生成你的 SSH 密钥。 -2. 使用如 `cat .ssh/id_xxxx.pub` 命令来获取你生成的 SSH 公钥 (此命令中 `xxxx` 的值通常取决于你生成密钥对时选择的算法) +2. 使用如 `cat .ssh/id_xxxx.pub` 命令来获取你生成的 SSH 公钥 (此命令中 `xxxx` 的值通常取决于你生成密钥对时选择的算法)。 -3. 在服务器对应用户的家目录下创建 `./ssh/authorized_keys`,编辑它,将你的公钥粘贴进去,每个公钥独占一行 +3. 在服务器对应用户的家目录下创建 `./ssh/authorized_keys`,编辑它,将你的公钥粘贴进去,每个公钥独占一行。 -4. 执行上面的命令,你会发现连接时不再需要密码而是直接弹出 shell +4. 执行上面的命令,你会发现连接时不再需要密码而是直接弹出 shell。 ### 使用工具连接 @@ -72,7 +72,7 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; Windows 系统自带的 PowerShell -按下 `Win + R` 输入 `powershell` 即可 (如果安装了新版的 PowerShell 那么你应该输入 `pwsh`) +按下 `Win + R` 输入 `powershell` 即可 (如果安装了新版的 PowerShell 那么你应该输入 `pwsh`) 随后在其中输入 `ssh -p @` 即可连接 Linux 服务器。 @@ -80,11 +80,11 @@ Windows 系统自带的 PowerShell :::tip -port 输入服务器的 SSH 端口 +port 输入服务器的 SSH 端口, -username 为登录服务器的用户名 +username 为登录服务器的用户名, -hostname 为服务器的域名或者 IP +hostname 为服务器的域名或者 IP。 ::: @@ -93,7 +93,7 @@ hostname 为服务器的域名或者 IP ![WindTerm](_assets/Linux开服/连接服务器/WindTerm.png) -一个开源的 SSH/Telnet/Serial/Shell/SFTP 客户端工具 +一个开源的 SSH/Telnet/Serial/Shell/SFTP 客户端工具。 https://github.com/kingToolbox/WindTerm @@ -109,7 +109,7 @@ FinalShell 是一体化的的服务器,网络管理软件,不仅是 SSH 客 ![Xshell 终端](https://www.xshell.com/wp-content/uploads/2020/10/p-xshell7-top-zh.png) -他称自己是 业界最强大的 SSH 客户机 +他称自己是 业界最强大的 SSH 客户机。 @@ -126,7 +126,7 @@ FinalShell 是一体化的的服务器,网络管理软件,不仅是 SSH 客 macOS 内置 ssh 命令,我们可以用终端来执行它。要打开 macOS 上的终端,可以使用以下方式: -- (如果终端 app 没有被移动过) 打开启动台,打开第一页的其他文件夹,点击终端。或者你也可以在应用文件夹 (入口默认固定在访达侧边栏上) 里找到它。 +- (如果终端 app 没有被移动过) 打开启动台,打开第一页的其他文件夹,点击终端。或者你也可以在应用文件夹 (入口默认固定在访达侧边栏上)里找到它。 - 按下 command+ 空格或键盘上的搜索键唤起 spotlight,输入“终端”,然后它就会显示在下面。 diff --git a/src/content/docs/general/advance/linux/keep-running.mdx b/src/content/docs/general/advance/linux/keep-running.mdx index 4e31911a..d6e15fa4 100644 --- a/src/content/docs/general/advance/linux/keep-running.mdx +++ b/src/content/docs/general/advance/linux/keep-running.mdx @@ -17,9 +17,21 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; 确保你的系统上有 `screen` 包,没有的话安装它们: - ```bash apt-get install screen ``` - ```bash yum install screen ``` - ```bash pacman -Sy screen ``` + + ```bash + apt-get install screen + ``` + + + ```bash + yum install screen + ``` + + + ```bash + pacman -Sy screen + ``` + screen 的基础指令: @@ -34,7 +46,7 @@ screen -S xxx -X quit # 删除 xxx 窗口 (在 screen 中输入 exit 也可以 :::note -重新连接到 screen 时可以使用 `screen -Dr xxx` 指令,意为踢出正在使用 xxx 窗口的用户并回到 xxx 窗口 +重新连接到 screen 时可以使用 `screen -Dr xxx` 指令,意为踢出正在使用 xxx 窗口的用户并回到 xxx 窗口。 ::: @@ -49,21 +61,21 @@ screen -S xxx -X quit # 删除 xxx 窗口 (在 screen 中输入 exit 也可以 ::: -推荐原因:后台运行的同时还可以在服务端控制台中查看日志,打指令 +推荐原因:后台运行的同时还可以在服务端控制台中查看日志,输入指令。 ## 方法二 面板 (推荐) -例如 MCSManager 等面板,简单无脑可视化 +例如 [MCSManager](/general/process/panel/#mcsmanager) 等面板,简单无脑可视化。 ## 方法三 systemd -使用 `vim` 命令创建 `mc.service` 单元文件 +使用 `vim` 命令创建 `mc.service` 单元文件: ```bash vim ~/.config/systemd/user/mc.service ``` -文件中的内容按以下配置 +文件中的内容按以下配置: ```ini [Unit] @@ -99,9 +111,9 @@ _可以通过 `systemctl --user status mc.service` 查看服务运行状态。_ [Arch Wiki 上的教程](https://wiki.archlinuxcn.org/wiki/Systemd#%E7%BC%96%E5%86%99%E5%8D%95%E5%85%83%E6%96%87%E4%BB%B6) -优点:可以实现自动重启,开机自启等操作 +优点:可以实现自动重启,开机自启等操作; -缺点:无法进入控制台打指令 +缺点:无法进入控制台打指令。 ## 方法四 nohup 和 & @@ -117,18 +129,18 @@ nohup:在启动时前面加上这个 :::tip -Start.sh: 你需要后台运行的程序 +Start.sh: 你需要后台运行的程序, -> : 日志文件追加到文件中 +> : 日志文件追加到文件中。 -run.log: 运行的日志,或你的文件的输出内容 +run.log: 运行的日志,或你的文件的输出内容。 & 是一个描述符,如果 1 或 2 前不加 &,会被当成一个普通文件。 -`1>&2` 意思是把标准输出重定向到标准错误。 +`1>&2` 意思是把标准输出重定向到标准错误; -`2>&1` 意思是把标准错误输出重定向到标准输出。 +`2>&1` 意思是把标准错误输出重定向到标准输出; -`&>filename` 意思是把标准输出和标准错误输出都重定向到文件 `filename` 中 +`&>filename` 意思是把标准输出和标准错误输出都重定向到文件 `filename` 中。 ::: diff --git a/src/content/docs/general/advance/linux/linux.md b/src/content/docs/general/advance/linux/linux.md index fb2876c5..ce8c4fb3 100644 --- a/src/content/docs/general/advance/linux/linux.md +++ b/src/content/docs/general/advance/linux/linux.md @@ -6,18 +6,18 @@ sidebar: ## 为什么选择 Linux 开服 -1. 更快的发包速度和接收速度,接入服务器速度将提升数十毫秒起,当面对假人攻击/ DDoS 攻击时会更加稳定; -2. 更好的性能,根据测试 TPS 能提升 8-15%; -3. 更低的内存占用,对于 Windows 服务器一般开机会占用 1-2 GB 内存,而一般的 Linux 系统开机后占用往往不到 0.5 GB; -4. Linux 的稳定性是 Windows 无论如何也无法比拟的; -5. Linux 安全性更高,开源系统,有社区的支持; -6. Linux 支持文件占用直接删除 (也就是说可以自动更新插件,不像 Windows 那样提示文件被占用) +1. 更快的发包速度和接收速度,接入服务器速度将提升数十毫秒起,当面对假人攻击 / DDoS 攻击时会更加稳定。 +2. 更好的性能,根据测试 TPS 能提升 8-15%。 +3. 更低的内存占用,对于 Windows 服务器一般开机会占用 1-2 GB 内存,而一般的 Linux 系统开机后占用往往不到 0.5 GB。 +4. Linux 的稳定性是 Windows 无论如何也无法比拟的。 +5. Linux 安全性更高,开源系统,有社区的支持。 +6. Linux 支持文件占用直接删除(也就是说可以自动更新插件,不像 Windows 那样提示文件被占用)。 :::note -可能会有小伙伴说:"Linux 太难操作了,根本不会用。" 其实大多数开 Linux 服务器的服主也不是纯纯使用 Linux 编辑插件配置,那么好,我们为小白推荐三个面板辅助我们开服。 +可能会有小伙伴说:“Linux 太难操作了,根本不会用。” 其实大多数开 Linux 服务器的服主也不是纯纯使用 Linux 编辑插件配置,那么好,我们为小白推荐三个面板辅助我们开服。 -1. [MCSM](https://docs.mcsmanager.com/zh_cn/) 全名 MCSManager 是一款开源,分布式,一键部署,支持 Minecraft 和 Steam 游戏服务器 的控制面板。 +1. [MCSM](https://docs.mcsmanager.com/zh_cn/) 全名 MCSManager,是一款开源、分布式、一键部署,支持 Minecraft 和 Steam 游戏服务器的控制面板。 2. [1Panel](https://1panel.cn/) 是新一代的 Linux 服务器运维管理面板,支持 web 图形界面管理、快速建站、应用商店、安全可靠、一键备份等功能。 3. [宝塔面板](https://www.bt.cn/) 是一款支持 Linux 和 Windows 系统的服务器运维管理工具,提供资源监控、文件管理、软件安装等功能。 @@ -25,14 +25,14 @@ sidebar: ## 基础指令 -在开始开服之前,你需要掌握的 Linux 常用指令 +在开始开服之前,你需要掌握的 Linux 常用指令: [菜鸟教程 | Linux 需要掌握的一些命令](https://www.runoob.com/w3cnote/linux-useful-command.html) ## 鸣谢 -特别感谢 [冰奇](https://github.com/IceBingQI) 提供的本板块的文案及图片 +特别感谢 [冰奇](https://github.com/IceBingQI) 提供的本板块的文案及图片。 ## 另外 -“笨蛋脚本”仅支持 Windows 系统,我们暂时没有移植到 Linux 的计划。 +“笨蛋脚本”仅支持 Windows 系统,我们暂时没有移植到 Linux 的计划。 \ No newline at end of file diff --git a/src/content/docs/general/advance/linux/start.mdx b/src/content/docs/general/advance/linux/start.mdx index cd00badc..685cab8c 100644 --- a/src/content/docs/general/advance/linux/start.mdx +++ b/src/content/docs/general/advance/linux/start.mdx @@ -6,11 +6,11 @@ sidebar: import { TabItem, Tabs } from "@astrojs/starlight/components"; -开服之前,请检查服务器是否安装了 Java,在终端输入 +开服之前,请检查服务器是否安装了 Java,在终端输入: `java -version` -如果你看到类似以下的输出,那么服务器中已经安装了 Java +如果你看到类似以下的输出,那么服务器中已经安装了 Java。 ```txt openjdk version "21.0.2" 2024-01-16 LTS @@ -24,7 +24,7 @@ OpenJDK 64-Bit Server VM Zulu21.32+17-CA (build 21.0.2+13-LTS, mixed mode, shari ### 软件包管理器安装 -下方以安装 `openjdk-17` 为例 +下方以安装 `openjdk-17` 为例: sudo apt install openjdk-17-jdk @@ -32,18 +32,18 @@ OpenJDK 64-Bit Server VM Zulu21.32+17-CA (build 21.0.2+13-LTS, mixed mode, shari sudo pacman -S jdk11-openjdk -其他发行版安装方式自行百度 +其他发行版安装方式自行百度。 ### 手动 ♂ -推荐使用软件包管理器安装而不是自己手动装 +推荐使用软件包管理器安装而不是自己手动装。
点击查看 -一般来说,在 Linux 中进行软件安装部署会放在 `/opt` 目录下,我们也遵循这个规则,当然你也可以不遵循 +一般来说,在 Linux 中进行软件安装部署会放在 `/opt` 目录下,我们也遵循这个规则,当然你也可以不遵循。 -使用 cd 切换到/opt 目录 +使用 cd 切换到/opt 目录: `cd /opt` @@ -55,7 +55,7 @@ OpenJDK 64-Bit Server VM Zulu21.32+17-CA (build 21.0.2+13-LTS, mixed mode, shari ![](\_assets/Linux开服/开服/1.png) -#### wegt 下载 +#### wget 下载 使用 wget 指令下载 @@ -73,31 +73,43 @@ OpenJDK 64-Bit Server VM Zulu21.32+17-CA (build 21.0.2+13-LTS, mixed mode, shari ![](\_assets/Linux开服/开服/4.png) -这样就算是安装好了 (PS:这里的操作仅适用于开服使用,若需要其他需要 jdk 的操作请使用包管理器安装 openjdk) +这样就算是安装好了(PS:这里的操作仅适用于开服使用,若需要其他需要 jdk 的操作请使用包管理器安装 openjdk)
## 多版本 Java 共存 -方法很多,这里举出两种 +方法很多,这里举出两种: ### 方法一 - update-alternatives --config java - update-alternatives --config java - archlinux-java set jdk-vesion + + ```bash + update-alternatives --config java + ``` + + + ```bash + update-alternatives --config java + ``` + + + ```bash + archlinux-java set jdk-vesion + ``` + -然后选择你想使用的 Java,接着 `java -version` 验证版本 +然后选择你想使用的 Java,接着 `java -version` 验证版本。 ### 方法二 设置别名 -确定你所使用的终端,此处以 `bash` 和 `Azul Zulu` 为例 +确定你所使用的终端,此处以 `bash` 和 `Azul Zulu` 为例。 -`vim ~/.bashrc` 在这个文件末尾追加 +`vim ~/.bashrc` 在这个文件末尾追加: ```bash # java @@ -105,7 +117,7 @@ alias java8='/usr/lib/jvm/zulu-8/bin/java' alias java17='/usr/lib/jvm/zulu-17/bin/java' ``` -然后刷新:`source ~/.bashrc` +然后刷新:`source ~/.bashrc`。 - 使用 Java8 开服: @@ -127,13 +139,13 @@ TODO - 完善和排版 ::: -在 `/opt` 目录中使用 `mkdir` 命令创建一个目录用于开服 +在 `/opt` 目录中使用 `mkdir` 命令创建一个目录用于开服: ![](_assets/Linux开服/开服/5.png) -将核心放入服务器内,并编写简单的开服脚本 +将核心放入服务器内,并编写简单的开服脚本, -使用 `chmod` 命令给脚本增加运行权限 +使用 `chmod` 命令给脚本增加运行权限: ```bash chmod +x example.sh @@ -141,10 +153,10 @@ chmod +x example.sh ![](_assets/Linux开服/开服/6.png) -输入 `./start.sh` 或者输入 `bash start.sh` 即可启动 +输入 `./start.sh` 或者输入 `bash start.sh` 即可启动。 ![](_assets/Linux开服/开服/7.png) -使用 `vim` 命令修改 eula 为 `true` 就可以开服了 +使用 `vim` 命令修改 eula 为 `true` 就可以开服了。 ![](_assets/Linux开服/开服/8.png) diff --git a/src/content/docs/general/basics/what-is-datapack.mdx b/src/content/docs/general/basics/what-is-datapack.mdx index fd58a493..82d6e2be 100644 --- a/src/content/docs/general/basics/what-is-datapack.mdx +++ b/src/content/docs/general/basics/what-is-datapack.mdx @@ -8,7 +8,7 @@ import { FileTree } from "@astrojs/starlight/components"; 数据包是从 Minecraft 逻辑结构层面修改我的世界,他可以添加或覆盖游戏中几乎一切的元素。一定程度下可以代替 mod,但它并不会改变原版的内容。 -其功能可用于覆盖或添加新的函数、进度、战利品表、物品修饰器、配方、结构、标签、维度、世界生成等 +其功能可用于覆盖或添加新的函数、进度、战利品表、物品修饰器、配方、结构、标签、维度、世界生成等。 # 数据包的存放位置 @@ -18,9 +18,9 @@ import { FileTree } from "@astrojs/starlight/components"; 数据包是存在加载顺序的,在数据包各个功能同一个分类下不同的加载顺序会导致不同的结果也就是不同的覆盖产生。 -这个顺序存储在 `world/level.dat` 。您可以通过单人创建存档时调整数据包的位置决定数据包的加载顺序 +这个顺序存储在 `world/level.dat` 。您可以通过单人创建存档时调整数据包的位置决定数据包的加载顺序。 -您可以通过 `/datapack` 查看已经加载或未加载的数据包 +您可以通过 `/datapack` 查看已经加载或未加载的数据包。 # 相关资源下载 @@ -206,4 +206,4 @@ import { FileTree } from "@astrojs/starlight/components"; # 数据包的编写 -太多了,详情请参阅 [Minecraft Wiki](https://zh.minecraft.wiki/w/%E6%95%B0%E6%8D%AE%E5%8C%85) +太多了,详情请参阅 [Minecraft Wiki](https://zh.minecraft.wiki/w/%E6%95%B0%E6%8D%AE%E5%8C%85)。 diff --git a/src/content/docs/general/basics/what-is-lag.md b/src/content/docs/general/basics/what-is-lag.md index 2dc343cb..4931ed97 100644 --- a/src/content/docs/general/basics/what-is-lag.md +++ b/src/content/docs/general/basics/what-is-lag.md @@ -4,15 +4,13 @@ topic: basics template: splash --- -服务器中玩家可感知到的卡顿是多种多样的,其中主要包括服务器处理速度不足导致的 **MSPT** 偏高, **TPS** 偏低, +服务器中玩家可感知到的卡顿是多种多样的,其中主要包括服务器处理速度不足导致的 **MSPT** 偏高、**TPS** 偏低,以及服务器网络波动导致的 **Ping**(即服务器和玩家之间的网络延迟)。 -服务器网络波动导致的 **Ping** (即为服务器和玩家之间的网络延迟) - -总的说来 **MSPT** 和 **TPS** 是用于评价服务器流畅程度的,而 **Ping** 是用于评价服务器和玩家之间的网络稳定性。 +总的说来,**MSPT** 和 **TPS** 是用于评价服务器流畅程度的指标,而 **Ping** 是用于评价服务器和玩家之间的网络稳定性的指标。 :::tip -玩家往往分不清到底是服务器卡顿还是网络延迟,请服主自行区分。不用因为玩家在社区说一句 `"服务器卡了"` 然后就默认是服务器问题。 +玩家往往分不清到底是服务器卡顿还是网络延迟,请服主自行区分。不用因为玩家在社区说一句 `"服务器卡了"` 就默认是服务器问题。 ::: @@ -20,85 +18,79 @@ template: splash Minecraft 服务器卡顿的底层逻辑是什么? -**理想情况下**,Minecraft 无论什么版本都是每秒钟刷新 20 次,也就是说每次刷新之间间隔 50 ms (1000 ms / 20) 刷新一次,即为一个 **Tick**; +**理想情况下**,Minecraft 无论什么版本都是每秒钟刷新 20 次,也就是说每次刷新之间间隔 50 ms(1000 ms / 20)刷新一次,即为一个 **Tick**。 ![](https://spark.lucko.me/docs/assets/images/ticks-lagging-0bec1e4f565281af7a643f94222df521.png) -**正常情况下**,每个 Tick 都小于 50 ms,为了保证 Minecraft 以 20 Tick 每秒的速度运行,服务器将选择等待下一个 Tick; +**正常情况下**,每个 Tick 都小于 50 ms,为了保证 Minecraft 以 20 Tick/秒 的速度运行,服务器将选择等待下一个 Tick。 ![](https://spark.lucko.me/docs/assets/images/ticks-with-sleeping-3b944bf10f5a21b16d1454f2d7fee434.png) -**服务器滞后时**,当服务器某个 Tick 无法在 50 ms 内完成时,服务器将产生滞后,一旦滞后,每个 Tick 将会顺延,每秒钟发生的 Tick 将会减少。 +**服务器滞后时**,当服务器某个 Tick 无法在 50 ms 内完成时,服务器将产生滞后。一旦滞后,每个 Tick 将会顺延,每秒钟发生的 Tick 将会减少。 ![](https://spark.lucko.me/docs/assets/images/ticks-lagging-0bec1e4f565281af7a643f94222df521.png) :::caution -此处只是最简单的理解,要对卡顿有更深层的理解请查看 TODO:多线程 +此处只是最简单的理解,要对卡顿有更深层的理解请查看 TODO:多线程。 ::: ### TPS -TPS (Ticks Per Second)(每秒 Tick 数) 正常应为 20,即服务器每秒钟进行 20 次更新,确保红石、生物 AI 等按照正常工作。 +TPS(Ticks Per Second,每秒 Tick 数)正常应为 20,即服务器每秒钟进行 20 次更新,确保红石、生物 AI 等按照正常工作。 :::caution TPS 只是最基础的量化卡顿程度。并不是 TPS 高,玩家就感受不到卡顿,也不是 TPS 低就一定会感受到非常卡顿。 -这是因为,TPS 只是计算一个平均值,如果某一个 Tick 花费了 800 ms,而剩下的 18 Tick 只花费了 200 ms,即使计算出的 TPS 为 19 但玩家会感受到的 800 ms 的滞后。下文提到的 MSPT 能够更加精准量化卡顿程度。 +这是因为,TPS 只是计算一个平均值。如果某一个 Tick 花费了 800 ms,而剩下的 19 个 Tick 只花费了 200 ms,即使计算出的 TPS 为 19.9,玩家也会感受到那 800 ms 的滞后。下文提到的 MSPT 能够更加精准地量化卡顿程度。 ::: ### MSPT -MSPT (Milliseconds Per Tick)(就是每进行一次 Tick 所花费的毫秒数) - -如果 MSPT 数值较低,说明服务器可以迅速快速进行每次 Tick,游戏运行更为流畅。 +MSPT(Milliseconds Per Tick,每进行一次 Tick 所花费的毫秒数)。 +如果 MSPT 数值较低,说明服务器可以迅速完成每次 Tick,游戏运行更为流畅。 反之,如果 MSPT 过高,意味着每次 Tick 所需的时间变长,游戏的运行速度就会变慢,进而影响到整体的 TPS。 -影响 MSPT 的东西很多,如区块生成,AI 计算,插件计划任务等都会影响 MSPT。 +影响 MSPT 的因素很多,如区块生成、AI 计算、插件计划任务等都会影响 MSPT。 ### 查看 TPS 和 MSPT -1. 如果为 Purpur fork 服务器可以输入 `/tpsbar` 查看 MSPT 和 TPS; - -2. 如果为 Paper 服务器可输入 `/mspt` 查看 MSPT,输入 `/tps` 查看 TPS; - -3. 安装 [TabTPS](https://hangar.papermc.io/jmp/TabTPS) 插件,显示更好看。 +1. 如果为 Purpur fork 服务器,可以输入 `/tpsbar` 查看 MSPT 和 TPS。 +2. 如果为 Paper 服务器,可输入 `/mspt` 查看 MSPT,输入 `/tps` 查看 TPS。 +3. 安装 [TabTPS](https://hangar.papermc.io/jmp/TabTPS) 插件,显示效果更好。 ## 网络延迟 -在 Minecraft 中,网络延迟 (通常表示为 Ping) 是玩家连接到服务器时数据传输所花费的时间。 +在 Minecraft 中,网络延迟(通常表示为 Ping)是玩家连接到服务器时数据传输所花费的时间。 Ping 值的高低直接影响了玩家在游戏中的体验,特别是在需要快速反应和精确操作的场合。 ### 如何计算 Ping 当玩家在 Minecraft 中尝试与服务器通信时,玩家的计算机会向服务器发送一个数据包,然后等待服务器的响应。 - 从数据包发送出去到收到服务器的响应,所花费的时间就是 Ping 值。Ping 通常以 ms 为单位来表示。 Ping 值的高低对游戏体验有着显著的影响。 :::tip -Ping 的具体要求大概和服务器本身的性质有关系 +Ping 的具体要求大概和服务器本身的性质有关系。 -一般说来服务器 Ping 要求为: +一般来说,服务器 Ping 要求为: 1. PVP 服务器:< 50 ms 2. 生存服务器:< 200 ms 3. 建筑服务器:< 500 ms -此处的延迟为玩家在该类型服务器游戏体验明显变差的阈值,并非高于本数值就完全不可玩。总而言之,为玩家提供可靠的链接是每个服务器应尽的义务。 +此处的延迟为玩家在该类型服务器游戏体验明显变差的阈值,并非高于本数值就完全不可玩。总而言之,为玩家提供可靠的连接是每个服务器应尽的义务。 ::: ### 显示 Ping -1. 在多人游戏列表中,当玩家在多人游戏列表中浏览服务器时,每个服务器旁边通常会显示一个 Ping 值。 - -2. 进入服务器后,按下 TAB 即可查看每个人的 Ping 大概状态 (根据信号格数)。 - -3. 安装了 PlaceholderAPI 和 任意 TAB 类插件,将 `%player_ping%` 作为变量可在目标位置显示具体延迟。 +1. 在多人游戏列表中,当玩家浏览服务器时,每个服务器旁边通常会显示一个 Ping 值。 +2. 进入服务器后,按下 TAB 键即可查看每个人的 Ping 大概状态(根据信号格数)。 +3. 安装了 PlaceholderAPI 和任意 TAB 类插件,将 `%player_ping%` 作为变量可在目标位置显示具体延迟。 \ No newline at end of file diff --git a/src/content/docs/general/basics/what-is-log.md b/src/content/docs/general/basics/what-is-log.md index 96128edf..8ddbd562 100644 --- a/src/content/docs/general/basics/what-is-log.md +++ b/src/content/docs/general/basics/what-is-log.md @@ -10,7 +10,7 @@ template: splash 每天凌晨 00:00 时服务器将会将最新的日志 **latest.log** 压缩为以时间命名的 gz 压缩文件。用压缩软件解压对应时间的压缩文件即可进行阅读。 -想要了解日志里写了什么,只需要使用任意文本编辑软件打开即可 (不建议使用系统自带的记事本,因为大多数文本编辑软件都会高亮关键词) +想要了解日志里写了什么,只需要使用任意文本编辑软件打开即可 (不建议使用系统自带的记事本,因为大多数文本编辑软件都会高亮关键词) ## 日志组成 @@ -30,11 +30,11 @@ template: splash ### 时间 -即服务器输出该条日志的事件 (有时候输出量特别大的时候时间可能不完全准确)。 +即服务器输出该条日志的事件(有时候输出量特别大的时候时间可能不完全准确)。 ### 线程 -一般为 **Server thread** 即主线程,很多插件会调用 Craft Scheduler Thread 线程,或者为了优化主线程开销开启单独线程 (如 LuckPerms)。 +一般为 **Server thread** 即主线程,很多插件会调用 Craft Scheduler Thread 线程,或者为了优化主线程开销开启单独线程(如 LuckPerms)。 **Craft Scheduler Thread** 一般为插件使用 Bukkit 计划任务时自动开启的线程。 @@ -42,7 +42,7 @@ template: splash 1. 某些时候如果后台被大量刷屏,可以先检查线程信息,或许对定位日志来源有帮助; -2. 除了主线程之外,一个线程卡顿一般不影响其他线程的运行 (如聊天线程阻塞,服务器可以继续运行,但无法聊天)。 +2. 除了主线程之外,一个线程卡顿一般不影响其他线程的运行(如聊天线程阻塞,服务器可以继续运行,但无法聊天)。 ::: @@ -54,7 +54,8 @@ template: splash | WARN | 警告 | 对于一些潜在的风险进行警告,有可能发展为报错 | | ERROR | 错误 | 服务器出现错误后输出的信息 | -总的来说,当服务器出现异常时请立刻检查日志中是否出现了 `WARN` 或 `ERROR` 级别的报错,建议先搜索查看是否有人遇到类似情况,再结合翻译结果尝试修复。如果搞不定可以请教其他人,但是切记一定要先读一读 [如何提问](/general/more/ask-for-help) +总的来说,当服务器出现异常时请立刻检查日志中是否出现了 `WARN` 或 `ERROR` 级别的报错,建议先搜索查看是否有人遇到类似情况,再结合翻译结果尝试修复。 +如果搞不定可以请教其他人,但是切记一定要先读一读 [如何提问](/general/more/ask-for-help)。 #### INFO @@ -81,7 +82,7 @@ template: splash [00:01:32] [Server thread/WARN]: [PvPManager] Error loading Vault! No Economy plugin found ``` -这段日志说明了插件 **PvPManager** 警告我们未找到经济插件 (No Economy plugin found)。 +这段日志说明了插件 **PvPManager** 警告我们未找到经济插件(No Economy plugin found)。 #### ERROR diff --git a/src/content/docs/general/basics/what-is-messy-code.md b/src/content/docs/general/basics/what-is-messy-code.md index 03d58ac0..59d8de31 100644 --- a/src/content/docs/general/basics/what-is-messy-code.md +++ b/src/content/docs/general/basics/what-is-messy-code.md @@ -9,17 +9,17 @@ template: splash ## 为什么会出现乱码? -乱码出现的原因,就是不使用原来编写文本的时候的编码来打开这个文本。 +乱码出现的原因,就是不使用原来编写文本时所使用的编码来打开这个文本。 而不同编码确定一个字符的规则不同。 ## 什么是编码? -编码,也叫 **字符编码**。通俗的讲,就是计算机的"字典"。你的文本文件在计算机中并不是以明文存在的,而是以一串二进制数表示的。比如: +编码,也叫 **字符编码**。通俗地讲,就是计算机的“字典”。你的文本文件在计算机中并不是以明文存在的,而是以一串二进制数表示的。比如: -如果你让计算机使用 A 编码,然后你输入了一个"人"字。那么在你输入后,计算机就会将"人"字转换为 A 编码中"人"字对应的二进制数。比如这个二进制数是 0010011。 +如果你让计算机使用 A 编码,然后你输入了一个“人”字。那么在你输入后,计算机就会将“人”字转换为 A 编码中“人”字对应的二进制数,比如这个二进制数是 0010011。 -倘若我再次打开的时候使用了 B 编码,而计算机中存储的二进制数仍然是 0010011。那么计算机就会在 B 编码的字符库中查找这个二进制数对应的字,比如在 B 编码中,0010011 指的是"你"这个字,那么你再次打开这个文本的时候你就会发现"人"字变成了"你"字。 +倘若我再次打开的时候使用了 B 编码,而计算机中存储的二进制数仍然是 0010011。那么计算机就会在 B 编码的字符库中查找这个二进制数对应的字,比如在 B 编码中,0010011 指的是“你”这个字,那么你再次打开这个文本的时候就会发现“人”字变成了“你”字。 当然,实际的编码规则远没有这么简单,大家只需要理解为什么会乱码就可以了。 @@ -33,10 +33,10 @@ template: splash | 口字码 | ![](_assets/口字符.png) | 大部分字符为小方块 | 以 UTF-8 方式读取 GBK 编码的中文 | | 符号码 | å²çæ³å½äºå¾ä¹ | 大部分字符为各种符号 | 以 ISO8859-1 方式读取 UTF-8 编码的中文 | | 拼音码 | ËêµÄ·¨¹úÁ˺ܾà | 大部分字符以头顶带有各种类型声调符号的字母 | 以 ISO8859-1 方式读取 GBK 编码的中文 | -| 问句码 | 好好学习天天?? | 字符串长度为偶数时正确,长度为奇数时最后的字符变为问号 | 以 GBK 方式读取 UTF-8 编码的中文,然后又用 UTF-8 的格式再次读取 | -| 锟拷码 | 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 | 全中文字符,且大部分字符为"锟斤拷"这几个字符 | 以 UTF-8 方式读取 GBK 编码的中文,然后又用 GBK 的格式再次读取 | +| 问句码 | 好好学习天天?? | 字符串长度为偶数时正常,长度为奇数时最后的字符变为问号 | 以 GBK 方式读取 UTF-8 编码的中文,然后又用 UTF-8 的格式再次读取 | +| 锟拷码 | 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 | 全中文字符,且大部分字符为“锟斤拷”这几个字符 | 以 UTF-8 方式读取 GBK 编码的中文,然后又用 GBK 的格式再次读取 | -解决乱码的方式也很简单,只需要根据乱码的特征,进行转码或重新用原来的编码打开就可以了。 +解决乱码的方式也很简单:只需要根据乱码的特征进行转码,或重新用原来的编码打开即可。 ## 如何设置编码、转码 @@ -44,14 +44,14 @@ template: splash ![](https://img.fastmirror.net/s/2024/07/19/6699cc78da4ab.png) -发现这是典型的口字码 +发现这是典型的口字码。 -我们看到 VS Code 右下角 +我们看到 VS Code 右下角: ![](https://img.fastmirror.net/s/2024/07/19/6699cd59a7b0a.png) -点击 **UTF-8** +点击 **UTF-8**。 -然后重新用 **GBK** 方式打开就可以了 +然后重新用 **GBK** 方式打开即可。 -![](https://img.fastmirror.net/s/2024/07/19/6699cd9d5521f.png) +![](https://img.fastmirror.net/s/2024/07/19/6699cd9d5521f.png) \ No newline at end of file diff --git a/src/content/docs/general/basics/what-is-mod.md b/src/content/docs/general/basics/what-is-mod.md index e234f418..86cc15b4 100644 --- a/src/content/docs/general/basics/what-is-mod.md +++ b/src/content/docs/general/basics/what-is-mod.md @@ -4,11 +4,11 @@ topic: basics template: splash --- -模组 (Mod) 是遵循 Forge、Fabric 或 LiteLoader 等 API 规范编写的 Java 程序。 +模组(Mod)是遵循 Forge、Fabric 或 LiteLoader 等 API 规范编写的 Java 程序。 ## 工作形式 -Minecraft 模组 (Mod) 一般来说模组会利用 Forge 或 Fabric 作为前置开发,通过反编译 Minecraft Java 源代码了解 Minecraft 干了什么, +Minecraft 模组(Mod)一般来说模组会利用 Forge 或 Fabric 作为前置开发,通过反编译 Minecraft Java 源代码了解 Minecraft 干了什么, 进而删减或修改内容以实现新的功能。删减或修改内容既可以是服务端,也可以是客户端。因而相较插件只能修改部分服务端的内容要有更大的功能性。 diff --git a/src/content/docs/general/basics/what-is-namespace.md b/src/content/docs/general/basics/what-is-namespace.md index 9f637417..8b0b019f 100644 --- a/src/content/docs/general/basics/what-is-namespace.md +++ b/src/content/docs/general/basics/what-is-namespace.md @@ -8,15 +8,15 @@ template: splash > 命名空间 ID(Namespaced identifier,或译为命名空间标识符)、资源路径(Resource location)、资源标识符(Resource identifier)或命名空间字符串(Namespaced string)是用来指明和识别游戏中特定对象而又能避免潜在的歧义和冲突的一种方式。 -如果比喻一下的话,就像是 +如果比喻一下的话,就像是: ![](_assets/妙妙比喻.png) -你的 "桌面" 上有几个命名空间(文件夹),这几个命名空间不能重名,命名空间里的东西可以重名 +你的“桌面”上有几个命名空间(文件夹),这几个命名空间不能重名,命名空间里的东西可以重名。 -对于重名的 ID,可以用命名空间加以区分 +对于重名的 ID,可以用命名空间加以区分。 -格式通常是 `命名空间:ID` ,例如: `minecraft:tp` +格式通常是 `命名空间:ID`,例如:`minecraft:tp`。 例如,在上面的比喻中: @@ -25,40 +25,40 @@ template: splash ## 物品 -原版物品的命名空间 `minecraft` 可不写,会自动补全,例如 `minecraft:stone` == `stone` +原版物品的命名空间 `minecraft` 可不写,会自动补全,例如 `minecraft:stone` == `stone`。 -但是 mod 物品你不写也会补 `minecraft`,导致找不到物品 +但是 Mod 物品你不写也会补 `minecraft`,导致找不到物品。 -所以,如果你想在菜单等地方使用来自 mod 的物品,应该写 `mod命名空间:物品ID` +所以,如果你想在菜单等地方使用来自 Mod 的物品,应该写 `Mod命名空间:物品ID`。 ## 命令 -命令存在 **优先级** 的概念 +命令存在 **优先级** 的概念。 -例如,当你安装 EssentialsX 之后,原版 tp 命令会被覆盖 +例如,当你安装 EssentialsX 之后,原版 tp 命令会被覆盖: ![](_assets/command-1.png) -而同时安装 EssentialsX 和 HuskHomes 之后,使用 tp 是 HuskHomes 提供的 +而同时安装 EssentialsX 和 HuskHomes 之后,使用 tp 是 HuskHomes 提供的: ![](_assets/command-2.png) -如果此时你想使用 EssentialsX 的而不是 HuskHomes 的,可以使用命名空间 +如果此时你想使用 EssentialsX 的而不是 HuskHomes 的,可以使用命名空间: ![](_assets/command-3.png) -当然,你也可以使用原版命令,原版命名空间是 `minecraft` +当然,你也可以使用原版命令,原版命名空间是 `minecraft`: ![](_assets/command-4.png) -通常,你作为用户不能调整优先级,这是插件开发者才能做的事 +通常,你作为用户不能调整优先级,这是插件开发者才能做的事。 -通常,插件作者会使用插件名字作为命名空间的名字 +通常,插件作者会使用插件名字作为命名空间的名字。 ## 资源包 -去学资源包基础而不是让我教你这个 +去学 [资源包基础](/java/advance/resourcepack/intro/) 而不是让我教你这个。 ## 参考 -https://zh.minecraft.wiki/w/%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4ID +https://zh.minecraft.wiki/w/%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4ID \ No newline at end of file diff --git a/src/content/docs/general/basics/what-is-permission.md b/src/content/docs/general/basics/what-is-permission.md index b6f90a54..f3fa309c 100644 --- a/src/content/docs/general/basics/what-is-permission.md +++ b/src/content/docs/general/basics/what-is-permission.md @@ -4,19 +4,19 @@ topic: basics template: splash --- -权限 - 在插件服务端中,确认玩家做某行为的能力是否被允许。 +权限:在插件服务端中,确认玩家做某行为的能力是否被允许。 -节点 - 权限的单元,一个节点就是一条权限,可以使用权限系统插件给予各个用户,如 `cmi.tp` 就是一条权限节点,而权限节点前的 `cmi` 就是父节点。 +节点:权限的单元,一个节点就是一条权限,可以使用权限系统插件给予各个用户。如 `cmi.tp` 就是一条权限节点,而权限节点前的 `cmi` 就是父节点。 -通配符 - 即为 `*` ,当给予玩家权限 `父节点.*` 即可获取父节点对应的所有权限节点,如 `cmi.*` 即代表 所有的 `cmi.kit` `cmi.heal`...等节点。 +通配符:即为 `*`,当给予玩家权限 `父节点.*` 即可获取父节点对应的所有权限节点,如 `cmi.*` 即代表所有的 `cmi.kit`、`cmi.heal` 等节点。 -继承 - 继承就是子用户组可以使用从父用户组继承的各种属性。 +继承:继承就是子用户组可以使用从父用户组继承的各种属性。 ## 关于权限 **_合法而稳定的权力在使用得当时很少遇到抵抗。 ——塞·约翰逊_** -**_最大限度地行使权力总是令人反感;权力不易确定之处始终存在着危险。--塞·约翰逊_** +**_最大限度地行使权力总是令人反感;权力不易确定之处始终存在着危险。——塞·约翰逊_** ## 权限的作用 @@ -24,15 +24,15 @@ template: splash ## 权限的设置 -我们有且只推荐 LuckPerms 作为权限插件,具体的使用方法请参考 [LuckPerms 使用方法](/java/process/plugin/management-tool/permission/intro) +我们推荐且只推荐 LuckPerms 作为权限插件,具体的使用方法请参考 [LuckPerms 使用方法](/java/process/plugin/management-tool/permission/intro)。 以下举例了一些常见的权限组分类: | 组名 | 说明 | | :-------------- | :-------------------------------------------------------------------------------------------- | -| Newbie (新人) | Newbie 用户组包括最基础的权限节点,应该给予所有新加入玩家在注册时保证安全的权限 | -| Player (玩家) | Player 用户组包括了所有玩家可以使用的权限。一般包含经济、基础传送,和其他的基础指令 | -| Helper (协管员) | 一般允许拥有踢出玩家、监禁玩家、封禁玩家 IP 等权限。 | -| Admin (管理员) | 一般允许使用所有权限,且通常是唯一一个拥有控制插件、规定用户组、关闭/重启服务器命令的用户组。 | +| Newbie (新人) | Newbie 用户组包括最基础的权限节点,应该给予所有新加入玩家在注册时保证安全的权限。 | +| Player (玩家) | Player 用户组包括了所有玩家可以使用的权限,一般包含经济、基础传送和其他基础指令。 | +| Helper (协管员) | 一般允许拥有踢出玩家、监禁玩家、封禁玩家 IP 等权限。 | +| Admin (管理员) | 一般允许使用所有权限,且通常是唯一一个拥有控制插件、规定用户组、关闭/重启服务器命令的用户组。 | -当然你也可以自定义一个例如 VIP1、VIP2 的权限组,拥有比普通用户更多的权限。 +当然你也可以自定义一个例如 VIP1、VIP2 的权限组,拥有比普通用户更多的权限。 \ No newline at end of file diff --git a/src/content/docs/general/basics/what-is-plugin.md b/src/content/docs/general/basics/what-is-plugin.md index fa743e14..0914bd42 100644 --- a/src/content/docs/general/basics/what-is-plugin.md +++ b/src/content/docs/general/basics/what-is-plugin.md @@ -4,67 +4,65 @@ topic: basics template: splash --- -如果你玩过整合包你一定对 `Mod` (即模组) 这个概念相当了解,但如果你是第一次开服,你可能不知道什么是 `Plugin` (插件),本文章会详细为你介绍。 +如果你玩过整合包,你一定对 `Mod`(即模组)这个概念相当了解,但如果你是第一次开服,你可能不知道什么是 `Plugin`(插件)。本文章会为你详细介绍。 ## 工作形式 -不同于大部分模组需要同时安装在客户端和服务端,插件安装在 **服务端**, +不同于大部分模组需要同时安装在客户端和服务端,插件安装在 **服务端**。 -玩家只需使用原版客户端即可进入服务器,大多数情况下不需要专门安装 mod。 +玩家只需使用原版客户端即可进入服务器,大多数情况下不需要专门安装 Mod。 -插件为什么叫插件 (Plugins),是因为它相对于模组 (Mods) 有更高的即时性, - -能够更为方便地添加或修改游戏内容,对 Minecraft 本身的侵入性修改也更小。 +插件之所以叫插件(Plugins),是因为它相对于模组(Mods)有更高的即时性,能够更为方便地添加或修改游戏内容,对 Minecraft 本身的侵入性修改也更小。 ## 安装位置 -插件安装在服务器根目录的 `/plugins` 文件夹,然后需要 **重启** 服务器 +插件安装在服务器根目录的 `/plugins` 文件夹,然后需要 **重启** 服务器。 :::danger -永远不要在不知道会发生什么的情况下热加载/热重载/热卸载任何插件。 +永远不要在不知道会发生什么的情况下热加载 / 热重载 / 热卸载任何插件。 ::: -> 插件热加载/热重载/热卸载指的是在服务器已经在运行时加载/重启/卸载插件 +> 插件热加载 / 热重载 / 热卸载指的是在服务器已经在运行时加载 / 重启 / 卸载插件。 > > 服务器运行时不要轻易这么做,绝大多数插件本身不支持热加载,这么做会导致不可预料的后果。 > -> 如果你一定要逆天而行,查看 [插件管理](/java/process/plugin/management-tool/plugin-management/intro) 页面。 +> 如果你一定要逆天而行,请查看 [插件管理](/java/process/plugin/management-tool/plugin-management/intro) 页面。 :::caution 如果你正在使用一个没有明确提醒支持哪个子版本的插件,那么要小心: -SpigotMC 的插件版本支持除了 1.20.6 只会显示大版本号 (如 1.20) 而不会显示小版本号 (如 1.20.4) +SpigotMC 的插件版本支持除了 1.20.6 只会显示大版本号(如 1.20)而不会显示小版本号(如 1.20.4)。 -因此如果你不确定这个插件是否支持该小版本,就算加载成功 (绿名) 也一定要完整测试了这个插件能够正常使用。 +因此如果你不确定这个插件是否支持该小版本,就算加载成功(绿名)也一定要完整测试这个插件是否能够正常使用。 ::: ## 插件的优点 -- 插件服的开发大多数时候都更加简单,而不需要接触 Minecraft 的源代码。像 Skript 那样的脚本语言将插件的开发难度降到了有点脑子就会 +- 插件服的开发大多数时候都更加简单,而不需要接触 Minecraft 的源代码。像 Skript 那样的脚本语言将插件的开发难度降到了“有点脑子就会”的程度。 - 插件的接口大多数时候都使用了事件来抽象化监听服务器的各种行为的复杂性,同时也提供了更好的兼容性。 -- 由于插件接口都不会因为 Minecraft 源代码更新而被破坏,所以即使版本更新很多东西也不需要跟着修改。比如 Vault 三年前更新的插件到最新版本还可以用。 +- 由于插件接口都不会因为 Minecraft 源代码更新而被破坏,所以即使版本更新,很多东西也不需要跟着修改。比如 Vault 三年前更新的插件到最新版本还可以用。 ## 插件的缺点 - 由于版本 API 的变动,如果插件实现的功能较多,更换一个小版本都很可能导致某些功能失去作用甚至无法正常加载。 - 接触 Minecraft 本身的代码变得困难,而且通常需要考虑多个版本之间的代码变动。 -- 很难直接像模组那样通过 Mixin 直接更改游戏代码,某些必须需要修改源代码才能实现的功能在插件上很难实现。 +- 很难直接像模组那样通过 Mixin 直接更改游戏代码,某些必须修改源代码才能实现的功能在插件上很难实现。 ## 插件可以做的事情 -虽然插件不能像模组那样直接更改游戏源代码,但是依然可以利用游戏本身的内容做出一些超乎寻常的事情 +虽然插件不能像模组那样直接更改游戏源代码,但是依然可以利用游戏本身的内容做出一些超乎寻常的事情。 -这里是一些 `超乎寻常` 的插件 (对新手来说) +这里是一些“超乎寻常”的插件(对新手来说): -- Slimefun 在插件中实现模组的功能 -- ItemsAdder/Oraxen 自定义方块物品 HUD 家具 (还有更多) -- ModelEngine 自定义生物实体,就像模组 -- MythicMob 创造出像模组一样的技能和生物 +- Slimefun —— 在插件中实现模组的功能。 +- ItemsAdder / Oraxen —— 自定义方块、物品、HUD、家具等(还有更多)。 +- ModelEngine —— 自定义生物实体,就像模组一样。 +- MythicMob —— 创造出像模组一样的技能和生物。 -插件服目前已经可以使用自定义,物品,方块,HUD,家具,Emoij,生物实体,农作物,树叶,Tooltip,附魔... +插件服目前已经可以使用自定义物品、方块、HUD、家具、Emoji、生物实体、农作物、树叶、Tooltip、附魔…… -所以说不要轻易地认为插件在最终效果上不如 mod,很多时候实际上不需要像模组那样修改源代码即可达到相同的效果,不是么? +所以说,不要轻易地认为插件在最终效果上不如 Mod。很多时候实际上不需要像模组那样修改源代码即可达到相同的效果,不是么? \ No newline at end of file diff --git a/src/content/docs/general/basics/what-is-startup-script.md b/src/content/docs/general/basics/what-is-startup-script.md index 4361fce1..6b98f6e3 100644 --- a/src/content/docs/general/basics/what-is-startup-script.md +++ b/src/content/docs/general/basics/what-is-startup-script.md @@ -13,18 +13,18 @@ _对于 Windows 服务器来说,启动脚本是 `.bat` 后缀的文件,对 L ### sh (Shell Script)(Linux) - 语法:sh 脚本使用 Shell 命令和控制结构,支持条件判断、循环、函数定义等高级编程特性。 -- 执行方式:在终端通过 `./script.sh` 或 `sh script.sh` 来执行 (确保脚本具有执行权限)。 +- 执行方式:在终端通过 `./script.sh` 或 `sh script.sh` 来执行(确保脚本具有执行权限)。 ### bat (Batch File)(Windows) - 语法:bat 脚本包含一系列 DOS 命令和批处理命令,支持简单的条件判断和循环,但相比 sh 脚本,其功能和灵活性较低。 - 执行方式:双击文件或者在命令提示符下输入 `script.bat` 来执行。 -注意:Windows 和 Linux 的启动脚本不能通用,不是改一下后缀名就可以 +注意:Windows 和 Linux 的启动脚本不能通用,不是改一下后缀名就可以。 ## 什么是启动参数 -启动参数 (也称 Flag) 主要分为 3 类: +启动参数(也称 Flag)主要分为 3 类: - 标准参数 (-):所有的 JVM 实现都必须实现这些参数的功能,而且向后兼容; - 非标准参数 (-X):默认 JVM 实现这些参数的功能,但是并不保证所有 JVM 实现都满足,且不保证向后兼容; @@ -40,7 +40,7 @@ java -Xms12G -Xmx12G -jar 核心名.jar nogui 作为新手,不用在意大多数参数的作用,你需要做的就是开启服务器。 -**不要忘记改最后的“核心名.jar!** +**不要忘记改最后的“核心名.jar”!** ::: @@ -54,11 +54,11 @@ java -Xms12G -Xmx12G -jar 核心名.jar nogui
--nogui 干了什么 -不显示类似下面的 GUI +不显示类似下面的 GUI: ![](_assets/nogui.jpg) -真的,这个 GUI 一点用没有,别开它了 +真的,这个 GUI 一点用没有,别开它了。
@@ -66,7 +66,7 @@ java -Xms12G -Xmx12G -jar 核心名.jar nogui 1. 无论什么时候,分配内存时一定要多预留 15% 左右内存,如服务器还剩余 10 G 内存,不要将 -Xms 设置到大于 9 G 的内存,否则会很危险。 2. 在 G1GC 模式下,尽量保证 Xmx = Xms 因为如果二者不同 JVM 需要更多的内存时候,JVM 需要申请更多内存,这个过程的耗时会导致顿卡。 -3. 更多的参数讲解,请前往 [JVM 参数优化](/java/advance/optimize/jvm/intro) +3. 更多的参数讲解,请前往 [JVM 参数优化](/java/advance/optimize/jvm/intro)。 ::: diff --git a/src/content/docs/general/basics/what-is-world.md b/src/content/docs/general/basics/what-is-world.md index 88ced073..6b4792b8 100644 --- a/src/content/docs/general/basics/what-is-world.md +++ b/src/content/docs/general/basics/what-is-world.md @@ -4,46 +4,46 @@ topic: basics template: splash --- -Minecraft 的几乎一切行为都是建立在 "世界" 上,而世界中的方块、实体等文件都存储在了根目录的对应文件夹下。 +Minecraft 的几乎一切行为都是建立在“世界”上,而世界中的方块、实体等文件都存储在了根目录的对应文件夹下。 -Minecraft 原版目前有三个世界,分别是主世界 **world** (world),地狱 **DIM-1** (world_nether),末地 **DIM1** (world_the_end)。 +Minecraft 原版目前有三个世界,分别是主世界 **world**(world),地狱 **DIM-1**(world_nether),末地 **DIM1**(world_the_end)。 -每个世界的方块都按照 **X** 和 **Z** 每 _16 _ 16* 为区块 (**Chunk**)。其中每 *32 _ 32_ 个区块就会成为一组存储进一个独立的区域文件 (**Region**)。 +每个世界的方块都按照 **X** 和 **Z** 每 16×16 为区块(**Chunk**)。其中每 32×32 个区块就会成为一组存储进一个独立的区域文件(**Region**)。 在这里以主世界为例,说明世界是怎样保存的。 文件夹: -1. **advancements/** :储存玩家的成就,每个玩家对应一个 **UUID** ; +1. **advancements/**:储存玩家的成就,每个玩家对应一个 **UUID**。 -2. **data/** :**idcounts.dat** 和 **map_xxx.dat** 储存的是玩家合成的地图有关的数据。 +2. **data/**:**idcounts.dat** 和 **map_xxx.dat** 储存的是玩家合成的地图有关的数据。 -3. **datapacks/** :储存世界所使用的数据包 (一般 Bukkit 系服务器有一个 Bukkit 文件夹); +3. **datapacks/**:储存世界所使用的数据包(一般 Bukkit 系服务器有一个 Bukkit 文件夹)。 -4. **entities/** :储存对应 **region** 中的实体; +4. **entities/**:储存对应 **region** 中的实体。 -5. **playerdata/** :储存着玩家的数据信息 (如血量、经验值等); +5. **playerdata/**:储存着玩家的数据信息(如血量、经验值等)。 -6. **poi/** :存储世界中村民的兴趣点 (如床、工作方块)。(只在 1.14 + 版本中使用) +6. **poi/**:存储世界中村民的兴趣点(如床、工作方块)(只在 1.14+ 版本中使用)。 -7. **region/** :储存方块信息。 +7. **region/**:储存方块信息。 -8. **stats/** :储存玩家在此世界游玩时的统计信息 (如击杀了 xx 只鸡、使用了 xx 次工作台)。 +8. **stats/**:储存玩家在此世界游玩时的统计信息(如击杀了 xx 只鸡、使用了 xx 次工作台)。 -9. **如果还有其他文件夹一般为插件储存用的文件夹,如 `itemsadder` 文件夹是插件 `ItemsAdders` 创建的用于保存世界中自定义物品的文件夹** +9. 如果还有其他文件夹,一般为插件储存用的文件夹,如 `itemsadder` 文件夹是插件 `ItemsAdder` 创建的用于保存世界中自定义物品的文件夹。 文件: -1. **level.dat** :储存该世界的全局信息 (如种子、是否生成结构、世界类型、世界重生点等)。 +1. **level.dat**:储存该世界的全局信息(如种子、是否生成结构、世界类型、世界重生点等)。 -2. **level.dat_old** :可以视为 level.dat 的备份文件 +2. **level.dat_old**:可以视为 level.dat 的备份文件。 -3. **session.lock** :用于储存最后执行的程序修改这一文件以及访问的权限。 +3. **session.lock**:用于储存最后执行的程序修改这一文件以及访问的权限。 -4. **/data/raids_end.dat** :储存世界内正在进行的袭击的信息。 +4. **/data/raids_end.dat**:储存世界内正在进行的袭击的信息。 -5. **/data/random_sequences.dat** :存储战利品表使用的随机序列数据。 +5. **/data/random_sequences.dat**:存储战利品表使用的随机序列数据。 -6. **paper-world.yml**(只存在于 **Paper** 服务器中):记录世界特有的 **Paper** 设置 +6. **paper-world.yml**(只存在于 **Paper** 服务器中):记录世界特有的 **Paper** 设置。 -其他世界的文件夹大同小异。 +其他世界的文件夹大同小异。 \ No newline at end of file diff --git a/src/content/docs/general/java/choose-and-download-and-install-java.md b/src/content/docs/general/java/choose-and-download-and-install-java.md index 9bb77da7..ebdb8393 100644 --- a/src/content/docs/general/java/choose-and-download-and-install-java.md +++ b/src/content/docs/general/java/choose-and-download-and-install-java.md @@ -4,7 +4,7 @@ title: 选择、下载和安装 Java :::caution -部分服务端有在项目的 README 中标注最低版本和推荐版本,例如 [Beast](https://github.com/HomoMC/Beast),最低版本为 Java 8,推荐版本为 Java 21 mod 服务端 +部分服务端有在项目的 README 中标注最低版本和推荐版本,例如 [Beast](https://github.com/HomoMC/Beast),最低版本为 Java 8,推荐版本为 Java 21 mod 服务端。 ::: @@ -50,7 +50,7 @@ title: 选择、下载和安装 Java :::caution -此处下载链接可能不是最新版,如需下载最新版请跳转至 [手动下载](#手动下载) +此处下载链接可能不是最新版,如需下载最新版请跳转至 [手动下载](#手动下载)。 ::: @@ -80,14 +80,14 @@ title: 选择、下载和安装 Java ## 下载镜像 -[InJDK](https://d10.injdk.cn/openjdk/) 各种 JDK 的下载镜像 +[InJDK](https://d10.injdk.cn/openjdk/) 各种 JDK 的下载镜像。 ## Oracle 版 官方版本
- 怎么找到官网并从官网下载 + 怎么找到官网并从官网下载: ![](_assets/Oracle-1.png) ![](_assets/Oracle-2.png) @@ -126,7 +126,7 @@ java -version ![](_assets/cmd-2.png) -> 返回类似的消息即为 Java 已安装 +> 返回类似的消息即为 Java 已安装。 ## 使用 AJI 静默安装 Java @@ -136,8 +136,8 @@ java -version 食用方式: 1. 打开此链接下载 AJI: https://github.com/Lafcadia/AJI/releases/download/v0.0.2/main.exe -2. 下好了,右键选择以管理员权限打开 (如果不以管理员权限打开就无法绑定 Java 环境变量,虽然不给管理员权限程序也能正常运行,并安装 - Java,但可能会在后续阶段出现问题) +2. 下好了,右键选择以管理员权限打开(如果不以管理员权限打开就无法绑定 Java 环境变量,虽然不给管理员权限程序也能正常运行,并安装 + Java,但可能会在后续阶段出现问题) 3. ![示意图](https://github.com/user-attachments/assets/28035c47-d34b-4b38-b895-29f38366bef9) 4. 选择合适的版本的 Java,点击 `Install Java`,下载。 5. 不要关闭窗口,直到下方的提示栏从 `Installing...` 变为 `Complete.` @@ -146,4 +146,4 @@ java -version ## 本节视频教程 -[**点此前往 B 站**: 笨蛋级 MC 开服教程 - 第三集 P1:实机演示安装 Java](https://www.bilibili.com/video/BV1eT42167iZ/) +[**点此前往 B 站**: 笨蛋级 MC 开服教程 - 第三集 P1:实机演示安装 Java](https://www.bilibili.com/video/BV1eT42167iZ/)。 \ No newline at end of file diff --git a/src/content/docs/general/java/environment.mdx b/src/content/docs/general/java/environment.mdx index a7233bcd..b30f299b 100644 --- a/src/content/docs/general/java/environment.mdx +++ b/src/content/docs/general/java/environment.mdx @@ -10,7 +10,7 @@ title: 环境变量 在此处,`java` 等同于 `"C:\Program Files\Zulu\zulu-21\bin\java.exe"` -当你使用安装包安装 Java 时,通常会自动配置环境变量 +当你使用安装包安装 Java 时,通常会自动配置环境变量。 如果不是使用安装包安装,即没有配置环境变量,你应该会遇到这个情况: diff --git a/src/content/docs/general/java/faq.md b/src/content/docs/general/java/faq.md index f593f3fe..ccdc1d5c 100644 --- a/src/content/docs/general/java/faq.md +++ b/src/content/docs/general/java/faq.md @@ -5,8 +5,8 @@ title: FAQ ## 为什么 .jar 文件的图标是个白纸 1. 服务器根本没有安装 JRE 或者 JDK。 -2. 服务器上的 Java 未设置环境变量 (其实这个影响不大)。 -3. 没有绑定文件打开方式 (不过其实也没啥必要绑)。 +2. 服务器上的 Java 未设置环境变量(其实这个影响不大)。 +3. 没有绑定文件打开方式(不过其实也没啥必要绑)。 ## 怎么制作绿色版 Java & 绿色版怎么使用 @@ -17,4 +17,4 @@ title: FAQ ## cmd 键入 java 没反应 首先检查环境变量上面是否有个 `C:\Program Files\Common Files\Oracle\Java\javapath` 存在,如果有删掉即可,或者把 Java -环境变量移到第一个也可以 +环境变量移到第一个也可以。 diff --git a/src/content/docs/general/java/intro.md b/src/content/docs/general/java/intro.md index 8a63b208..2320ef2d 100644 --- a/src/content/docs/general/java/intro.md +++ b/src/content/docs/general/java/intro.md @@ -10,17 +10,17 @@ sidebar: ## JRE 和 JDK 是什么?我该怎么选择? -**JRE** (Java Runtime Environment) 是 Java 的运行环境。面向 Java 程序的使用者,而不是开发者。如果你仅下载并安装了 JRE,那么你的系统只能运行 Java 程序。 +**JRE**(Java Runtime Environment)是 Java 的运行环境,面向 Java 程序的使用者而不是开发者。如果你仅下载并安装了 JRE,那么你的系统只能运行 Java 程序。 -JRE 是运行 Java 程序所必须环境的集合,包含 JVM 标准实现及 Java 核心类库。它包括 Java 虚拟机、Java 平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。 +JRE 是运行 Java 程序所必须环境的集合,包含 JVM 标准实现及 Java 核心类库。它包括 Java 虚拟机、Java 平台核心类和支持文件,不包含开发工具(编译器、调试器等)。 -**JDK** (Java Development Kit) 又称 J2SDK (Java2 Software Development Kit),是 Java 开发工具包,它提供了 Java 的开发环境(提供了编译器 javac 等工具,用于将 java 文件编译为 class 文件)和运行环境(提供了 JVM 和 Runtime 辅助包,用于解析 class 文件使其得到运行)。 +**JDK**(Java Development Kit)又称 J2SDK(Java2 Software Development Kit),是 Java 开发工具包。它提供了 Java 的开发环境(提供了编译器 javac 等工具,用于将 java 文件编译为 class 文件)和运行环境(提供了 JVM 和 Runtime 辅助包,用于解析 class 文件使其得到运行)。 如果你下载并安装了 JDK,那么你不仅可以开发 Java 程序,也同时拥有了运行 Java 程序的平台。JDK 是整个 Java 的核心,包括了 Java 运行环境(JRE)、一堆 Java 工具 tools.jar 和 Java 标准类库 rt.jar。 ### 总结 -**开服最好选择 JDK**,这样不会因为一些插件/mod 使用类似 ByteBuddy 等黑魔法导致报错,也可以轻松使用 Arthas 等分析工具。 +**开服最好选择 JDK**,这样不会因为一些插件 / Mod 使用类似 ByteBuddy 等“黑魔法”导致报错,也可以轻松使用 Arthas 等分析工具。 毕竟,现在谁还缺几十 MB 的存储空间,~~真缺那就别开服了~~。 @@ -28,4 +28,4 @@ JRE 是运行 Java 程序所必须环境的集合,包含 JVM 标准实现及 J 对于初学者,只需要阅读 [选择、下载和安装 Java](/general/java/choose-and-download-and-install-java) 部分,其余为扩展知识。 -![](_assets/lava.jpg) +![](_assets/lava.jpg) \ No newline at end of file diff --git a/src/content/docs/general/more/ask-for-help.md b/src/content/docs/general/more/ask-for-help.md index 6f5e47a8..1a94a68d 100644 --- a/src/content/docs/general/more/ask-for-help.md +++ b/src/content/docs/general/more/ask-for-help.md @@ -13,7 +13,7 @@ sidebar_position: 7 :::tip -我们 **非常推荐** 你阅读 [《提问的智慧》](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md) +我们 **非常推荐** 你阅读 [《提问的智慧》](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md)。 ::: @@ -27,11 +27,11 @@ sidebar_position: 7 **`什么是 Amethyst ?插件的 Wiki 在哪里?`** -- **不要把群和人当做搜索引擎** (除非打钱了)。 +- **不要把群和人当做搜索引擎**(除非打钱了)。 **`我玩家进不来服务器怎么办`** -- **描述模糊**,可能性太多以至于没有人猜出。 +- **描述模糊**,可能性太多以至于没有人能猜出。 **`不正确提供 log 或不提供 log`** @@ -43,7 +43,7 @@ sidebar_position: 7 - 在 **服务器** 问题中提供 **客户端** log。 - **不完整** 的 log,甚至 **不提供** log。 - 错误的将 **客户端** 收到的报错当做 **服务端** 报错。 -- **直接将成百上千行的 log 发到交流群** +- **直接将成百上千行的 log 发到交流群**。 :::caution @@ -57,9 +57,9 @@ sidebar_position: 7 为避免无效问题,问问题最好需要符合以下几个基础原则: -1. 先查 Wiki 或搜索 - [详细说明](#看完-wiki-再问) +1. 先查 Wiki 或搜索 —— [详细说明](#看完-wiki-再问)。 -2. 礼貌用语 +2. 礼貌用语。 例如,你应该: @@ -68,40 +68,40 @@ sidebar_position: 7 而不能: -- 开门见山:`服务器报错是这个 C++ Exception: std::optional 是啥情况` -- 发言不友好:`你不知道可以不说话,别在这浪费我时间` -- 斥责他人:`你是不是不会写插件啊,这插件怎么能开服就报错呢` +- 开门见山:`服务器报错是这个 C++ Exception: std::optional 是啥情况?` +- 发言不友好:`你不知道可以不说话,别在这浪费我时间。` +- 斥责他人:`你是不是不会写插件啊,这插件怎么能开服就报错呢?` -3. 明确遇到的问题,到 **对应群** 里问 +3. 明确遇到的问题,到 **对应群** 里问。 例如,你应该: -- 某插件出现不适配问题后在名为“我的世界服主交流群”的开服综合交流群里提问 `请问在升级 Paper1.20.4 之后遇到 xxx 插件不适配应该怎么办?` -- 某小众插件与 Leaves 核心出现兼容性问题后在该插件官方交流群里提问 `作者大大,你的 xxx 插件和 leaves 核心是不是有兼容性问题呢?` +- 某插件出现不适配问题后在名为“我的世界服主交流群”的开服综合交流群里提问:`请问在升级 Paper1.20.4 之后遇到 xxx 插件不适配应该怎么办?` +- 某小众插件与 Leaves 核心出现兼容性问题后,在该插件官方交流群里提问:`作者大大,你的 xxx 插件和 leaves 核心是不是有兼容性问题呢?` 而不能: -- PowerNukkitX 核心相关问题到 LeviLemina 交流群里提问 -- 路由器配置相关问题到某插件官方交流群里提问 -- 卡服问题到其他游戏交流群里提问 +- PowerNukkitX 核心相关问题到 LeviLamina 交流群里提问。 +- 路由器配置相关问题到某插件官方交流群里提问。 +- 卡服问题到其他游戏交流群里提问。 -4. 提到服务器环境 +4. 提到服务器环境。 例如,你应该: -- `大佬们我是 1.16.5 catserver 服务器,遇到了 xxx 问题` -- `最近我升级到了 1.21 Paper 核心,玩家反应 xxx 有人有类似的问题吗?` +- `大佬们,我是 1.16.5 Catserver 服务器,遇到了 xxx 问题。` +- `最近我升级到了 1.21 Paper 核心,玩家反应 xxx,有人有类似的问题吗?` 而不能: - 仅给出插件名和报错却不给出服务端版本等信息:`大佬们有没有人知道我这个 xxx 插件怎么加载不了,报错 NoClassDefFoundError?` -- 仅附上报错信息却没有给出任何服务端版本、加载器版本、插件列表等信息:`有没有大佬能帮我看看这个崩服是为什么,什么也不干跑一跑图就崩,ll加载器` +- 仅附上报错信息却没有给出任何服务端版本、加载器版本、插件列表等信息:`有没有大佬能帮我看看这个崩服是为什么,什么也不干跑一跑图就崩,ll 加载器?` -5. 给出合理的日志 - [详细说明](#给出日志) +5. 给出合理的日志 —— [详细说明](#给出日志)。 - + ### 看完 Wiki 再问 @@ -109,11 +109,11 @@ Wiki 就是让你解决常见问题的,不看这玩意儿就在那瞎问只会 几乎所有的软件都会附上 Wiki,它们一般位于: -- 插件的 README 文件 (GitHub 主页往下翻一般就是) -- 插件作者在社交媒体发布的视频文章等或自行搭建的网站 (入口一般可以在插件的论坛介绍页、官网、README 中找到) -- 插件作者在即时通讯软件上发布的视频文章等 (比如有的插件作者会让你加他的 QQ 群,之后把使用文档放在群文件或群公告里) +- 插件的 README 文件(GitHub 主页往下翻一般就是)。 +- 插件作者在社交媒体发布的视频文章等或自行搭建的网站(入口一般可以在插件的论坛介绍页、官网、README 中找到)。 +- 插件作者在即时通讯软件上发布的视频文章等(比如有的插件作者会让你加他的 QQ 群,之后把使用文档放在群文件或群公告里)。 -**请先耐心寻找这些文档**,实在找不到说明作者可能确实没有写,这种情况下再提问 +**请先耐心寻找这些文档**,实在找不到说明作者可能确实没有写,这种情况下再提问。 此外,Wiki 中一般会有搜索功能。如果 Wiki 中的内容非常多,对于你来说是很难找到自己想要的信息的。好在多数 Wiki 网站中都有搜索功能。你可以在页面中找到搜索框,然后在其中输入关键词即可。 @@ -123,9 +123,9 @@ Wiki 就是让你解决常见问题的,不看这玩意儿就在那瞎问只会 对于不是网站形式的 Wiki 来说,也有许多种办法来搜索: -#### docx (Word 文档) +#### docx(Word 文档) -按下 `Ctrl + F` (Windows) 或 `Command + F` (macOS) 即可启动 Microsoft Word 或 WPS 的搜索功能,搜索当前文档。 +按下 `Ctrl + F`(Windows)或 `Command + F`(macOS)即可启动 Microsoft Word 或 WPS 的搜索功能,搜索当前文档。 #### txt @@ -137,12 +137,11 @@ Wiki 就是让你解决常见问题的,不看这玩意儿就在那瞎问只会 #### 笨蛋脚本 -使用此 [脚本](https://script.8aka.org/update-log), -会将日志自动上传到 `https://mclo.gs` (默认上传的日志是 `logs/latest.log`) +使用此 [脚本](https://script.8aka.org/update-log),会将日志自动上传到 `https://mclo.gs`(默认上传的日志是 `logs/latest.log`)。 #### 如何上传 -当你询问问题的时候,发出你的报错日志 +当你询问问题的时候,发出你的报错日志。 :::tip @@ -150,47 +149,47 @@ Wiki 就是让你解决常见问题的,不看这玩意儿就在那瞎问只会 ::: -你需要明白你面对的是群友而不是道友,没有人可以在没有日志的情况下帮你解决问题, +你需要明白你面对的是群友而不是道友,没有人可以在没有日志的情况下帮你解决问题。 -如果你遇到的是大佬还可以给你算一卦。 +如果你遇到的是大佬,还可以给你算一卦。
- 如何使用 8aka Mclogs + 如何使用 8aka Mclogs > https://log.8aka.org ![](_assets/屏幕截图%202025-02-07%20182759.png) -服务器 log 文件在服务端根目录的 logs 文件夹,一般上传 `latest.log` (服务端最新的日志) 即可 +服务器 log 文件在服务端根目录的 logs 文件夹,一般上传 `latest.log`(服务端最新的日志)即可。 ![](_assets/屏幕截图%202025-02-07%20182930.png) -把这个链接复制粘贴发给大佬 +把这个链接复制粘贴发给大佬。
- 如何使用 Mclogs + 如何使用 Mclogs ![](\_assets/问问题的技巧/如何使用 Mclogs-1.png) -服务器 log 文件在服务端根目录的 logs 文件夹,一般上传 `latest.log` (服务端最新的日志) 即可 +服务器 log 文件在服务端根目录的 logs 文件夹,一般上传 `latest.log`(服务端最新的日志)即可。 ![](\_assets/问问题的技巧/如何使用 Mclogs-2.png) -把这个链接复制粘贴发给大佬 +把这个链接复制粘贴发给大佬。 :::tip ![](_assets/qnmd_raw.png) -不要点右上角的 Raw 进行分享,那是 API 接口链接,给开发人员提供的,不是分享链接的,不能用于分享日志使用 +不要点右上角的 Raw 进行分享,那是 API 接口链接,给开发人员提供的,不是分享链接,不能用于分享日志使用。 :::
-其他的贴 log 的网站 +其他的贴 log 的网站:
其他可用的网站 @@ -216,11 +215,11 @@ Wiki 就是让你解决常见问题的,不看这玩意儿就在那瞎问只会 :::caution -不遵守以上规则,可能会导致你被写入 **乐子文档** +不遵守以上规则,可能会导致你被写入 **乐子文档**。 ::: -**经典如何提问:https://settingdust.gitbook.io/stop-ask-questions-the-stupid-ways/** +**经典如何提问:** ### 经典老图 @@ -230,4 +229,4 @@ Wiki 就是让你解决常见问题的,不看这玩意儿就在那瞎问只会 ![](_assets/问问题的技巧/经典老图-3.jpg) -![](_assets/问问题的技巧/没事不要免费帮人.jpg) +![](_assets/问问题的技巧/没事不要免费帮人.jpg) \ No newline at end of file diff --git a/src/content/docs/general/preparation/text-editor/intro.md b/src/content/docs/general/preparation/text-editor/intro.md index d1f00135..4993c85d 100644 --- a/src/content/docs/general/preparation/text-editor/intro.md +++ b/src/content/docs/general/preparation/text-editor/intro.md @@ -12,8 +12,8 @@ sidebar: 请不要再使用 Windows 自带的记事本和写字板了。这些文本编辑器通常有以下问题: -1. 可能造成文件编码发生改变。小白操作时尤其容易出现,部分情况下用记事本和写字板保存文件后文件因编码改变等问题而无法服务器读取。 -2. 无法察觉到格式错误。有时编辑文件时会因为不小心删除或添加了些符号,导致配置文件语法错误,服务器无法识别。本文介绍的文本编辑器均能识别出这些格式错误并做出提示和警告,然而记事本和写字板却不具备这些功能。 +1. 可能造成文件编码发生改变。小白操作时尤其容易出现,部分情况下用记事本和写字板保存文件后,文件因编码改变等问题而无法被服务器读取。 +2. 无法察觉到格式错误。有时编辑文件时会因为不小心删除或添加了一些符号,导致配置文件语法错误,服务器无法识别。 3. 无法准确地辨认缩进等格式。这些文本编辑器由于默认不使用 [等宽字体](https://baike.baidu.com/item/%E7%AD%89%E5%AE%BD%E5%AD%97%E4%BD%93/8434037) 显示文字,导致其显示效果与原格式存在差异。 4. 没有语法高亮功能。在编辑配置文件时,语法高亮功能可以让你高效快速地找到指定配置项和值。它让配置文件更易于阅读,整体上提高了在服务器上进行操作的效率。本文介绍的文本编辑器均能识别出这些格式错误并做出提示和警告,然而记事本和写字板却不具备这些功能。 @@ -21,4 +21,4 @@ sidebar: 出于多方面原因,不推荐使用 GitHub 官方出品的 Atom,它已在 2022 年 12 月由于安全原因宣布停止维护。 -接下来介绍几个常用的文本编辑器,供大家选择。 +接下来介绍几个常用的文本编辑器,供大家选择。 \ No newline at end of file diff --git a/src/content/docs/general/preparation/text-editor/vscode.md b/src/content/docs/general/preparation/text-editor/vscode.md index c3716f89..db935e27 100644 --- a/src/content/docs/general/preparation/text-editor/vscode.md +++ b/src/content/docs/general/preparation/text-editor/vscode.md @@ -22,9 +22,9 @@ VS Code 会在未保存的文件后标记一个白点,提示你这个文件编 ![](_assets/vscode保存和自动保存.png) -保存按钮 (红色箭头),也可以用快捷键来保存 `Ctrl + S`。 +保存按钮(红色箭头),也可以用快捷键来保存 `Ctrl + S`。 -开启自动保存 (绿色箭头)。 +开启自动保存(绿色箭头)。 ~~当年 TrMenu 的自动重载治好了我的 autosave~~ diff --git a/src/content/docs/general/process/database/backup.md b/src/content/docs/general/process/database/backup.md index 4054ba9e..2d642a82 100644 --- a/src/content/docs/general/process/database/backup.md +++ b/src/content/docs/general/process/database/backup.md @@ -46,15 +46,15 @@ mysql -u root -p mydb < mydb_backup.sql ## 使用 Navicat 备份 -展开你想要备份的数据库,点击备份,再点击新建备份 +展开你想要备份的数据库,点击备份,再点击新建备份: ![](_assets/35.png) -然后点击备份即可开始备份 +然后点击备份即可开始备份。 ![](_assets/36.png) -中间的命令行提示这一条的时候备份即已完成 +中间的命令行提示这一条的时候备份即已完成。 ![](_assets/37.png) @@ -62,43 +62,43 @@ mysql -u root -p mydb < mydb_backup.sql 当然可以! -右键你的连接,点击编辑连接 +右键你的连接,点击编辑连接: ![](_assets/38.png) -点击数据库,修改这里的设置位置即可让 Navicat 将你的数据库备份到你想要到的地方了 +点击数据库,修改这里的设置位置即可让 Navicat 将你的数据库备份到你想要到的地方了。 ![](_assets/39.png) **如何使用备份?** -右键你想要使用的备份,然后点击还原备份 +右键你想要使用的备份,然后点击还原备份: ![](_assets/40.png) -然后在弹出的界面中点击还原,当命令行出现这句话的时候,数据库就还原成功了 +然后在弹出的界面中点击还原,当命令行出现这句话的时候,数据库就还原成功了。 ![](_assets/41.png) **对于数据量非常大的数据库,备份起来很慢,还容易出错,怎么办?** -遇到这种情况,不用慌张,我们这个时候转储 SQL 文件即可 +遇到这种情况,不用慌张,我们这个时候转储 SQL 文件即可。 -转储 SQL 文件,能够极大降低还原备份时出错、数据缺失的问题 +转储 SQL 文件,能够极大降低还原备份时出错、数据缺失的问题。 -我们右键想要转储为 SQL 文件的数据库,点击转储 SQL 文件,点击结构和数据 +我们右键想要转储为 SQL 文件的数据库,点击转储 SQL 文件,点击结构和数据: ![](_assets/42.png) -之后我们选择一下 SQL 文件的转出位置 +之后我们选择一下 SQL 文件的转出位置, -当命令行出现这句话的时候,即已完成转储 +当命令行出现这句话的时候,即已完成转储。 -之后当我们需要使用备份的时候,我们再次右键那个数据库,点击运行 SQL 文件 +之后当我们需要使用备份的时候,我们再次右键那个数据库,点击运行 SQL 文件: ![](_assets/44.png) -然后找到你之前转储的后缀为 `.sql` 的文件,选中并确定后点击开始。当命令行出现这句话的时候,数据库就还原成功了 +然后找到你之前转储的后缀为 `.sql` 的文件,选中并确定后点击开始。当命令行出现这句话的时候,数据库就还原成功了。 ![](_assets/45.png) @@ -122,7 +122,7 @@ TODO ### 进阶教程:新增备份账号 -> 什么是备份账号?简单来讲,备份账号是 1Panel 面板中不同的存储位置,即 **将备份存储在哪里** +> 什么是备份账号?简单来讲,备份账号是 1Panel 面板中不同的存储位置,即 **将备份存储在哪里**。 TODO @@ -132,23 +132,23 @@ TODO ![](_assets/31.png) -点击自动运行,然后点击新建批处理作业 +点击自动运行,然后点击新建批处理作业: ![](_assets/32.png) -之后分别点击:备份 - 需要备份的数据库名字 - backup 数据库名 +之后分别点击:备份 - 需要备份的数据库名字 - backup 数据库名: 即可添加备份任务 ![](_assets/33.png) -完成这些步骤后点击保存,设置完任务名称后点击设置计划任务 +完成这些步骤后点击保存,设置完任务名称后点击设置计划任务: ![](_assets/34.png) -点击触发器,新建触发器,然后自行设置备份任务时间 +点击触发器,新建触发器,然后自行设置备份任务时间, -最后保存计划任务就大功告成啦 +最后保存计划任务就大功告成啦。 ## 使用 1Panel 面板自动备份 diff --git a/src/content/docs/general/process/database/configure.md b/src/content/docs/general/process/database/configure.md index 5683ec9c..994a290e 100644 --- a/src/content/docs/general/process/database/configure.md +++ b/src/content/docs/general/process/database/configure.md @@ -6,9 +6,9 @@ sidebar: ## MySQL -MySQL 的配置文件在 Windows 中,是 `my.ini` ,默认在 `C:\Program Files\MySQL\MySQL Server X.X` 文件夹中 +MySQL 的配置文件在 Windows 中,是 `my.ini`,默认在 `C:\Program Files\MySQL\MySQL Server X.X` 文件夹中。 -而 Linux 中,是 `my.cnf` ,默认路径为 `/etc/my.cnf` +而 Linux 中,是 `my.cnf`,默认路径为 `/etc/my.cnf`。
示例配置文件 @@ -230,15 +230,15 @@ innodb_lock_wait_timeout = 120 :::caution -绝对不要直接把示例配置文件直接复制粘贴进你的配置文件当中 +绝对不要直接把示例配置文件直接复制粘贴进你的配置文件当中, -否则有可能会导致数据库无法启动 +否则有可能会导致数据库无法启动。 -正确的做法是看完注释之后根据自己的需要,自行去修改配置文件,然后重启或重载 MySQL 服务 +正确的做法是看完注释之后根据自己的需要,自行去修改配置文件,然后重启或重载 MySQL 服务。 ::: -此外,还有一些十分重要的配置项,建议修改,没有的配置项可以自行在配置文件中添加 +此外,还有一些十分重要的配置项,建议修改,没有的配置项可以自行在配置文件中添加。 :::note diff --git a/src/content/docs/general/process/database/install.md b/src/content/docs/general/process/database/install.md index 4d5c011c..860d0348 100644 --- a/src/content/docs/general/process/database/install.md +++ b/src/content/docs/general/process/database/install.md @@ -6,7 +6,7 @@ sidebar: ## Windows 直接安装 -你可以选择直接下载安装包来安装,如果觉得麻烦,请看下面的 **使用工具安装** 或 **Linux 命令行安装** +你可以选择直接下载安装包来安装,如果觉得麻烦,请看下面的 **使用工具安装** 或 **Linux 命令行安装**。 :::tip @@ -16,15 +16,15 @@ sidebar: ::: -对于 Windows 用户,请下载 `.msi` 或 `zip` 的包,其中 `.msi` 是安装包,`.zip` 是绿色版,推荐下载 `.msi` 版本来安装 +对于 Windows 用户,请下载 `.msi` 或 `zip` 的包,其中 `.msi` 是安装包,`.zip` 是绿色版,推荐下载 `.msi` 版本来安装。 对于 MySQL 安装,请看这篇文章:[2024 年 MySQL 8.0 安装 配置 教程 最简易 (保姆级)](https://blog.csdn.net/m0_52559040/article/details/121843945) -在下载的时候请务必注意自己的系统、架构等是否与安装包上标的匹配 +在下载的时候请务必注意自己的系统、架构等是否与安装包上标的匹配! ## Linux 命令行安装 -本部分讲解在命令行中安装常见数据库的方式。本教程以 Ubuntu 24.04 系统为例 +本部分讲解在命令行中安装常见数据库的方式。本教程以 Ubuntu 24.04 系统为例。 ### MySQL @@ -77,7 +77,7 @@ systemctl enable mysql mysql -uroot -p ``` -按提示输入密码登录到 MySQL +按提示输入密码登录到 MySQL: ![](_assets/linux/database/4.png) @@ -87,7 +87,7 @@ mysql -uroot -p ALTER user 'root'@'localhost' IDENTIFIED BY 'NewPassword'; ``` -将 NewPassword 修改为你自己设置的密码 +将 NewPassword 修改为你自己设置的密码。 **至此,MySQL 安装已经完成。** @@ -103,7 +103,7 @@ ALTER user 'root'@'localhost' IDENTIFIED BY 'NewPassword'; CREATE DATABASE IF NOT EXISTS XXX DEFAULT CHARACTER SET utf8mb4; ``` -这里的 XXX 可以选择是你要使用数据库的插件名称也可以是自定义字符 +这里的 XXX 可以选择是你要使用数据库的插件名称也可以是自定义字符。 #### 创建用户 @@ -123,9 +123,9 @@ UserName 填写用户名, `%` 代表所有 IP 地址,如果 Minecraft 服务端和数据库处于同一个服务器,建议改成 localhost 以增加安全性, -Password 填写用户的密码 (由于安全性设置,密码必须有大小写长度 8 位以上,并且默认关闭远程访问) +Password 填写用户的密码(由于安全性设置,密码必须有大小写长度 8 位以上,并且默认关闭远程访问) -如果需要设置密码强度为低,开启远程访问等不安全的操作请自行百度,对于修改安全设置之后的数据库安全问题,本站概不负责 +如果需要设置密码强度为低,开启远程访问等不安全的操作请自行百度,对于修改安全设置之后的数据库安全问题,本站概不负责。 ::: @@ -141,17 +141,17 @@ apt update apt install redis -y ``` -安装完成后输入 `systemctl start redis-server` +安装完成后输入 `systemctl start redis-server`。 ![](_assets/linux/database/5.png) -至此安装完成,输入 `redis-cli` 即可进入命令行管理 +至此安装完成,输入 `redis-cli` 即可进入命令行管理。 ![](_assets/linux/database/6.png) :::tip -使用 `systemctl enable redis-server` 使 Redis 开机自启 +使用 `systemctl enable redis-server` 使 Redis 开机自启。 ![](_assets/linux/database/7.png) @@ -159,13 +159,13 @@ apt install redis -y ## 使用工具安装 -我会告诉你 **我认为** 最简单的几种安装数据库的方法 +我会告诉你 **我认为** 最简单的几种安装数据库的方法。 ### 小皮数据库 :::note -小皮数据库仅支持 Windows 系统 +小皮数据库仅支持 Windows 系统。 ::: @@ -189,7 +189,7 @@ apt install redis -y
卸载 MySQL5 和安装 MySQL8 -MySQL5 版本太低了,很多插件需要更高版本的,装 MySQL8 就够用了 +MySQL5 版本太低了,很多插件需要更高版本的,装 MySQL8 就够用了。 ![](_assets/7.png) @@ -200,7 +200,7 @@ MySQL5 版本太低了,很多插件需要更高版本的,装 MySQL8 就够
初次启动 -安装好后在首页启动 MySQL +安装好后在首页启动 MySQL: ![](_assets/9.png) @@ -220,7 +220,7 @@ MySQL5 版本太低了,很多插件需要更高版本的,装 MySQL8 就够 ![](_assets/11.png) -然后你就可以建数据库了,建好之后把你填这里的信息填到插件的配置文件里 +然后你就可以建数据库了,建好之后把你填这里的信息填到插件的配置文件里。
@@ -228,7 +228,7 @@ MySQL5 版本太低了,很多插件需要更高版本的,装 MySQL8 就够 :::note -宝塔面板支持 Windows 和 Linux 系统 +宝塔面板支持 Windows 和 Linux 系统。 ::: @@ -251,13 +251,13 @@ MySQL5 版本太低了,很多插件需要更高版本的,装 MySQL8 就够 ![](_assets/19.png) -宝塔面板是必须要绑定账号的 +宝塔面板是必须要绑定账号的。 -按照提示去做 +按照提示去做: ![](_assets/20.png) -全 x 掉,一个都不需要装 +全 x 掉,一个都不需要装。 ![](_assets/21.png) @@ -278,7 +278,7 @@ MySQL5 版本太低了,很多插件需要更高版本的,装 MySQL8 就够 :::caution -1Panel 面板目前仅支持 Linux 系统,不支持 Windows 系统 +1Panel 面板目前仅支持 Linux 系统,不支持 Windows 系统。 ::: diff --git a/src/content/docs/general/process/database/intro.md b/src/content/docs/general/process/database/intro.md index beebb5d3..0eddb5c2 100644 --- a/src/content/docs/general/process/database/intro.md +++ b/src/content/docs/general/process/database/intro.md @@ -16,7 +16,7 @@ sidebar: 1. 数据库的备份维护等所占用的时间远比将整个服务器停止后打包压缩备份快得多; -2. 同样的数据量,MySQL 比 YAML/txt/SQLite 等占用也小得多。特别是对于数据量大的插件 (30 GB 的 dynmap 文件使用 MySQL 后整个数据库将压缩到 15 GB); +2. 同样的数据量,MySQL 比 YAML/txt/SQLite 等占用也小得多。特别是对于数据量大的插件(30 GB 的 dynmap 文件使用 MySQL 后整个数据库将压缩到 15 GB); 3. 读取速度快,某些插件使用 YAML 储存数据时启动一个插件甚至需要 10 s 以上,换用 MySQL 后服务器启动速度变快; diff --git a/src/content/docs/general/process/database/uninstall.md b/src/content/docs/general/process/database/uninstall.md index a1167b1a..bc782fab 100644 --- a/src/content/docs/general/process/database/uninstall.md +++ b/src/content/docs/general/process/database/uninstall.md @@ -4,7 +4,7 @@ sidebar: order: 6 --- -当你乱捣鼓一通,然后给你数据库整炸了,还不会修,那除了花钱请大佬最好的办法就是删掉重新安装 +当你乱捣鼓一通,然后给数据库整炸了,你还不会修,那除了花钱请大佬最好的办法就是删掉重新安装。 ## 宝塔面板 @@ -20,30 +20,30 @@ TODO ## Windows 平台 -首先,通过 PHPStudy 的控制面板,找到 MySQL 服务,并点击“暂停”按钮 +首先,通过 PHPStudy 的控制面板,找到 MySQL 服务,并点击“暂停”按钮。 -之后,找到 PHPStudy 的安装目录,找到 MySQL 的安装文件夹 +之后,找到 PHPStudy 的安装目录,找到 MySQL 的安装文件夹。 -注:通常命名为:MySQL 或者 mysqlXX(XX 为版本号) +注:通常命名为:MySQL 或者 mysqlXX(XX 为版本号)。 -然后直接删除这个文件夹 +然后直接删除这个文件夹。 -接下来,我们需要清理配置(清理方式可选择手动注释或者删除)文件(位于安装目录的 conf 文件夹下,数据库的配置文件名称为 mysql.conf) +接下来,我们需要清理配置(清理方式可选择手动注释或者删除)文件(位于安装目录的 conf 文件夹下,数据库的配置文件名称为 mysql.conf)。 -最后,我们重新启动 PHPStudy +最后,我们重新启动 PHPStudy。 ## Linux 平台 -首先,点击左侧面板的数据库,进入数据库列表管理页面 +首先,点击左侧面板的数据库,进入数据库列表管理页面。 -之后,选择需要的数据库,并点击删除 +之后,选择需要的数据库,并点击删除。 -最后,在弹出的提示框中点击确定,即可删除数据库 +最后,在弹出的提示框中点击确定,即可删除数据库。 ## 暴力删除 也许我们会遇到:用温和的方式弄不干净数据库的尸体,这尸体又影响我重新安装数据库了 -那就暴力的删干净吧 +那就暴力的删干净吧! TODO diff --git a/src/content/docs/general/process/database/use.md b/src/content/docs/general/process/database/use.md index 6fb37b81..274df890 100644 --- a/src/content/docs/general/process/database/use.md +++ b/src/content/docs/general/process/database/use.md @@ -6,15 +6,15 @@ sidebar: ## 使用数据库管理软件管理 -你要知道,在 数据库安装 那一栏。虽然有两种截然不同的方式安装数据库 +你要知道,在 数据库安装 那一栏。虽然有两种截然不同的方式安装数据库, -但是你安装的数据库,实质上都安装的是同一个东西,只不过管理工具不同 +但是你安装的数据库,实质上都安装的是同一个东西,只不过管理工具不同。 -什么是 **管理工具** ?就是帮助你方便管理你的数据库一类工具软件 +什么是 **管理工具** ?就是帮助你方便管理你的数据库一类工具软件。 -像宝塔这种运维面板、Navicat 这种数据库管理软件给数据库提供了 创建,删除,备份 等基础操作 (有图形界面),让你无需学会数据库指令操作,就可以管理你的数据库 +像宝塔这种运维面板、Navicat 这种数据库管理软件给数据库提供了 创建,删除,备份 等基础操作 (有图形界面),让你无需学会数据库指令操作,就可以管理你的数据库。 -当然,这并不是说你只能用这些工具管理数据库了,你仍然可以使用指令控制你的数据库 (无图形界面) +当然,这并不是说你只能用这些工具管理数据库了,你仍然可以使用指令控制你的数据库 (无图形界面)。 ### Navicat @@ -24,7 +24,7 @@ sidebar: ::: -**Navicat** 是一款企业级的简单易用的数据库管理软件 +**Navicat** 是一款企业级的简单易用的数据库管理软件。 #### 优势 @@ -43,7 +43,7 @@ sidebar:
连接数据库 -点击连接,并选择你想要连接的数据库的类型 +点击连接,并选择你想要连接的数据库的类型。 ![](_assets/25.png) @@ -61,13 +61,13 @@ sidebar: ![](_assets/26.png) -填写完毕后点击确定即可 +填写完毕后点击确定即可。 -顺利的话,点开数据库后会显示一个绿色图标的海豚,并列出内部的数据库 +顺利的话,点开数据库后会显示一个绿色图标的海豚,并列出内部的数据库。 ![](_assets/27.png) -否则他会报错 +否则他会报错。 一般有这几种情况导致连接不上: @@ -86,7 +86,7 @@ sidebar:
创建数据库 -右键数据库图标,点击新建数据库 +右键数据库图标,点击新建数据库: ![](_assets/28.png) @@ -100,7 +100,7 @@ sidebar: ![](_assets/29.png) -然后点击确定即可创建数据库 +然后点击确定即可创建数据库。
@@ -114,7 +114,7 @@ GitHub https://github.com/HeidiSQL/HeidiSQL ::: -**HeidiSQL** 是一款开源的简易数据库管理软件 +**HeidiSQL** 是一款开源的简易数据库管理软件。 #### 优势 @@ -145,9 +145,9 @@ TODO ### 宝塔面板 -宝塔面板实际上是一种 Linux 运维管理面板,同时兼有数据库管理功能 +宝塔面板实际上是一种 Linux 运维管理面板,同时兼有数据库管理功能。 -推荐 Linux 用户使用 +推荐 Linux 用户使用。 #### 教程 @@ -160,7 +160,7 @@ TODO ## 手动管理 -PS: 这年头谁还用指令管理数据库啊 +PS: 这年头谁还用指令管理数据库啊! :::note @@ -171,7 +171,7 @@ CREATE DATABASE <数据库名称> CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ ``` 解释:`CHARACTER SET utf8mb4` 将数据库字符集设置为 utf8mb4,能够存储包括表情符号在内的所有 Unicode 字符。 -`utf8mb4_general_ci` 是一种不区分大小写 (case-insensitive) 的排序规则,如果你想区分大小写,可以改为 `utf8mb4_bin`,`_bin` 意为以二进制方式比较字符。 +`utf8mb4_general_ci` 是一种不区分大小写(case-insensitive)的排序规则,如果你想区分大小写,可以改为 `utf8mb4_bin`,`_bin` 意为以二进制方式比较字符。 ::: @@ -179,15 +179,15 @@ TODO ## 插件连接数据库 -下面,我们来演示一下怎么让插件连接上数据库 +下面,我们来演示一下怎么让插件连接上数据库。 我们以 MySQL 为例: -这是一般插件的数据库配置项 +这是一般插件的数据库配置项: ![](_assets/30.png) -我们来一一介绍他们的用途 +我们来一一介绍他们的用途: - enabled: 是否启用 MySQL 存储数据?如果是请填 `true`,否则填 `false`,默认是 `false`,而且有些插件是直接让你填写数据库类型的,默认是 SQLite。 对于这种配置文件,请把 SQLite 改成 MySQL 或者其他你使用的数据库名。 @@ -218,4 +218,4 @@ TODO - 数据库连接数满了 -请结合报错分析原因 +请结合报错分析原因。 diff --git a/src/content/docs/general/process/deploy/purchase-server.md b/src/content/docs/general/process/deploy/purchase-server.md index 8dfe0586..37448a99 100644 --- a/src/content/docs/general/process/deploy/purchase-server.md +++ b/src/content/docs/general/process/deploy/purchase-server.md @@ -12,17 +12,17 @@ sidebar: ::: -搭建 Minecraft 服务器对服务器的 CPU 性能、内存大小、硬盘 I/O 速度和网络质量,网络带宽均有较高的要求。 +搭建 Minecraft 服务器对服务器的 CPU 性能、内存大小、硬盘 I/O 速度、网络质量和网络带宽均有较高的要求。 ## 云服务器 -如果你的服务器不是自己购买的而是从服务商处租用的,比如 VPS 或面板。至于这到底是什么,下一章会讲解。 +如果你的服务器不是自己购买的而是从服务商处租用的(比如 VPS 或面板),至于这到底是什么,下一章会讲解。 ### CPU #### 核心数 -总的说来,核心数量要根据玩家数量,服务器性质,预算选择。 +总的说来,核心数量要根据玩家数量、服务器性质、预算选择。 @@ -36,7 +36,7 @@ sidebar: 对于多端,核心数量主要取决于总人数,每 100 玩家多加 4 - 8 个核心是较为合理的。 -而 Folia 官方推荐的配置在 16 核心以上,如果是新手或对现有插件有严重依赖的不推荐使用,生态较差。 +而 Folia 官方推荐的配置在 16 核心以上,如果是新手或对现有插件有严重依赖的,不推荐使用,生态较差。 #### CPU 单核性能 @@ -46,7 +46,7 @@ sidebar: CPU 总占用不算高时,Minecraft 的服务器性能与 CPU 单核性能几乎为线性关系,单核性能翻倍几乎就可以多带一倍 **甚至更多** 的人。 -尽量选择不超开的云 (如上图,图中 50% 的性能差就在于低价云超开导致性能下降,不要贪图便宜,服务器到手后要自己跑分) +尽量选择不超开的云(如上图,图中 50% 的性能差就在于低价云超开导致性能下降,不要贪图便宜,服务器到手后要自己跑分)。 不超过 20 人时为节省成本可以使用 E5 主机,而单端人数多于 20 基本就意味着需要牺牲玩家的游戏体验或者需要换更好的 CPU。 @@ -54,13 +54,13 @@ CPU 总占用不算高时,Minecraft 的服务器性能与 CPU 单核性能几 :::note -内存几乎不用考虑 DDR4 / DDR5,高频/低频内存的区别,最重要的是内存大小。 +内存几乎不用考虑 DDR4 / DDR5、高频/低频内存的区别,最重要的是内存大小。 使用高频 DDR5 内存和 DDR4 内存开服基本没有差别,如果是自己买的服务器托管的就省点钱吧。 ::: -一般来说,mod 服比插件服占用高,高版本比低版本略高。尽量选择核心数与内存比例在 1:2 以上的套餐 (推荐 1:2 - 1:4)。 +一般来说,mod 服比插件服占用高,高版本比低版本略高。尽量选择核心数与内存比例在 1:2 以上的套餐(推荐 1:2 - 1:4)。 一方面,核心多内存少必然面临性能下降。另一方面,核心多内存少基本为超开,性能会比正常情况下差很多。 @@ -68,7 +68,7 @@ CPU 总占用不算高时,Minecraft 的服务器性能与 CPU 单核性能几 :::caution -并不是人越多需要的内存越多,不建议分配过多内存,否则导致 GC (内存垃圾回收) 时间过长导致 [卡顿](/general/basics/what-is-lag)。 +并不是人越多需要的内存越多,不建议分配过多内存,否则导致 GC(内存垃圾回收)时间过长,引发 [卡顿](/general/basics/what-is-lag)。 ::: @@ -76,9 +76,9 @@ CPU 总占用不算高时,Minecraft 的服务器性能与 CPU 单核性能几 根据玩家数量及视野情况分配。一般情况低版本全默认情况下平均每个玩家会使用 0.25 Mbps - 0.4 Mbps 的上行带宽。 -1.18 以上服务器平均每人使用 0.3 Mbps - 0.5 Mbps 上行带宽 (一群跑图佬另说) 也就是说一般提供的 10 M 带宽够带 15 - 20 人。 +1.18 以上服务器平均每人使用 0.3 Mbps - 0.5 Mbps 上行带宽(一群跑图佬另说)。也就是说,一般提供的 10 M 带宽够带 15 - 20 人。 -同样的有的服务商会提供所谓“共享上行”,有时会出现其他用户传文件,VPS 所在宿主机所有用户都变卡的情况,建议无论如何搞到一个独享带宽保底。 +同样的,有的服务商会提供所谓“共享上行”,有时会出现其他用户传文件,VPS 所在宿主机所有用户都变卡的情况,建议无论如何搞到一个独享带宽保底。 需要注意的是,想要家庭带宽开服要考虑到吃 DDoS 和部分运营商不提供公网或者公网上行速度非常慢的情况,只建议基友服使用,或者配合 frp 等流量转发方式使用。 @@ -87,7 +87,7 @@ CPU 总占用不算高时,Minecraft 的服务器性能与 CPU 单核性能几 Windows 系统一般有 Windows Server,它和普通的 Windows 系统操作没有什么区别,只要用过 Windows 就能快速上手,但是 Windows 系统相对占用系统资源更高。 Linux 系统常见的有 Ubuntu、CentOS 和 Debian。我们日常很少接触 Linux 系统,所以你可能需要事先学习 Linux 系统的操作。Linux 系统占用系统资源更低。 -如果希望长期开服,强烈推荐使用 Linux 系统 (如 Ubuntu/CentOS 等),因为它不仅占用系统资源更低,而且由于其系统本身机制与 Windows 不同,长期运行要比 Windows 系统稳定得多。 +如果希望长期开服,强烈推荐使用 Linux 系统(如 Ubuntu/CentOS 等),因为它不仅占用系统资源更低,而且由于其系统本身机制与 Windows 不同,长期运行要比 Windows 系统稳定得多。 很多时候一些服务器软件也仅支持 Linux。 ## 物理机 @@ -98,19 +98,19 @@ Linux 系统常见的有 Ubuntu、CentOS 和 Debian。我们日常很少接触 L ### CPU -通常除非你有明确的需求,不建议为了开 MC 服务器而购买任何 E5 (洋垃圾)、至强金银铜牌和 EPYC 的服务器 CPU。优先选用英特尔酷睿和 AMD 锐龙 CPU。由于 MC 服务器对单核要求非常高,所以尽可能选择新款高频版本的 CPU。 +通常除非你有明确的需求,不建议为了开 MC 服务器而购买任何 E5(洋垃圾)、至强金银铜牌和 EPYC 的服务器 CPU。优先选用英特尔酷睿和 AMD 锐龙 CPU。由于 MC 服务器对单核要求非常高,所以尽可能选择新款高频版本的 CPU。 区分的方式是英特尔 CPU 后面带 K,比如 10600K、12700KF,AMD 的 CPU 后面带 X,比如 5600X、7950X。级别更高的 CPU 往往核心数和单核性能都更高。要开的服务器规模越大,就越有必要选购更高端的 CPU。 比如要开一个小型的服务器,使用 10300F 即可;要开一个大型的服务器,你可能必须要用 12700KF 才够用。 为服务器选择 CPU 并不需要带核显。核显是 CPU 自带的显卡,可以为主板 I/O 面板上自带的显示接口提供显示输出功能,并提供一定的图形渲染功能。 由于 MC 服务器所有渲染图像的工作都由玩家的设备自行完成,所以服务器不需要任何显卡的性能,你的显卡只需要保证能够进行视频输出即可,也就是“亮机卡”。如果你手里已经有现成的低性能的显卡,你可以直接购买不带核显的 CPU,比如带 F 的英特尔 CPU。 -如果没有低性能的 CPU,比如你手里有一张闲置的 2070 ~~(谁会手里有了 2070 还闲置啊)~~,那么除非你有特殊的需求,比如除了开服还用服务器跑 AI,就不建议把这张显卡放到服务器上使用,这种显卡待机情况下功耗更高,导致你家电表转得更快。 +如果没有低性能的 CPU,比如你手里有一张闲置的 2070 ~~(谁会手里有了 2070 还闲置啊)~~,那么除非你有特殊的需求,比如除了开服还用服务器跑 AI,就不建议把这张显卡放到服务器上使用,这种显卡待机情况下功耗更高,导致你家电表转得更快。 :::caution -做高版本生存服务器,买实体机千万不要考虑 E5 这种洋垃圾,否则你会吃大亏,切记!!! +做高版本生存服务器,买实体机千万不要考虑 E5 这种洋垃圾,否则你会吃大亏,切记! -另外,13700K、13700KF、13900K、13900KF、14700K、14700KF、14900K、14900K 几款 CPU 被曝出由于其主频过高而导致不稳定 (运行软件时软件出错,这可能导致你的服务器崩溃甚至损坏) 的问题,建议开服暂时不使用。 +另外,13700K、13700KF、13900K、13900KF、14700K、14700KF、14900K、14900K 几款 CPU 被曝出由于其主频过高而导致不稳定(运行软件时软件出错,这可能导致你的服务器崩溃甚至损坏)的问题,建议开服暂时不使用。 ::: @@ -126,10 +126,10 @@ Linux 系统常见的有 Ubuntu、CentOS 和 Debian。我们日常很少接触 L 虽然是服务器,但是毕竟游戏服务器,需要的内存也是非常高的。通常不推荐购买“刚好够用”的内存容量,因为你的需求会随着服务器规模的扩大逐渐提高,导致后期你可能需要对内存进行升级或更换。如果不是预算非常紧张,建议先购买 CPU 所支持的最大内存容量的一半,数量为主板内存插槽数量的一半,后期需要扩容时,直接购买 **同品牌、同系列、同参数** 的内存加装。 -MC 服务器对内存的频率和时序几乎没有任何要求 (https://www.minebbs.com/threads/_cpu.17729)。 +MC 服务器对内存的频率和时序几乎没有任何要求(https://www.minebbs.com/threads/_cpu.17729)。 所以你可以选择更便宜的低频内存,例如 DDR3 的 1333 MHz、DDR4 的 2666 MHz、DDR5 的 4800 MHz。 -由于各内存颗粒工厂的产量 (~~失火频率~~) 不同,内存的价格会随时间出现变化。如果你时间充足,可以多关注数码资讯,选择最合适的时机抢购内存。 +由于各内存颗粒工厂的产量(~~失火频率~~)不同,内存的价格会随时间出现变化。如果你时间充足,可以多关注数码资讯,选择最合适的时机抢购内存。 ### 硬盘 @@ -139,11 +139,11 @@ MC 服务器对内存的频率和时序几乎没有任何要求 (https://www.min 选购固态硬盘时,需要注意以下事项: -1. **数据无价!!!**,不要选择小厂品牌的固态硬盘,尽可能选择大品牌,比如三星、长江、铠侠 (东芝)、西数、爱国者、英特尔。希捷和金士顿的固态硬盘虽然性价比不高,但是如果你有明确的需求,也不失为一种选择。 +1. **数据无价!** 不要选择小厂品牌的固态硬盘,尽可能选择大品牌,比如三星、长江、铠侠(东芝)、西数、爱国者、英特尔。希捷和金士顿的固态硬盘虽然性价比不高,但是如果你有明确的需求,也不失为一种选择。 2. 固态硬盘的价格和内存一样存在较大波动。 -3. 不建议选择二手固态硬盘!你有很大的可能性买到矿盘(可以理解为 写入量较大的硬盘)。如果非要购买,请注意备份! +3. 不建议选择二手固态硬盘!你有很大的可能性买到矿盘(可以理解为写入量较大的硬盘)。如果非要购买,请注意备份! 选购机械硬盘时,需要注意以下事项: -1. 机械硬盘的 I/O 速度 远低于固态硬盘,不要只因为机械硬盘便宜,就去选购机械硬盘! -2. 不要去选择二手机械硬盘,如有购买,建议多备份或组 RAID 使用(RAID 0 除外)! +1. 机械硬盘的 I/O 速度远低于固态硬盘,不要只因为机械硬盘便宜,就去选购机械硬盘! +2. 不要去选择二手机械硬盘,如有购买,建议多备份或组 RAID 使用(RAID 0 除外)! \ No newline at end of file From 6c0c3105182fba2f843152a664ed19168a7a5cd6 Mon Sep 17 00:00:00 2001 From: momo-OwO-qwq Date: Fri, 3 Apr 2026 21:58:24 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=F0=9F=8E=A8=20=E7=BB=9F=E4=B8=80=20astro.c?= =?UTF-8?q?onfig=20=E7=BC=A9=E8=BF=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astro.config.ts | 2140 +++++++++++++++++++++++------------------------ 1 file changed, 1070 insertions(+), 1070 deletions(-) diff --git a/astro.config.ts b/astro.config.ts index c0410097..e00016a5 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -14,1097 +14,1097 @@ import vue from "@astrojs/vue"; const IS_CHINA_SITE = process.env.CHINA === "true"; export default defineConfig({ - site: IS_CHINA_SITE ? "https://nitwikit.8aka.cn" : "https://nitwikit.8aka.org", - outDir: "./build", - integrations: [ - vue(), - starlight({ - title: "Cubic Wiki", - description: "一群笨蛋编写的 Minecraft 开服教程", - locales: { - root: { - label: "简体中文", - lang: "zh-CN" + site: IS_CHINA_SITE ? "https://nitwikit.8aka.cn" : "https://nitwikit.8aka.org", + outDir: "./build", + integrations: [ + vue(), + starlight({ + title: "Cubic Wiki", + description: "一群笨蛋编写的 Minecraft 开服教程", + locales: { + root: { + label: "简体中文", + lang: "zh-CN" + } + }, + favicon: "/favicon.ico", + social: [{ icon: "github", label: "GitHub", href: "https://github.com/Cubic-Project/NitWikit" }], + logo: { src: "./src/assets/logo.svg" }, + lastUpdated: true, + editLink: { + baseUrl: "https://github.com/Cubic-Project/NitWikit/edit/main/" + }, + customCss: ["./src/styles/global.css"], + plugins: [ + starlightGiscus({ + repo: "Cubic-Project/NitWikit", + repoId: "R_kgDOQWQ-Ng", + category: "General", + categoryId: "DIC_kwDOQWQ-Ns4Cx2No", + mapping: "og:title", + lazy: true + }), + starlightSidebarTopics( + [ + { + label: "基础", + link: "/general/intro", + icon: "seti:bazel", + id: "basics", + items: [ + { + label: "从零开始", + collapsed: false, + items: [{ label: "快速开始", slug: "general/intro" }, "general/reading-guide"] + }, + { + label: "通用知识库", + collapsed: true, + items: [ + { + label: "安装 Java", + collapsed: true, + items: [ + "general/java/intro", + "general/java/choose-and-download-and-install-java", + "general/java/environment", + "general/java/sdkman", + "general/java/faq" + ] + }, + { + label: "文本编辑器", + collapsed: true, + autogenerate: { directory: "general/preparation/text-editor" } + }, + { + label: "经营管理", + collapsed: true, + items: [ + "general/advance/management/intro", + { + label: "玩家管理", + autogenerate: { + directory: "general/advance/management/player-management" + } + }, + { + label: "资金管理", + autogenerate: { + directory: "general/advance/management/money-management" + } + } + ] + } + ] } + ] }, - favicon: "/favicon.ico", - social: [{ icon: "github", label: "GitHub", href: "https://github.com/Cubic-Project/NitWikit" }], - logo: { src: "./src/assets/logo.svg" }, - lastUpdated: true, - editLink: { - baseUrl: "https://github.com/Cubic-Project/NitWikit/edit/main/" - }, - customCss: ["./src/styles/global.css"], - plugins: [ - starlightGiscus({ - repo: "Cubic-Project/NitWikit", - repoId: "R_kgDOQWQ-Ng", - category: "General", - categoryId: "DIC_kwDOQWQ-Ns4Cx2No", - mapping: "og:title", - lazy: true - }), - starlightSidebarTopics( - [ + { + label: "Java", + link: "/java/intro", + icon: "open-book", + items: [ + { + label: "快速开始", + collapsed: false, + items: ["java/intro"] + }, + { + label: "准备工作", + items: [ + "java/preparation/intro", + { + label: "安装 Java", + collapsed: true, + items: [ + "general/java/intro", + "general/java/choose-and-download-and-install-java", + "general/java/environment", + "general/java/sdkman", + "general/java/faq" + ] + }, + { + label: "文本编辑器", + collapsed: true, + autogenerate: { directory: "general/preparation/text-editor" } + } + ] + }, + { + label: "开始阶段", + items: [ + "java/start/intro", + { + label: "基础知识", + collapsed: true, + items: [ + "java/start/basic/intro", + "java/start/basic/what-is-server", + "java/start/basic/server-management-command" + ] + }, + { + label: "选择服务器端", + collapsed: true, + items: [ + "java/start/server-core-choose/intro", + "java/start/server-core-choose/relationship-between-servers", + "java/start/server-core-choose/plugin", + "java/start/server-core-choose/mod", + "java/start/server-core-choose/hybrid", { - label: "基础", - link: "/general/intro", - icon: "seti:bazel", - id: "basics", - items: [ - { - label: "从零开始", - collapsed: false, - items: [{ label: "快速开始", slug: "general/intro" }, "general/reading-guide"] - }, - { - label: "通用知识库", - collapsed: true, - items: [ - { - label: "安装 Java", - collapsed: true, - items: [ - "general/java/intro", - "general/java/choose-and-download-and-install-java", - "general/java/environment", - "general/java/sdkman", - "general/java/faq" - ] - }, - { - label: "文本编辑器", - collapsed: true, - autogenerate: { directory: "general/preparation/text-editor" } - }, - { - label: "经营管理", - collapsed: true, - items: [ - "general/advance/management/intro", - { - label: "玩家管理", - autogenerate: { - directory: "general/advance/management/player-management" - } - }, - { - label: "资金管理", - autogenerate: { - directory: "general/advance/management/money-management" - } - } - ] - } - ] - } - ] + label: "Folia", + collapsed: true, + autogenerate: { directory: "java/start/server-core-choose/folia" } + } + ] + }, + "java/start/install-mod-server", + "java/start/launch-server", + "java/start/server-dir-structure", + "java/start/config-server", + "java/start/connect-to-server", + { + label: "部署到生产环境", + collapsed: true, + autogenerate: { directory: "general/process/deploy" } + } + ] + }, + { + label: "建设与运营", + items: [ + "java/process/intro", + { + label: "插件", + collapsed: true, + items: [ + "java/process/plugin/intro", + { + label: "前言与基础", + collapsed: true, + items: [ + "java/process/plugin/more/intro", + "java/process/plugin/more/plugin-download", + { + label: "YAML", + collapsed: true, + items: [ + "java/process/plugin/more/yaml/intro", + "java/process/plugin/more/yaml/general", + "java/process/plugin/more/yaml/extention" + ] + }, + "java/process/plugin/more/color-message", + "java/process/plugin/more/plugin-abbreviation", + "java/process/plugin/more/plugin-backdoor", + { + label: "插件构建", + collapsed: true, + items: [ + "java/process/plugin/more/plugin-build/intro", + "java/process/plugin/more/plugin-build/idea-build", + "java/process/plugin/more/plugin-build/terminal-build", + "java/process/plugin/more/plugin-build/github-actions-build", + "java/process/plugin/more/plugin-build/mirror-config" + ] + }, + "java/process/plugin/more/plugin-config", + "java/process/plugin/more/plugin-troubleshooting", + "java/process/plugin/more/faq", + "java/process/plugin/more/plugin-signature-file", + "java/process/plugin/more/tittle-tattle" + ] }, { - label: "Java", - link: "/java/intro", - icon: "open-book", - items: [ - { - label: "快速开始", - collapsed: false, - items: ["java/intro"] - }, - { - label: "准备工作", - items: [ - "java/preparation/intro", - { - label: "安装 Java", - collapsed: true, - items: [ - "general/java/intro", - "general/java/choose-and-download-and-install-java", - "general/java/environment", - "general/java/sdkman", - "general/java/faq" - ] - }, - { - label: "文本编辑器", - collapsed: true, - autogenerate: { directory: "general/preparation/text-editor" } - } - ] - }, - { - label: "开始阶段", - items: [ - "java/start/intro", - { - label: "基础知识", - collapsed: true, - items: [ - "java/start/basic/intro", - "java/start/basic/what-is-server", - "java/start/basic/server-management-command" - ] - }, - { - label: "选择服务器端", - collapsed: true, - items: [ - "java/start/server-core-choose/intro", - "java/start/server-core-choose/relationship-between-servers", - "java/start/server-core-choose/plugin", - "java/start/server-core-choose/mod", - "java/start/server-core-choose/hybrid", - { - label: "Folia", - collapsed: true, - autogenerate: { directory: "java/start/server-core-choose/folia" } - } - ] - }, - "java/start/install-mod-server", - "java/start/launch-server", - "java/start/server-dir-structure", - "java/start/config-server", - "java/start/connect-to-server", - { - label: "部署到生产环境", - collapsed: true, - autogenerate: { directory: "general/process/deploy" } - } - ] - }, - { - label: "建设与运营", - items: [ - "java/process/intro", - { - label: "插件", - collapsed: true, - items: [ - "java/process/plugin/intro", - { - label: "前言与基础", - collapsed: true, - items: [ - "java/process/plugin/more/intro", - "java/process/plugin/more/plugin-download", - { - label: "YAML", - collapsed: true, - items: [ - "java/process/plugin/more/yaml/intro", - "java/process/plugin/more/yaml/general", - "java/process/plugin/more/yaml/extention" - ] - }, - "java/process/plugin/more/color-message", - "java/process/plugin/more/plugin-abbreviation", - "java/process/plugin/more/plugin-backdoor", - { - label: "插件构建", - collapsed: true, - items: [ - "java/process/plugin/more/plugin-build/intro", - "java/process/plugin/more/plugin-build/idea-build", - "java/process/plugin/more/plugin-build/terminal-build", - "java/process/plugin/more/plugin-build/github-actions-build", - "java/process/plugin/more/plugin-build/mirror-config" - ] - }, - "java/process/plugin/more/plugin-config", - "java/process/plugin/more/plugin-troubleshooting", - "java/process/plugin/more/faq", - "java/process/plugin/more/plugin-signature-file", - "java/process/plugin/more/tittle-tattle" - ] - }, - { - label: "前置", - collapsed: true, - items: [ - "java/process/plugin/plugin-dependencies/intro", - { - label: "PlaceholderAPI", - collapsed: true, - items: [ - "java/process/plugin/plugin-dependencies/placeholderapi/intro", - "java/process/plugin/plugin-dependencies/placeholderapi/common-usage", - "java/process/plugin/plugin-dependencies/placeholderapi/parse-other", - "java/process/plugin/plugin-dependencies/placeholderapi/math", - "java/process/plugin/plugin-dependencies/placeholderapi/string", - "java/process/plugin/plugin-dependencies/placeholderapi/progress", - "java/process/plugin/plugin-dependencies/placeholderapi/javascript", - "java/process/plugin/plugin-dependencies/placeholderapi/check-item", - "java/process/plugin/plugin-dependencies/placeholderapi/change-output", - "java/process/plugin/plugin-dependencies/placeholderapi/faq" - ] - }, - "java/process/plugin/plugin-dependencies/playerpoints", - "java/process/plugin/plugin-dependencies/protocollib", - { - label: "Vault", - collapsed: true, - items: [ - "java/process/plugin/plugin-dependencies/vault/intro", - "java/process/plugin/plugin-dependencies/vault/serviceio", - "java/process/plugin/plugin-dependencies/vault/vaultunlocked" - ] - }, - "java/process/plugin/plugin-dependencies/xconomy" - ] - }, - { - label: "管理", - collapsed: true, - items: [ - { - label: "防破坏", - collapsed: true, - items: [ - "java/process/plugin/management-tool/anti-grief/intro", - "java/process/plugin/management-tool/anti-grief/coreprotect", - "java/process/plugin/management-tool/anti-grief/invseeplusplus", - "java/process/plugin/management-tool/anti-grief/prismrefracted" - ] - }, - { - label: "基础插件", - collapsed: true, - items: [ - "java/process/plugin/management-tool/basic-plugins/intro", - "java/process/plugin/management-tool/basic-plugins/delete", - { - label: "CMI", - collapsed: true, - items: [ - "java/process/plugin/management-tool/basic-plugins/cmi/intro", - "java/process/plugin/management-tool/basic-plugins/cmi/eco", - "java/process/plugin/management-tool/basic-plugins/cmi/question" - ] - }, - { - label: "EssentialsX", - collapsed: true, - items: [ - "java/process/plugin/management-tool/basic-plugins/essentialsx/intro", - "java/process/plugin/management-tool/basic-plugins/essentialsx/config-yml", - "java/process/plugin/management-tool/basic-plugins/essentialsx/config-tips", - "java/process/plugin/management-tool/basic-plugins/essentialsx/warp", - "java/process/plugin/management-tool/basic-plugins/essentialsx/kit", - "java/process/plugin/management-tool/basic-plugins/essentialsx/papi-support", - "java/process/plugin/management-tool/basic-plugins/essentialsx/faq" - ] - }, - "java/process/plugin/management-tool/basic-plugins/sunlight" - ] - }, - { - label: "聊天", - collapsed: true, - items: [ - "java/process/plugin/management-tool/chat/intro", - "java/process/plugin/management-tool/chat/carbon", - "java/process/plugin/management-tool/chat/huskchat", - "java/process/plugin/management-tool/chat/trchat", - "java/process/plugin/management-tool/chat/interactivechat" - ] - }, - { - label: "物品库", - collapsed: true, - items: [ - "java/process/plugin/management-tool/items/intro", - "java/process/plugin/management-tool/items/crucible", - "java/process/plugin/management-tool/items/ecoitems", - "java/process/plugin/management-tool/items/mmoitems", - "java/process/plugin/management-tool/items/neigeitems", - "java/process/plugin/management-tool/items/ratziel", - "java/process/plugin/management-tool/items/sx-item", - "java/process/plugin/management-tool/items/zaphkiel", - "java/process/plugin/management-tool/items/misc" - ] - }, - { - label: "权限", - collapsed: true, - items: [ - "java/process/plugin/management-tool/permission/intro", - "java/process/plugin/management-tool/permission/what-is-permission", - "java/process/plugin/management-tool/permission/group", - "java/process/plugin/management-tool/permission/command", - "java/process/plugin/management-tool/permission/tips", - "java/process/plugin/management-tool/permission/meta" - ] - }, - { - label: "插件管理", - collapsed: true, - items: [ - "java/process/plugin/management-tool/plugin-management/intro", - "java/process/plugin/management-tool/plugin-management/plugin-portal", - "java/process/plugin/management-tool/plugin-management/plugmanx", - "java/process/plugin/management-tool/plugin-management/serverutils", - "java/process/plugin/management-tool/plugin-management/yum" - ] - }, - { - label: "任务", - collapsed: true, - items: [ - "java/process/plugin/management-tool/task/intro", - "java/process/plugin/management-tool/task/beautyquests", - "java/process/plugin/management-tool/task/betonquest", - "java/process/plugin/management-tool/task/chemdah", - "java/process/plugin/management-tool/task/mangoquest", - "java/process/plugin/management-tool/task/playertask", - "java/process/plugin/management-tool/task/questcreator", - "java/process/plugin/management-tool/task/questengine", - "java/process/plugin/management-tool/task/quests", - "java/process/plugin/management-tool/task/typewriter" - ] - } - ] - }, - { - label: "保护", - collapsed: true, - items: [ - "java/process/plugin/protection/intro", - "java/process/plugin/protection/residence", - "java/process/plugin/protection/dominion", - "java/process/plugin/protection/griefdefender", - "java/process/plugin/protection/plotsquared", - "java/process/plugin/protection/askyblock", - "java/process/plugin/protection/bentobox", - "java/process/plugin/protection/towny" - ] - }, - { - label: "世界管理", - collapsed: true, - items: [ - "java/process/plugin/world-management/worldedit", - "java/process/plugin/world-management/worldguard", - "java/process/plugin/world-management/fastasyncworldedit", - "java/process/plugin/world-management/law", - "java/process/plugin/world-management/myworld", - "java/process/plugin/world-management/nobuildplus", - { - label: "大厅", - collapsed: true, - items: [ - "java/process/plugin/world-management/lobby/intro", - "java/process/plugin/world-management/lobby/deluxehub", - "java/process/plugin/world-management/lobby/deluxehubreloaded", - "java/process/plugin/world-management/lobby/superlobbydeluxe" - ] - }, - { - label: "多世界 - Multiverse", - collapsed: true, - items: [ - "java/process/plugin/world-management/multiverse/intro", - "java/process/plugin/world-management/multiverse/faq1", - "java/process/plugin/world-management/multiverse/faq2" - ] - }, - { - label: "世界生成", - collapsed: true, - items: [ - "java/process/plugin/world-management/worldgen/intro", - "java/process/plugin/world-management/worldgen/terra", - "java/process/plugin/world-management/worldgen/irisworldgen", - "java/process/plugin/world-management/worldgen/terraformgenerator" - ] - } - ] - }, - { - label: "游戏性", - collapsed: true, - items: [ - "java/process/plugin/game/dragoncore", - "java/process/plugin/game/germengine", - "java/process/plugin/game/nova", - { - label: "Slimefun", - collapsed: true, - items: [ - "java/process/plugin/game/slimefun/intro", - "java/process/plugin/game/slimefun/auto-update", - "java/process/plugin/game/slimefun/find-lag", - "java/process/plugin/game/slimefun/resourcepack-for-slimefun" - ] - }, - { - label: "称号", - collapsed: true, - items: [ - "java/process/plugin/game/title/deluxetags", - "java/process/plugin/game/title/miniplayertitle", - "java/process/plugin/game/title/mythicprefixes", - "java/process/plugin/game/title/playertitle", - "java/process/plugin/game/title/userprefix" - ] - } - ] - }, - { - label: "其他", - collapsed: true, - items: [ - "java/process/plugin/misc/intro", - { - label: "全息图", - collapsed: true, - items: [ - "java/process/plugin/misc/holograms/intro", - "java/process/plugin/misc/holograms/decentholograms", - "java/process/plugin/misc/holograms/holographicdisplays" - ] - }, - { - label: "登录", - collapsed: true, - items: [ - "java/process/plugin/misc/login/intro", - "java/process/plugin/misc/login/authme", - "java/process/plugin/misc/login/catseedlogin", - "java/process/plugin/misc/login/librelogin", - "java/process/plugin/misc/login/limboauth" - ] - }, - { - label: "菜单", - collapsed: true, - items: [ - "java/process/plugin/misc/menu/intro", - "java/process/plugin/misc/menu/chestcommands", - "java/process/plugin/misc/menu/deluxemenus", - "java/process/plugin/misc/menu/invero", - "java/process/plugin/misc/menu/trmenu" - ] - }, - "java/process/plugin/misc/money", - { - label: "MOTD", - collapsed: true, - items: [ - "java/process/plugin/misc/motd/intro", - "java/process/plugin/misc/motd/minimotd" - ] - }, - "java/process/plugin/misc/mythicmobs", - { - label: "NPC", - collapsed: true, - items: [ - "java/process/plugin/misc/npc/intro", - "java/process/plugin/misc/npc/adyeshach", - "java/process/plugin/misc/npc/citizens", - "java/process/plugin/misc/npc/znpcsplus" - ] - }, - "java/process/plugin/misc/quickshop", - "java/process/plugin/misc/skinsrestorer", - { - label: "Tab/记分板", - collapsed: true, - items: [ - "java/process/plugin/misc/tab-scoreboard/intro", - "java/process/plugin/misc/tab-scoreboard/simplescore", - "java/process/plugin/misc/tab-scoreboard/tab", - "java/process/plugin/misc/tab-scoreboard/titlemanager" - ] - }, - { - label: "版本兼容", - collapsed: true, - items: [ - "java/process/plugin/misc/via/intro", - "java/process/plugin/misc/via/viaversion", - "java/process/plugin/misc/via/viabackwards", - "java/process/plugin/misc/via/viarewind", - "java/process/plugin/misc/via/more-for-via" - ] - } - ] - } - ] - }, - { - label: "跨服端", - collapsed: true, - items: [ - "java/process/cross-server/intro", - "java/process/cross-server/server-core-choose", - { - label: "搭建", - collapsed: true, - items: [ - { - label: "BungeeCord", - collapsed: true, - items: [ - "java/process/cross-server/setup/bungeecord/intro", - "java/process/cross-server/setup/bungeecord/setup", - "java/process/cross-server/setup/bungeecord/config-yml", - "java/process/cross-server/setup/bungeecord/lobby" - ] - }, - { - label: "Velocity", - collapsed: true, - items: [ - "java/process/cross-server/setup/velocity/intro", - "java/process/cross-server/setup/velocity/setup", - "java/process/cross-server/setup/velocity/velocity-toml", - "java/process/cross-server/setup/velocity/lobby" - ] - }, - { - label: "Velocity CTD", - collapsed: true, - items: [ - "java/process/cross-server/setup/velocity-ctd/intro", - "java/process/cross-server/setup/velocity-ctd/setup", - "java/process/cross-server/setup/velocity-ctd/velocity-toml", - "java/process/cross-server/setup/velocity-ctd/features", - "java/process/cross-server/setup/velocity-ctd/lobby" - ] - }, - { - label: "Transfer", - collapsed: true, - items: [ - "java/process/cross-server/setup/transfer/intro", - "java/process/cross-server/setup/transfer/setup" - ] - } - ] - }, - "java/process/cross-server/join-server", - "java/process/cross-server/command", - { - label: "跨服插件", - collapsed: true, - items: [ - "java/process/cross-server/plugin/intro", - "java/process/cross-server/plugin/backend-only", - "java/process/cross-server/plugin/proxy-only", - "java/process/cross-server/plugin/proxy-backend-optional", - "java/process/cross-server/plugin/proxy-backend-mandatory" - ] - }, - "java/process/cross-server/hide-the-real-ip", - "java/process/cross-server/precautions" - ] - }, - { - label: "手机玩家支持", - collapsed: true, - items: [ - "java/process/mobile-player/intro", - { - label: "Geyser", - collapsed: true, - items: [ - "java/process/mobile-player/geyser/intro", - "java/process/mobile-player/geyser/install", - "java/process/mobile-player/geyser/faq", - { - label: "进阶", - collapsed: true, - items: [ - "java/process/mobile-player/geyser/upgrade/link", - "java/process/mobile-player/geyser/upgrade/menu", - "java/process/mobile-player/geyser/upgrade/slimefun", - "java/process/mobile-player/geyser/upgrade/geyser-skull", - "java/process/mobile-player/geyser/upgrade/custom-item-model-map", - "java/process/mobile-player/geyser/upgrade/geysermeg4-supports", - { - label: "扩展", - collapsed: true, - items: [ - "java/process/mobile-player/geyser/upgrade/extended/intro", - "java/process/mobile-player/geyser/upgrade/extended/compatible", - "java/process/mobile-player/geyser/upgrade/extended/fix", - "java/process/mobile-player/geyser/upgrade/extended/more" - ] - } - ] - } - ] - }, - { - label: "手机 Java 版", - collapsed: true, - items: [ - "java/process/mobile-player/client/intro", - "java/process/mobile-player/client/amethyst-ios", - "java/process/mobile-player/client/android-all", - "java/process/mobile-player/client/renderer", - "java/process/mobile-player/client/pcl" - ] - } - ] - }, - { - label: "生电", - collapsed: true, - items: [ - "java/process/redstone/intro", - "java/process/redstone/plugin", - "java/process/redstone/mchprs", - "java/process/redstone/mod" - ] - }, - { - label: "地图建设", - collapsed: true, - autogenerate: { directory: "general/process/map" } - }, - "general/process/create-art-assets", - "general/process/panel" - ] - }, - { - label: "进阶知识", - collapsed: false, - items: [ - "java/advance/intro", - { - label: "Linux 开服", - collapsed: true, - autogenerate: { - directory: "general/advance/linux" - } - }, - { - label: "数据库相关", - collapsed: true, - autogenerate: { - directory: "general/process/database" - } - }, - "java/advance/backup", - { - label: "优化", - collapsed: true, - items: [ - "java/advance/optimize/intro", - { - label: "JVM", - collapsed: true, - items: [ - "java/advance/optimize/jvm/intro", - "java/advance/optimize/jvm/common", - "java/advance/optimize/jvm/dragonwell8", - "java/advance/optimize/jvm/dragonwell11", - "java/advance/optimize/jvm/semeru", - "java/advance/optimize/jvm/graal", - "java/advance/optimize/jvm/zing" - ] - }, - "java/advance/optimize/go", - "java/advance/optimize/storage-space-optimization", - "java/advance/optimize/performance-analysis", - "java/advance/optimize/kernel", - "java/advance/optimize/optimized-plugin", - "java/advance/optimize/ask-for-profiling-help" - ] - }, - { - label: "反作弊", - collapsed: true, - items: [ - "java/advance/anticheat/intro", - "java/advance/anticheat/anticheatplugins", - "java/advance/anticheat/antixray", - "java/advance/anticheat/rng", - "java/advance/anticheat/anti-crash", - "java/advance/anticheat/honeypot" - ] - }, - { - label: "资源包", - collapsed: true, - items: [ - "java/advance/resourcepack/intro", - "java/advance/resourcepack/software", - "java/advance/resourcepack/send", - "java/advance/resourcepack/compress", - { - label: "插件", - collapsed: true, - items: [ - "java/advance/resourcepack/plugins/intro", - "java/advance/resourcepack/plugins/hud", - "java/advance/resourcepack/plugins/entity", - "java/advance/resourcepack/plugins/vehicles", - "java/advance/resourcepack/plugins/framework", - "java/advance/resourcepack/plugins/tooltip", - "java/advance/resourcepack/plugins/misc" - ] - }, - "java/advance/resourcepack/protect", - "java/advance/resourcepack/addon" - ] - }, - "general/advance/maintenance/how-to-defend-against-cyber-attacks", - { - label: "脚本语言", - collapsed: true, - items: [ - "java/advance/lang/intro", - { - label: "Skript", - collapsed: true, - items: [ - "java/advance/lang/skript/intro", - "java/advance/lang/skript/basic-tutorials", - "java/advance/lang/skript/advanced-tutorials" - ] - }, - { - label: "Kether", - collapsed: true, - items: [ - "java/advance/lang/kether/intro", - "java/advance/lang/kether/preparation", - "java/advance/lang/kether/basic", - "java/advance/lang/kether/if", - "java/advance/lang/kether/variable", - "java/advance/lang/kether/math", - "java/advance/lang/kether/misc", - "java/advance/lang/kether/vulpecula" - ] - }, - { - label: "JavaScript", - collapsed: true, - items: [ - "java/advance/lang/javascript/intro", - { - label: "扩展", - collapsed: true, - items: [ - "java/advance/lang/javascript/extend/intro", - "java/advance/lang/javascript/extend/nashorn", - "java/advance/lang/javascript/extend/graaljs" - ] - } - ] - } - ] - }, - "general/advance/domain-and-dns", - "java/advance/command-yml", - "java/advance/login-choices", - "java/advance/arthas", - "java/advance/chinese-username", - "java/advance/slime-world", - { - label: "机器人框架", - collapsed: true, - autogenerate: { - directory: "general/advance/bot" - } - } - ] - }, - { - label: "附录", - collapsed: false, - items: ["general/more/ask-for-help"] - } - ] + label: "前置", + collapsed: true, + items: [ + "java/process/plugin/plugin-dependencies/intro", + { + label: "PlaceholderAPI", + collapsed: true, + items: [ + "java/process/plugin/plugin-dependencies/placeholderapi/intro", + "java/process/plugin/plugin-dependencies/placeholderapi/common-usage", + "java/process/plugin/plugin-dependencies/placeholderapi/parse-other", + "java/process/plugin/plugin-dependencies/placeholderapi/math", + "java/process/plugin/plugin-dependencies/placeholderapi/string", + "java/process/plugin/plugin-dependencies/placeholderapi/progress", + "java/process/plugin/plugin-dependencies/placeholderapi/javascript", + "java/process/plugin/plugin-dependencies/placeholderapi/check-item", + "java/process/plugin/plugin-dependencies/placeholderapi/change-output", + "java/process/plugin/plugin-dependencies/placeholderapi/faq" + ] + }, + "java/process/plugin/plugin-dependencies/playerpoints", + "java/process/plugin/plugin-dependencies/protocollib", + { + label: "Vault", + collapsed: true, + items: [ + "java/process/plugin/plugin-dependencies/vault/intro", + "java/process/plugin/plugin-dependencies/vault/serviceio", + "java/process/plugin/plugin-dependencies/vault/vaultunlocked" + ] + }, + "java/process/plugin/plugin-dependencies/xconomy" + ] }, { - label: "Bedrock", - link: "/bedrock/intro", - icon: "open-book", - items: [ - { - label: "快速开始", - items: ["bedrock/intro"] - }, + label: "管理", + collapsed: true, + items: [ + { + label: "防破坏", + collapsed: true, + items: [ + "java/process/plugin/management-tool/anti-grief/intro", + "java/process/plugin/management-tool/anti-grief/coreprotect", + "java/process/plugin/management-tool/anti-grief/invseeplusplus", + "java/process/plugin/management-tool/anti-grief/prismrefracted" + ] + }, + { + label: "基础插件", + collapsed: true, + items: [ + "java/process/plugin/management-tool/basic-plugins/intro", + "java/process/plugin/management-tool/basic-plugins/delete", { - label: "超级基础知识", - items: [ - "bedrock/super-basic/intro", - "bedrock/super-basic/server-core-choose", - "bedrock/super-basic/server-type", - "bedrock/super-basic/protocol-version-number", - "bedrock/super-basic/version" - ] + label: "CMI", + collapsed: true, + items: [ + "java/process/plugin/management-tool/basic-plugins/cmi/intro", + "java/process/plugin/management-tool/basic-plugins/cmi/eco", + "java/process/plugin/management-tool/basic-plugins/cmi/question" + ] }, { - label: "BDS 核心", - items: [ - { - label: "准备工作", - collapsed: true, - items: [ - "bedrock/bds/preparation/intro", - { - label: "文本编辑器", - collapsed: true, - autogenerate: { directory: "general/preparation/text-editor" } - }, - "bedrock/bds/preparation/vcruntime", - "bedrock/bds/preparation/websites" - ] - }, - { - label: "开始阶段", - collapsed: true, - items: [ - "bedrock/bds/start/intro", - { - label: "基础知识", - items: [ - "bedrock/bds/start/basic/intro", - "bedrock/bds/start/basic/server-dir-structure" - ] - } - ] - }, - { - label: "建设阶段", - collapsed: true, - items: [ - "bedrock/bds/process/intro", - { - label: "插件", - collapsed: true, - items: [ - "bedrock/bds/process/plugins/intro", - "bedrock/bds/process/plugins/how-to-load-plugins", - "bedrock/bds/process/plugins/plugins-loader-choose" - ] - }, - { - label: "BDSX", - collapsed: true, - items: [ - "bedrock/bds/process/bdsx/intro", - "bedrock/bds/process/bdsx/install" - ] - }, - { - label: "EndStone", - collapsed: true, - items: [ - "bedrock/bds/process/endstone/intro", - "bedrock/bds/process/endstone/install", - "bedrock/bds/process/endstone/plugins" - ] - }, - { - label: "LeviLamina", - collapsed: true, - items: [ - "bedrock/bds/process/levilamina/intro", - "bedrock/bds/process/levilamina/install", - "bedrock/bds/process/levilamina/plugins", - "bedrock/bds/process/levilamina/legacy-script-engine" - ] - }, - { - label: "LiteLoaderBDS", - collapsed: true, - items: [ - "bedrock/bds/process/liteloader-bds/intro", - "bedrock/bds/process/liteloader-bds/install", - "bedrock/bds/process/liteloader-bds/plugins" - ] - } - ] - } - ] - }, - { - label: "Nukkit 核心", - items: [ - "bedrock/nukkit/intro", - { - label: "准备工作", - collapsed: true, - items: [ - "bedrock/nukkit/preparation/intro", - { - label: "安装 Java", - collapsed: true, - items: [ - "general/java/intro", - "general/java/choose-and-download-and-install-java", - "general/java/environment", - "general/java/sdkman", - "general/java/faq" - ] - }, - "bedrock/nukkit/preparation/websites", - { - label: "文本编辑器", - collapsed: true, - autogenerate: { directory: "general/preparation/text-editor" } - } - ] - }, - { - label: "开始阶段", - collapsed: true, - items: [ - "bedrock/nukkit/start/intro", - { - label: "基础知识", - collapsed: true, - items: [ - "bedrock/nukkit/start/basic/intro", - "bedrock/nukkit/start/basic/server-file-structure" - ] - }, - "bedrock/nukkit/start/nukkitmot", - "bedrock/nukkit/start/nukkitx", - { - label: "PM1E 核心", - collapsed: true, - items: [ - "bedrock/nukkit/start/pm1e/intro", - "bedrock/nukkit/start/pm1e/controversy" - ] - }, - "bedrock/nukkit/start/pnx" - ] - } - ] - }, - { - label: "PocketMine 核心", - items: [ - "bedrock/pocketmine/intro", - { - label: "准备工作", - collapsed: true, - items: [ - "bedrock/pocketmine/preparation/intro", - "bedrock/pocketmine/preparation/choose-and-download-and-install-php", - "bedrock/pocketmine/preparation/websites", - { - label: "文本编辑器", - collapsed: true, - autogenerate: { directory: "general/preparation/text-editor" } - } - ] - } - ] - }, - { - label: "其他基岩版服务器核心", - items: [ - { - label: "准备工作", - collapsed: true, - items: [ - "bedrock/misc/preparation/intro", - "bedrock/misc/preparation/websites", - { - label: "文本编辑器", - collapsed: true, - autogenerate: { directory: "general/preparation/text-editor" } - } - ] - }, - "bedrock/misc/allay", - "bedrock/misc/dragonfly", - "bedrock/misc/mcpeserver" - ] + label: "EssentialsX", + collapsed: true, + items: [ + "java/process/plugin/management-tool/basic-plugins/essentialsx/intro", + "java/process/plugin/management-tool/basic-plugins/essentialsx/config-yml", + "java/process/plugin/management-tool/basic-plugins/essentialsx/config-tips", + "java/process/plugin/management-tool/basic-plugins/essentialsx/warp", + "java/process/plugin/management-tool/basic-plugins/essentialsx/kit", + "java/process/plugin/management-tool/basic-plugins/essentialsx/papi-support", + "java/process/plugin/management-tool/basic-plugins/essentialsx/faq" + ] }, + "java/process/plugin/management-tool/basic-plugins/sunlight" + ] + }, + { + label: "聊天", + collapsed: true, + items: [ + "java/process/plugin/management-tool/chat/intro", + "java/process/plugin/management-tool/chat/carbon", + "java/process/plugin/management-tool/chat/huskchat", + "java/process/plugin/management-tool/chat/trchat", + "java/process/plugin/management-tool/chat/interactivechat" + ] + }, + { + label: "物品库", + collapsed: true, + items: [ + "java/process/plugin/management-tool/items/intro", + "java/process/plugin/management-tool/items/crucible", + "java/process/plugin/management-tool/items/ecoitems", + "java/process/plugin/management-tool/items/mmoitems", + "java/process/plugin/management-tool/items/neigeitems", + "java/process/plugin/management-tool/items/ratziel", + "java/process/plugin/management-tool/items/sx-item", + "java/process/plugin/management-tool/items/zaphkiel", + "java/process/plugin/management-tool/items/misc" + ] + }, + { + label: "权限", + collapsed: true, + items: [ + "java/process/plugin/management-tool/permission/intro", + "java/process/plugin/management-tool/permission/what-is-permission", + "java/process/plugin/management-tool/permission/group", + "java/process/plugin/management-tool/permission/command", + "java/process/plugin/management-tool/permission/tips", + "java/process/plugin/management-tool/permission/meta" + ] + }, + { + label: "插件管理", + collapsed: true, + items: [ + "java/process/plugin/management-tool/plugin-management/intro", + "java/process/plugin/management-tool/plugin-management/plugin-portal", + "java/process/plugin/management-tool/plugin-management/plugmanx", + "java/process/plugin/management-tool/plugin-management/serverutils", + "java/process/plugin/management-tool/plugin-management/yum" + ] + }, + { + label: "任务", + collapsed: true, + items: [ + "java/process/plugin/management-tool/task/intro", + "java/process/plugin/management-tool/task/beautyquests", + "java/process/plugin/management-tool/task/betonquest", + "java/process/plugin/management-tool/task/chemdah", + "java/process/plugin/management-tool/task/mangoquest", + "java/process/plugin/management-tool/task/playertask", + "java/process/plugin/management-tool/task/questcreator", + "java/process/plugin/management-tool/task/questengine", + "java/process/plugin/management-tool/task/quests", + "java/process/plugin/management-tool/task/typewriter" + ] + } + ] + }, + { + label: "保护", + collapsed: true, + items: [ + "java/process/plugin/protection/intro", + "java/process/plugin/protection/residence", + "java/process/plugin/protection/dominion", + "java/process/plugin/protection/griefdefender", + "java/process/plugin/protection/plotsquared", + "java/process/plugin/protection/askyblock", + "java/process/plugin/protection/bentobox", + "java/process/plugin/protection/towny" + ] + }, + { + label: "世界管理", + collapsed: true, + items: [ + "java/process/plugin/world-management/worldedit", + "java/process/plugin/world-management/worldguard", + "java/process/plugin/world-management/fastasyncworldedit", + "java/process/plugin/world-management/law", + "java/process/plugin/world-management/myworld", + "java/process/plugin/world-management/nobuildplus", + { + label: "大厅", + collapsed: true, + items: [ + "java/process/plugin/world-management/lobby/intro", + "java/process/plugin/world-management/lobby/deluxehub", + "java/process/plugin/world-management/lobby/deluxehubreloaded", + "java/process/plugin/world-management/lobby/superlobbydeluxe" + ] + }, + { + label: "多世界 - Multiverse", + collapsed: true, + items: [ + "java/process/plugin/world-management/multiverse/intro", + "java/process/plugin/world-management/multiverse/faq1", + "java/process/plugin/world-management/multiverse/faq2" + ] + }, + { + label: "世界生成", + collapsed: true, + items: [ + "java/process/plugin/world-management/worldgen/intro", + "java/process/plugin/world-management/worldgen/terra", + "java/process/plugin/world-management/worldgen/irisworldgen", + "java/process/plugin/world-management/worldgen/terraformgenerator" + ] + } + ] + }, + { + label: "游戏性", + collapsed: true, + items: [ + "java/process/plugin/game/dragoncore", + "java/process/plugin/game/germengine", + "java/process/plugin/game/nova", + { + label: "Slimefun", + collapsed: true, + items: [ + "java/process/plugin/game/slimefun/intro", + "java/process/plugin/game/slimefun/auto-update", + "java/process/plugin/game/slimefun/find-lag", + "java/process/plugin/game/slimefun/resourcepack-for-slimefun" + ] + }, + { + label: "称号", + collapsed: true, + items: [ + "java/process/plugin/game/title/deluxetags", + "java/process/plugin/game/title/miniplayertitle", + "java/process/plugin/game/title/mythicprefixes", + "java/process/plugin/game/title/playertitle", + "java/process/plugin/game/title/userprefix" + ] + } + ] + }, + { + label: "其他", + collapsed: true, + items: [ + "java/process/plugin/misc/intro", + { + label: "全息图", + collapsed: true, + items: [ + "java/process/plugin/misc/holograms/intro", + "java/process/plugin/misc/holograms/decentholograms", + "java/process/plugin/misc/holograms/holographicdisplays" + ] + }, + { + label: "登录", + collapsed: true, + items: [ + "java/process/plugin/misc/login/intro", + "java/process/plugin/misc/login/authme", + "java/process/plugin/misc/login/catseedlogin", + "java/process/plugin/misc/login/librelogin", + "java/process/plugin/misc/login/limboauth" + ] + }, + { + label: "菜单", + collapsed: true, + items: [ + "java/process/plugin/misc/menu/intro", + "java/process/plugin/misc/menu/chestcommands", + "java/process/plugin/misc/menu/deluxemenus", + "java/process/plugin/misc/menu/invero", + "java/process/plugin/misc/menu/trmenu" + ] + }, + "java/process/plugin/misc/money", + { + label: "MOTD", + collapsed: true, + items: [ + "java/process/plugin/misc/motd/intro", + "java/process/plugin/misc/motd/minimotd" + ] + }, + "java/process/plugin/misc/mythicmobs", + { + label: "NPC", + collapsed: true, + items: [ + "java/process/plugin/misc/npc/intro", + "java/process/plugin/misc/npc/adyeshach", + "java/process/plugin/misc/npc/citizens", + "java/process/plugin/misc/npc/znpcsplus" + ] + }, + "java/process/plugin/misc/quickshop", + "java/process/plugin/misc/skinsrestorer", + { + label: "Tab/记分板", + collapsed: true, + items: [ + "java/process/plugin/misc/tab-scoreboard/intro", + "java/process/plugin/misc/tab-scoreboard/simplescore", + "java/process/plugin/misc/tab-scoreboard/tab", + "java/process/plugin/misc/tab-scoreboard/titlemanager" + ] + }, + { + label: "版本兼容", + collapsed: true, + items: [ + "java/process/plugin/misc/via/intro", + "java/process/plugin/misc/via/viaversion", + "java/process/plugin/misc/via/viabackwards", + "java/process/plugin/misc/via/viarewind", + "java/process/plugin/misc/via/more-for-via" + ] + } + ] + } + ] + }, + { + label: "跨服端", + collapsed: true, + items: [ + "java/process/cross-server/intro", + "java/process/cross-server/server-core-choose", + { + label: "搭建", + collapsed: true, + items: [ + { + label: "BungeeCord", + collapsed: true, + items: [ + "java/process/cross-server/setup/bungeecord/intro", + "java/process/cross-server/setup/bungeecord/setup", + "java/process/cross-server/setup/bungeecord/config-yml", + "java/process/cross-server/setup/bungeecord/lobby" + ] + }, + { + label: "Velocity", + collapsed: true, + items: [ + "java/process/cross-server/setup/velocity/intro", + "java/process/cross-server/setup/velocity/setup", + "java/process/cross-server/setup/velocity/velocity-toml", + "java/process/cross-server/setup/velocity/lobby" + ] + }, + { + label: "Velocity CTD", + collapsed: true, + items: [ + "java/process/cross-server/setup/velocity-ctd/intro", + "java/process/cross-server/setup/velocity-ctd/setup", + "java/process/cross-server/setup/velocity-ctd/velocity-toml", + "java/process/cross-server/setup/velocity-ctd/features", + "java/process/cross-server/setup/velocity-ctd/lobby" + ] + }, + { + label: "Transfer", + collapsed: true, + items: [ + "java/process/cross-server/setup/transfer/intro", + "java/process/cross-server/setup/transfer/setup" + ] + } + ] + }, + "java/process/cross-server/join-server", + "java/process/cross-server/command", + { + label: "跨服插件", + collapsed: true, + items: [ + "java/process/cross-server/plugin/intro", + "java/process/cross-server/plugin/backend-only", + "java/process/cross-server/plugin/proxy-only", + "java/process/cross-server/plugin/proxy-backend-optional", + "java/process/cross-server/plugin/proxy-backend-mandatory" + ] + }, + "java/process/cross-server/hide-the-real-ip", + "java/process/cross-server/precautions" + ] + }, + { + label: "手机玩家支持", + collapsed: true, + items: [ + "java/process/mobile-player/intro", + { + label: "Geyser", + collapsed: true, + items: [ + "java/process/mobile-player/geyser/intro", + "java/process/mobile-player/geyser/install", + "java/process/mobile-player/geyser/faq", + { + label: "进阶", + collapsed: true, + items: [ + "java/process/mobile-player/geyser/upgrade/link", + "java/process/mobile-player/geyser/upgrade/menu", + "java/process/mobile-player/geyser/upgrade/slimefun", + "java/process/mobile-player/geyser/upgrade/geyser-skull", + "java/process/mobile-player/geyser/upgrade/custom-item-model-map", + "java/process/mobile-player/geyser/upgrade/geysermeg4-supports", { - label: "WaterdogePE 跨服", - items: [ - "bedrock/waterdogepe/intro", - { - label: "安装 Java", - collapsed: true, - items: [ - "general/java/intro", - "general/java/choose-and-download-and-install-java", - "general/java/environment", - "general/java/sdkman", - "general/java/faq" - ] - }, - { - label: "文本编辑器", - collapsed: true, - autogenerate: { directory: "general/preparation/text-editor" } - }, - "bedrock/waterdogepe/install", - "bedrock/waterdogepe/config" - ] + label: "扩展", + collapsed: true, + items: [ + "java/process/mobile-player/geyser/upgrade/extended/intro", + "java/process/mobile-player/geyser/upgrade/extended/compatible", + "java/process/mobile-player/geyser/upgrade/extended/fix", + "java/process/mobile-player/geyser/upgrade/extended/more" + ] } - ] + ] + } + ] }, { - label: "关于", - link: "/about/intro", - icon: "list-format", - items: ["about/intro", "about/sponsor", "about/timeline", "about/ad"] + label: "手机 Java 版", + collapsed: true, + items: [ + "java/process/mobile-player/client/intro", + "java/process/mobile-player/client/amethyst-ios", + "java/process/mobile-player/client/android-all", + "java/process/mobile-player/client/renderer", + "java/process/mobile-player/client/pcl" + ] } - ], + ] + }, { - topics: { - basics: ["/basics", "/basics/**/*"] + label: "生电", + collapsed: true, + items: [ + "java/process/redstone/intro", + "java/process/redstone/plugin", + "java/process/redstone/mchprs", + "java/process/redstone/mod" + ] + }, + { + label: "地图建设", + collapsed: true, + autogenerate: { directory: "general/process/map" } + }, + "general/process/create-art-assets", + "general/process/panel" + ] + }, + { + label: "进阶知识", + collapsed: false, + items: [ + "java/advance/intro", + { + label: "Linux 开服", + collapsed: true, + autogenerate: { + directory: "general/advance/linux" + } + }, + { + label: "数据库相关", + collapsed: true, + autogenerate: { + directory: "general/process/database" + } + }, + "java/advance/backup", + { + label: "优化", + collapsed: true, + items: [ + "java/advance/optimize/intro", + { + label: "JVM", + collapsed: true, + items: [ + "java/advance/optimize/jvm/intro", + "java/advance/optimize/jvm/common", + "java/advance/optimize/jvm/dragonwell8", + "java/advance/optimize/jvm/dragonwell11", + "java/advance/optimize/jvm/semeru", + "java/advance/optimize/jvm/graal", + "java/advance/optimize/jvm/zing" + ] + }, + "java/advance/optimize/go", + "java/advance/optimize/storage-space-optimization", + "java/advance/optimize/performance-analysis", + "java/advance/optimize/kernel", + "java/advance/optimize/optimized-plugin", + "java/advance/optimize/ask-for-profiling-help" + ] + }, + { + label: "反作弊", + collapsed: true, + items: [ + "java/advance/anticheat/intro", + "java/advance/anticheat/anticheatplugins", + "java/advance/anticheat/antixray", + "java/advance/anticheat/rng", + "java/advance/anticheat/anti-crash", + "java/advance/anticheat/honeypot" + ] + }, + { + label: "资源包", + collapsed: true, + items: [ + "java/advance/resourcepack/intro", + "java/advance/resourcepack/software", + "java/advance/resourcepack/send", + "java/advance/resourcepack/compress", + { + label: "插件", + collapsed: true, + items: [ + "java/advance/resourcepack/plugins/intro", + "java/advance/resourcepack/plugins/hud", + "java/advance/resourcepack/plugins/entity", + "java/advance/resourcepack/plugins/vehicles", + "java/advance/resourcepack/plugins/framework", + "java/advance/resourcepack/plugins/tooltip", + "java/advance/resourcepack/plugins/misc" + ] + }, + "java/advance/resourcepack/protect", + "java/advance/resourcepack/addon" + ] + }, + "general/advance/maintenance/how-to-defend-against-cyber-attacks", + { + label: "脚本语言", + collapsed: true, + items: [ + "java/advance/lang/intro", + { + label: "Skript", + collapsed: true, + items: [ + "java/advance/lang/skript/intro", + "java/advance/lang/skript/basic-tutorials", + "java/advance/lang/skript/advanced-tutorials" + ] + }, + { + label: "Kether", + collapsed: true, + items: [ + "java/advance/lang/kether/intro", + "java/advance/lang/kether/preparation", + "java/advance/lang/kether/basic", + "java/advance/lang/kether/if", + "java/advance/lang/kether/variable", + "java/advance/lang/kether/math", + "java/advance/lang/kether/misc", + "java/advance/lang/kether/vulpecula" + ] + }, + { + label: "JavaScript", + collapsed: true, + items: [ + "java/advance/lang/javascript/intro", + { + label: "扩展", + collapsed: true, + items: [ + "java/advance/lang/javascript/extend/intro", + "java/advance/lang/javascript/extend/nashorn", + "java/advance/lang/javascript/extend/graaljs" + ] + } + ] } + ] + }, + "general/advance/domain-and-dns", + "java/advance/command-yml", + "java/advance/login-choices", + "java/advance/arthas", + "java/advance/chinese-username", + "java/advance/slime-world", + { + label: "机器人框架", + collapsed: true, + autogenerate: { + directory: "general/advance/bot" + } } - ), - starlightLinksValidator(), - starlightImageZoom(), - starlightDocSearch({ - appId: "D1KV1BYF3B", - apiKey: "4bb3573e59f2c49f30f057ce54edab3f", - indexName: "yizhan", - insights: true - }), - starlightScrollToTop() - ], - components: { - LastUpdated: "./src/components/LastUpdated.astro", - Head: "./src/components/Head.astro", - Pagination: "./src/components/CustomPagination.astro" - } - }), - AstroPWA({ - registerType: "autoUpdate", - workbox: { - skipWaiting: true, - clientsClaim: true, - navigateFallback: "/404", - ignoreURLParametersMatching: [/./], - globPatterns: ["**/*.{html,js,css,png,svg,json,ttf,pf_fragment,pf_index,pf_meta,pagefind,wasm}"] + ] + }, + { + label: "附录", + collapsed: false, + items: ["general/more/ask-for-help"] + } + ] }, - experimental: { - directoryAndTrailingSlashHandler: true + { + label: "Bedrock", + link: "/bedrock/intro", + icon: "open-book", + items: [ + { + label: "快速开始", + items: ["bedrock/intro"] + }, + { + label: "超级基础知识", + items: [ + "bedrock/super-basic/intro", + "bedrock/super-basic/server-core-choose", + "bedrock/super-basic/server-type", + "bedrock/super-basic/protocol-version-number", + "bedrock/super-basic/version" + ] + }, + { + label: "BDS 核心", + items: [ + { + label: "准备工作", + collapsed: true, + items: [ + "bedrock/bds/preparation/intro", + { + label: "文本编辑器", + collapsed: true, + autogenerate: { directory: "general/preparation/text-editor" } + }, + "bedrock/bds/preparation/vcruntime", + "bedrock/bds/preparation/websites" + ] + }, + { + label: "开始阶段", + collapsed: true, + items: [ + "bedrock/bds/start/intro", + { + label: "基础知识", + items: [ + "bedrock/bds/start/basic/intro", + "bedrock/bds/start/basic/server-dir-structure" + ] + } + ] + }, + { + label: "建设阶段", + collapsed: true, + items: [ + "bedrock/bds/process/intro", + { + label: "插件", + collapsed: true, + items: [ + "bedrock/bds/process/plugins/intro", + "bedrock/bds/process/plugins/how-to-load-plugins", + "bedrock/bds/process/plugins/plugins-loader-choose" + ] + }, + { + label: "BDSX", + collapsed: true, + items: [ + "bedrock/bds/process/bdsx/intro", + "bedrock/bds/process/bdsx/install" + ] + }, + { + label: "EndStone", + collapsed: true, + items: [ + "bedrock/bds/process/endstone/intro", + "bedrock/bds/process/endstone/install", + "bedrock/bds/process/endstone/plugins" + ] + }, + { + label: "LeviLamina", + collapsed: true, + items: [ + "bedrock/bds/process/levilamina/intro", + "bedrock/bds/process/levilamina/install", + "bedrock/bds/process/levilamina/plugins", + "bedrock/bds/process/levilamina/legacy-script-engine" + ] + }, + { + label: "LiteLoaderBDS", + collapsed: true, + items: [ + "bedrock/bds/process/liteloader-bds/intro", + "bedrock/bds/process/liteloader-bds/install", + "bedrock/bds/process/liteloader-bds/plugins" + ] + } + ] + } + ] + }, + { + label: "Nukkit 核心", + items: [ + "bedrock/nukkit/intro", + { + label: "准备工作", + collapsed: true, + items: [ + "bedrock/nukkit/preparation/intro", + { + label: "安装 Java", + collapsed: true, + items: [ + "general/java/intro", + "general/java/choose-and-download-and-install-java", + "general/java/environment", + "general/java/sdkman", + "general/java/faq" + ] + }, + "bedrock/nukkit/preparation/websites", + { + label: "文本编辑器", + collapsed: true, + autogenerate: { directory: "general/preparation/text-editor" } + } + ] + }, + { + label: "开始阶段", + collapsed: true, + items: [ + "bedrock/nukkit/start/intro", + { + label: "基础知识", + collapsed: true, + items: [ + "bedrock/nukkit/start/basic/intro", + "bedrock/nukkit/start/basic/server-file-structure" + ] + }, + "bedrock/nukkit/start/nukkitmot", + "bedrock/nukkit/start/nukkitx", + { + label: "PM1E 核心", + collapsed: true, + items: [ + "bedrock/nukkit/start/pm1e/intro", + "bedrock/nukkit/start/pm1e/controversy" + ] + }, + "bedrock/nukkit/start/pnx" + ] + } + ] + }, + { + label: "PocketMine 核心", + items: [ + "bedrock/pocketmine/intro", + { + label: "准备工作", + collapsed: true, + items: [ + "bedrock/pocketmine/preparation/intro", + "bedrock/pocketmine/preparation/choose-and-download-and-install-php", + "bedrock/pocketmine/preparation/websites", + { + label: "文本编辑器", + collapsed: true, + autogenerate: { directory: "general/preparation/text-editor" } + } + ] + } + ] + }, + { + label: "其他基岩版服务器核心", + items: [ + { + label: "准备工作", + collapsed: true, + items: [ + "bedrock/misc/preparation/intro", + "bedrock/misc/preparation/websites", + { + label: "文本编辑器", + collapsed: true, + autogenerate: { directory: "general/preparation/text-editor" } + } + ] + }, + "bedrock/misc/allay", + "bedrock/misc/dragonfly", + "bedrock/misc/mcpeserver" + ] + }, + { + label: "WaterdogePE 跨服", + items: [ + "bedrock/waterdogepe/intro", + { + label: "安装 Java", + collapsed: true, + items: [ + "general/java/intro", + "general/java/choose-and-download-and-install-java", + "general/java/environment", + "general/java/sdkman", + "general/java/faq" + ] + }, + { + label: "文本编辑器", + collapsed: true, + autogenerate: { directory: "general/preparation/text-editor" } + }, + "bedrock/waterdogepe/install", + "bedrock/waterdogepe/config" + ] + } + ] }, - manifest: { - name: "Cubic Wiki", - short_name: "Cubic Wiki", - display: "standalone", - theme_color: "#2196f3", - background_color: "#424242" + { + label: "关于", + link: "/about/intro", + icon: "list-format", + items: ["about/intro", "about/sponsor", "about/timeline", "about/ad"] + } + ], + { + topics: { + basics: ["/basics", "/basics/**/*"] } + } + ), + starlightLinksValidator(), + starlightImageZoom(), + starlightDocSearch({ + appId: "D1KV1BYF3B", + apiKey: "4bb3573e59f2c49f30f057ce54edab3f", + indexName: "yizhan", + insights: true }), - mermaid({ - autoTheme: true - }) - ], - vite: { - plugins: [tailwindcss()], - ssr: { - noExternal: ["naive-ui", "vueuc", "date-fns", "workbox-window"] - } + starlightScrollToTop() + ], + components: { + LastUpdated: "./src/components/LastUpdated.astro", + Head: "./src/components/Head.astro", + Pagination: "./src/components/CustomPagination.astro" + } + }), + AstroPWA({ + registerType: "autoUpdate", + workbox: { + skipWaiting: true, + clientsClaim: true, + navigateFallback: "/404", + ignoreURLParametersMatching: [/./], + globPatterns: ["**/*.{html,js,css,png,svg,json,ttf,pf_fragment,pf_index,pf_meta,pagefind,wasm}"] + }, + experimental: { + directoryAndTrailingSlashHandler: true + }, + manifest: { + name: "Cubic Wiki", + short_name: "Cubic Wiki", + display: "standalone", + theme_color: "#2196f3", + background_color: "#424242" + } + }), + mermaid({ + autoTheme: true + }) + ], + vite: { + plugins: [tailwindcss()], + ssr: { + noExternal: ["naive-ui", "vueuc", "date-fns", "workbox-window"] } -}); + } +}); \ No newline at end of file From 46657315277edf8322a0d1fc672ebb85136b302c Mon Sep 17 00:00:00 2001 From: momo-OwO-qwq Date: Fri, 3 Apr 2026 22:43:13 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=F0=9F=8E=A8=20=E6=B7=BB=E5=8A=A0=E2=80=9C?= =?UTF-8?q?=E5=B8=B8=E8=A7=81=E6=9C=AF=E8=AF=AD=E8=A7=A3=E6=9E=90=E2=80=9D?= =?UTF-8?q?=E5=88=B0=E9=80=9A=E7=94=A8=E7=9F=A5=E8=AF=86=E5=BA=93=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astro.config.ts | 17 +++++++++++++++++ .../docs/general/basics/what-is-datapack.mdx | 1 - src/content/docs/general/basics/what-is-lag.md | 1 - src/content/docs/general/basics/what-is-log.md | 1 - .../docs/general/basics/what-is-messy-code.md | 1 - src/content/docs/general/basics/what-is-mod.md | 1 - .../docs/general/basics/what-is-namespace.md | 1 - src/content/docs/general/basics/what-is-nbt.md | 1 - .../docs/general/basics/what-is-permission.md | 1 - .../docs/general/basics/what-is-plugin.md | 1 - .../general/basics/what-is-startup-script.md | 1 - .../docs/general/basics/what-is-world.md | 1 - 12 files changed, 17 insertions(+), 11 deletions(-) diff --git a/astro.config.ts b/astro.config.ts index e00016a5..68f183a8 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -61,6 +61,23 @@ export default defineConfig({ label: "通用知识库", collapsed: true, items: [ + { + label: "常见术语解析", + collapsed: true, + items: [ + "general/basics/what-is-world", + "general/basics/what-is-datapack", + "general/basics/what-is-mod", + "general/basics/what-is-plugin", + "general/basics/what-is-lag", + "general/basics/what-is-log", + "general/basics/what-is-messy-code", + "general/basics/what-is-permission", + "general/basics/what-is-startup-script", + "general/basics/what-is-nbt", + "general/basics/what-is-namespace", + ] + }, { label: "安装 Java", collapsed: true, diff --git a/src/content/docs/general/basics/what-is-datapack.mdx b/src/content/docs/general/basics/what-is-datapack.mdx index 82d6e2be..6d53eae5 100644 --- a/src/content/docs/general/basics/what-is-datapack.mdx +++ b/src/content/docs/general/basics/what-is-datapack.mdx @@ -1,7 +1,6 @@ --- title: 什么是数据包? topic: basics -template: splash --- import { FileTree } from "@astrojs/starlight/components"; diff --git a/src/content/docs/general/basics/what-is-lag.md b/src/content/docs/general/basics/what-is-lag.md index 4931ed97..f1250648 100644 --- a/src/content/docs/general/basics/what-is-lag.md +++ b/src/content/docs/general/basics/what-is-lag.md @@ -1,7 +1,6 @@ --- title: 什么是卡顿? topic: basics -template: splash --- 服务器中玩家可感知到的卡顿是多种多样的,其中主要包括服务器处理速度不足导致的 **MSPT** 偏高、**TPS** 偏低,以及服务器网络波动导致的 **Ping**(即服务器和玩家之间的网络延迟)。 diff --git a/src/content/docs/general/basics/what-is-log.md b/src/content/docs/general/basics/what-is-log.md index 8ddbd562..99dcd3a0 100644 --- a/src/content/docs/general/basics/what-is-log.md +++ b/src/content/docs/general/basics/what-is-log.md @@ -1,7 +1,6 @@ --- title: 什么是日志? topic: basics -template: splash --- **日志** 记录了服务器的运行信息,运行时产生的错误和警告,同时也是大佬们用来分析为什么功能不正常或不能用的必要途径。 diff --git a/src/content/docs/general/basics/what-is-messy-code.md b/src/content/docs/general/basics/what-is-messy-code.md index 59d8de31..404160f7 100644 --- a/src/content/docs/general/basics/what-is-messy-code.md +++ b/src/content/docs/general/basics/what-is-messy-code.md @@ -1,7 +1,6 @@ --- title: 什么是乱码? topic: basics -template: splash --- 有时候,你会发现你的文本文件中的中文都莫名其妙变成了一些奇奇怪怪的符号,看起来乱糟糟的,毫无逻辑可言。 diff --git a/src/content/docs/general/basics/what-is-mod.md b/src/content/docs/general/basics/what-is-mod.md index 86cc15b4..16fed7d1 100644 --- a/src/content/docs/general/basics/what-is-mod.md +++ b/src/content/docs/general/basics/what-is-mod.md @@ -1,7 +1,6 @@ --- title: 什么是模组? topic: basics -template: splash --- 模组(Mod)是遵循 Forge、Fabric 或 LiteLoader 等 API 规范编写的 Java 程序。 diff --git a/src/content/docs/general/basics/what-is-namespace.md b/src/content/docs/general/basics/what-is-namespace.md index 8b0b019f..ce982f13 100644 --- a/src/content/docs/general/basics/what-is-namespace.md +++ b/src/content/docs/general/basics/what-is-namespace.md @@ -1,7 +1,6 @@ --- title: 什么是命名空间? topic: basics -template: splash --- ## 概念 diff --git a/src/content/docs/general/basics/what-is-nbt.md b/src/content/docs/general/basics/what-is-nbt.md index 51e19116..9539395b 100644 --- a/src/content/docs/general/basics/what-is-nbt.md +++ b/src/content/docs/general/basics/what-is-nbt.md @@ -1,7 +1,6 @@ --- title: 什么是 NBT? topic: basics -template: splash --- ## 概念 diff --git a/src/content/docs/general/basics/what-is-permission.md b/src/content/docs/general/basics/what-is-permission.md index f3fa309c..11ea990f 100644 --- a/src/content/docs/general/basics/what-is-permission.md +++ b/src/content/docs/general/basics/what-is-permission.md @@ -1,7 +1,6 @@ --- title: 什么是权限? topic: basics -template: splash --- 权限:在插件服务端中,确认玩家做某行为的能力是否被允许。 diff --git a/src/content/docs/general/basics/what-is-plugin.md b/src/content/docs/general/basics/what-is-plugin.md index 0914bd42..66ee16e5 100644 --- a/src/content/docs/general/basics/what-is-plugin.md +++ b/src/content/docs/general/basics/what-is-plugin.md @@ -1,7 +1,6 @@ --- title: 什么是插件? topic: basics -template: splash --- 如果你玩过整合包,你一定对 `Mod`(即模组)这个概念相当了解,但如果你是第一次开服,你可能不知道什么是 `Plugin`(插件)。本文章会为你详细介绍。 diff --git a/src/content/docs/general/basics/what-is-startup-script.md b/src/content/docs/general/basics/what-is-startup-script.md index 6b98f6e3..12e6a3e7 100644 --- a/src/content/docs/general/basics/what-is-startup-script.md +++ b/src/content/docs/general/basics/what-is-startup-script.md @@ -1,7 +1,6 @@ --- title: 什么是启动脚本? topic: basics -template: splash --- 启动脚本主要部分就是设置 Java 参数设置。 diff --git a/src/content/docs/general/basics/what-is-world.md b/src/content/docs/general/basics/what-is-world.md index 6b4792b8..a20f21bd 100644 --- a/src/content/docs/general/basics/what-is-world.md +++ b/src/content/docs/general/basics/what-is-world.md @@ -1,7 +1,6 @@ --- title: 什么是世界? topic: basics -template: splash --- Minecraft 的几乎一切行为都是建立在“世界”上,而世界中的方块、实体等文件都存储在了根目录的对应文件夹下。 From 8dbf2d59f4e61bd56b68de31afa6560808bb563a Mon Sep 17 00:00:00 2001 From: momo-OwO-qwq Date: Fri, 3 Apr 2026 22:50:15 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=F0=9F=93=9D=20=E6=9B=B4=E6=96=B0=20MCSMana?= =?UTF-8?q?ger=20=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../general/process/deploy/_assets/mcsm.png | Bin 34905 -> 96455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/content/docs/general/process/deploy/_assets/mcsm.png b/src/content/docs/general/process/deploy/_assets/mcsm.png index 0c1d77e1293f1a837686c201ad6b153c59c27f12..2b45c1b28c0dfb4e3fc0ad4fdd5ea29f3c2d335b 100644 GIT binary patch literal 96455 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 Date: Fri, 3 Apr 2026 22:58:09 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=F0=9F=A9=B9=20frp=20=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=8D=95=E4=BD=8D=E5=92=8C=E8=BF=90=E7=AE=97=E7=AC=A6=E5=8F=B7?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/docs/general/process/deploy/frp.mdx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/content/docs/general/process/deploy/frp.mdx b/src/content/docs/general/process/deploy/frp.mdx index d2ce4e42..3e3b252b 100644 --- a/src/content/docs/general/process/deploy/frp.mdx +++ b/src/content/docs/general/process/deploy/frp.mdx @@ -17,7 +17,13 @@ title: 搭建内网穿透 (frp)

如何选择合适的节点? -根据三角形两边之和大于第三边的定理,节点距离客户端或服务端越近,游戏延迟就越小。然而你无法确定客户端的地理位置,毕竟玩家来自大江南北。那么只有缩短节点与服务器之间的距离,才能保证所有玩家的延迟都最低。例如服务器位于河北,有两个节点分别位于山东枣庄和江苏宿迁,有两个玩家分别位于广东和辽宁,那么当选择离服务器更近的枣庄节点时,假设辽宁玩家到节点为 20 ms,广东玩家到节点为 50 ms,服务器到节点为 10 ms,那么辽宁玩家的游戏延迟就是 20+10=30 ms,广东玩家的游戏延迟就是 50ms+10ms=60 ms。当选择离服务器更远的宿迁节点时,假设辽宁玩家到节点为 40 ms,广东玩家到节点为 30 ms,服务器到节点为 30ms,那么辽宁玩家的游戏延迟就是 50+30=70 ms,广东玩家的游戏延迟就是 40+30=60 ms。选择宿迁节点时虽然广东玩家的延迟不变,但是辽宁玩家连接服务器时,数据从更远的宿迁绕了一圈再回来,延迟高了很多。因此选择运营商时,优先选择拥有离自己近的节点的运营商。 +根据三角形两边之和大于第三边的定理,节点距离客户端或服务端越近,游戏延迟就越小。然而你无法确定客户端的地理位置,毕竟玩家来自大江南北。那么只有缩短节点与服务器之间的距离,才能保证所有玩家的延迟都最低。 + +例如,服务器位于河北,有两个节点分别位于山东枣庄和江苏宿迁,有两个玩家分别位于广东和辽宁。那么当选择离服务器更近的枣庄节点时,假设辽宁玩家到节点的延迟为 20 ms,广东玩家到节点的延迟为 50 ms,服务器到节点的延迟为 10 ms,那么辽宁玩家的游戏延迟就是 20 + 10 = 30 ms,广东玩家的游戏延迟就是 50 + 10 = 60 ms。 + +当选择离服务器更远的宿迁节点时,假设辽宁玩家到节点的延迟为 40 ms,广东玩家到节点的延迟为 30 ms,服务器到节点的延迟为 30 ms,那么辽宁玩家的游戏延迟就是 40 + 30 = 70 ms,广东玩家的游戏延迟就是 30 + 30 = 60 ms。 + +选择宿迁节点时,虽然广东玩家的延迟不变,但是辽宁玩家连接服务器时,数据从更远的宿迁绕了一圈再回来,延迟高了很多。因此,选择运营商时,应优先选择拥有离自己近的节点的运营商。
6. 实名认证:为了在意外事故中更好地规划责任,很多内网穿透运营商都要求实名认证才能开始使用,或者部分节点需要实名认证。还有一些实名认证时还要求用户必须成年 (年满 18 岁)。况且实名认证服务提供方收费,内网穿透运营商可能会让你自行承担费用,目前价格通常在 1 元。所以在选择运营商时,如果你未成年,或者没有在线支付的能力,那么在一些运营商处可能会受到限制。 From 541608cf4f8177927c72eaa7e980bee494894768 Mon Sep 17 00:00:00 2001 From: momo-OwO-qwq Date: Fri, 3 Apr 2026 23:31:15 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=F0=9F=8E=A8=20=E5=9B=9E=E9=80=80=E5=AF=B9?= =?UTF-8?q?=20astro.config.ts=20=E7=BC=A9=E8=BF=9B=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astro.config.ts | 2172 +++++++++++++++++++++++------------------------ 1 file changed, 1086 insertions(+), 1086 deletions(-) diff --git a/astro.config.ts b/astro.config.ts index 68f183a8..b8b0dd24 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -14,1114 +14,1114 @@ import vue from "@astrojs/vue"; const IS_CHINA_SITE = process.env.CHINA === "true"; export default defineConfig({ - site: IS_CHINA_SITE ? "https://nitwikit.8aka.cn" : "https://nitwikit.8aka.org", - outDir: "./build", - integrations: [ - vue(), - starlight({ - title: "Cubic Wiki", - description: "一群笨蛋编写的 Minecraft 开服教程", - locales: { - root: { - label: "简体中文", - lang: "zh-CN" - } - }, - favicon: "/favicon.ico", - social: [{ icon: "github", label: "GitHub", href: "https://github.com/Cubic-Project/NitWikit" }], - logo: { src: "./src/assets/logo.svg" }, - lastUpdated: true, - editLink: { - baseUrl: "https://github.com/Cubic-Project/NitWikit/edit/main/" - }, - customCss: ["./src/styles/global.css"], - plugins: [ - starlightGiscus({ - repo: "Cubic-Project/NitWikit", - repoId: "R_kgDOQWQ-Ng", - category: "General", - categoryId: "DIC_kwDOQWQ-Ns4Cx2No", - mapping: "og:title", - lazy: true - }), - starlightSidebarTopics( - [ - { - label: "基础", - link: "/general/intro", - icon: "seti:bazel", - id: "basics", - items: [ - { - label: "从零开始", - collapsed: false, - items: [{ label: "快速开始", slug: "general/intro" }, "general/reading-guide"] - }, - { - label: "通用知识库", - collapsed: true, - items: [ - { - label: "常见术语解析", - collapsed: true, - items: [ - "general/basics/what-is-world", - "general/basics/what-is-datapack", - "general/basics/what-is-mod", - "general/basics/what-is-plugin", - "general/basics/what-is-lag", - "general/basics/what-is-log", - "general/basics/what-is-messy-code", - "general/basics/what-is-permission", - "general/basics/what-is-startup-script", - "general/basics/what-is-nbt", - "general/basics/what-is-namespace", - ] - }, - { - label: "安装 Java", - collapsed: true, - items: [ - "general/java/intro", - "general/java/choose-and-download-and-install-java", - "general/java/environment", - "general/java/sdkman", - "general/java/faq" - ] - }, - { - label: "文本编辑器", - collapsed: true, - autogenerate: { directory: "general/preparation/text-editor" } - }, - { - label: "经营管理", - collapsed: true, - items: [ - "general/advance/management/intro", - { - label: "玩家管理", - autogenerate: { - directory: "general/advance/management/player-management" - } - }, - { - label: "资金管理", - autogenerate: { - directory: "general/advance/management/money-management" - } - } - ] - } - ] + site: IS_CHINA_SITE ? "https://nitwikit.8aka.cn" : "https://nitwikit.8aka.org", + outDir: "./build", + integrations: [ + vue(), + starlight({ + title: "Cubic Wiki", + description: "一群笨蛋编写的 Minecraft 开服教程", + locales: { + root: { + label: "简体中文", + lang: "zh-CN" } - ] }, - { - label: "Java", - link: "/java/intro", - icon: "open-book", - items: [ - { - label: "快速开始", - collapsed: false, - items: ["java/intro"] - }, - { - label: "准备工作", - items: [ - "java/preparation/intro", - { - label: "安装 Java", - collapsed: true, - items: [ - "general/java/intro", - "general/java/choose-and-download-and-install-java", - "general/java/environment", - "general/java/sdkman", - "general/java/faq" - ] - }, - { - label: "文本编辑器", - collapsed: true, - autogenerate: { directory: "general/preparation/text-editor" } - } - ] - }, - { - label: "开始阶段", - items: [ - "java/start/intro", - { - label: "基础知识", - collapsed: true, - items: [ - "java/start/basic/intro", - "java/start/basic/what-is-server", - "java/start/basic/server-management-command" - ] - }, - { - label: "选择服务器端", - collapsed: true, - items: [ - "java/start/server-core-choose/intro", - "java/start/server-core-choose/relationship-between-servers", - "java/start/server-core-choose/plugin", - "java/start/server-core-choose/mod", - "java/start/server-core-choose/hybrid", - { - label: "Folia", - collapsed: true, - autogenerate: { directory: "java/start/server-core-choose/folia" } - } - ] - }, - "java/start/install-mod-server", - "java/start/launch-server", - "java/start/server-dir-structure", - "java/start/config-server", - "java/start/connect-to-server", - { - label: "部署到生产环境", - collapsed: true, - autogenerate: { directory: "general/process/deploy" } - } - ] - }, - { - label: "建设与运营", - items: [ - "java/process/intro", - { - label: "插件", - collapsed: true, - items: [ - "java/process/plugin/intro", - { - label: "前言与基础", - collapsed: true, - items: [ - "java/process/plugin/more/intro", - "java/process/plugin/more/plugin-download", - { - label: "YAML", - collapsed: true, - items: [ - "java/process/plugin/more/yaml/intro", - "java/process/plugin/more/yaml/general", - "java/process/plugin/more/yaml/extention" - ] - }, - "java/process/plugin/more/color-message", - "java/process/plugin/more/plugin-abbreviation", - "java/process/plugin/more/plugin-backdoor", - { - label: "插件构建", - collapsed: true, - items: [ - "java/process/plugin/more/plugin-build/intro", - "java/process/plugin/more/plugin-build/idea-build", - "java/process/plugin/more/plugin-build/terminal-build", - "java/process/plugin/more/plugin-build/github-actions-build", - "java/process/plugin/more/plugin-build/mirror-config" - ] - }, - "java/process/plugin/more/plugin-config", - "java/process/plugin/more/plugin-troubleshooting", - "java/process/plugin/more/faq", - "java/process/plugin/more/plugin-signature-file", - "java/process/plugin/more/tittle-tattle" - ] - }, + favicon: "/favicon.ico", + social: [{ icon: "github", label: "GitHub", href: "https://github.com/Cubic-Project/NitWikit" }], + logo: { src: "./src/assets/logo.svg" }, + lastUpdated: true, + editLink: { + baseUrl: "https://github.com/Cubic-Project/NitWikit/edit/main/" + }, + customCss: ["./src/styles/global.css"], + plugins: [ + starlightGiscus({ + repo: "Cubic-Project/NitWikit", + repoId: "R_kgDOQWQ-Ng", + category: "General", + categoryId: "DIC_kwDOQWQ-Ns4Cx2No", + mapping: "og:title", + lazy: true + }), + starlightSidebarTopics( + [ { - label: "前置", - collapsed: true, - items: [ - "java/process/plugin/plugin-dependencies/intro", - { - label: "PlaceholderAPI", - collapsed: true, - items: [ - "java/process/plugin/plugin-dependencies/placeholderapi/intro", - "java/process/plugin/plugin-dependencies/placeholderapi/common-usage", - "java/process/plugin/plugin-dependencies/placeholderapi/parse-other", - "java/process/plugin/plugin-dependencies/placeholderapi/math", - "java/process/plugin/plugin-dependencies/placeholderapi/string", - "java/process/plugin/plugin-dependencies/placeholderapi/progress", - "java/process/plugin/plugin-dependencies/placeholderapi/javascript", - "java/process/plugin/plugin-dependencies/placeholderapi/check-item", - "java/process/plugin/plugin-dependencies/placeholderapi/change-output", - "java/process/plugin/plugin-dependencies/placeholderapi/faq" - ] - }, - "java/process/plugin/plugin-dependencies/playerpoints", - "java/process/plugin/plugin-dependencies/protocollib", - { - label: "Vault", - collapsed: true, - items: [ - "java/process/plugin/plugin-dependencies/vault/intro", - "java/process/plugin/plugin-dependencies/vault/serviceio", - "java/process/plugin/plugin-dependencies/vault/vaultunlocked" - ] - }, - "java/process/plugin/plugin-dependencies/xconomy" - ] + label: "基础", + link: "/general/intro", + icon: "seti:bazel", + id: "basics", + items: [ + { + label: "从零开始", + collapsed: false, + items: [{ label: "快速开始", slug: "general/intro" }, "general/reading-guide"] + }, + { + label: "通用知识库", + collapsed: true, + items: [ + { + label: "常见术语解析", + collapsed: true, + items: [ + "general/basics/what-is-world", + "general/basics/what-is-datapack", + "general/basics/what-is-mod", + "general/basics/what-is-plugin", + "general/basics/what-is-lag", + "general/basics/what-is-log", + "general/basics/what-is-messy-code", + "general/basics/what-is-permission", + "general/basics/what-is-startup-script", + "general/basics/what-is-nbt", + "general/basics/what-is-namespace", + ] + }, + { + label: "安装 Java", + collapsed: true, + items: [ + "general/java/intro", + "general/java/choose-and-download-and-install-java", + "general/java/environment", + "general/java/sdkman", + "general/java/faq" + ] + }, + { + label: "文本编辑器", + collapsed: true, + autogenerate: { directory: "general/preparation/text-editor" } + }, + { + label: "经营管理", + collapsed: true, + items: [ + "general/advance/management/intro", + { + label: "玩家管理", + autogenerate: { + directory: "general/advance/management/player-management" + } + }, + { + label: "资金管理", + autogenerate: { + directory: "general/advance/management/money-management" + } + } + ] + } + ] + } + ] }, { - label: "管理", - collapsed: true, - items: [ - { - label: "防破坏", - collapsed: true, - items: [ - "java/process/plugin/management-tool/anti-grief/intro", - "java/process/plugin/management-tool/anti-grief/coreprotect", - "java/process/plugin/management-tool/anti-grief/invseeplusplus", - "java/process/plugin/management-tool/anti-grief/prismrefracted" - ] - }, - { - label: "基础插件", - collapsed: true, - items: [ - "java/process/plugin/management-tool/basic-plugins/intro", - "java/process/plugin/management-tool/basic-plugins/delete", + label: "Java", + link: "/java/intro", + icon: "open-book", + items: [ { - label: "CMI", - collapsed: true, - items: [ - "java/process/plugin/management-tool/basic-plugins/cmi/intro", - "java/process/plugin/management-tool/basic-plugins/cmi/eco", - "java/process/plugin/management-tool/basic-plugins/cmi/question" - ] + label: "快速开始", + collapsed: false, + items: ["java/intro"] }, { - label: "EssentialsX", - collapsed: true, - items: [ - "java/process/plugin/management-tool/basic-plugins/essentialsx/intro", - "java/process/plugin/management-tool/basic-plugins/essentialsx/config-yml", - "java/process/plugin/management-tool/basic-plugins/essentialsx/config-tips", - "java/process/plugin/management-tool/basic-plugins/essentialsx/warp", - "java/process/plugin/management-tool/basic-plugins/essentialsx/kit", - "java/process/plugin/management-tool/basic-plugins/essentialsx/papi-support", - "java/process/plugin/management-tool/basic-plugins/essentialsx/faq" - ] + label: "准备工作", + items: [ + "java/preparation/intro", + { + label: "安装 Java", + collapsed: true, + items: [ + "general/java/intro", + "general/java/choose-and-download-and-install-java", + "general/java/environment", + "general/java/sdkman", + "general/java/faq" + ] + }, + { + label: "文本编辑器", + collapsed: true, + autogenerate: { directory: "general/preparation/text-editor" } + } + ] }, - "java/process/plugin/management-tool/basic-plugins/sunlight" - ] - }, - { - label: "聊天", - collapsed: true, - items: [ - "java/process/plugin/management-tool/chat/intro", - "java/process/plugin/management-tool/chat/carbon", - "java/process/plugin/management-tool/chat/huskchat", - "java/process/plugin/management-tool/chat/trchat", - "java/process/plugin/management-tool/chat/interactivechat" - ] - }, - { - label: "物品库", - collapsed: true, - items: [ - "java/process/plugin/management-tool/items/intro", - "java/process/plugin/management-tool/items/crucible", - "java/process/plugin/management-tool/items/ecoitems", - "java/process/plugin/management-tool/items/mmoitems", - "java/process/plugin/management-tool/items/neigeitems", - "java/process/plugin/management-tool/items/ratziel", - "java/process/plugin/management-tool/items/sx-item", - "java/process/plugin/management-tool/items/zaphkiel", - "java/process/plugin/management-tool/items/misc" - ] - }, - { - label: "权限", - collapsed: true, - items: [ - "java/process/plugin/management-tool/permission/intro", - "java/process/plugin/management-tool/permission/what-is-permission", - "java/process/plugin/management-tool/permission/group", - "java/process/plugin/management-tool/permission/command", - "java/process/plugin/management-tool/permission/tips", - "java/process/plugin/management-tool/permission/meta" - ] - }, - { - label: "插件管理", - collapsed: true, - items: [ - "java/process/plugin/management-tool/plugin-management/intro", - "java/process/plugin/management-tool/plugin-management/plugin-portal", - "java/process/plugin/management-tool/plugin-management/plugmanx", - "java/process/plugin/management-tool/plugin-management/serverutils", - "java/process/plugin/management-tool/plugin-management/yum" - ] - }, - { - label: "任务", - collapsed: true, - items: [ - "java/process/plugin/management-tool/task/intro", - "java/process/plugin/management-tool/task/beautyquests", - "java/process/plugin/management-tool/task/betonquest", - "java/process/plugin/management-tool/task/chemdah", - "java/process/plugin/management-tool/task/mangoquest", - "java/process/plugin/management-tool/task/playertask", - "java/process/plugin/management-tool/task/questcreator", - "java/process/plugin/management-tool/task/questengine", - "java/process/plugin/management-tool/task/quests", - "java/process/plugin/management-tool/task/typewriter" - ] - } - ] - }, - { - label: "保护", - collapsed: true, - items: [ - "java/process/plugin/protection/intro", - "java/process/plugin/protection/residence", - "java/process/plugin/protection/dominion", - "java/process/plugin/protection/griefdefender", - "java/process/plugin/protection/plotsquared", - "java/process/plugin/protection/askyblock", - "java/process/plugin/protection/bentobox", - "java/process/plugin/protection/towny" - ] - }, - { - label: "世界管理", - collapsed: true, - items: [ - "java/process/plugin/world-management/worldedit", - "java/process/plugin/world-management/worldguard", - "java/process/plugin/world-management/fastasyncworldedit", - "java/process/plugin/world-management/law", - "java/process/plugin/world-management/myworld", - "java/process/plugin/world-management/nobuildplus", - { - label: "大厅", - collapsed: true, - items: [ - "java/process/plugin/world-management/lobby/intro", - "java/process/plugin/world-management/lobby/deluxehub", - "java/process/plugin/world-management/lobby/deluxehubreloaded", - "java/process/plugin/world-management/lobby/superlobbydeluxe" - ] - }, - { - label: "多世界 - Multiverse", - collapsed: true, - items: [ - "java/process/plugin/world-management/multiverse/intro", - "java/process/plugin/world-management/multiverse/faq1", - "java/process/plugin/world-management/multiverse/faq2" - ] - }, - { - label: "世界生成", - collapsed: true, - items: [ - "java/process/plugin/world-management/worldgen/intro", - "java/process/plugin/world-management/worldgen/terra", - "java/process/plugin/world-management/worldgen/irisworldgen", - "java/process/plugin/world-management/worldgen/terraformgenerator" - ] - } - ] - }, - { - label: "游戏性", - collapsed: true, - items: [ - "java/process/plugin/game/dragoncore", - "java/process/plugin/game/germengine", - "java/process/plugin/game/nova", - { - label: "Slimefun", - collapsed: true, - items: [ - "java/process/plugin/game/slimefun/intro", - "java/process/plugin/game/slimefun/auto-update", - "java/process/plugin/game/slimefun/find-lag", - "java/process/plugin/game/slimefun/resourcepack-for-slimefun" - ] - }, - { - label: "称号", - collapsed: true, - items: [ - "java/process/plugin/game/title/deluxetags", - "java/process/plugin/game/title/miniplayertitle", - "java/process/plugin/game/title/mythicprefixes", - "java/process/plugin/game/title/playertitle", - "java/process/plugin/game/title/userprefix" - ] - } - ] - }, - { - label: "其他", - collapsed: true, - items: [ - "java/process/plugin/misc/intro", - { - label: "全息图", - collapsed: true, - items: [ - "java/process/plugin/misc/holograms/intro", - "java/process/plugin/misc/holograms/decentholograms", - "java/process/plugin/misc/holograms/holographicdisplays" - ] - }, - { - label: "登录", - collapsed: true, - items: [ - "java/process/plugin/misc/login/intro", - "java/process/plugin/misc/login/authme", - "java/process/plugin/misc/login/catseedlogin", - "java/process/plugin/misc/login/librelogin", - "java/process/plugin/misc/login/limboauth" - ] - }, - { - label: "菜单", - collapsed: true, - items: [ - "java/process/plugin/misc/menu/intro", - "java/process/plugin/misc/menu/chestcommands", - "java/process/plugin/misc/menu/deluxemenus", - "java/process/plugin/misc/menu/invero", - "java/process/plugin/misc/menu/trmenu" - ] - }, - "java/process/plugin/misc/money", - { - label: "MOTD", - collapsed: true, - items: [ - "java/process/plugin/misc/motd/intro", - "java/process/plugin/misc/motd/minimotd" - ] - }, - "java/process/plugin/misc/mythicmobs", - { - label: "NPC", - collapsed: true, - items: [ - "java/process/plugin/misc/npc/intro", - "java/process/plugin/misc/npc/adyeshach", - "java/process/plugin/misc/npc/citizens", - "java/process/plugin/misc/npc/znpcsplus" - ] - }, - "java/process/plugin/misc/quickshop", - "java/process/plugin/misc/skinsrestorer", - { - label: "Tab/记分板", - collapsed: true, - items: [ - "java/process/plugin/misc/tab-scoreboard/intro", - "java/process/plugin/misc/tab-scoreboard/simplescore", - "java/process/plugin/misc/tab-scoreboard/tab", - "java/process/plugin/misc/tab-scoreboard/titlemanager" - ] - }, - { - label: "版本兼容", - collapsed: true, - items: [ - "java/process/plugin/misc/via/intro", - "java/process/plugin/misc/via/viaversion", - "java/process/plugin/misc/via/viabackwards", - "java/process/plugin/misc/via/viarewind", - "java/process/plugin/misc/via/more-for-via" - ] - } - ] - } - ] - }, - { - label: "跨服端", - collapsed: true, - items: [ - "java/process/cross-server/intro", - "java/process/cross-server/server-core-choose", - { - label: "搭建", - collapsed: true, - items: [ - { - label: "BungeeCord", - collapsed: true, - items: [ - "java/process/cross-server/setup/bungeecord/intro", - "java/process/cross-server/setup/bungeecord/setup", - "java/process/cross-server/setup/bungeecord/config-yml", - "java/process/cross-server/setup/bungeecord/lobby" - ] - }, - { - label: "Velocity", - collapsed: true, - items: [ - "java/process/cross-server/setup/velocity/intro", - "java/process/cross-server/setup/velocity/setup", - "java/process/cross-server/setup/velocity/velocity-toml", - "java/process/cross-server/setup/velocity/lobby" - ] - }, - { - label: "Velocity CTD", - collapsed: true, - items: [ - "java/process/cross-server/setup/velocity-ctd/intro", - "java/process/cross-server/setup/velocity-ctd/setup", - "java/process/cross-server/setup/velocity-ctd/velocity-toml", - "java/process/cross-server/setup/velocity-ctd/features", - "java/process/cross-server/setup/velocity-ctd/lobby" - ] - }, - { - label: "Transfer", - collapsed: true, - items: [ - "java/process/cross-server/setup/transfer/intro", - "java/process/cross-server/setup/transfer/setup" - ] - } - ] - }, - "java/process/cross-server/join-server", - "java/process/cross-server/command", - { - label: "跨服插件", - collapsed: true, - items: [ - "java/process/cross-server/plugin/intro", - "java/process/cross-server/plugin/backend-only", - "java/process/cross-server/plugin/proxy-only", - "java/process/cross-server/plugin/proxy-backend-optional", - "java/process/cross-server/plugin/proxy-backend-mandatory" - ] + { + label: "开始阶段", + items: [ + "java/start/intro", + { + label: "基础知识", + collapsed: true, + items: [ + "java/start/basic/intro", + "java/start/basic/what-is-server", + "java/start/basic/server-management-command" + ] + }, + { + label: "选择服务器端", + collapsed: true, + items: [ + "java/start/server-core-choose/intro", + "java/start/server-core-choose/relationship-between-servers", + "java/start/server-core-choose/plugin", + "java/start/server-core-choose/mod", + "java/start/server-core-choose/hybrid", + { + label: "Folia", + collapsed: true, + autogenerate: { directory: "java/start/server-core-choose/folia" } + } + ] + }, + "java/start/install-mod-server", + "java/start/launch-server", + "java/start/server-dir-structure", + "java/start/config-server", + "java/start/connect-to-server", + { + label: "部署到生产环境", + collapsed: true, + autogenerate: { directory: "general/process/deploy" } + } + ] + }, + { + label: "建设与运营", + items: [ + "java/process/intro", + { + label: "插件", + collapsed: true, + items: [ + "java/process/plugin/intro", + { + label: "前言与基础", + collapsed: true, + items: [ + "java/process/plugin/more/intro", + "java/process/plugin/more/plugin-download", + { + label: "YAML", + collapsed: true, + items: [ + "java/process/plugin/more/yaml/intro", + "java/process/plugin/more/yaml/general", + "java/process/plugin/more/yaml/extention" + ] + }, + "java/process/plugin/more/color-message", + "java/process/plugin/more/plugin-abbreviation", + "java/process/plugin/more/plugin-backdoor", + { + label: "插件构建", + collapsed: true, + items: [ + "java/process/plugin/more/plugin-build/intro", + "java/process/plugin/more/plugin-build/idea-build", + "java/process/plugin/more/plugin-build/terminal-build", + "java/process/plugin/more/plugin-build/github-actions-build", + "java/process/plugin/more/plugin-build/mirror-config" + ] + }, + "java/process/plugin/more/plugin-config", + "java/process/plugin/more/plugin-troubleshooting", + "java/process/plugin/more/faq", + "java/process/plugin/more/plugin-signature-file", + "java/process/plugin/more/tittle-tattle" + ] + }, + { + label: "前置", + collapsed: true, + items: [ + "java/process/plugin/plugin-dependencies/intro", + { + label: "PlaceholderAPI", + collapsed: true, + items: [ + "java/process/plugin/plugin-dependencies/placeholderapi/intro", + "java/process/plugin/plugin-dependencies/placeholderapi/common-usage", + "java/process/plugin/plugin-dependencies/placeholderapi/parse-other", + "java/process/plugin/plugin-dependencies/placeholderapi/math", + "java/process/plugin/plugin-dependencies/placeholderapi/string", + "java/process/plugin/plugin-dependencies/placeholderapi/progress", + "java/process/plugin/plugin-dependencies/placeholderapi/javascript", + "java/process/plugin/plugin-dependencies/placeholderapi/check-item", + "java/process/plugin/plugin-dependencies/placeholderapi/change-output", + "java/process/plugin/plugin-dependencies/placeholderapi/faq" + ] + }, + "java/process/plugin/plugin-dependencies/playerpoints", + "java/process/plugin/plugin-dependencies/protocollib", + { + label: "Vault", + collapsed: true, + items: [ + "java/process/plugin/plugin-dependencies/vault/intro", + "java/process/plugin/plugin-dependencies/vault/serviceio", + "java/process/plugin/plugin-dependencies/vault/vaultunlocked" + ] + }, + "java/process/plugin/plugin-dependencies/xconomy" + ] + }, + { + label: "管理", + collapsed: true, + items: [ + { + label: "防破坏", + collapsed: true, + items: [ + "java/process/plugin/management-tool/anti-grief/intro", + "java/process/plugin/management-tool/anti-grief/coreprotect", + "java/process/plugin/management-tool/anti-grief/invseeplusplus", + "java/process/plugin/management-tool/anti-grief/prismrefracted" + ] + }, + { + label: "基础插件", + collapsed: true, + items: [ + "java/process/plugin/management-tool/basic-plugins/intro", + "java/process/plugin/management-tool/basic-plugins/delete", + { + label: "CMI", + collapsed: true, + items: [ + "java/process/plugin/management-tool/basic-plugins/cmi/intro", + "java/process/plugin/management-tool/basic-plugins/cmi/eco", + "java/process/plugin/management-tool/basic-plugins/cmi/question" + ] + }, + { + label: "EssentialsX", + collapsed: true, + items: [ + "java/process/plugin/management-tool/basic-plugins/essentialsx/intro", + "java/process/plugin/management-tool/basic-plugins/essentialsx/config-yml", + "java/process/plugin/management-tool/basic-plugins/essentialsx/config-tips", + "java/process/plugin/management-tool/basic-plugins/essentialsx/warp", + "java/process/plugin/management-tool/basic-plugins/essentialsx/kit", + "java/process/plugin/management-tool/basic-plugins/essentialsx/papi-support", + "java/process/plugin/management-tool/basic-plugins/essentialsx/faq" + ] + }, + "java/process/plugin/management-tool/basic-plugins/sunlight" + ] + }, + { + label: "聊天", + collapsed: true, + items: [ + "java/process/plugin/management-tool/chat/intro", + "java/process/plugin/management-tool/chat/carbon", + "java/process/plugin/management-tool/chat/huskchat", + "java/process/plugin/management-tool/chat/trchat", + "java/process/plugin/management-tool/chat/interactivechat" + ] + }, + { + label: "物品库", + collapsed: true, + items: [ + "java/process/plugin/management-tool/items/intro", + "java/process/plugin/management-tool/items/crucible", + "java/process/plugin/management-tool/items/ecoitems", + "java/process/plugin/management-tool/items/mmoitems", + "java/process/plugin/management-tool/items/neigeitems", + "java/process/plugin/management-tool/items/ratziel", + "java/process/plugin/management-tool/items/sx-item", + "java/process/plugin/management-tool/items/zaphkiel", + "java/process/plugin/management-tool/items/misc" + ] + }, + { + label: "权限", + collapsed: true, + items: [ + "java/process/plugin/management-tool/permission/intro", + "java/process/plugin/management-tool/permission/what-is-permission", + "java/process/plugin/management-tool/permission/group", + "java/process/plugin/management-tool/permission/command", + "java/process/plugin/management-tool/permission/tips", + "java/process/plugin/management-tool/permission/meta" + ] + }, + { + label: "插件管理", + collapsed: true, + items: [ + "java/process/plugin/management-tool/plugin-management/intro", + "java/process/plugin/management-tool/plugin-management/plugin-portal", + "java/process/plugin/management-tool/plugin-management/plugmanx", + "java/process/plugin/management-tool/plugin-management/serverutils", + "java/process/plugin/management-tool/plugin-management/yum" + ] + }, + { + label: "任务", + collapsed: true, + items: [ + "java/process/plugin/management-tool/task/intro", + "java/process/plugin/management-tool/task/beautyquests", + "java/process/plugin/management-tool/task/betonquest", + "java/process/plugin/management-tool/task/chemdah", + "java/process/plugin/management-tool/task/mangoquest", + "java/process/plugin/management-tool/task/playertask", + "java/process/plugin/management-tool/task/questcreator", + "java/process/plugin/management-tool/task/questengine", + "java/process/plugin/management-tool/task/quests", + "java/process/plugin/management-tool/task/typewriter" + ] + } + ] + }, + { + label: "保护", + collapsed: true, + items: [ + "java/process/plugin/protection/intro", + "java/process/plugin/protection/residence", + "java/process/plugin/protection/dominion", + "java/process/plugin/protection/griefdefender", + "java/process/plugin/protection/plotsquared", + "java/process/plugin/protection/askyblock", + "java/process/plugin/protection/bentobox", + "java/process/plugin/protection/towny" + ] + }, + { + label: "世界管理", + collapsed: true, + items: [ + "java/process/plugin/world-management/worldedit", + "java/process/plugin/world-management/worldguard", + "java/process/plugin/world-management/fastasyncworldedit", + "java/process/plugin/world-management/law", + "java/process/plugin/world-management/myworld", + "java/process/plugin/world-management/nobuildplus", + { + label: "大厅", + collapsed: true, + items: [ + "java/process/plugin/world-management/lobby/intro", + "java/process/plugin/world-management/lobby/deluxehub", + "java/process/plugin/world-management/lobby/deluxehubreloaded", + "java/process/plugin/world-management/lobby/superlobbydeluxe" + ] + }, + { + label: "多世界 - Multiverse", + collapsed: true, + items: [ + "java/process/plugin/world-management/multiverse/intro", + "java/process/plugin/world-management/multiverse/faq1", + "java/process/plugin/world-management/multiverse/faq2" + ] + }, + { + label: "世界生成", + collapsed: true, + items: [ + "java/process/plugin/world-management/worldgen/intro", + "java/process/plugin/world-management/worldgen/terra", + "java/process/plugin/world-management/worldgen/irisworldgen", + "java/process/plugin/world-management/worldgen/terraformgenerator" + ] + } + ] + }, + { + label: "游戏性", + collapsed: true, + items: [ + "java/process/plugin/game/dragoncore", + "java/process/plugin/game/germengine", + "java/process/plugin/game/nova", + { + label: "Slimefun", + collapsed: true, + items: [ + "java/process/plugin/game/slimefun/intro", + "java/process/plugin/game/slimefun/auto-update", + "java/process/plugin/game/slimefun/find-lag", + "java/process/plugin/game/slimefun/resourcepack-for-slimefun" + ] + }, + { + label: "称号", + collapsed: true, + items: [ + "java/process/plugin/game/title/deluxetags", + "java/process/plugin/game/title/miniplayertitle", + "java/process/plugin/game/title/mythicprefixes", + "java/process/plugin/game/title/playertitle", + "java/process/plugin/game/title/userprefix" + ] + } + ] + }, + { + label: "其他", + collapsed: true, + items: [ + "java/process/plugin/misc/intro", + { + label: "全息图", + collapsed: true, + items: [ + "java/process/plugin/misc/holograms/intro", + "java/process/plugin/misc/holograms/decentholograms", + "java/process/plugin/misc/holograms/holographicdisplays" + ] + }, + { + label: "登录", + collapsed: true, + items: [ + "java/process/plugin/misc/login/intro", + "java/process/plugin/misc/login/authme", + "java/process/plugin/misc/login/catseedlogin", + "java/process/plugin/misc/login/librelogin", + "java/process/plugin/misc/login/limboauth" + ] + }, + { + label: "菜单", + collapsed: true, + items: [ + "java/process/plugin/misc/menu/intro", + "java/process/plugin/misc/menu/chestcommands", + "java/process/plugin/misc/menu/deluxemenus", + "java/process/plugin/misc/menu/invero", + "java/process/plugin/misc/menu/trmenu" + ] + }, + "java/process/plugin/misc/money", + { + label: "MOTD", + collapsed: true, + items: [ + "java/process/plugin/misc/motd/intro", + "java/process/plugin/misc/motd/minimotd" + ] + }, + "java/process/plugin/misc/mythicmobs", + { + label: "NPC", + collapsed: true, + items: [ + "java/process/plugin/misc/npc/intro", + "java/process/plugin/misc/npc/adyeshach", + "java/process/plugin/misc/npc/citizens", + "java/process/plugin/misc/npc/znpcsplus" + ] + }, + "java/process/plugin/misc/quickshop", + "java/process/plugin/misc/skinsrestorer", + { + label: "Tab/记分板", + collapsed: true, + items: [ + "java/process/plugin/misc/tab-scoreboard/intro", + "java/process/plugin/misc/tab-scoreboard/simplescore", + "java/process/plugin/misc/tab-scoreboard/tab", + "java/process/plugin/misc/tab-scoreboard/titlemanager" + ] + }, + { + label: "版本兼容", + collapsed: true, + items: [ + "java/process/plugin/misc/via/intro", + "java/process/plugin/misc/via/viaversion", + "java/process/plugin/misc/via/viabackwards", + "java/process/plugin/misc/via/viarewind", + "java/process/plugin/misc/via/more-for-via" + ] + } + ] + } + ] + }, + { + label: "跨服端", + collapsed: true, + items: [ + "java/process/cross-server/intro", + "java/process/cross-server/server-core-choose", + { + label: "搭建", + collapsed: true, + items: [ + { + label: "BungeeCord", + collapsed: true, + items: [ + "java/process/cross-server/setup/bungeecord/intro", + "java/process/cross-server/setup/bungeecord/setup", + "java/process/cross-server/setup/bungeecord/config-yml", + "java/process/cross-server/setup/bungeecord/lobby" + ] + }, + { + label: "Velocity", + collapsed: true, + items: [ + "java/process/cross-server/setup/velocity/intro", + "java/process/cross-server/setup/velocity/setup", + "java/process/cross-server/setup/velocity/velocity-toml", + "java/process/cross-server/setup/velocity/lobby" + ] + }, + { + label: "Velocity CTD", + collapsed: true, + items: [ + "java/process/cross-server/setup/velocity-ctd/intro", + "java/process/cross-server/setup/velocity-ctd/setup", + "java/process/cross-server/setup/velocity-ctd/velocity-toml", + "java/process/cross-server/setup/velocity-ctd/features", + "java/process/cross-server/setup/velocity-ctd/lobby" + ] + }, + { + label: "Transfer", + collapsed: true, + items: [ + "java/process/cross-server/setup/transfer/intro", + "java/process/cross-server/setup/transfer/setup" + ] + } + ] + }, + "java/process/cross-server/join-server", + "java/process/cross-server/command", + { + label: "跨服插件", + collapsed: true, + items: [ + "java/process/cross-server/plugin/intro", + "java/process/cross-server/plugin/backend-only", + "java/process/cross-server/plugin/proxy-only", + "java/process/cross-server/plugin/proxy-backend-optional", + "java/process/cross-server/plugin/proxy-backend-mandatory" + ] + }, + "java/process/cross-server/hide-the-real-ip", + "java/process/cross-server/precautions" + ] + }, + { + label: "手机玩家支持", + collapsed: true, + items: [ + "java/process/mobile-player/intro", + { + label: "Geyser", + collapsed: true, + items: [ + "java/process/mobile-player/geyser/intro", + "java/process/mobile-player/geyser/install", + "java/process/mobile-player/geyser/faq", + { + label: "进阶", + collapsed: true, + items: [ + "java/process/mobile-player/geyser/upgrade/link", + "java/process/mobile-player/geyser/upgrade/menu", + "java/process/mobile-player/geyser/upgrade/slimefun", + "java/process/mobile-player/geyser/upgrade/geyser-skull", + "java/process/mobile-player/geyser/upgrade/custom-item-model-map", + "java/process/mobile-player/geyser/upgrade/geysermeg4-supports", + { + label: "扩展", + collapsed: true, + items: [ + "java/process/mobile-player/geyser/upgrade/extended/intro", + "java/process/mobile-player/geyser/upgrade/extended/compatible", + "java/process/mobile-player/geyser/upgrade/extended/fix", + "java/process/mobile-player/geyser/upgrade/extended/more" + ] + } + ] + } + ] + }, + { + label: "手机 Java 版", + collapsed: true, + items: [ + "java/process/mobile-player/client/intro", + "java/process/mobile-player/client/amethyst-ios", + "java/process/mobile-player/client/android-all", + "java/process/mobile-player/client/renderer", + "java/process/mobile-player/client/pcl" + ] + } + ] + }, + { + label: "生电", + collapsed: true, + items: [ + "java/process/redstone/intro", + "java/process/redstone/plugin", + "java/process/redstone/mchprs", + "java/process/redstone/mod" + ] + }, + { + label: "地图建设", + collapsed: true, + autogenerate: { directory: "general/process/map" } + }, + "general/process/create-art-assets", + "general/process/panel" + ] + }, + { + label: "进阶知识", + collapsed: false, + items: [ + "java/advance/intro", + { + label: "Linux 开服", + collapsed: true, + autogenerate: { + directory: "general/advance/linux" + } + }, + { + label: "数据库相关", + collapsed: true, + autogenerate: { + directory: "general/process/database" + } + }, + "java/advance/backup", + { + label: "优化", + collapsed: true, + items: [ + "java/advance/optimize/intro", + { + label: "JVM", + collapsed: true, + items: [ + "java/advance/optimize/jvm/intro", + "java/advance/optimize/jvm/common", + "java/advance/optimize/jvm/dragonwell8", + "java/advance/optimize/jvm/dragonwell11", + "java/advance/optimize/jvm/semeru", + "java/advance/optimize/jvm/graal", + "java/advance/optimize/jvm/zing" + ] + }, + "java/advance/optimize/go", + "java/advance/optimize/storage-space-optimization", + "java/advance/optimize/performance-analysis", + "java/advance/optimize/kernel", + "java/advance/optimize/optimized-plugin", + "java/advance/optimize/ask-for-profiling-help" + ] + }, + { + label: "反作弊", + collapsed: true, + items: [ + "java/advance/anticheat/intro", + "java/advance/anticheat/anticheatplugins", + "java/advance/anticheat/antixray", + "java/advance/anticheat/rng", + "java/advance/anticheat/anti-crash", + "java/advance/anticheat/honeypot" + ] + }, + { + label: "资源包", + collapsed: true, + items: [ + "java/advance/resourcepack/intro", + "java/advance/resourcepack/software", + "java/advance/resourcepack/send", + "java/advance/resourcepack/compress", + { + label: "插件", + collapsed: true, + items: [ + "java/advance/resourcepack/plugins/intro", + "java/advance/resourcepack/plugins/hud", + "java/advance/resourcepack/plugins/entity", + "java/advance/resourcepack/plugins/vehicles", + "java/advance/resourcepack/plugins/framework", + "java/advance/resourcepack/plugins/tooltip", + "java/advance/resourcepack/plugins/misc" + ] + }, + "java/advance/resourcepack/protect", + "java/advance/resourcepack/addon" + ] + }, + "general/advance/maintenance/how-to-defend-against-cyber-attacks", + { + label: "脚本语言", + collapsed: true, + items: [ + "java/advance/lang/intro", + { + label: "Skript", + collapsed: true, + items: [ + "java/advance/lang/skript/intro", + "java/advance/lang/skript/basic-tutorials", + "java/advance/lang/skript/advanced-tutorials" + ] + }, + { + label: "Kether", + collapsed: true, + items: [ + "java/advance/lang/kether/intro", + "java/advance/lang/kether/preparation", + "java/advance/lang/kether/basic", + "java/advance/lang/kether/if", + "java/advance/lang/kether/variable", + "java/advance/lang/kether/math", + "java/advance/lang/kether/misc", + "java/advance/lang/kether/vulpecula" + ] + }, + { + label: "JavaScript", + collapsed: true, + items: [ + "java/advance/lang/javascript/intro", + { + label: "扩展", + collapsed: true, + items: [ + "java/advance/lang/javascript/extend/intro", + "java/advance/lang/javascript/extend/nashorn", + "java/advance/lang/javascript/extend/graaljs" + ] + } + ] + } + ] + }, + "general/advance/domain-and-dns", + "java/advance/command-yml", + "java/advance/login-choices", + "java/advance/arthas", + "java/advance/chinese-username", + "java/advance/slime-world", + { + label: "机器人框架", + collapsed: true, + autogenerate: { + directory: "general/advance/bot" + } + } + ] + }, + { + label: "附录", + collapsed: false, + items: ["general/more/ask-for-help"] + } + ] }, - "java/process/cross-server/hide-the-real-ip", - "java/process/cross-server/precautions" - ] - }, - { - label: "手机玩家支持", - collapsed: true, - items: [ - "java/process/mobile-player/intro", { - label: "Geyser", - collapsed: true, - items: [ - "java/process/mobile-player/geyser/intro", - "java/process/mobile-player/geyser/install", - "java/process/mobile-player/geyser/faq", - { - label: "进阶", - collapsed: true, - items: [ - "java/process/mobile-player/geyser/upgrade/link", - "java/process/mobile-player/geyser/upgrade/menu", - "java/process/mobile-player/geyser/upgrade/slimefun", - "java/process/mobile-player/geyser/upgrade/geyser-skull", - "java/process/mobile-player/geyser/upgrade/custom-item-model-map", - "java/process/mobile-player/geyser/upgrade/geysermeg4-supports", + label: "Bedrock", + link: "/bedrock/intro", + icon: "open-book", + items: [ + { + label: "快速开始", + items: ["bedrock/intro"] + }, + { + label: "超级基础知识", + items: [ + "bedrock/super-basic/intro", + "bedrock/super-basic/server-core-choose", + "bedrock/super-basic/server-type", + "bedrock/super-basic/protocol-version-number", + "bedrock/super-basic/version" + ] + }, + { + label: "BDS 核心", + items: [ + { + label: "准备工作", + collapsed: true, + items: [ + "bedrock/bds/preparation/intro", + { + label: "文本编辑器", + collapsed: true, + autogenerate: { directory: "general/preparation/text-editor" } + }, + "bedrock/bds/preparation/vcruntime", + "bedrock/bds/preparation/websites" + ] + }, + { + label: "开始阶段", + collapsed: true, + items: [ + "bedrock/bds/start/intro", + { + label: "基础知识", + items: [ + "bedrock/bds/start/basic/intro", + "bedrock/bds/start/basic/server-dir-structure" + ] + } + ] + }, + { + label: "建设阶段", + collapsed: true, + items: [ + "bedrock/bds/process/intro", + { + label: "插件", + collapsed: true, + items: [ + "bedrock/bds/process/plugins/intro", + "bedrock/bds/process/plugins/how-to-load-plugins", + "bedrock/bds/process/plugins/plugins-loader-choose" + ] + }, + { + label: "BDSX", + collapsed: true, + items: [ + "bedrock/bds/process/bdsx/intro", + "bedrock/bds/process/bdsx/install" + ] + }, + { + label: "EndStone", + collapsed: true, + items: [ + "bedrock/bds/process/endstone/intro", + "bedrock/bds/process/endstone/install", + "bedrock/bds/process/endstone/plugins" + ] + }, + { + label: "LeviLamina", + collapsed: true, + items: [ + "bedrock/bds/process/levilamina/intro", + "bedrock/bds/process/levilamina/install", + "bedrock/bds/process/levilamina/plugins", + "bedrock/bds/process/levilamina/legacy-script-engine" + ] + }, + { + label: "LiteLoaderBDS", + collapsed: true, + items: [ + "bedrock/bds/process/liteloader-bds/intro", + "bedrock/bds/process/liteloader-bds/install", + "bedrock/bds/process/liteloader-bds/plugins" + ] + } + ] + } + ] + }, + { + label: "Nukkit 核心", + items: [ + "bedrock/nukkit/intro", + { + label: "准备工作", + collapsed: true, + items: [ + "bedrock/nukkit/preparation/intro", + { + label: "安装 Java", + collapsed: true, + items: [ + "general/java/intro", + "general/java/choose-and-download-and-install-java", + "general/java/environment", + "general/java/sdkman", + "general/java/faq" + ] + }, + "bedrock/nukkit/preparation/websites", + { + label: "文本编辑器", + collapsed: true, + autogenerate: { directory: "general/preparation/text-editor" } + } + ] + }, + { + label: "开始阶段", + collapsed: true, + items: [ + "bedrock/nukkit/start/intro", + { + label: "基础知识", + collapsed: true, + items: [ + "bedrock/nukkit/start/basic/intro", + "bedrock/nukkit/start/basic/server-file-structure" + ] + }, + "bedrock/nukkit/start/nukkitmot", + "bedrock/nukkit/start/nukkitx", + { + label: "PM1E 核心", + collapsed: true, + items: [ + "bedrock/nukkit/start/pm1e/intro", + "bedrock/nukkit/start/pm1e/controversy" + ] + }, + "bedrock/nukkit/start/pnx" + ] + } + ] + }, + { + label: "PocketMine 核心", + items: [ + "bedrock/pocketmine/intro", + { + label: "准备工作", + collapsed: true, + items: [ + "bedrock/pocketmine/preparation/intro", + "bedrock/pocketmine/preparation/choose-and-download-and-install-php", + "bedrock/pocketmine/preparation/websites", + { + label: "文本编辑器", + collapsed: true, + autogenerate: { directory: "general/preparation/text-editor" } + } + ] + } + ] + }, + { + label: "其他基岩版服务器核心", + items: [ + { + label: "准备工作", + collapsed: true, + items: [ + "bedrock/misc/preparation/intro", + "bedrock/misc/preparation/websites", + { + label: "文本编辑器", + collapsed: true, + autogenerate: { directory: "general/preparation/text-editor" } + } + ] + }, + "bedrock/misc/allay", + "bedrock/misc/dragonfly", + "bedrock/misc/mcpeserver" + ] + }, { - label: "扩展", - collapsed: true, - items: [ - "java/process/mobile-player/geyser/upgrade/extended/intro", - "java/process/mobile-player/geyser/upgrade/extended/compatible", - "java/process/mobile-player/geyser/upgrade/extended/fix", - "java/process/mobile-player/geyser/upgrade/extended/more" - ] + label: "WaterdogePE 跨服", + items: [ + "bedrock/waterdogepe/intro", + { + label: "安装 Java", + collapsed: true, + items: [ + "general/java/intro", + "general/java/choose-and-download-and-install-java", + "general/java/environment", + "general/java/sdkman", + "general/java/faq" + ] + }, + { + label: "文本编辑器", + collapsed: true, + autogenerate: { directory: "general/preparation/text-editor" } + }, + "bedrock/waterdogepe/install", + "bedrock/waterdogepe/config" + ] } - ] - } - ] + ] }, { - label: "手机 Java 版", - collapsed: true, - items: [ - "java/process/mobile-player/client/intro", - "java/process/mobile-player/client/amethyst-ios", - "java/process/mobile-player/client/android-all", - "java/process/mobile-player/client/renderer", - "java/process/mobile-player/client/pcl" - ] + label: "关于", + link: "/about/intro", + icon: "list-format", + items: ["about/intro", "about/sponsor", "about/timeline", "about/ad"] } - ] - }, + ], { - label: "生电", - collapsed: true, - items: [ - "java/process/redstone/intro", - "java/process/redstone/plugin", - "java/process/redstone/mchprs", - "java/process/redstone/mod" - ] - }, - { - label: "地图建设", - collapsed: true, - autogenerate: { directory: "general/process/map" } - }, - "general/process/create-art-assets", - "general/process/panel" - ] - }, - { - label: "进阶知识", - collapsed: false, - items: [ - "java/advance/intro", - { - label: "Linux 开服", - collapsed: true, - autogenerate: { - directory: "general/advance/linux" - } - }, - { - label: "数据库相关", - collapsed: true, - autogenerate: { - directory: "general/process/database" - } - }, - "java/advance/backup", - { - label: "优化", - collapsed: true, - items: [ - "java/advance/optimize/intro", - { - label: "JVM", - collapsed: true, - items: [ - "java/advance/optimize/jvm/intro", - "java/advance/optimize/jvm/common", - "java/advance/optimize/jvm/dragonwell8", - "java/advance/optimize/jvm/dragonwell11", - "java/advance/optimize/jvm/semeru", - "java/advance/optimize/jvm/graal", - "java/advance/optimize/jvm/zing" - ] - }, - "java/advance/optimize/go", - "java/advance/optimize/storage-space-optimization", - "java/advance/optimize/performance-analysis", - "java/advance/optimize/kernel", - "java/advance/optimize/optimized-plugin", - "java/advance/optimize/ask-for-profiling-help" - ] - }, - { - label: "反作弊", - collapsed: true, - items: [ - "java/advance/anticheat/intro", - "java/advance/anticheat/anticheatplugins", - "java/advance/anticheat/antixray", - "java/advance/anticheat/rng", - "java/advance/anticheat/anti-crash", - "java/advance/anticheat/honeypot" - ] - }, - { - label: "资源包", - collapsed: true, - items: [ - "java/advance/resourcepack/intro", - "java/advance/resourcepack/software", - "java/advance/resourcepack/send", - "java/advance/resourcepack/compress", - { - label: "插件", - collapsed: true, - items: [ - "java/advance/resourcepack/plugins/intro", - "java/advance/resourcepack/plugins/hud", - "java/advance/resourcepack/plugins/entity", - "java/advance/resourcepack/plugins/vehicles", - "java/advance/resourcepack/plugins/framework", - "java/advance/resourcepack/plugins/tooltip", - "java/advance/resourcepack/plugins/misc" - ] - }, - "java/advance/resourcepack/protect", - "java/advance/resourcepack/addon" - ] - }, - "general/advance/maintenance/how-to-defend-against-cyber-attacks", - { - label: "脚本语言", - collapsed: true, - items: [ - "java/advance/lang/intro", - { - label: "Skript", - collapsed: true, - items: [ - "java/advance/lang/skript/intro", - "java/advance/lang/skript/basic-tutorials", - "java/advance/lang/skript/advanced-tutorials" - ] - }, - { - label: "Kether", - collapsed: true, - items: [ - "java/advance/lang/kether/intro", - "java/advance/lang/kether/preparation", - "java/advance/lang/kether/basic", - "java/advance/lang/kether/if", - "java/advance/lang/kether/variable", - "java/advance/lang/kether/math", - "java/advance/lang/kether/misc", - "java/advance/lang/kether/vulpecula" - ] - }, - { - label: "JavaScript", - collapsed: true, - items: [ - "java/advance/lang/javascript/intro", - { - label: "扩展", - collapsed: true, - items: [ - "java/advance/lang/javascript/extend/intro", - "java/advance/lang/javascript/extend/nashorn", - "java/advance/lang/javascript/extend/graaljs" - ] - } - ] + topics: { + basics: ["/basics", "/basics/**/*"] } - ] - }, - "general/advance/domain-and-dns", - "java/advance/command-yml", - "java/advance/login-choices", - "java/advance/arthas", - "java/advance/chinese-username", - "java/advance/slime-world", - { - label: "机器人框架", - collapsed: true, - autogenerate: { - directory: "general/advance/bot" - } } - ] - }, - { - label: "附录", - collapsed: false, - items: ["general/more/ask-for-help"] - } - ] + ), + starlightLinksValidator(), + starlightImageZoom(), + starlightDocSearch({ + appId: "D1KV1BYF3B", + apiKey: "4bb3573e59f2c49f30f057ce54edab3f", + indexName: "yizhan", + insights: true + }), + starlightScrollToTop() + ], + components: { + LastUpdated: "./src/components/LastUpdated.astro", + Head: "./src/components/Head.astro", + Pagination: "./src/components/CustomPagination.astro" + } + }), + AstroPWA({ + registerType: "autoUpdate", + workbox: { + skipWaiting: true, + clientsClaim: true, + navigateFallback: "/404", + ignoreURLParametersMatching: [/./], + globPatterns: ["**/*.{html,js,css,png,svg,json,ttf,pf_fragment,pf_index,pf_meta,pagefind,wasm}"] }, - { - label: "Bedrock", - link: "/bedrock/intro", - icon: "open-book", - items: [ - { - label: "快速开始", - items: ["bedrock/intro"] - }, - { - label: "超级基础知识", - items: [ - "bedrock/super-basic/intro", - "bedrock/super-basic/server-core-choose", - "bedrock/super-basic/server-type", - "bedrock/super-basic/protocol-version-number", - "bedrock/super-basic/version" - ] - }, - { - label: "BDS 核心", - items: [ - { - label: "准备工作", - collapsed: true, - items: [ - "bedrock/bds/preparation/intro", - { - label: "文本编辑器", - collapsed: true, - autogenerate: { directory: "general/preparation/text-editor" } - }, - "bedrock/bds/preparation/vcruntime", - "bedrock/bds/preparation/websites" - ] - }, - { - label: "开始阶段", - collapsed: true, - items: [ - "bedrock/bds/start/intro", - { - label: "基础知识", - items: [ - "bedrock/bds/start/basic/intro", - "bedrock/bds/start/basic/server-dir-structure" - ] - } - ] - }, - { - label: "建设阶段", - collapsed: true, - items: [ - "bedrock/bds/process/intro", - { - label: "插件", - collapsed: true, - items: [ - "bedrock/bds/process/plugins/intro", - "bedrock/bds/process/plugins/how-to-load-plugins", - "bedrock/bds/process/plugins/plugins-loader-choose" - ] - }, - { - label: "BDSX", - collapsed: true, - items: [ - "bedrock/bds/process/bdsx/intro", - "bedrock/bds/process/bdsx/install" - ] - }, - { - label: "EndStone", - collapsed: true, - items: [ - "bedrock/bds/process/endstone/intro", - "bedrock/bds/process/endstone/install", - "bedrock/bds/process/endstone/plugins" - ] - }, - { - label: "LeviLamina", - collapsed: true, - items: [ - "bedrock/bds/process/levilamina/intro", - "bedrock/bds/process/levilamina/install", - "bedrock/bds/process/levilamina/plugins", - "bedrock/bds/process/levilamina/legacy-script-engine" - ] - }, - { - label: "LiteLoaderBDS", - collapsed: true, - items: [ - "bedrock/bds/process/liteloader-bds/intro", - "bedrock/bds/process/liteloader-bds/install", - "bedrock/bds/process/liteloader-bds/plugins" - ] - } - ] - } - ] - }, - { - label: "Nukkit 核心", - items: [ - "bedrock/nukkit/intro", - { - label: "准备工作", - collapsed: true, - items: [ - "bedrock/nukkit/preparation/intro", - { - label: "安装 Java", - collapsed: true, - items: [ - "general/java/intro", - "general/java/choose-and-download-and-install-java", - "general/java/environment", - "general/java/sdkman", - "general/java/faq" - ] - }, - "bedrock/nukkit/preparation/websites", - { - label: "文本编辑器", - collapsed: true, - autogenerate: { directory: "general/preparation/text-editor" } - } - ] - }, - { - label: "开始阶段", - collapsed: true, - items: [ - "bedrock/nukkit/start/intro", - { - label: "基础知识", - collapsed: true, - items: [ - "bedrock/nukkit/start/basic/intro", - "bedrock/nukkit/start/basic/server-file-structure" - ] - }, - "bedrock/nukkit/start/nukkitmot", - "bedrock/nukkit/start/nukkitx", - { - label: "PM1E 核心", - collapsed: true, - items: [ - "bedrock/nukkit/start/pm1e/intro", - "bedrock/nukkit/start/pm1e/controversy" - ] - }, - "bedrock/nukkit/start/pnx" - ] - } - ] - }, - { - label: "PocketMine 核心", - items: [ - "bedrock/pocketmine/intro", - { - label: "准备工作", - collapsed: true, - items: [ - "bedrock/pocketmine/preparation/intro", - "bedrock/pocketmine/preparation/choose-and-download-and-install-php", - "bedrock/pocketmine/preparation/websites", - { - label: "文本编辑器", - collapsed: true, - autogenerate: { directory: "general/preparation/text-editor" } - } - ] - } - ] - }, - { - label: "其他基岩版服务器核心", - items: [ - { - label: "准备工作", - collapsed: true, - items: [ - "bedrock/misc/preparation/intro", - "bedrock/misc/preparation/websites", - { - label: "文本编辑器", - collapsed: true, - autogenerate: { directory: "general/preparation/text-editor" } - } - ] - }, - "bedrock/misc/allay", - "bedrock/misc/dragonfly", - "bedrock/misc/mcpeserver" - ] - }, - { - label: "WaterdogePE 跨服", - items: [ - "bedrock/waterdogepe/intro", - { - label: "安装 Java", - collapsed: true, - items: [ - "general/java/intro", - "general/java/choose-and-download-and-install-java", - "general/java/environment", - "general/java/sdkman", - "general/java/faq" - ] - }, - { - label: "文本编辑器", - collapsed: true, - autogenerate: { directory: "general/preparation/text-editor" } - }, - "bedrock/waterdogepe/install", - "bedrock/waterdogepe/config" - ] - } - ] + experimental: { + directoryAndTrailingSlashHandler: true }, - { - label: "关于", - link: "/about/intro", - icon: "list-format", - items: ["about/intro", "about/sponsor", "about/timeline", "about/ad"] - } - ], - { - topics: { - basics: ["/basics", "/basics/**/*"] + manifest: { + name: "Cubic Wiki", + short_name: "Cubic Wiki", + display: "standalone", + theme_color: "#2196f3", + background_color: "#424242" } - } - ), - starlightLinksValidator(), - starlightImageZoom(), - starlightDocSearch({ - appId: "D1KV1BYF3B", - apiKey: "4bb3573e59f2c49f30f057ce54edab3f", - indexName: "yizhan", - insights: true }), - starlightScrollToTop() - ], - components: { - LastUpdated: "./src/components/LastUpdated.astro", - Head: "./src/components/Head.astro", - Pagination: "./src/components/CustomPagination.astro" - } - }), - AstroPWA({ - registerType: "autoUpdate", - workbox: { - skipWaiting: true, - clientsClaim: true, - navigateFallback: "/404", - ignoreURLParametersMatching: [/./], - globPatterns: ["**/*.{html,js,css,png,svg,json,ttf,pf_fragment,pf_index,pf_meta,pagefind,wasm}"] - }, - experimental: { - directoryAndTrailingSlashHandler: true - }, - manifest: { - name: "Cubic Wiki", - short_name: "Cubic Wiki", - display: "standalone", - theme_color: "#2196f3", - background_color: "#424242" - } - }), - mermaid({ - autoTheme: true - }) - ], - vite: { - plugins: [tailwindcss()], - ssr: { - noExternal: ["naive-ui", "vueuc", "date-fns", "workbox-window"] + mermaid({ + autoTheme: true + }) + ], + vite: { + plugins: [tailwindcss()], + ssr: { + noExternal: ["naive-ui", "vueuc", "date-fns", "workbox-window"] + } } - } }); \ No newline at end of file From f61e2f7e58d1ee7b35bd028ad0ae8653dce49932 Mon Sep 17 00:00:00 2001 From: momo-OwO-qwq Date: Fri, 3 Apr 2026 23:39:48 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=F0=9F=8E=A8=20=E5=9B=9E=E9=80=80=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=8D=E5=BD=93=E4=B9=8B=E5=A4=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/docs/about/intro.md | 5 ++--- src/content/docs/general/advance/bot/framework.mdx | 8 ++++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/content/docs/about/intro.md b/src/content/docs/about/intro.md index 76c7b964..ea151ae3 100644 --- a/src/content/docs/about/intro.md +++ b/src/content/docs/about/intro.md @@ -10,7 +10,7 @@ Cubic 在群友的建议中被选中,成为了新组织的名字 ## 驿站自述 -> 👋 你好!我是 NitWikit 项目和 8aka-Team 团队的建立者 驿站 +> 👋 你好!我是 NitWikit 项目和 8aka-Team 团队的建立者驿站 ![](_assets/me.png) @@ -40,7 +40,6 @@ MC 里傻子村民的英文就是 nitwit,后缀又和 Wiki 相近,所以组 一开始我只是拉着人才(他写反作弊部分)编写笨蛋文档,部署在 GitHub Pages,然后 lilingfeng 和小杰自己跑来问我能不能参与维护, 以及一些路人像是 gyc123456-1 来给我 PR,后面还有 lim114514 在我不知情的情况下帮我买好 yizhan.wiki 这个域名,雪萌帮我想英文名字, -画群头像,banner 图,MineBBS 宣传图,小涵想写 Bedrock 内容给文档拆成三块, -突然冒出个糯米团子搞出个 VitePress 版文档, +画群头像,banner 图,MineBBS 宣传图,小涵想写 Bedrock 内容给文档拆成三块,突然冒出个糯米团子搞出个 VitePress 版文档, 有那么几个我不认识的人和我认识的三七为笨蛋文档录制视频,千屈帮助编写了好多好多内容,修了好多 bug,甚至重写文档整个界面等等。 不知不觉就有了六十多个贡献者,如果算上 GitHub 之外提供建议和帮助的人,远比这个数字要多。 \ No newline at end of file diff --git a/src/content/docs/general/advance/bot/framework.mdx b/src/content/docs/general/advance/bot/framework.mdx index af33f4b6..4352e669 100644 --- a/src/content/docs/general/advance/bot/framework.mdx +++ b/src/content/docs/general/advance/bot/framework.mdx @@ -94,17 +94,17 @@ import { TabItem, Tabs } from "@astrojs/starlight/components"; | --------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | 相关链接 | [GitHub 仓库](https://github.com/Mrs4s/go-cqhttp) \| [文档站](https://docs.go-cqhttp.org/) | | 作者 | [Mrs4s](https://github.com/Mrs4s) | -| 介绍 | 基于 mirai 以及 MiraiGo 的 OneBot Golang 原生实现。 | +| 介绍 | 基于 Mirai 以及 MiraiGo 的 OneBot Golang 原生实现。 | | 下载 | [GitHub](https://github.com/Mrs4s/go-cqhttp/releases) | - + -| mirai | ![](https://img.shields.io/badge/状态-不再积极维护-yellow?style=for-the-badge) | +| Mirai | ![](https://img.shields.io/badge/状态-不再积极维护-yellow?style=for-the-badge) | | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 相关链接 | [GitHub 仓库](https://github.com/mamoe/mirai) \| [官方论坛](https://mirai.mamoe.net/) \| [用户手册](https://github.com/mamoe/mirai/blob/dev/docs/UserManual.md) | | 作者 | [mamoe](https://github.com/mamoe) | -| 介绍 | mirai 是一个在全平台下运行,提供 QQ Android 协议支持的高效率机器人库。 | +| 介绍 | Mirai 是一个在全平台下运行,提供 QQ Android 协议支持的高效率机器人库。 | | 下载 | [GitHub](https://github.com/iTXTech/mirai-console-loader/releases) |