mirror of
https://github.com/postyizhan/NitWikit.git
synced 2024-11-21 03:13:36 +08:00
请不要在使用中文符号
This commit is contained in:
parent
d121e9bcea
commit
40abdba622
@ -1,8 +1,8 @@
|
||||
# 为笨蛋文档做出贡献
|
||||
|
||||
首先,感谢你抽出宝贵时间做出巨大贡献!!
|
||||
首先,感谢你抽出宝贵时间做出巨大贡献!!
|
||||
|
||||
所有类型的更改都会最大限度通过,但在此之前,你需要先阅读以下几点来加快审核进度
|
||||
所有类型的更改都会最大限度通过,但在此之前,你需要先阅读以下几点来加快审核进度
|
||||
|
||||
## 目录
|
||||
|
||||
@ -14,35 +14,35 @@
|
||||
|
||||
## 这篇文档有问题
|
||||
|
||||
由于此文档由大量人员共同编辑,难免会有瑕疵,如果你发现了文档中的问题之处,请按照以下方法提交:
|
||||
由于此文档由大量人员共同编辑,难免会有瑕疵,如果你发现了文档中的问题之处,请按照以下方法提交:
|
||||
|
||||
- 打开 [ISSUE](https://github.com/postyizhan/NitWikit/issues)
|
||||
- 查看是否有相似问题,无论其处于打开状态还是关闭状态
|
||||
- 查看是否有相似问题,无论其处于打开状态还是关闭状态
|
||||
- 尽可能详细地提出出错的地方和问题详情
|
||||
|
||||
然后,我们将尽快处理该问题
|
||||
然后,我们将尽快处理该问题
|
||||
|
||||
## 我想要为文档做出贡献
|
||||
|
||||
我们不接受任何无意义或偏离主题的意见,所以你应当说明此更改的合理性,并且你应当在提交更改前查看是否有类似更改
|
||||
我们不接受任何无意义或偏离主题的意见,所以你应当说明此更改的合理性,并且你应当在提交更改前查看是否有类似更改
|
||||
|
||||
你也可以提供针对[待办事项](https://github.com/postyizhan/NitWikit/blob/main/docs/contribution/todos.md)中未完成事项的更改来提高通过的几率
|
||||
|
||||
记住!你的任何更改不止会影响到你,还有其他需要通过这篇文档来搭建服务器的人
|
||||
记住!你的任何更改不止会影响到你,还有其他需要通过这篇文档来搭建服务器的人
|
||||
|
||||
我们可以在你说明未排版的前提下代替你进行排版,但在此之前,请遵循以下要求:
|
||||
我们可以在你说明未排版的前提下代替你进行排版,但在此之前,请遵循以下要求:
|
||||
|
||||
### 格式要求
|
||||
|
||||
对于文档,我们有格式要求,详见 [格式要求](https://github.com/postyizhan/NitWikit/blob/main/docs/contribution/writing-specification/writing-specification.md)
|
||||
对于文档,我们有格式要求,详见 [格式要求](https://github.com/postyizhan/NitWikit/blob/main/docs/contribution/writing-specification/writing-specification.md)
|
||||
|
||||
若格式不规范但不会或不想排版时请在 PR 时提出**文档需排版**,否则我们极大概率会关闭此处更改
|
||||
若格式不规范但不会或不想排版时请在 PR 时提出**文档需排版**,否则我们极大概率会关闭此处更改
|
||||
|
||||
### 尽量使用个人分叉而不是组织分叉
|
||||
|
||||
我们可能会在一些极端情况下去修改你的分叉,无论是解决大量冲突还是修改错误,这比你自己来回检查要快速且方便的多
|
||||
我们可能会在一些极端情况下去修改你的分叉,无论是解决大量冲突还是修改错误,这比你自己来回检查要快速且方便的多
|
||||
|
||||
问题是,如果你是组织分叉,我们无法将对其进行更改,_详见 isaacs/github#1681_ ,这会导致我们会关闭它并手动合并,而不是被标记为合并
|
||||
问题是,如果你是组织分叉,我们无法将对其进行更改,_详见 isaacs/github#1681_ ,这会导致我们会关闭它并手动合并,而不是被标记为合并
|
||||
|
||||
_我们更加希望它会显示为合并而不是被关闭_
|
||||
|
||||
|
@ -61,8 +61,8 @@ https://nitwikit.yizhan.wiki/
|
||||
1. Fork 此仓库至自己的 GitHub 账户下
|
||||
2. 将自己账户下的仓库克隆至本地
|
||||
`git clone https://github.com/你的用户名/NitWikit.git`
|
||||
3. 在本地仓库中进行修改并构建文档测试,无误后 push 至自己的仓库
|
||||
4. 回到此仓库,点击 Pull requests -> New pull request 发起 PR
|
||||
3. 在本地仓库中进行修改并构建文档测试,无误后 push 至自己的仓库
|
||||
4. 回到此仓库,点击 Pull requests -> New pull request 发起 PR
|
||||
5. 前往 [NitWikit-PR](https://github.com/users/postyizhan/projects/2) 查看审核状态
|
||||
|
||||
# 🤝 贡献者
|
||||
@ -379,7 +379,7 @@ https://nitwikit.yizhan.wiki/
|
||||
<a href="https://github.com/MSCMDD">
|
||||
<img src="https://avatars.githubusercontent.com/u/128666602?v=4" width="50;" alt="MSCMDD"/>
|
||||
<br />
|
||||
<sub><b>磁铁开发部(MDD)</b></sub>
|
||||
<sub><b>磁铁开发部(MDD)</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -5,7 +5,7 @@ sidebar_position: 1
|
||||
|
||||
# 准备工作
|
||||
|
||||
在正式开 Minecraft 服务器之前,请一定确认已经准备好了以下必备软件或网页:
|
||||
在正式开 Minecraft 服务器之前,请一定确认已经准备好了以下必备软件或网页:
|
||||
|
||||
import DocCardList from '@theme/DocCardList';
|
||||
|
||||
@ -13,8 +13,8 @@ import DocCardList from '@theme/DocCardList';
|
||||
|
||||
其中:
|
||||
|
||||
文档编辑软件能够有效提高编辑插件、核心配置时的效率,降低错误使用语法的可能性;
|
||||
文档编辑软件能够有效提高编辑插件、核心配置时的效率,降低错误使用语法的可能性;
|
||||
|
||||
网页主要包括了寻找插件、mod、生成 MOTD,生成指令等便捷功能;
|
||||
网页主要包括了寻找插件、mod、生成 MOTD,生成指令等便捷功能;
|
||||
|
||||
笨蛋脚本主要用于一键式配置文件、安装插件等。
|
||||
|
@ -5,10 +5,10 @@ sidebar_position: 3
|
||||
|
||||
# Visual C++ 运行库
|
||||
|
||||
我的世界基岩版由于使用微软开发的 Visual C++ 编写,需要依赖 Visual C++ 运行库(vc运行库)才能正常运行。在玩家的电脑上,由于 Windows 系统会自动为游戏补全这些运行库,所以玩家下载好基岩版之后就可以直接开始游戏。
|
||||
我的世界基岩版由于使用微软开发的 Visual C++ 编写,需要依赖 Visual C++ 运行库(vc运行库)才能正常运行。在玩家的电脑上,由于 Windows 系统会自动为游戏补全这些运行库,所以玩家下载好基岩版之后就可以直接开始游戏。
|
||||
|
||||
但是在基岩版的服务器软件BDS这边情况就有所不同了。BDS 只是一个可执行文件,它并不具备自己补全 vc 运行库的功能,需要手动进行安装,否则就会报错“缺少vmruntimexxx.dll”。你需要为服务器安装至少 [Visual C++ Redistributable for Visual Studio 2015-2022](https://aka.ms/vs/17/release/vc_redist.x64.exe) 这个运行库才行。
|
||||
但是在基岩版的服务器软件BDS这边情况就有所不同了。BDS 只是一个可执行文件,它并不具备自己补全 vc 运行库的功能,需要手动进行安装,否则就会报错“缺少vmruntimexxx.dll”。你需要为服务器安装至少 [Visual C++ Redistributable for Visual Studio 2015-2022](https://aka.ms/vs/17/release/vc_redist.x64.exe) 这个运行库才行。
|
||||
|
||||
有时一些辅助软件也会依赖这个运行库,例如LeviLamina在缺少运行库时会报错“Error code: 1114 动态裢接库(DLL)初始化例程失败。”,安装这个运行库也可以解决问题。
|
||||
有时一些辅助软件也会依赖这个运行库,例如LeviLamina在缺少运行库时会报错“Error code: 1114 动态裢接库(DLL)初始化例程失败。”,安装这个运行库也可以解决问题。
|
||||
|
||||
你也可以使用[常用VC运行库合集](https://cloud.wujiyan.cc/f/D0DIW/MSVBCRT.AIO.2024.08.16.exe)来快速安装
|
@ -14,13 +14,13 @@ sidebar_position: 1
|
||||
|
||||
# 可能用到的网站
|
||||
|
||||
开服不能只是从某一网站或者简单百度、Bing、谷歌获取资源,这样获取的资源种类非常贫乏。
|
||||
开服不能只是从某一网站或者简单百度、Bing、谷歌获取资源,这样获取的资源种类非常贫乏。
|
||||
|
||||
以下是一些可供参考的推荐网站:
|
||||
|
||||
# MineBBS
|
||||
|
||||
国内较为知名的综合性 Minecraft 论坛。曾以基岩版开服内容为主,MCBBS 关闭后其 Java 版相关内容丰富了许多。
|
||||
国内较为知名的综合性 Minecraft 论坛。曾以基岩版开服内容为主,MCBBS 关闭后其 Java 版相关内容丰富了许多。
|
||||
|
||||
<details>
|
||||
<summary>点击展开</summary>
|
||||
@ -39,7 +39,7 @@ sidebar_position: 1
|
||||
|
||||
插件板块:https://www.minebbs.com/forums/mcjeplugin/
|
||||
|
||||
同时,本教程在 MineBBS 也有搬运贴:https://www.minebbs.com/threads/nitwikit-geyser.26356/
|
||||
同时,本教程在 MineBBS 也有搬运贴:https://www.minebbs.com/threads/nitwikit-geyser.26356/
|
||||
|
||||
</details>
|
||||
|
||||
@ -68,7 +68,7 @@ sidebar_position: 1
|
||||
|
||||
虽然不登录账号不影响你浏览仓库和下载 Release 等。
|
||||
|
||||
但是登录后可以给作者发 Issues 来报告问题,提交新需求/建议,还可以下载 Actions 中的文件。
|
||||
但是登录后可以给作者发 Issues 来报告问题,提交新需求/建议,还可以下载 Actions 中的文件。
|
||||
|
||||
<details>
|
||||
<summary>注册问题</summary>
|
||||
@ -81,12 +81,12 @@ sidebar_position: 1
|
||||
<summary>连不上怎么办</summary>
|
||||
|
||||
|
||||
这是由于 GitHub 是开放的外国网站,网站上时不时会有一些不能在此讨论的内容,所以运营商会刻意地屏蔽这个网站,在很多时候都不能正常访问。具体的表现如下:[只要Github域名指向任意IP,该IP的443端口就会超时3分钟](https://blog.csdn.net/weixin_43659597/article/details/118882176)。
|
||||
这是由于 GitHub 是开放的外国网站,网站上时不时会有一些不能在此讨论的内容,所以运营商会刻意地屏蔽这个网站,在很多时候都不能正常访问。具体的表现如下:[只要Github域名指向任意IP,该IP的443端口就会超时3分钟](https://blog.csdn.net/weixin_43659597/article/details/118882176)。
|
||||
|
||||
有以下几种解决办法:
|
||||
1. 魔法
|
||||
2. [改hosts](https://www.cnblogs.com/eudaimonia/p/16001981.html#1034247326)
|
||||
3. [Watt Toolkit](https://steampp.net/):下载安装完成后,在左侧侧边栏切换到**网络加速**,点击**平台加速(免费)**,往下翻勾上GitHub,然后点击**一键加速**,随后就可以正常访问GitHub了
|
||||
3. [Watt Toolkit](https://steampp.net/):下载安装完成后,在左侧侧边栏切换到**网络加速**,点击**平台加速(免费)**,往下翻勾上GitHub,然后点击**一键加速**,随后就可以正常访问GitHub了
|
||||
<!--[点击此处](https://cn.bing.com/search?q=%E8%BF%9E%E4%B8%8D%E4%B8%8AGitHub%E6%80%8E%E4%B9%88%E5%8A%9E)-->
|
||||
|
||||
|
||||
|
@ -24,15 +24,15 @@ sidebar_position: 1
|
||||
|
||||
### 准备工作-安装 Lip
|
||||
|
||||
首先,从 [GitHub](https://github.com/lippkg/lip/releases/latest) 下载 Lip 的最新版本的应用
|
||||
首先,从 [GitHub](https://github.com/lippkg/lip/releases/latest) 下载 Lip 的最新版本的应用
|
||||
|
||||
然后,解压文件到你想要安装 Lip 的位置。
|
||||
然后,解压文件到你想要安装 Lip 的位置。
|
||||
|
||||
最后,将该位置添加到 PATH 环境变量中。
|
||||
最后,将该位置添加到 PATH 环境变量中。
|
||||
|
||||
要检查是否成功安装 Lip ,请在终端中运行 `lip --version`。你应该看到刚刚安装的lip的版本。
|
||||
要检查是否成功安装 Lip ,请在终端中运行 `lip --version`。你应该看到刚刚安装的lip的版本。
|
||||
|
||||
如果你使用的是 Windows 系统,你也可以在 GitHub 中下载 `.exe` 后缀的安装程序来安装。
|
||||
如果你使用的是 Windows 系统,你也可以在 GitHub 中下载 `.exe` 后缀的安装程序来安装。
|
||||
|
||||
|
||||
### 安装
|
||||
@ -49,7 +49,7 @@ Lip 会自动下载 BDS 并配置 LeviLamina 加载器
|
||||
|
||||
:::info
|
||||
|
||||
如果因网络问题无法下载 GO 模块或 LeviLamina 及其依赖,可以运行命令
|
||||
如果因网络问题无法下载 GO 模块或 LeviLamina 及其依赖,可以运行命令
|
||||
|
||||
```
|
||||
lip config GoModuleProxyURL <url>
|
||||
@ -67,20 +67,20 @@ lip config GitHubMirrorURL <url>
|
||||
|
||||
:::info
|
||||
|
||||
如果因网络问题无法下载 BDS 服务端文件可以去其他地方寻找文件下载,并将压缩包放在 `your-folder\.cache\bdsdown`中
|
||||
如果因网络问题无法下载 BDS 服务端文件可以去其他地方寻找文件下载,并将压缩包放在 `your-folder\.cache\bdsdown`中
|
||||
|
||||
:::
|
||||
|
||||
现在,你已成功安装了 LeviLamina 了,要启动它,请运行命今
|
||||
现在,你已成功安装了 LeviLamina 了,要启动它,请运行命今
|
||||
|
||||
```
|
||||
bedrock_server_mod.exe
|
||||
```
|
||||
|
||||
|
||||
# 方法二: 手动安装(不推荐)
|
||||
# 方法二: 手动安装(不推荐)
|
||||
|
||||
只有想要调试新版本的开发人员才会手动安装,手动安装只会安装允许 LeviLamina 运行的基本部件,它缺少 CrashLogger、I18N 等组件。
|
||||
只有想要调试新版本的开发人员才会手动安装,手动安装只会安装允许 LeviLamina 运行的基本部件,它缺少 CrashLogger、I18N 等组件。
|
||||
|
||||
### 下载必要的文件
|
||||
|
||||
@ -90,7 +90,7 @@ bedrock_server_mod.exe
|
||||
* 从所选版本Release中下载文件 `levilamina-windows-x64.zip`
|
||||
2. **下载 BDS(Minecraft服务器)**:
|
||||
* 访问 [Minecraft 的服务器下载页面](https://www.minecraft.net/en-us/download/server/bedrock)。
|
||||
* 获取与你的 LeviLamina 版本相对应的 Bedrock 专用服务器 (BDS) 版本,名为
|
||||
* 获取与你的 LeviLamina 版本相对应的 Bedrock 专用服务器 (BDS) 版本,名为
|
||||
`bedrock-server-<version>.zip`
|
||||
3. **获取 PeEditor 和 PreLoader**:
|
||||
* 前往他们各自的 GitHub 发布页面:[PeEditor Releases](https://github.com/LiteLDev/PeEditor/releases) 和 [PreLoader Releases](https://github.com/LiteLDev/PreLoader/releases)。
|
||||
@ -98,7 +98,7 @@ bedrock_server_mod.exe
|
||||
|
||||
:::warning
|
||||
|
||||
**注意**:通常,最新版本的 LeviLamina 与最新版本的 PeEditor 和 PreLoader 保持一致。确保它们与你的 BDS 版本兼容。
|
||||
**注意**:通常,最新版本的 LeviLamina 与最新版本的 PeEditor 和 PreLoader 保持一致。确保它们与你的 BDS 版本兼容。
|
||||
|
||||
:::
|
||||
|
||||
@ -113,9 +113,9 @@ bedrock_server_mod.exe
|
||||
* 将文件夹放入BDS同一目录中
|
||||
4. **运行 PeEditor**:
|
||||
* 双击 `PeEditor.exe` 并等待配置完成
|
||||
* 然后,你可以在目录中找到一个名为 `bedrock_server_mod.exe` 的新文件,原始文件 `bedrock_server.exe` 将重命名为 `bedrock_server.exe.bak`
|
||||
* 然后,你可以在目录中找到一个名为 `bedrock_server_mod.exe` 的新文件,原始文件 `bedrock_server.exe` 将重命名为 `bedrock_server.exe.bak`
|
||||
|
||||
现在,你已成功安装了 LeviLamina 了,要启动它,请运行命今
|
||||
现在,你已成功安装了 LeviLamina 了,要启动它,请运行命今
|
||||
|
||||
```
|
||||
bedrock_server_mod.exe
|
||||
|
@ -14,58 +14,58 @@ sidebar_position: 1
|
||||
LeviLamina 的插件是以文件夹的格式存在的。通常插件文件夹中包含以下内容:
|
||||
```c
|
||||
插件文件夹
|
||||
├─manifest.json // 插件元数据文件,该文件必须存在并格式正确才能被 LeviLamina 识别
|
||||
├─(插件配置文件和数据库)... // 插件生成的配置文件和数据库等,大多数插件的配置文件名叫config.json,并以一个文件夹或一个 .db 或 .json 后缀文件作为数据库
|
||||
├─(插件代码或二进制文件)... // 插件源代码,通常是 .js、.lua、.dll 后缀的文件。不要删除,修改或重命名文件,否则可能导致插件无法运行!
|
||||
├─manifest.json // 插件元数据文件,该文件必须存在并格式正确才能被 LeviLamina 识别
|
||||
├─(插件配置文件和数据库)... // 插件生成的配置文件和数据库等,大多数插件的配置文件名叫config.json,并以一个文件夹或一个 .db 或 .json 后缀文件作为数据库
|
||||
├─(插件代码或二进制文件)... // 插件源代码,通常是 .js、.lua、.dll 后缀的文件。不要删除,修改或重命名文件,否则可能导致插件无法运行!
|
||||
```
|
||||
|
||||
通常情况下,你不需要手动修改 `manifest.json` 这个文件,因为插件作者会将它事先配置好。如果有特殊插件需要手动配置这个文件,该插件文档应该会给出相应教程。
|
||||
通常情况下,你不需要手动修改 `manifest.json` 这个文件,因为插件作者会将它事先配置好。如果有特殊插件需要手动配置这个文件,该插件文档应该会给出相应教程。
|
||||
|
||||
## 使用 Lip 安装插件
|
||||
|
||||
如果你还没有安装 Lip,可以参考 [上一章的教程](./LeviLamina-Install.md#准备工作-安装-lip) 。
|
||||
如果你还没有安装 Lip,可以参考 [上一章的教程](./LeviLamina-Install.md#准备工作-安装-lip) 。
|
||||
|
||||
要使用 Lip 安装插件,你必须确保该插件**支持通过 Lip 安装** 。如果插件文档没有写明任何使用 Lip 安装的方法或命令,你就不应该使用 Lip 安装该插件。
|
||||
要使用 Lip 安装插件,你必须确保该插件**支持通过 Lip 安装** 。如果插件文档没有写明任何使用 Lip 安装的方法或命令,你就不应该使用 Lip 安装该插件。
|
||||
|
||||
通常情况下,一个 Lip 插件的安装命令会像这样:
|
||||
通常情况下,一个 Lip 插件的安装命令会像这样:
|
||||
```shell
|
||||
lip install <一个URL>
|
||||
```
|
||||
|
||||
### 通过命令安装插件
|
||||
|
||||
在服务端根目录(包含 `bedrock_server_mod.exe` 的文件夹)打开 powershell,执行插件使用说明给出的 Lip 安装命令,
|
||||
在服务端根目录(包含 `bedrock_server_mod.exe` 的文件夹)打开 powershell,执行插件使用说明给出的 Lip 安装命令,
|
||||
|
||||
### 通过 LipUI 安装插件
|
||||
|
||||
TODO
|
||||
|
||||
随后插件将在服务器下次启动时被加载。要想让正在运行的服务器加载该插件,你必须**重启服务器** 。
|
||||
随后插件将在服务器下次启动时被加载。要想让正在运行的服务器加载该插件,你必须**重启服务器** 。
|
||||
|
||||
## 手动安装插件
|
||||
|
||||
### 原生(native)插件
|
||||
### 原生(native)插件
|
||||
|
||||
解压并整理插件文件夹,确保其结构符合上文结出的插件结构。**有时插件压缩包解压后里面会套一层文件夹,这点要格外留意。**
|
||||
解压并整理插件文件夹,确保其结构符合上文结出的插件结构。**有时插件压缩包解压后里面会套一层文件夹,这点要格外留意。**
|
||||
|
||||
将插件文件夹放入服务器的 `plugins` 文件夹,它将在服务器下次启动时被加载。要想让正在运行的服务器加载该插件,你必须**重启服务器** 。
|
||||
将插件文件夹放入服务器的 `plugins` 文件夹,它将在服务器下次启动时被加载。要想让正在运行的服务器加载该插件,你必须**重启服务器** 。
|
||||
|
||||
### LSE 插件
|
||||
|
||||
要安装 LSE 插件,你的服务器必须安装了 [Legacy Script Engine](./legacy-script-engine.md) 作为前置。
|
||||
要安装 LSE 插件,你的服务器必须安装了 [Legacy Script Engine](./legacy-script-engine.md) 作为前置。
|
||||
|
||||
#### quick-js、lua、python 单文件
|
||||
|
||||
指只有一个 .js/.lua/.py 代码文件的插件。
|
||||
|
||||
首先将插件文件放入 `plugins` 文件夹,然后启动或重启一次服务器。此时服务器将警告 `WARN [legacy-script-engine-quickjs] Legacy plugins have been migrated, please restart the server to load them!`。**此时插件并未被加载,你需要再次重启服务器** ,之后插件就能加载了。
|
||||
首先将插件文件放入 `plugins` 文件夹,然后启动或重启一次服务器。此时服务器将警告 `WARN [legacy-script-engine-quickjs] Legacy plugins have been migrated, please restart the server to load them!`。**此时插件并未被加载,你需要再次重启服务器** ,之后插件就能加载了。
|
||||
|
||||
#### nodejs、python 多文件
|
||||
|
||||
指 .llplugin 后缀名或解压后为一个文件夹的 LSE 插件。
|
||||
|
||||
如果插件为文件夹,那么检查该文件夹结构。如果其中包含 `manifest.json`,直接将其放入 `plugins` 文件夹即可。随后它将在服务器下次启动时被加载。要想让正在运行的服务器加载该插件,你必须**重启服务器** 。
|
||||
如果插件为文件夹,那么检查该文件夹结构。如果其中包含 `manifest.json`,直接将其放入 `plugins` 文件夹即可。随后它将在服务器下次启动时被加载。要想让正在运行的服务器加载该插件,你必须**重启服务器** 。
|
||||
|
||||
如果该插件为文件夹但不包含 `manifest.json`,你需要将其放入 `plugins` 文件夹后,按上文 quickjs、lua、python 单文件的操作方法进行操作。
|
||||
如果该插件为文件夹但不包含 `manifest.json`,你需要将其放入 `plugins` 文件夹后,按上文 quickjs、lua、python 单文件的操作方法进行操作。
|
||||
|
||||
如果该插件为 .llplugin 后缀名的单个文件,你需要将其后缀名改成 .zip 并解压,之后按照上面两种方法进行操作。
|
||||
如果该插件为 .llplugin 后缀名的单个文件,你需要将其后缀名改成 .zip 并解压,之后按照上面两种方法进行操作。
|
||||
|
@ -5,7 +5,7 @@ sidebar_position: 3
|
||||
|
||||
# LeviLamina
|
||||
|
||||
LeviLamina 是 BDS 核心的一款功能强大的插件加载器, 曾被称为 LiteLoaderBDS。
|
||||
LeviLamina 是 BDS 核心的一款功能强大的插件加载器, 曾被称为 LiteLoaderBDS。
|
||||
|
||||
以下内容为 LeviLamina 的配置教程
|
||||
|
||||
|
@ -1,18 +1,18 @@
|
||||
---
|
||||
title: Legacy Script Engine(LSE)
|
||||
title: Legacy Script Engine(LSE)
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
# Legacy Script Engine(LSE)
|
||||
# Legacy Script Engine(LSE)
|
||||
|
||||
## 什么是 Legacy Script Engine
|
||||
|
||||
Legacy Script Engine 简称 LSE,是 LeviLamina 上的一系列插件,被用作 LiteLoader Scipt Engine(LLSE)到 LeviScript(LS)的过渡。LSE 的一些特性与 LLSE 相同,你可以阅读 LLSE 来了解该插件的特点。以下是这两个插件的不同之处:
|
||||
1. LSE 只能在 LeviLamina 上运行,LLSE 只能在 LiteLoader 上运行
|
||||
2. LSE 的插件格式与 LLSE 不同。要想让 LSE 运行 LLSE 插件,需要 LSE 自动或服主手动进行格式转换。
|
||||
3. LSE 虽然是 LeviLamina 开发计划的一部分,但是它被设计作为可选模块,需要服主额外安装。而 LLSE 则是集成在 LiteLoaderBDS 中,安装 LiteLoaderBDS 的过程中即安装完毕,不需要额外安装。
|
||||
Legacy Script Engine 简称 LSE,是 LeviLamina 上的一系列插件,被用作 LiteLoader Scipt Engine(LLSE)到 LeviScript(LS)的过渡。LSE 的一些特性与 LLSE 相同,你可以阅读 LLSE 来了解该插件的特点。以下是这两个插件的不同之处:
|
||||
1. LSE 只能在 LeviLamina 上运行,LLSE 只能在 LiteLoader 上运行
|
||||
2. LSE 的插件格式与 LLSE 不同。要想让 LSE 运行 LLSE 插件,需要 LSE 自动或服主手动进行格式转换。
|
||||
3. LSE 虽然是 LeviLamina 开发计划的一部分,但是它被设计作为可选模块,需要服主额外安装。而 LLSE 则是集成在 LiteLoaderBDS 中,安装 LiteLoaderBDS 的过程中即安装完毕,不需要额外安装。
|
||||
4. LSE 的 python 脚本引擎 legacy-script-engine-python 与系统中的 python 解释器冲突。
|
||||
5. LSE 的更新仅提供版本适配和错误修复,不会更新新的 API 等功能,也不受理任何相关建议。
|
||||
5. LSE 的更新仅提供版本适配和错误修复,不会更新新的 API 等功能,也不受理任何相关建议。
|
||||
|
||||
## 插件内容
|
||||
|
||||
@ -21,11 +21,11 @@ Legacy Script Engine 简称 LSE,是 LeviLamina 上的一系列插件,被用
|
||||
- **LegacyParticleAPI** :用于为 LSE 插件提供 ParticleAPI 相关功能
|
||||
- **LegacyRemoteCall** : 用于为 LSE 插件提供插件间相互调用功能
|
||||
- **legacy-script-engine-lua** :用于加载和运行 lua 插件
|
||||
- **legacy-script-engine-quickjs** :用于加载和运行单文件 js 插件(quickjs 插件)
|
||||
- **legacy-script-engine-quickjs** :用于加载和运行单文件 js 插件(quickjs 插件)
|
||||
- **legacy-script-engine-nodejs** :用于加载和运行 nodejs 插件
|
||||
- **legacy-script-engine-python** :用于加载和运行 python 插件,**和系统中的 python 解释器冲突**
|
||||
- **legacy-script-engine-python** :用于加载和运行 python 插件,**和系统中的 python 解释器冲突**
|
||||
|
||||
这其中 LegacyMoney、LegacyParticleAPI、LegacyRemoteCall 几乎是必须安装的,因为很多插件都依赖这些插件运行。其他四个用于加载不同种类 LSE 插件的可以根据服务器所用到的插件的类型进行安装。
|
||||
这其中 LegacyMoney、LegacyParticleAPI、LegacyRemoteCall 几乎是必须安装的,因为很多插件都依赖这些插件运行。其他四个用于加载不同种类 LSE 插件的可以根据服务器所用到的插件的类型进行安装。
|
||||
|
||||
## [安装方法](https://lse.liteldev.com/zh/)
|
||||
|
||||
@ -49,10 +49,10 @@ lip install gitea.litebds.com/LiteLDev/legacy-script-engine-python
|
||||
```
|
||||
:::warning
|
||||
|
||||
由于 legacy-script-engine-python 与系统中的 python 解释器冲突,安装时你需要确保系统中没有 python 解释器。如果系统中已安装 python 解释器,你需要将其**彻底卸载** 。如果你必须使用系统中的 python 解释器,你只能放弃所有的 python 插件。
|
||||
由于 legacy-script-engine-python 与系统中的 python 解释器冲突,安装时你需要确保系统中没有 python 解释器。如果系统中已安装 python 解释器,你需要将其**彻底卸载** 。如果你必须使用系统中的 python 解释器,你只能放弃所有的 python 插件。
|
||||
|
||||
:::
|
||||
|
||||
### 手动安装
|
||||
|
||||
手动安装要装一大堆插件,我还没试过,教程求大佬补充qaq
|
||||
手动安装要装一大堆插件,我还没试过,教程求大佬补充qaq
|
||||
|
@ -5,17 +5,17 @@ sidebar_position: 4
|
||||
|
||||
# LiteLoaderBDS
|
||||
|
||||
LiteLoaderBDS 是 BDS 核心的一款功能强大的插件加载器,简称 ll,是 [LeviLamina](../LeviLamina/LeviLamina.md) 的前身,**现已停更**。
|
||||
LiteLoaderBDS 是 BDS 核心的一款功能强大的插件加载器,简称 ll,是 [LeviLamina](../LeviLamina/LeviLamina.md) 的前身,**现已停更**。
|
||||
|
||||
:::tip[你知道吗]
|
||||
|
||||
根据该加载器开发者所说,他们本来是因为 LiteLoaderBDS 的代码过于臃肿、难以维护、开发标准老旧、功能太过局限而希望重构 LiteLoaderBDS,后来转为计划启动新项目 LeviLamina。这也是 LeviLamina 的“ll3”别称的来历。
|
||||
根据该加载器开发者所说,他们本来是因为 LiteLoaderBDS 的代码过于臃肿、难以维护、开发标准老旧、功能太过局限而希望重构 LiteLoaderBDS,后来转为计划启动新项目 LeviLamina。这也是 LeviLamina 的“ll3”别称的来历。
|
||||
|
||||
:::
|
||||
|
||||
:::warning
|
||||
|
||||
由于该加载器已经停止维护,目前只建议给无法使用 LeviLamina 的旧版 BDS 使用。
|
||||
由于该加载器已经停止维护,目前只建议给无法使用 LeviLamina 的旧版 BDS 使用。
|
||||
|
||||
:::
|
||||
|
||||
|
@ -7,23 +7,23 @@ sidebar_position: 1
|
||||
|
||||
## 下载安装 BDS
|
||||
|
||||
LiteLoaderBDS 不会自动下载安装对应版本 BDS,你需要手动寻找和下载相应版本的旧版 BDS。
|
||||
LiteLoaderBDS 不会自动下载安装对应版本 BDS,你需要手动寻找和下载相应版本的旧版 BDS。
|
||||
|
||||
除了一些第三方网站提供的存档以外,你可以通过这种方式下载到旧版 BDS:将 `https://minecraft.azureedge.net/bin-win/` 与 BDS 压缩包文件名拼接起来。例如要下载1.20.30.02,你就可以在浏览器中访问 `https://minecraft.azureedge.net/bin-win/bedrock-server-1.20.30.02.zip`
|
||||
除了一些第三方网站提供的存档以外,你可以通过这种方式下载到旧版 BDS:将 `https://minecraft.azureedge.net/bin-win/` 与 BDS 压缩包文件名拼接起来。例如要下载1.20.30.02,你就可以在浏览器中访问 `https://minecraft.azureedge.net/bin-win/bedrock-server-1.20.30.02.zip`
|
||||
|
||||
## 下载 LiteLoaderBDS
|
||||
|
||||
:::warning
|
||||
|
||||
LiteLoaderBDS 仅适配了 BDS 的1.20.32 及以下版本。对于更高版本的 BDS 需要使用 [LeviLamina](../LeviLamina/LeviLamina.md) 加载器。对于 1.20.40 - 1.20.51 版本,你需要使用其他加载器。如果你只需要兼容 1.20.40 - 1.20.51 的客户端进服,你可以选用 BDS 1.20.32、最新版 LiteLoader 和 Glacie 插件的方案。
|
||||
LiteLoaderBDS 仅适配了 BDS 的1.20.32 及以下版本。对于更高版本的 BDS 需要使用 [LeviLamina](../LeviLamina/LeviLamina.md) 加载器。对于 1.20.40 - 1.20.51 版本,你需要使用其他加载器。如果你只需要兼容 1.20.40 - 1.20.51 的客户端进服,你可以选用 BDS 1.20.32、最新版 LiteLoader 和 Glacie 插件的方案。
|
||||
|
||||
:::
|
||||
|
||||
前往 https://github.com/LiteLDev/LiteLoaderBDSv2/releases 下载 BDS 版本对应的发行版。你可以在更新日志的 BDS 标签中找到该发行版适配的 BDS 版本。例如 2.14.1、2.14.0 的 BDS 标签写着 1.20.0.01,证明该发行版适配了 BDS 的 1.20.0.01 版本。
|
||||
前往 https://github.com/LiteLDev/LiteLoaderBDSv2/releases 下载 BDS 版本对应的发行版。你可以在更新日志的 BDS 标签中找到该发行版适配的 BDS 版本。例如 2.14.1、2.14.0 的 BDS 标签写着 1.20.0.01,证明该发行版适配了 BDS 的 1.20.0.01 版本。
|
||||
|
||||
## 安装 LiteLoaderBDS
|
||||
|
||||
下载好 `LiteLoaderBDS.zip` 后,解压该压缩包,其中包含四个文件/文件夹:
|
||||
下载好 `LiteLoaderBDS.zip` 后,解压该压缩包,其中包含四个文件/文件夹:
|
||||
- LiteLoader.dll
|
||||
- LLPreLoader.dll
|
||||
- PreEditor.exe
|
||||
@ -31,7 +31,7 @@ LiteLoaderBDS 仅适配了 BDS 的1.20.32 及以下版本。对于更高版本
|
||||
|
||||
将这四个文件放进 BDS 的根目录。
|
||||
|
||||
随后,双击运行 PreEditor.exe。该程序会弹出一个命令行窗口,当其中显示 **Done** 的时候,证明安装成功。
|
||||
随后,双击运行 PreEditor.exe。该程序会弹出一个命令行窗口,当其中显示 **Done** 的时候,证明安装成功。
|
||||
|
||||
## 运行带有 LiteLoaderBDS 加载器的 BDS
|
||||
|
||||
|
@ -9,24 +9,24 @@ sidebar_position: 2
|
||||
|
||||
LiteLoaderBDS 的插件共有以下几类:
|
||||
|
||||
1. 原生插件(native):俗称 dll 插件。通常是一个 .dll 后缀的文件。
|
||||
2. QuickJS 插件(qjs):俗称单文件 js 插件。通常是一个 .js 后缀的文件。
|
||||
1. 原生插件(native):俗称 dll 插件。通常是一个 .dll 后缀的文件。
|
||||
2. QuickJS 插件(qjs):俗称单文件 js 插件。通常是一个 .js 后缀的文件。
|
||||
3. Lua 插件:通常是一个 .lua 后缀的文件。
|
||||
4. NodeJS 插件:通常是一个文件夹或是一个 .llplugin 后缀的文件。
|
||||
5. Python 插件:通常是一个文件夹或是一个 .py 后缀的文件。
|
||||
6. LL.NET 插件:通常是一个 .dll 后缀的文件。虽然和原生插件后缀相同,但是这种插件必须安装了 LL.NET 插件的依赖才能正常加载和运行。
|
||||
6. LL.NET 插件:通常是一个 .dll 后缀的文件。虽然和原生插件后缀相同,但是这种插件必须安装了 LL.NET 插件的依赖才能正常加载和运行。
|
||||
|
||||
## 安装原生、QuickJS、Lua、Python 单文件插件
|
||||
|
||||
将插件的所有文件放入 `plugins` 文件夹,然后服务器将在下次启动时加载该插件。
|
||||
将插件的所有文件放入 `plugins` 文件夹,然后服务器将在下次启动时加载该插件。
|
||||
|
||||
## 安装 NodeJS 插件
|
||||
|
||||
将插件的所有文件放入 `plugins` 文件夹中的 `nodejs` 文件夹,然后服务器将在下次启动时加载该插件。
|
||||
将插件的所有文件放入 `plugins` 文件夹中的 `nodejs` 文件夹,然后服务器将在下次启动时加载该插件。
|
||||
|
||||
## 安装 Python 多文件插件
|
||||
|
||||
将插件的所有文件放入 `plugins` 文件夹中的 `python` 文件夹,然后服务器将在下次启动时加载该插件。
|
||||
将插件的所有文件放入 `plugins` 文件夹中的 `python` 文件夹,然后服务器将在下次启动时加载该插件。
|
||||
|
||||
## 安装 LL.NET 插件
|
||||
|
||||
|
@ -20,122 +20,122 @@ import TabItem from '@theme/TabItem';
|
||||
|
||||
<Tabs queryString="plugins-loader">
|
||||
<TabItem value="levilamina" label="LeviLamina">
|
||||
| 插件加载器 | 别名:LLL,LLv3 |
|
||||
| 插件加载器 | 别名:LLL,LLv3 |
|
||||
| --- | --- |
|
||||
| 名称 | [LeviLamina](https://levilamina.liteldev.com/zh) |
|
||||
| 作者 | [LiteLDev](https://github.com/LiteLDev) |
|
||||
| 介绍 | 轻量级、模块化和多功能的 Minecraft Bedrock Server BDS 插件加载器,曾被称为 LiteLoaderBDS |
|
||||
| 介绍 | 轻量级、模块化和多功能的 Minecraft Bedrock Server BDS 插件加载器,曾被称为 LiteLoaderBDS |
|
||||
| 推荐与否 | 非常推荐 |
|
||||
| 理由 | 插件生态不错,跟 [LiteLoader](#寿终正寝の加载器) 时代一样巅峰 |
|
||||
| 理由 | 插件生态不错,跟 [LiteLoader](#寿终正寝の加载器) 时代一样巅峰 |
|
||||
| 下载 | [GitHub 下载](https://github.com/LiteLDev/LeviLamina/releases) |
|
||||
| 支持的 MC 版本 | 1.20.61-1.21.3(目前保持更新) |
|
||||
| 支持的 MC 版本 | 1.20.61-1.21.3(目前保持更新) |
|
||||
</TabItem>
|
||||
<TabItem value="endstone" label="EndStone">
|
||||
| 插件加载器 | |
|
||||
| --- | --- |
|
||||
| 名称 | [EndStone](https://github.com/EndstoneMC/endstone) |
|
||||
| 作者 | [EndStoneMC](https://github.com/EndstoneMC) |
|
||||
| 介绍 | 提供类似 Bukkit 插件开发者的友好 API,简化了低层系统 API 和挂钩的处理。可以使用 C++ 或 Python 编写插件 |
|
||||
| 介绍 | 提供类似 Bukkit 插件开发者的友好 API,简化了低层系统 API 和挂钩的处理。可以使用 C++ 或 Python 编写插件 |
|
||||
| 推荐与否 | 比较慢推荐 |
|
||||
| 理由 | 虽然几乎没有插件生态,仅社区有 **极少** 的插件,但最近形势较好,社区内有参与开发的声音,后续可能会追平 LeviLamina |
|
||||
| 理由 | 虽然几乎没有插件生态,仅社区有 **极少** 的插件,但最近形势较好,社区内有参与开发的声音,后续可能会追平 LeviLamina |
|
||||
| 下载 | [Github 下载](https://github.com/EndstoneMC/endstone/releases) |
|
||||
| 支持的 MC 版本 | 1.20.71 - 1.21.2(目前保持更新) |
|
||||
| 支持的 MC 版本 | 1.20.71 - 1.21.2(目前保持更新) |
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## 官方提供的脚本加载器
|
||||
<Tabs queryString="plugins-loader">
|
||||
<TabItem value="bds-script-api" label="BDS Script API(官方)">
|
||||
<TabItem value="bds-script-api" label="BDS Script API(官方)">
|
||||
| 插件加载器 | 别名:SAPI |
|
||||
| --- | --- |
|
||||
| 名称 | [原生 BDS Script API](https://wiki.mcbe-dev.net/-/6424) |
|
||||
| 作者 | [Mojang Studio](https://github.com/Mojang) |
|
||||
| 介绍 | 随着 BDS 服务端的发展,官方已推出并逐渐完善基于 Javascript 语言的脚本 API,受到官方的支持与维护,可帮助创作者完成复杂的逻辑 <br />(其加载器直接内置于 BDS 核心包内,不用腐竹手动下载,这里仅提供 BDS 核心下载方式) |
|
||||
| 介绍 | 随着 BDS 服务端的发展,官方已推出并逐渐完善基于 Javascript 语言的脚本 API,受到官方的支持与维护,可帮助创作者完成复杂的逻辑 <br />(其加载器直接内置于 BDS 核心包内,不用腐竹手动下载,这里仅提供 BDS 核心下载方式) |
|
||||
| 推荐与否 | 非常不推荐 |
|
||||
| 理由 | 几乎没有插件生态,仅社区有 **极少** 的插件 |
|
||||
| 理由 | 几乎没有插件生态,仅社区有 **极少** 的插件 |
|
||||
| 下载 | [官网下载](https://www.minecraft.net/zh-hans/download/server/bedrock)<br />[原子云下载](https://res.nullatom.com/Minecraft/Server/BDS) |
|
||||
| 支持的 MC 版本 | 1.16.210 - 最新(稳定更新) |
|
||||
| 支持的 MC 版本 | 1.16.210 - 最新(稳定更新) |
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## 寿终正寝の加载器
|
||||
<Tabs queryString="plugins-loader">
|
||||
<TabItem value="liteloader" label="LiteLoader">
|
||||
| 插件加载器 | 别名:LL,LLv2([详情点我](#litexloader-合并至-liteloader2022年2月12日)) |
|
||||
| 插件加载器 | 别名:LL,LLv2([详情点我](#litexloader-合并至-liteloader2022年2月12日)) |
|
||||
| --- | --- |
|
||||
| 名称 | [LiteLoaderBDS](https://github.com/LiteLDev/LiteLoaderBDSv2/) |
|
||||
| 作者 | [LiteLDev](https://github.com/LiteLDev) |
|
||||
| 介绍 | LiteLoaderBDSv2 是一款专为 BDS 编写的插件加载器,旨在弥补官方行为包开发接口的不足。LiteLoaderBDSv2 支持多种编程语言编写插件,并保证了插件开发与维护的便利性 |
|
||||
| 介绍 | LiteLoaderBDSv2 是一款专为 BDS 编写的插件加载器,旨在弥补官方行为包开发接口的不足。LiteLoaderBDSv2 支持多种编程语言编写插件,并保证了插件开发与维护的便利性 |
|
||||
| 推荐与否 | 非常不推荐 |
|
||||
| 理由 | 插件生态无可厚非,没人会否定它的巅峰时代,可惜岁月不饶人啊...如果你服务器愿意在此版本区间便罢了,因为不好找插件了([详情点我](#liteloader-宣布停更2023年10月份)) |
|
||||
| 理由 | 插件生态无可厚非,没人会否定它的巅峰时代,可惜岁月不饶人啊...如果你服务器愿意在此版本区间便罢了,因为不好找插件了([详情点我](#liteloader-宣布停更2023年10月份)) |
|
||||
| 下载 | [GitHub 下载](https://github.com/LiteLDev/LeviLamina/releases) |
|
||||
| 支持的 MC 版本 | 1.16.210-1.20.31.01(已存档)[^Archived] |
|
||||
| 支持的 MC 版本 | 1.16.210-1.20.31.01(已存档)[^Archived] |
|
||||
</TabItem>
|
||||
<TabItem value="litexloader" label="LiteXLoader">
|
||||
| 插件加载器 | 别名:LXL |
|
||||
| --- | --- |
|
||||
| 名称 | [LiteXLoader](https://www.minebbs.com/threads/litexloader-x-bds.7439/) |
|
||||
| 作者 | [LiteDev](https://github.com/LiteLDev) |
|
||||
| 介绍 | LiteXLoader 是一款专为 LiteLoader 编写的拓展类插件加载器,旨在弥补 LiteLoader 可开发语言的不足。LiteXLoader 支持多种编程语言编写插件,并保证了插件开发与维护的便利性,例如拓展支持 Node-Js、Python、Qucik-Js 的开发 |
|
||||
| 介绍 | LiteXLoader 是一款专为 LiteLoader 编写的拓展类插件加载器,旨在弥补 LiteLoader 可开发语言的不足。LiteXLoader 支持多种编程语言编写插件,并保证了插件开发与维护的便利性,例如拓展支持 Node-Js、Python、Qucik-Js 的开发 |
|
||||
| 推荐与否 | 非常不推荐 |
|
||||
| 理由 | 后续合并到 LiteLoader 中。[详情点我](#litexloader-合并至-liteloader2022年2月12日) |
|
||||
| 下载 | [Github 下载](https://github.com/EndstoneMC/endstone/releases) |
|
||||
| 支持的 MC 版本 | 1.20.71 - 1.21.2(已存档)[^Archived] |
|
||||
| 支持的 MC 版本 | 1.20.71 - 1.21.2(已存档)[^Archived] |
|
||||
</TabItem>
|
||||
<TabItem value="bdsx" label="BDSX">
|
||||
| 插件加载器 | 别名:BDSX |
|
||||
| --- | --- |
|
||||
| 名称 | [bdsx](https://github.com/bdsx/bdsx) |
|
||||
| 作者 | [bdsx](https://github.com/bdsx) |
|
||||
| 介绍 | BDSX 是一个支持 node.js 的 Minecraft 基岩版专用服务器(BDS)修改版本。基于官方 BDS 实现,包含了原版 Minecraft 的所有特性,并支持 Hook 函数与网络数据包以添加或修改服务器的功能与表现。 |
|
||||
| 介绍 | BDSX 是一个支持 node.js 的 Minecraft 基岩版专用服务器(BDS)修改版本。基于官方 BDS 实现,包含了原版 Minecraft 的所有特性,并支持 Hook 函数与网络数据包以添加或修改服务器的功能与表现。 |
|
||||
| 推荐与否 | 不推荐 |
|
||||
| 理由 | 官方决定在将来仅提供给 LiteDev 开发团队 PDB 文件,LiteDev 仅被授权向社区分发将 PDB 封装后产生的 "Magic Blob" 文件,而 BDSX 大概率在后续不会跟进对利用 "Magic Blob" 来 Hook 函数的支持。 |
|
||||
| 理由 | 官方决定在将来仅提供给 LiteDev 开发团队 PDB 文件,LiteDev 仅被授权向社区分发将 PDB 封装后产生的 "Magic Blob" 文件,而 BDSX 大概率在后续不会跟进对利用 "Magic Blob" 来 Hook 函数的支持。 |
|
||||
| 下载 | [克隆源代码下载](https://github.com/bdsx/bdsx) |
|
||||
| 插件下载 | [npm源](https://www.npmjs.com/search?q=%40bdsx%2F)<br />[Github](https://github.com/topics/bdsx-plugins) |
|
||||
| 支持的 MC 版本 | 1.12 - 最新(目前保持更新) |
|
||||
| 支持的 MC 版本 | 1.12 - 最新(目前保持更新) |
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## 相关历史
|
||||
|
||||
### PDB 事件(2024年6月6日)
|
||||
### PDB 事件(2024年6月6日)
|
||||
|
||||
此文段部分引用自 B站 Dofes 与 MRUIAW 的合作视频,稍作了修改。
|
||||
此文段部分引用自 B站 Dofes 与 MRUIAW 的合作视频,稍作了修改。
|
||||
[Mojang删除了对基岩版最重要的东西...](https://www.bilibili.com/video/BV1GS421o7Dz/)
|
||||
|
||||
2024 年 6 月 6 日 凌晨,在发布的 1.21.10.22 Preview 版本的 BDS 中,LiteDev 开发成员注意到 PDB 文件被移除,紧接着社区开发者传来消息,称官方曾召开过会讨论 BDS 的 PDB 文件的去向。结果显然是 **决定移除**。如果将来都是如此的话,那么我们将会在高版本迎来首个没有 PDB 的版本。
|
||||
2024 年 6 月 6 日 凌晨,在发布的 1.21.10.22 Preview 版本的 BDS 中,LiteDev 开发成员注意到 PDB 文件被移除,紧接着社区开发者传来消息,称官方曾召开过会讨论 BDS 的 PDB 文件的去向。结果显然是 **决定移除**。如果将来都是如此的话,那么我们将会在高版本迎来首个没有 PDB 的版本。
|
||||
|
||||
官方声称他们知道此次行为会激怒社区开发者,并且是完全故意的。他们认为 MOD 存在所谓的 **“行业标准形式”**,使用调试符号和钩子(Hook)不是 MOD 的 “行业标准形式”。也就是说,他们认为他们提供的 **附加组件** 才是 MOD 的 “行业标准形式”,即宣布当前的所有 MOD 为 **非法**。
|
||||
官方声称他们知道此次行为会激怒社区开发者,并且是完全故意的。他们认为 MOD 存在所谓的 **“行业标准形式”**,使用调试符号和钩子(Hook)不是 MOD 的 “行业标准形式”。也就是说,他们认为他们提供的 **附加组件** 才是 MOD 的 “行业标准形式”,即宣布当前的所有 MOD 为 **非法**。
|
||||
|
||||
他们还认为,服务端符合文件只适用于制作客户端的作弊软件,而不适用于制作服务端的反作弊系统。这说法就好比说菜刀可以用来杀人,所以禁止出售菜刀(?)。
|
||||
但事实上客户端外挂并不使用 PDB 来查找函数地址,而是用签名来查找所需函数或变量的地址,但事实是服务端的反作弊 **极其依赖** PDB 符号文件。
|
||||
他们甚至可能还不知道特们的合作服务器使用的都是自己开发的服务端,而不是 BDS,重新写一个服务端不叫修改。
|
||||
他们还认为,服务端符合文件只适用于制作客户端的作弊软件,而不适用于制作服务端的反作弊系统。这说法就好比说菜刀可以用来杀人,所以禁止出售菜刀(?)。
|
||||
但事实上客户端外挂并不使用 PDB 来查找函数地址,而是用签名来查找所需函数或变量的地址,但事实是服务端的反作弊 **极其依赖** PDB 符号文件。
|
||||
他们甚至可能还不知道特们的合作服务器使用的都是自己开发的服务端,而不是 BDS,重新写一个服务端不叫修改。
|
||||
|
||||
开 BDS 的目的是为了生存玩法,而第三方服务端缺少原生特性,顶多开小游戏服。但 MOD BDS 的存在,就是为了在拥有原生特性的服务器上支持一些原生插件。因此,我们有理由相信这只是一个借口,而真正的原因我们还不得而知。我个人猜测,这可能与 Minecraft 的商业化有关。毕竟 Minecraft 是一个商业游戏,而 MOD BDS 可能被视为对其商业模式的一种威胁。社区对这种不顺应社区需求的行为表示了不满,有人已经提出了抵制的声音,目前相关的请求帖子,已经获得了超过1000个赞同。
|
||||
开 BDS 的目的是为了生存玩法,而第三方服务端缺少原生特性,顶多开小游戏服。但 MOD BDS 的存在,就是为了在拥有原生特性的服务器上支持一些原生插件。因此,我们有理由相信这只是一个借口,而真正的原因我们还不得而知。我个人猜测,这可能与 Minecraft 的商业化有关。毕竟 Minecraft 是一个商业游戏,而 MOD BDS 可能被视为对其商业模式的一种威胁。社区对这种不顺应社区需求的行为表示了不满,有人已经提出了抵制的声音,目前相关的请求帖子,已经获得了超过1000个赞同。
|
||||
|
||||
我们也了解到官方相关负责人正在讨论此事。
|
||||
|
||||
我们呼吁大家积极参与讨论,让官方了解我们的诉求!Partner 项目总监和工作室里的人讨论过,反正他们的观点是力推CRIPT的API,这将势不可挡,未来是 [All in JavaScript(即 SAPI)](#冷门加载器) 的时代,只要社区的需求大且合理,他们就会添加对应的接口。在PDB方面,他们认为这是 **非行业化的**,他们不认为这是合适且合法的 MOD 的行为,并 **《希望》** 社区给出一定要 PDB 才能实现的功能。
|
||||
我们呼吁大家积极参与讨论,让官方了解我们的诉求!Partner 项目总监和工作室里的人讨论过,反正他们的观点是力推CRIPT的API,这将势不可挡,未来是 [All in JavaScript(即 SAPI)](#冷门加载器) 的时代,只要社区的需求大且合理,他们就会添加对应的接口。在PDB方面,他们认为这是 **非行业化的**,他们不认为这是合适且合法的 MOD 的行为,并 **《希望》** 社区给出一定要 PDB 才能实现的功能。
|
||||
|
||||
此后,著名插件加载器 LeviLamina 刚出生不久就胎死腹中了...
|
||||
此后,著名插件加载器 LeviLamina 刚出生不久就胎死腹中了...
|
||||
![LeviLamina 在未来将会存档](./_images/levilamina-will-archived.png)
|
||||
|
||||
总之,在这场 PDB 事件风波不久后,很多基岩版腐竹都转移到 Java版服务端,以求后路。
|
||||
总之,在这场 PDB 事件风波不久后,很多基岩版腐竹都转移到 Java版服务端,以求后路。
|
||||
|
||||
不过,[EndStone](./plugins-loader-choose.md?plugins-loader=endstone#热门加载器) 的出现貌似给基岩版服务端带来了希望。
|
||||
不过,[EndStone](./plugins-loader-choose.md?plugins-loader=endstone#热门加载器) 的出现貌似给基岩版服务端带来了希望。
|
||||
|
||||
### LiteLoader 宣布停更(2023年10月份)
|
||||
LiteLoaderBDS 最初是基于 BedrockX 开发的,在 2.0 版本进行了完全重写。它一直处于存档状态,是以前最流行的 BDS 插件加载器之一。最后的版本是 2.16.2,发布于 2023 年 10 月 9 日,支持 BDS 1.20.32 版本。
|
||||
### LiteLoader 宣布停更(2023年10月份)
|
||||
LiteLoaderBDS 最初是基于 BedrockX 开发的,在 2.0 版本进行了完全重写。它一直处于存档状态,是以前最流行的 BDS 插件加载器之一。最后的版本是 2.16.2,发布于 2023 年 10 月 9 日,支持 BDS 1.20.32 版本。
|
||||
|
||||
一代骄子难道就此陨落了?
|
||||
|
||||
不,LiteDev 在后续发布了此文
|
||||
不,LiteDev 在后续发布了此文
|
||||
![LeviLamina在来的路上](./_images/levilamina-is-coming.png)
|
||||
所以并不是 LiteDev 扔下史山跑路了(这是官方原话自嘲),而是着手重构 LiteLoader,预计在未来发布 LiteLoaderBDSV3,即 LeviLamina。
|
||||
所以并不是 LiteDev 扔下史山跑路了(这是官方原话自嘲),而是着手重构 LiteLoader,预计在未来发布 LiteLoaderBDSV3,即 LeviLamina。
|
||||
|
||||
|
||||
### LiteXLoader 合并至 LiteLoader(2022年2月12日)
|
||||
LiteXLoader 于 2022 年 2 月 12 日 合并至 LiteLoader 项目,LXL成为LL的一个子模块。 LiteLoaderBDS将继续更新,作为C++、Go、Js、Lua和其他语言的通用加载器。所有以前的LXL插件将继续在新的LL版本下正常运行,所有现有的API将保持不变。
|
||||
### LiteXLoader 合并至 LiteLoader(2022年2月12日)
|
||||
LiteXLoader 于 2022 年 2 月 12 日 合并至 LiteLoader 项目,LXL成为LL的一个子模块。 LiteLoaderBDS将继续更新,作为C++、Go、Js、Lua和其他语言的通用加载器。所有以前的LXL插件将继续在新的LL版本下正常运行,所有现有的API将保持不变。
|
||||
|
||||
|
||||
[^Archived]: 已存档(Archived):这意味着该项目已经不再活跃或不再被维护。当一个项目被标记为 "Archived" 时,它通常表示项目已经完成或不再进行更新。这可能是由于多种原因,比如项目已经达到其目标,或者开发者已经停止了项目的开发。
|
||||
[^Archived]: 已存档(Archived):这意味着该项目已经不再活跃或不再被维护。当一个项目被标记为 "Archived" 时,它通常表示项目已经完成或不再进行更新。这可能是由于多种原因,比如项目已经达到其目标,或者开发者已经停止了项目的开发。
|
||||
|
@ -14,7 +14,7 @@ sidebar_position: 1
|
||||
|
||||
# 插件
|
||||
|
||||
**本文档中提到的插件都有较多用户基础和完善的 Wiki,具体插件请查看插件的 Wiki。**
|
||||
**本文档中提到的插件都有较多用户基础和完善的 Wiki,具体插件请查看插件的 Wiki。**
|
||||
|
||||
**建议阅读**
|
||||
|
||||
|
@ -5,7 +5,7 @@ sidebar_position: 3
|
||||
|
||||
# 建设阶段
|
||||
|
||||
在这个阶段,你已经了解了基础知识,是时候学习一些进阶知识了。
|
||||
在这个阶段,你已经了解了基础知识,是时候学习一些进阶知识了。
|
||||
|
||||
在这一章我们主要围绕以下几个点:
|
||||
|
||||
@ -13,4 +13,4 @@ import DocCardList from '@theme/DocCardList';
|
||||
|
||||
<DocCardList />
|
||||
|
||||
插件 - 推荐一些常见的插件,并且提及相关的注意事项和基础知识。
|
||||
插件 - 推荐一些常见的插件,并且提及相关的注意事项和基础知识。
|
||||
|
@ -5,11 +5,11 @@ sidebar_position: 1
|
||||
|
||||
# 基础知识
|
||||
|
||||
考虑到笨蛋教程主要面向新手,我们无法了解你了解什么不了解什么。
|
||||
考虑到笨蛋教程主要面向新手,我们无法了解你了解什么不了解什么。
|
||||
|
||||
本文档暂时就开服最重要的基础概念进行介绍,如果有你自认为非常了解或者不重要的部分,
|
||||
本文档暂时就开服最重要的基础概念进行介绍,如果有你自认为非常了解或者不重要的部分,
|
||||
|
||||
**跳过他吧**,因为我们在后面再次提到这些概念的时候会重新跳转到对应链接。
|
||||
**跳过他吧**,因为我们在后面再次提到这些概念的时候会重新跳转到对应链接。
|
||||
|
||||
import DocCardList from '@theme/DocCardList';
|
||||
|
||||
|
@ -30,13 +30,13 @@ BDS服务端文件夹
|
||||
│ └─Bedrock level // 世界存档
|
||||
│ ├─db // 存档数据文件夹
|
||||
│ ├─level_dat // 存档设定
|
||||
│ ├─level.dat_old // 存档设定(旧)
|
||||
│ ├─level.dat_old // 存档设定(旧)
|
||||
│ └─level_name.txt // 存档名称
|
||||
├─allowlist.json // 白名单文件
|
||||
├─bedrock_server.exe // 服务端启动程序
|
||||
├─bedrock_server.pdb // 程序数据库文件
|
||||
├─bedrock_server_how_to.html // 如何使用BDS服务器的官方指南(没多大用处,看看就行)
|
||||
├─permissions.json // 管理员(OP)玩家相关数据
|
||||
├─bedrock_server_how_to.html // 如何使用BDS服务器的官方指南(没多大用处,看看就行)
|
||||
├─permissions.json // 管理员(OP)玩家相关数据
|
||||
├─release-notes.txt // 服务端发行版本详情
|
||||
├─server.properties // 配置文件
|
||||
└─valid_known_packs.json // 已知的附加包
|
||||
@ -44,16 +44,16 @@ BDS服务端文件夹
|
||||
|
||||
<!-- :::info
|
||||
|
||||
对于世界文件夹的详细说明,请前往 **[世界文件架构](what-is-world.md)**
|
||||
对于世界文件夹的详细说明,请前往 **[世界文件架构](what-is-world.md)**
|
||||
|
||||
::: -->
|
||||
|
||||
## 根目录下的一些文件
|
||||
|
||||
:::warning
|
||||
请不要让你的服务端结构与文档解说结构有任何的 **缺少**,否则可能会出现 **玄学问题**
|
||||
请不要让你的服务端结构与文档解说结构有任何的 **缺少**,否则可能会出现 **玄学问题**
|
||||
|
||||
若你 **一致认为** 有可删之处,那么以下是 **绝对可以删** 的服务端结构(反正每次开服都会检测是否有这些文件夹,如果没有还是会创建的)
|
||||
若你 **一致认为** 有可删之处,那么以下是 **绝对可以删** 的服务端结构(反正每次开服都会检测是否有这些文件夹,如果没有还是会创建的)
|
||||
|
||||
<details>
|
||||
<summary>点击展开</summary>
|
||||
@ -63,8 +63,8 @@ BDS服务端文件夹
|
||||
- development_resource_packs
|
||||
- development_skin_packs
|
||||
- world-templates
|
||||
- bedrock_server_how_to.html(这个不会自己创建)
|
||||
- release-notes.txt(这个不会自己创建)
|
||||
- bedrock_server_how_to.html(这个不会自己创建)
|
||||
- release-notes.txt(这个不会自己创建)
|
||||
- valid_known_packs.json
|
||||
|
||||
</details>
|
||||
@ -73,7 +73,7 @@ BDS服务端文件夹
|
||||
|
||||
---
|
||||
- `behavior_packs`
|
||||
- 用于安装新的行为包。行为包可以改变游戏中的某些行为,例如,它们可以修改怪物行为、游戏规则或添加新的游戏机制。
|
||||
- 用于安装新的行为包。行为包可以改变游戏中的某些行为,例如,它们可以修改怪物行为、游戏规则或添加新的游戏机制。
|
||||
- <font color="red">BUT! 没啥用...后续也不会涉及...</font>
|
||||
---
|
||||
- `config`
|
||||
@ -81,15 +81,15 @@ BDS服务端文件夹
|
||||
- <font color="red">BUT! 没啥用...后续也不会涉及...</font>
|
||||
---
|
||||
- `definitions`
|
||||
- 这个文件夹包含定义文件,这些文件通常用于定义游戏中的群系、结构、生物生成等信息。它们决定了世界中不同区域的特性和外观。
|
||||
- 这个文件夹包含定义文件,这些文件通常用于定义游戏中的群系、结构、生物生成等信息。它们决定了世界中不同区域的特性和外观。
|
||||
- <font color="red">BUT! 没啥用...后续也不会涉及...</font>
|
||||
---
|
||||
- `development_behavior_packs`
|
||||
- 为开发者提供安装新行为包的文件夹。这允许开发者测试和开发自定义的行为包,而不会影响到主服务器的行为包。
|
||||
- 为开发者提供安装新行为包的文件夹。这允许开发者测试和开发自定义的行为包,而不会影响到主服务器的行为包。
|
||||
- <font color="red">BUT! 没啥用...后续也不会涉及...</font>
|
||||
---
|
||||
- `development_resource_packs`
|
||||
- 为开发者提供安装新资源包的文件夹。开发者可以在这里添加、测试和开发自定义的资源包,如纹理、模型和音效等。
|
||||
- 为开发者提供安装新资源包的文件夹。开发者可以在这里添加、测试和开发自定义的资源包,如纹理、模型和音效等。
|
||||
- <font color="red">BUT! 没啥用...后续也不会涉及...</font>
|
||||
---
|
||||
- `development_skin_packs`
|
||||
@ -97,65 +97,65 @@ BDS服务端文件夹
|
||||
- <font color="red">BUT! 没啥用...后续也不会涉及...</font>
|
||||
---
|
||||
- `resource_packs`
|
||||
- 用于安装新的资源包。资源包可以改变游戏中的视觉和声音元素,例如,它们可以提供新的纹理、音效和模型。
|
||||
- 用于安装新的资源包。资源包可以改变游戏中的视觉和声音元素,例如,它们可以提供新的纹理、音效和模型。
|
||||
- <font color="red">BUT! 没啥用...后续也不会涉及...</font>
|
||||
---
|
||||
- `world-templates`
|
||||
- 包含世界模板,这些模板可以被用来快速创建具有特定设置和结构的新世界。
|
||||
- <font color="green">有点用,但不多。</font>
|
||||
- 包含世界模板,这些模板可以被用来快速创建具有特定设置和结构的新世界。
|
||||
- <font color="green">有点用,但不多。</font>
|
||||
---
|
||||
- `worlds`
|
||||
- 这是存储主世界文件夹的地方。每个世界都有自己的子文件夹,其中包含该世界的所有数据,如地形、建筑、玩家进度等。
|
||||
- 这是存储主世界文件夹的地方。每个世界都有自己的子文件夹,其中包含该世界的所有数据,如地形、建筑、玩家进度等。
|
||||
- `Bedrock level`
|
||||
- 包含特定世界的存档数据。
|
||||
- `db`
|
||||
- 存档数据文件夹,通常包含有关世界的数据库文件。
|
||||
- 存档数据文件夹,通常包含有关世界的数据库文件。
|
||||
- `level_dat`
|
||||
- 包含世界的基本设置和属性,如游戏规则、时间、天气等。
|
||||
- 包含世界的基本设置和属性,如游戏规则、时间、天气等。
|
||||
- `level.dat_old`
|
||||
- 旧版的存档设定文件,通常在更新或备份时使用。
|
||||
- 旧版的存档设定文件,通常在更新或备份时使用。
|
||||
- `level_name.txt`
|
||||
- 包含世界名称的文件。
|
||||
---
|
||||
- `allowlist.json`
|
||||
- 白名单文件,列出了允许进入服务器的玩家列表。
|
||||
- (如果你在 `server.properties` 中开启了白名单,你就可以在该文件中添加和管理谁被允许或不被允许进入服务器)。
|
||||
- 白名单文件,列出了允许进入服务器的玩家列表。
|
||||
- (如果你在 `server.properties` 中开启了白名单,你就可以在该文件中添加和管理谁被允许或不被允许进入服务器)。
|
||||
---
|
||||
- `bedrock_server.exe`
|
||||
- 服务端启动程序,用于启动和运行《我的世界》基岩版服务器。
|
||||
- 服务端启动程序,用于启动和运行《我的世界》基岩版服务器。
|
||||
|
||||
- 你可以改名叫任何名字(只要以 `.exe` 结尾就行),但不建议你这么做,可能会导致成为后续操作报错的因素。例如:
|
||||
1. 若你使用 **面板** 开服,需要在对应的 **启动路径** 中修改服务端启动程序的文件名
|
||||
2. 若你使用 **启用脚本** 开服,需要在脚本对应位置的 **启动命令** 中修改 **启动程序的文件名** 为 **该服务端启动程序的文件名**(bedrock_server.exe)
|
||||
- 你可以改名叫任何名字(只要以 `.exe` 结尾就行),但不建议你这么做,可能会导致成为后续操作报错的因素。例如:
|
||||
1. 若你使用 **面板** 开服,需要在对应的 **启动路径** 中修改服务端启动程序的文件名
|
||||
2. 若你使用 **启用脚本** 开服,需要在脚本对应位置的 **启动命令** 中修改 **启动程序的文件名** 为 **该服务端启动程序的文件名**(bedrock_server.exe)
|
||||
---
|
||||
- `bedrock_server.pdb`
|
||||
- 程序数据库文件,通常用于调试和错误分析。
|
||||
- 程序数据库文件,通常用于调试和错误分析。
|
||||
---
|
||||
- `bedrock_server_how_to.html`
|
||||
- 如何使用BDS服务器的官方指南,虽然你说“没多大用处”,但它可能包含有关配置和运行服务器的有用信息。
|
||||
- 有点用,但不多
|
||||
- 如何使用BDS服务器的官方指南,虽然你说“没多大用处”,但它可能包含有关配置和运行服务器的有用信息。
|
||||
- 有点用,但不多
|
||||
---
|
||||
- `permissions.json`
|
||||
- 管理员(OP)玩家相关数据(如 UUID 及游戏名称等相关信息),包括权限设置和角色定义。
|
||||
- 管理员(OP)玩家相关数据(如 UUID 及游戏名称等相关信息),包括权限设置和角色定义。
|
||||
---
|
||||
- `release-notes.txt`
|
||||
- 服务端发行版本详情,包含了每个版本更新的日志和更改内容。
|
||||
- 服务端发行版本详情,包含了每个版本更新的日志和更改内容。
|
||||
- <font color="red">BUT! 没啥用...后续也不会涉及...</font>
|
||||
---
|
||||
- `server.properties`
|
||||
- 服务器配置文件,用于调整各种服务器设置,如设置端口,设置游戏难度,设置游戏模式(生存、创造等)等。
|
||||
- 服务器配置文件,用于调整各种服务器设置,如设置端口,设置游戏难度,设置游戏模式(生存、创造等)等。
|
||||
- [**如何使用?**](#)
|
||||
---
|
||||
- `valid_known_packs.json`
|
||||
- 包含已知的附加包列表,这些包可能包括行为包、资源包等,服务器会根据这个列表来验证安装的包。
|
||||
- <font color="green">有点用,但不多。</font>
|
||||
- 包含已知的附加包列表,这些包可能包括行为包、资源包等,服务器会根据这个列表来验证安装的包。
|
||||
- <font color="green">有点用,但不多。</font>
|
||||
---
|
||||
|
||||
|
||||
至此,大部分的以 BDS 为基础的服务器核心服务端的结构已经大致呈现在你眼前。
|
||||
至此,大部分的以 BDS 为基础的服务器核心服务端的结构已经大致呈现在你眼前。
|
||||
|
||||
:::tip
|
||||
|
||||
如果你的服务端有更多的文件,大概率是 [**插件加载器** / **插件**](../../process/plugins/plugins-loader-choose.md)(如针对 BDS 的 Levilamina 插件加载器会释放更多文件夹)创建的文件夹,一般来说无需担心。
|
||||
如果你的服务端有更多的文件,大概率是 [**插件加载器** / **插件**](../../process/plugins/plugins-loader-choose.md)(如针对 BDS 的 Levilamina 插件加载器会释放更多文件夹)创建的文件夹,一般来说无需担心。
|
||||
|
||||
:::
|
||||
|
@ -5,7 +5,7 @@ sidebar_position: 2
|
||||
|
||||
# 开始阶段
|
||||
|
||||
在这个阶段,我们主要为你介绍服务器基础知识,如何区别客户端和服务端、如何选择服务端、如何搭建并连接等。
|
||||
在这个阶段,我们主要为你介绍服务器基础知识,如何区别客户端和服务端、如何选择服务端、如何搭建并连接等。
|
||||
|
||||
import DocCardList from '@theme/DocCardList';
|
||||
|
||||
|
@ -7,13 +7,13 @@ sidebar_position: 1
|
||||
|
||||
👋 欢迎来到笨蛋开服教程 **基岩** 板块!
|
||||
|
||||
此板块是一篇主要针对 **基岩版** 服务器的开服指南,而非 **Java 版**。
|
||||
此板块是一篇主要针对 **基岩版** 服务器的开服指南,而非 **Java 版**。
|
||||
|
||||
# 开始你的旅程
|
||||
|
||||
![:NitWikit](https://count.kjchmc.cn/get/@:NitWikit)
|
||||
|
||||
如果你确定你符合条件,请点击一侧的目录开始阅读文档。
|
||||
如果你确定你符合条件,请点击一侧的目录开始阅读文档。
|
||||
|
||||
# 更多
|
||||
|
||||
|
@ -5,7 +5,7 @@ sidebar_position: 1
|
||||
|
||||
# 准备工作
|
||||
|
||||
在正式开 Minecraft 服务器之前,请一定确认已经准备好了以下必备软件或网页:
|
||||
在正式开 Minecraft 服务器之前,请一定确认已经准备好了以下必备软件或网页:
|
||||
|
||||
import DocCardList from '@theme/DocCardList';
|
||||
|
||||
@ -13,8 +13,8 @@ import DocCardList from '@theme/DocCardList';
|
||||
|
||||
其中:
|
||||
|
||||
文档编辑软件能够有效提高编辑插件、核心配置时的效率,降低错误使用语法的可能性;
|
||||
文档编辑软件能够有效提高编辑插件、核心配置时的效率,降低错误使用语法的可能性;
|
||||
|
||||
网页主要包括了寻找插件、mod、生成 MOTD,生成指令等便捷功能;
|
||||
网页主要包括了寻找插件、mod、生成 MOTD,生成指令等便捷功能;
|
||||
|
||||
笨蛋脚本主要用于一键式配置文件、安装插件等。
|
||||
|
@ -5,7 +5,7 @@ sidebar_position: 1
|
||||
|
||||
# 准备工作
|
||||
|
||||
在正式开 Minecraft 服务器之前,请一定确认已经准备好了以下必备软件或网页:
|
||||
在正式开 Minecraft 服务器之前,请一定确认已经准备好了以下必备软件或网页:
|
||||
|
||||
import DocCardList from '@theme/DocCardList';
|
||||
|
||||
@ -13,8 +13,8 @@ import DocCardList from '@theme/DocCardList';
|
||||
|
||||
其中:
|
||||
|
||||
文档编辑软件能够有效提高编辑插件、核心配置时的效率,降低错误使用语法的可能性;
|
||||
文档编辑软件能够有效提高编辑插件、核心配置时的效率,降低错误使用语法的可能性;
|
||||
|
||||
网页主要包括了寻找插件、mod、生成 MOTD,生成指令等便捷功能;
|
||||
网页主要包括了寻找插件、mod、生成 MOTD,生成指令等便捷功能;
|
||||
|
||||
笨蛋脚本主要用于一键式配置文件、安装插件等。
|
||||
|
@ -7,12 +7,12 @@ sidebar_position: 3
|
||||
|
||||
Minecraft Wiki 中有对该概念的 [详细介绍](https://zh.minecraft.wiki/w/%E5%8D%8F%E8%AE%AE%E7%89%88%E6%9C%AC) 。本文将讲解开服过程中需要注意的重点内容。
|
||||
|
||||
简单来说,协议版本就像客户端与服务器之间的语言版本。把旧版协议比作老奶奶,比如“古代人” 1.20.50 讲的是“古汉语”协议 630,而你 1.20.60 讲的是“现代汉语”协议 649。古代人(1.20.50)和你(1.20.60)讲(连接)古汉语(使用协议 630)时,你听不懂。同理,你(1.20.60)和古代人(1.20.50)讲(连接)现代汉语(使用协议 649)时,古代人听不懂。为了能互相理解,你只能和同为现代人(同为 649 协议)交谈,古代人也只能和古代人(同为 630 协议)交谈。
|
||||
简单来说,协议版本就像客户端与服务器之间的语言版本。把旧版协议比作老奶奶,比如“古代人” 1.20.50 讲的是“古汉语”协议 630,而你 1.20.60 讲的是“现代汉语”协议 649。古代人(1.20.50)和你(1.20.60)讲(连接)古汉语(使用协议 630)时,你听不懂。同理,你(1.20.60)和古代人(1.20.50)讲(连接)现代汉语(使用协议 649)时,古代人听不懂。为了能互相理解,你只能和同为现代人(同为 649 协议)交谈,古代人也只能和古代人(同为 630 协议)交谈。
|
||||
|
||||
## 更新规律
|
||||
|
||||
通常来说,MOJANG 会在每个修订版本号十位发生改变时改变协议版本。例如,1.20.10 - 1.20.15 同为协议版本 594,而 1.20.30 开始协议版本变更为618。之后的 1.20.31、1.20.32 都是 618 协议版本,到 1.20.40时再次更新为 622。
|
||||
通常来说,MOJANG 会在每个修订版本号十位发生改变时改变协议版本。例如,1.20.10 - 1.20.15 同为协议版本 594,而 1.20.30 开始协议版本变更为618。之后的 1.20.31、1.20.32 都是 618 协议版本,到 1.20.40时再次更新为 622。
|
||||
|
||||
有时 MOJANG 会为了一些原因和目的在十位之内更新协议版本,例如 1.19.60 - 62 和 1.19.63 协议版本不同,1.21.0 - 1.21.1 和 1.21.2 - 1.21.3 协议版本不同。
|
||||
有时 MOJANG 会为了一些原因和目的在十位之内更新协议版本,例如 1.19.60 - 62 和 1.19.63 协议版本不同,1.21.0 - 1.21.1 和 1.21.2 - 1.21.3 协议版本不同。
|
||||
|
||||
通常 MOJANG 会每五周左右发布一次这种更新协议的版本。
|
||||
|
@ -20,61 +20,61 @@ import TabItem from '@theme/TabItem';
|
||||
<TabItem value="bds" label="Bedrock Dedicated Server(BDS)">
|
||||
|
||||
:::warning
|
||||
至本篇文档开始,**`BDS`** 一致指 **`Bedrock Dedicated Server`**,而不是指 **`Beidou Navigation Satellite System`**(北斗卫星导航系统)
|
||||
至本篇文档开始,**`BDS`** 一致指 **`Bedrock Dedicated Server`**,而不是指 **`Beidou Navigation Satellite System`**(北斗卫星导航系统)
|
||||
:::
|
||||
|
||||
![BDS 运行时的样子](_images/bedrock-core-running.png)
|
||||
|
||||
此服务器核心允许 _Minecraft 腐竹_ 在家里使用安装有 **Windows** 或 **Linux** 的设备或使用 **云服务托管**(云服务器)来搭建属于自己的 BDS 服务器。
|
||||
这是坐落于 **Minecraft 官网** 的服务端(与 Java 的 Vanilla 服务端在一个页面)。作为官方服务端,它有着极其完善的 Minecraft 特性和流畅的游戏体验,几乎和单人一模一样,说是生存服首当之选也不为过。
|
||||
此服务器核心允许 _Minecraft 腐竹_ 在家里使用安装有 **Windows** 或 **Linux** 的设备或使用 **云服务托管**(云服务器)来搭建属于自己的 BDS 服务器。
|
||||
这是坐落于 **Minecraft 官网** 的服务端(与 Java 的 Vanilla 服务端在一个页面)。作为官方服务端,它有着极其完善的 Minecraft 特性和流畅的游戏体验,几乎和单人一模一样,说是生存服首当之选也不为过。
|
||||
|
||||
**优势**:
|
||||
|
||||
- 官方支持:作为 Mojang 官方推出的服务器端软件,BDS 能够获得官方的最新更新和支持,确保与 Minecraft 基岩版的最新版本兼容。
|
||||
- 文档和社区支持:虽然官方提供了一些基本文档,但不如第三方服务器端软件的社区那样提供丰富的教程和支持。社区插件内容庞大,基本满足腐竹的日常需求(虽然官方服务端无法加载插件,但可以通过 [社区开发的加载器](/docs-bedrock/bds-core/process/plugins/plugins-loader-choose.md#bds - 社区开发的加载器) 解决这一问题)。
|
||||
- 稳定性:由于是官方产品,BDS 在稳定性方面通常表现良好,能够提供可靠的服务器体验。
|
||||
- 兼容性:BDS 与 **Minecraft 基岩版客户端** 的兼容性最好,确保玩家可以无缝连接和游戏。
|
||||
- 安全性:官方服务器端软件通常会得到更频繁的安全更新,减少了潜在的安全风险。
|
||||
- 资源利用:BDS 针对 **Minecraft 基岩版** 进行了优化,能够高效利用服务器资源。
|
||||
- 官方支持:作为 Mojang 官方推出的服务器端软件,BDS 能够获得官方的最新更新和支持,确保与 Minecraft 基岩版的最新版本兼容。
|
||||
- 文档和社区支持:虽然官方提供了一些基本文档,但不如第三方服务器端软件的社区那样提供丰富的教程和支持。社区插件内容庞大,基本满足腐竹的日常需求(虽然官方服务端无法加载插件,但可以通过 [社区开发的加载器](/docs-bedrock/bds-core/process/plugins/plugins-loader-choose.md#bds - 社区开发的加载器) 解决这一问题)。
|
||||
- 稳定性:由于是官方产品,BDS 在稳定性方面通常表现良好,能够提供可靠的服务器体验。
|
||||
- 兼容性:BDS 与 **Minecraft 基岩版客户端** 的兼容性最好,确保玩家可以无缝连接和游戏。
|
||||
- 安全性:官方服务器端软件通常会得到更频繁的安全更新,减少了潜在的安全风险。
|
||||
- 资源利用:BDS 针对 **Minecraft 基岩版** 进行了优化,能够高效利用服务器资源。
|
||||
|
||||
**劣势**:
|
||||
|
||||
- 定制性有限:与一些第三方服务器端软件相比,BDS 的定制性和扩展性可能 **较为有限**,**不支持插件系统**,限制了服务器的个性化。
|
||||
- 性能优化:虽然 BDS 性能稳定,但可能在某些方面(如多核优化)不如专门的第三方服务器端软件。它的生物运算运行在一个线程上。意味着你的服务器的流畅度主要取决于 **CPU 的单核性能**。这使得地图越大,服务器就越 [卡顿](https://yizhan.wiki/NitWikit/start/basic/what-is-caton),不如 Java 版服务端流畅,因为 Java 版服务端 **支持多核运行**。
|
||||
- 高级功能缺失:BDS 可能不支持一些高级功能,如自定义世界生成、高级权限管理等,这些通常需要第三方软件才能实现。
|
||||
- 内存泄漏:内存占用会 *缓慢* 增加,有时严重的还会导致 **内存泄漏**。如果强行进行 **内存清理** 的话,会导致玩家在进入 **装有 材质包 / Addon 的服务器** 时 **该玩家客户端无法下载对应内容**,致使下载进度条卡条,只能让腐竹重启服务器解决。
|
||||
- 定制性有限:与一些第三方服务器端软件相比,BDS 的定制性和扩展性可能 **较为有限**,**不支持插件系统**,限制了服务器的个性化。
|
||||
- 性能优化:虽然 BDS 性能稳定,但可能在某些方面(如多核优化)不如专门的第三方服务器端软件。它的生物运算运行在一个线程上。意味着你的服务器的流畅度主要取决于 **CPU 的单核性能**。这使得地图越大,服务器就越 [卡顿](https://yizhan.wiki/NitWikit/start/basic/what-is-caton),不如 Java 版服务端流畅,因为 Java 版服务端 **支持多核运行**。
|
||||
- 高级功能缺失:BDS 可能不支持一些高级功能,如自定义世界生成、高级权限管理等,这些通常需要第三方软件才能实现。
|
||||
- 内存泄漏:内存占用会 *缓慢* 增加,有时严重的还会导致 **内存泄漏**。如果强行进行 **内存清理** 的话,会导致玩家在进入 **装有 材质包 / Addon 的服务器** 时 **该玩家客户端无法下载对应内容**,致使下载进度条卡条,只能让腐竹重启服务器解决。
|
||||
|
||||
总体来说,Bedrock Dedicated Server 适合那些希望获得官方支持、稳定性和兼容性的服务器管理员。如果你的服务器不需要复杂的定制或高级功能,BDS 是一个可靠的选择。然而,对于那些需要更多自定义选项和高级功能的用户,可能需要考虑使用第三方服务器端软件。
|
||||
总体来说,Bedrock Dedicated Server 适合那些希望获得官方支持、稳定性和兼容性的服务器管理员。如果你的服务器不需要复杂的定制或高级功能,BDS 是一个可靠的选择。然而,对于那些需要更多自定义选项和高级功能的用户,可能需要考虑使用第三方服务器端软件。
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="nukkit" label="Nukkit(NK)">
|
||||
|
||||
:::warning
|
||||
至本篇文档开始,**`NK`** 一致指 **`Nukkit`**,但考虑到全称不长,因此二者都会出现在本文档中
|
||||
至本篇文档开始,**`NK`** 一致指 **`Nukkit`**,但考虑到全称不长,因此二者都会出现在本文档中
|
||||
:::
|
||||
|
||||
![Nukkit 运行时的样子](_images/nukkit-core-running.png)
|
||||
|
||||
它的名字,很像 Java 版服务端的 Bukkit。没错,它就是 *意图* 创作出来类似 Bukkit 的基岩版服务端,编写语言正是 **Java**。
|
||||
它的名字,很像 Java 版服务端的 Bukkit。没错,它就是 *意图* 创作出来类似 Bukkit 的基岩版服务端,编写语言正是 **Java**。
|
||||
|
||||
**优势**:
|
||||
|
||||
- 轻量级:Nukkit 设计轻量,对系统资源的 **需求相对较低**,适合在 **资源有限** 的服务器上运行。
|
||||
- 高性能:Nukkit 在性能方面进行了优化,能够 **支持较多的同时在线玩家**,保持良好的游戏体验。
|
||||
- 插件系统:Nukkit 拥有一个 **活跃的插件生态系统**,用户可以轻松地安装和使用各种插件来扩展服务器功能。
|
||||
- 跨平台:Nukkit **支持多个操作系统**,包括 Windows、Linux 和 macOS,方便在不同平台上搭建服务器。
|
||||
- 易于上手:相对于其他服务器端软件,Nukkit 的配置和使用较为简单,适合初学者 **快速搭建服务器**。
|
||||
- 社区支持:Nukkit 有一个相对活跃的社区,用户可以从中获得帮助和资源。
|
||||
- 轻量级:Nukkit 设计轻量,对系统资源的 **需求相对较低**,适合在 **资源有限** 的服务器上运行。
|
||||
- 高性能:Nukkit 在性能方面进行了优化,能够 **支持较多的同时在线玩家**,保持良好的游戏体验。
|
||||
- 插件系统:Nukkit 拥有一个 **活跃的插件生态系统**,用户可以轻松地安装和使用各种插件来扩展服务器功能。
|
||||
- 跨平台:Nukkit **支持多个操作系统**,包括 Windows、Linux 和 macOS,方便在不同平台上搭建服务器。
|
||||
- 易于上手:相对于其他服务器端软件,Nukkit 的配置和使用较为简单,适合初学者 **快速搭建服务器**。
|
||||
- 社区支持:Nukkit 有一个相对活跃的社区,用户可以从中获得帮助和资源。
|
||||
|
||||
**劣势**:
|
||||
|
||||
- 更新滞后:Nukkit 的更新可能不如官方服务器端软件那样及时,可能无法立即支持最新的 Minecraft 版本和特性。
|
||||
- 生态系统限制:虽然 Nukkit 的插件生态系统活跃,但与一些更流行的服务器端软件(如 Spigot/Paper)相比,可用的插件和资源可能较少。
|
||||
- 多核优化不足:早期的 Nukkit 版本在多核处理器优化方面可能不如其他服务器端软件,这可能会 **限制其在高性能服务器上的性能表现**。
|
||||
- 文档和教程:虽然社区活跃,但 **高质量的官方文档和教程可能相对缺乏**,新用户可能需要花费更多时间学习和解决问题。
|
||||
- 稳定性问题:由于开源项目的性质,Nukkit 可能偶尔会出现稳定性问题,尤其是在处理大量玩家或复杂插件时。
|
||||
- 更新滞后:Nukkit 的更新可能不如官方服务器端软件那样及时,可能无法立即支持最新的 Minecraft 版本和特性。
|
||||
- 生态系统限制:虽然 Nukkit 的插件生态系统活跃,但与一些更流行的服务器端软件(如 Spigot/Paper)相比,可用的插件和资源可能较少。
|
||||
- 多核优化不足:早期的 Nukkit 版本在多核处理器优化方面可能不如其他服务器端软件,这可能会 **限制其在高性能服务器上的性能表现**。
|
||||
- 文档和教程:虽然社区活跃,但 **高质量的官方文档和教程可能相对缺乏**,新用户可能需要花费更多时间学习和解决问题。
|
||||
- 稳定性问题:由于开源项目的性质,Nukkit 可能偶尔会出现稳定性问题,尤其是在处理大量玩家或复杂插件时。
|
||||
|
||||
总的来说,Nukkit 是一个适合初学者和小型服务器使用的轻量级 Minecraft 服务器端软件,它提供了足够的性能和可扩展性来满足基本需求。然而,对于需要最新游戏特性、高级优化和广泛插件支持的大型服务器,可能需要考虑其他选项。
|
||||
总的来说,Nukkit 是一个适合初学者和小型服务器使用的轻量级 Minecraft 服务器端软件,它提供了足够的性能和可扩展性来满足基本需求。然而,对于需要最新游戏特性、高级优化和广泛插件支持的大型服务器,可能需要考虑其他选项。
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="pnx" label="PowerNukkitX(PNX)">
|
||||
@ -85,53 +85,53 @@ import TabItem from '@theme/TabItem';
|
||||
:::
|
||||
|
||||
:::warning
|
||||
至本篇文档开始,**`PNX`** 一致指 **`PowerNukkitX`**
|
||||
至本篇文档开始,**`PNX`** 一致指 **`PowerNukkitX`**
|
||||
:::
|
||||
|
||||
![PNX 运行时的样子](_images/powernukkitx-core-running.png)
|
||||
|
||||
**优势**:
|
||||
|
||||
- 最新版 mcbe(基岩版) 协议支持:PNX 支持最新的 Minecraft 基岩版协议,这意味着它 **可以兼容最新的游戏版本和特性**。
|
||||
- 丰富的原版特性支持:支持 1.19 版本的所有新方块和新物品,以及新版下界等特性。
|
||||
- 高性能和高拓展性:PNX 进行了多核优化,提供了更高的性能和更好的扩展性。
|
||||
- 最新版 mcbe(基岩版) 协议支持:PNX 支持最新的 Minecraft 基岩版协议,这意味着它 **可以兼容最新的游戏版本和特性**。
|
||||
- 丰富的原版特性支持:支持 1.19 版本的所有新方块和新物品,以及新版下界等特性。
|
||||
- 高性能和高拓展性:PNX 进行了多核优化,提供了更高的性能和更好的扩展性。
|
||||
- 384 格世界支持:允许在主世界达到 384 格的高度限制。
|
||||
- 史诗地形生成器:内置 Terra 地形生成器,支持创建丰富的地图环境。
|
||||
- 全开源和全 API 开放:PNX 完全开源,提供了丰富的 API,方便开发者进行定制和扩展。
|
||||
- 插件兼容性:兼容 Nukkit 生态中的数千个插件,同时支持使用 Java, Kotlin, Scala, Python, JavaScript, Lua 等 JVM 语言编写插件。
|
||||
- 史诗地形生成器:内置 Terra 地形生成器,支持创建丰富的地图环境。
|
||||
- 全开源和全 API 开放:PNX 完全开源,提供了丰富的 API,方便开发者进行定制和扩展。
|
||||
- 插件兼容性:兼容 Nukkit 生态中的数千个插件,同时支持使用 Java, Kotlin, Scala, Python, JavaScript, Lua 等 JVM 语言编写插件。
|
||||
|
||||
**劣势**:
|
||||
|
||||
- 开发活跃度:由于 Nukkit 核心开发团队的变化,PNX 的开发强度可能受到影响。
|
||||
- 生态系统的局限性:虽然 PNX 拥有丰富的插件,但与一些更主流的服务器端软件相比,其生态系统可能相对较小。
|
||||
- 学习曲线:由于 PNX 生态的广阔和插件的多样性,对于新手来说,学习如何有效地使用和管理 PNX 服务器可能会有一定的难度。
|
||||
- 开发活跃度:由于 Nukkit 核心开发团队的变化,PNX 的开发强度可能受到影响。
|
||||
- 生态系统的局限性:虽然 PNX 拥有丰富的插件,但与一些更主流的服务器端软件相比,其生态系统可能相对较小。
|
||||
- 学习曲线:由于 PNX 生态的广阔和插件的多样性,对于新手来说,学习如何有效地使用和管理 PNX 服务器可能会有一定的难度。
|
||||
|
||||
总体来看,PowerNukkitX 是一个功能强大且高度可定制化的 Minecraft 基岩版服务器端软件,特别适合那些需要高性能和高度自定义服务器的用户。然而,它的使用和维护可能需要一定的技术知识和耐心。
|
||||
总体来看,PowerNukkitX 是一个功能强大且高度可定制化的 Minecraft 基岩版服务器端软件,特别适合那些需要高性能和高度自定义服务器的用户。然而,它的使用和维护可能需要一定的技术知识和耐心。
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="pmmp" label="PocketMine-MP(PMMP)">
|
||||
|
||||
:::warning
|
||||
至本篇文档开始,**`PMMP`** 一致指 **`PocketMine-MP`**
|
||||
至本篇文档开始,**`PMMP`** 一致指 **`PocketMine-MP`**
|
||||
:::
|
||||
|
||||
![PNX 运行时的样子](_images/pocketminemp-core-running.png)
|
||||
|
||||
**优势**:
|
||||
- 插件生态丰富:PocketMine-MP 拥有一个 **庞大的插件生态系统**,用户可以找到各种插件来增强服务器的功能和玩家体验。
|
||||
- 跨平台兼容性:PocketMine-MP **支持多个操作系统**,包括 Windows、Linux 和 macOS,便于在不同环境下部署。
|
||||
- PHP 编程语言:使用 PHP 编写插件,对于熟悉 PHP 的开发者来说,入门门槛相对较低。
|
||||
- 社区支持:PocketMine-MP 有一个活跃的社区,提供插件开发、服务器配置和故障排除的帮助。
|
||||
- 自定义性:服务器管理员可以自由地定制服务器,包括游戏规则、世界生成和玩家互动等。
|
||||
- 插件生态丰富:PocketMine-MP 拥有一个 **庞大的插件生态系统**,用户可以找到各种插件来增强服务器的功能和玩家体验。
|
||||
- 跨平台兼容性:PocketMine-MP **支持多个操作系统**,包括 Windows、Linux 和 macOS,便于在不同环境下部署。
|
||||
- PHP 编程语言:使用 PHP 编写插件,对于熟悉 PHP 的开发者来说,入门门槛相对较低。
|
||||
- 社区支持:PocketMine-MP 有一个活跃的社区,提供插件开发、服务器配置和故障排除的帮助。
|
||||
- 自定义性:服务器管理员可以自由地定制服务器,包括游戏规则、世界生成和玩家互动等。
|
||||
|
||||
**劣势**:
|
||||
- 性能问题:PocketMine-MP 在处理高玩家负载时 **可能存在性能瓶颈**,尤其是在内存管理和 CPU 效率方面。
|
||||
- 更新滞后:PocketMine-MP 可能不会立即跟进 **Minecraft 基岩版** 的最新更新,导致玩家无法体验最新的游戏内容。
|
||||
- 稳定性:由于插件系统的开放性,服务器在运行多个插件时 **可能会遇到稳定性问题**。
|
||||
- 资源消耗:PHP 作为解释型语言,相比编译型语言 **可能在资源消耗上更为显著**。
|
||||
- 学习曲线:对于新手管理员来说,PocketMine-MP 的 **配置和插件管理可能需要一定的学习时间**。
|
||||
- 性能问题:PocketMine-MP 在处理高玩家负载时 **可能存在性能瓶颈**,尤其是在内存管理和 CPU 效率方面。
|
||||
- 更新滞后:PocketMine-MP 可能不会立即跟进 **Minecraft 基岩版** 的最新更新,导致玩家无法体验最新的游戏内容。
|
||||
- 稳定性:由于插件系统的开放性,服务器在运行多个插件时 **可能会遇到稳定性问题**。
|
||||
- 资源消耗:PHP 作为解释型语言,相比编译型语言 **可能在资源消耗上更为显著**。
|
||||
- 学习曲线:对于新手管理员来说,PocketMine-MP 的 **配置和插件管理可能需要一定的学习时间**。
|
||||
|
||||
PocketMine-MP 适合那些重视插件功能和自定义能力的服务器管理员。如果你希望建立一个具有特色玩法和丰富互动的服务器,并且不介意在性能和稳定性方面做出一些妥协,PocketMine-MP 是一个不错的选择。然而,如果你更关注性能和最新游戏内容的支持,可能需要考虑其他服务器端解决方案。
|
||||
PocketMine-MP 适合那些重视插件功能和自定义能力的服务器管理员。如果你希望建立一个具有特色玩法和丰富互动的服务器,并且不介意在性能和稳定性方面做出一些妥协,PocketMine-MP 是一个不错的选择。然而,如果你更关注性能和最新游戏内容的支持,可能需要考虑其他服务器端解决方案。
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
@ -14,62 +14,62 @@ sidebar_position: 2
|
||||
|
||||
# 服务器类型
|
||||
|
||||
> 目前有五类主流的选择: 纯净服(又名原版服),Addon 服(仅 BDS),插件服,小游戏服(插件服的一种),Addon 和 插件混合服(仅 BDS)。
|
||||
> 目前有五类主流的选择: 纯净服(又名原版服),Addon 服(仅 BDS),插件服,小游戏服(插件服的一种),Addon 和 插件混合服(仅 BDS)。
|
||||
|
||||
在 Minecraft 基岩版 的服务器世界中,有多种不同的服务器类型供腐竹选择。每种类型都有其独特的特点和玩法。以下是五种主流的服务器类型,帮助你根据自己服务器的需求做出选择。
|
||||
在 Minecraft 基岩版 的服务器世界中,有多种不同的服务器类型供腐竹选择。每种类型都有其独特的特点和玩法。以下是五种主流的服务器类型,帮助你根据自己服务器的需求做出选择。
|
||||
|
||||
## 1. 纯净服(又名原版服)
|
||||
## 1. 纯净服(又名原版服)
|
||||
### 定义
|
||||
纯净服是完全遵循 Minecraft 基岩版 官方游戏规则的服务器,不添加任何额外的插件或修改。
|
||||
纯净服是完全遵循 Minecraft 基岩版 官方游戏规则的服务器,不添加任何额外的插件或修改。
|
||||
### 特点
|
||||
- **原汁原味**:提供最纯正的游戏体验,玩家可以享受到官方设计的游戏内容和挑战。
|
||||
- **稳定性**:没有插件干扰,服务器运行更加稳定。
|
||||
- **低维护**:无需担心插件兼容性和更新问题,维护相对简单。
|
||||
- **原汁原味**:提供最纯正的游戏体验,玩家可以享受到官方设计的游戏内容和挑战。
|
||||
- **稳定性**:没有插件干扰,服务器运行更加稳定。
|
||||
- **低维护**:无需担心插件兼容性和更新问题,维护相对简单。
|
||||
### 适用对象
|
||||
- 喜欢传统 Minecraft 游戏体验的玩家。
|
||||
- 腐竹希望专注于提供稳定和公平的游戏环境。
|
||||
|
||||
## 2. Addon 服(仅 BDS)
|
||||
## 2. Addon 服(仅 BDS)
|
||||
### 定义
|
||||
Addon 服 是基于官方 BDS 的服务器,通过添加官方支持的 **Addon** 来 **扩展游戏功能**。
|
||||
Addon 服 是基于官方 BDS 的服务器,通过添加官方支持的 **Addon** 来 **扩展游戏功能**。
|
||||
### 特点
|
||||
- **官方支持**:Addon 由 Mojang 官方 提供,保证了与游戏版本的兼容性。
|
||||
- **有限定制**:允许一定程度的游戏内容扩展,如新的方块、物品和生物。
|
||||
- **稳定性**:Addon 经过官方测试,对服务器稳定性影响较小。
|
||||
- **官方支持**:Addon 由 Mojang 官方 提供,保证了与游戏版本的兼容性。
|
||||
- **有限定制**:允许一定程度的游戏内容扩展,如新的方块、物品和生物。
|
||||
- **稳定性**:Addon 经过官方测试,对服务器稳定性影响较小。
|
||||
### 适用对象
|
||||
- 希望在官方服务器基础上增加一些自定义内容的玩家。
|
||||
- 腐竹希望保持服务器官方特性的同时,提供更多玩法。
|
||||
- 腐竹希望保持服务器官方特性的同时,提供更多玩法。
|
||||
|
||||
## 3. 插件服
|
||||
### 定义
|
||||
插件服是指使用 第三方服务器端软件(如 LiteLoader、Levilamina、PocketMine-MP、PowerNukkitX 等),通过安装插件来大幅度扩展游戏功能的服务器。
|
||||
插件服是指使用 第三方服务器端软件(如 LiteLoader、Levilamina、PocketMine-MP、PowerNukkitX 等),通过安装插件来大幅度扩展游戏功能的服务器。
|
||||
### 特点
|
||||
- **高度自定义**:插件种类繁多,可以实现丰富的游戏模式和功能。
|
||||
- **社区支持**:有大量开发者提供的插件和教程,方便腐竹和玩家。
|
||||
- **高度自定义**:插件种类繁多,可以实现丰富的游戏模式和功能。
|
||||
- **社区支持**:有大量开发者提供的插件和教程,方便腐竹和玩家。
|
||||
- **兼容性问题**:可能存在插件间兼容性和服务器稳定性的问题。
|
||||
### 适用对象
|
||||
- 喜欢多样化游戏体验和特殊玩法的玩家。
|
||||
- 愿意投入时间学习和配置插件的腐竹。
|
||||
|
||||
## 4. 小游戏服(插件服的一种)
|
||||
## 4. 小游戏服(插件服的一种)
|
||||
### 定义
|
||||
小游戏服 是插件服的一种特殊形式,专注于提供各种小型游戏和挑战,如战墙、空岛、迷宫等。
|
||||
小游戏服 是插件服的一种特殊形式,专注于提供各种小型游戏和挑战,如战墙、空岛、迷宫等。
|
||||
### 特点
|
||||
- **娱乐性强**:提供快速、有趣的游戏体验,适合短时间游玩。
|
||||
- **社交互动**:玩家可以在游戏中互动,增加社区凝聚力。
|
||||
- **定期更新**:小游戏内容经常更新,保持新鲜感。
|
||||
- **娱乐性强**:提供快速、有趣的游戏体验,适合短时间游玩。
|
||||
- **社交互动**:玩家可以在游戏中互动,增加社区凝聚力。
|
||||
- **定期更新**:小游戏内容经常更新,保持新鲜感。
|
||||
### 适用对象
|
||||
- 喜欢快节奏和竞技性游戏的玩家。
|
||||
- 希望通过小游戏吸引和保持玩家活跃的腐竹。
|
||||
|
||||
## 5. Addon 和 插件混合服(仅 BDS)
|
||||
## 5. Addon 和 插件混合服(仅 BDS)
|
||||
### 定义
|
||||
这种服务器结合了 Addon 服 和 插件服 的特点,既使用 官方 Addon,也通过第三方插件来扩展功能。
|
||||
这种服务器结合了 Addon 服 和 插件服 的特点,既使用 官方 Addon,也通过第三方插件来扩展功能。
|
||||
### 特点
|
||||
- **综合优势**:结合了 Addon 的官方支持和插件的高度自定义。
|
||||
- **复杂配置**:需要同时管理 Addon 和 插件,配置较为复杂。
|
||||
- **复杂配置**:需要同时管理 Addon 和 插件,配置较为复杂。
|
||||
- **性能要求**:可能对服务器性能有更高的要求。
|
||||
### 适用对象
|
||||
- 希望在保持官方特性的同时,拥有更多自定义玩法的玩家。
|
||||
- 有经验的腐竹,能够处理 Addon 和 插件 的兼容性问题。
|
||||
选择合适的服务器类型是打造成功 Minecraft 服务器的重要步骤。根据你的目标、玩家群体和技术能力,合理选择服务器类型,为玩家创造一个有趣、稳定且充满活力的游戏环境。
|
||||
- 希望在保持官方特性的同时,拥有更多自定义玩法的玩家。
|
||||
- 有经验的腐竹,能够处理 Addon 和 插件 的兼容性问题。
|
||||
选择合适的服务器类型是打造成功 Minecraft 服务器的重要步骤。根据你的目标、玩家群体和技术能力,合理选择服务器类型,为玩家创造一个有趣、稳定且充满活力的游戏环境。
|
||||
|
@ -6,11 +6,11 @@ sidebar_position: 2
|
||||
|
||||
# 超级基础知识
|
||||
|
||||
考虑到笨蛋教程主要面向新手,我们无法了解你了解什么不了解什么。
|
||||
考虑到笨蛋教程主要面向新手,我们无法了解你了解什么不了解什么。
|
||||
|
||||
本文档暂时就开服最重要的基础概念进行介绍,如果有你自认为非常了解或者不重要的部分,
|
||||
本文档暂时就开服最重要的基础概念进行介绍,如果有你自认为非常了解或者不重要的部分,
|
||||
|
||||
**跳过他吧**,因为我们在后面再次提到这些概念的时候会重新跳转到对应链接。
|
||||
**跳过他吧**,因为我们在后面再次提到这些概念的时候会重新跳转到对应链接。
|
||||
|
||||
import DocCardList from '@theme/DocCardList';
|
||||
|
||||
|
@ -4,41 +4,41 @@ sidebar_position: 4
|
||||
---
|
||||
# 选择合适的版本
|
||||
|
||||
先说结论:如果没有明确需求,**选择对应服务端的最新版即可。** 最新版的服务端往往支持最新版的客户端进入。
|
||||
先说结论:如果没有明确需求,**选择对应服务端的最新版即可。** 最新版的服务端往往支持最新版的客户端进入。
|
||||
|
||||
## 版本差异
|
||||
|
||||
各个版本更新的内容可以在 [Minecraft Wiki](https://zh.minecraft.wiki) 找到,此处不对游戏内容做过多叙述。除了关注游戏内容上的差异外,你还需要注意以下几个被官方轻描淡写,但对玩家有重大影响的客户端方面的更新:
|
||||
- 1.20.50 :由于该版本中有许多方块进行了“扁平化”,经过了代码重构,导致一些该版本以下的跨版本插件无法很好地兼容该版本及以上版本。
|
||||
各个版本更新的内容可以在 [Minecraft Wiki](https://zh.minecraft.wiki) 找到,此处不对游戏内容做过多叙述。除了关注游戏内容上的差异外,你还需要注意以下几个被官方轻描淡写,但对玩家有重大影响的客户端方面的更新:
|
||||
- 1.20.50 :由于该版本中有许多方块进行了“扁平化”,经过了代码重构,导致一些该版本以下的跨版本插件无法很好地兼容该版本及以上版本。
|
||||
- 1.20.40 :该版本中新的触控布局可以自定义位置
|
||||
- 1.20.x(没有确切版本,望大佬补充) :大约从此版本开始,安卓版本出现了严重的卡顿问题,该问题截至撰写本文时仍未修复,社区也没有任何解决方案。
|
||||
- 1.20.x(没有确切版本,望大佬补充) :大约从此版本开始,安卓版本出现了严重的卡顿问题,该问题截至撰写本文时仍未修复,社区也没有任何解决方案。
|
||||
- 1.19.50 :该版本加入了新的触控布局
|
||||
- 1.18.30 :从该版本开始,由于客户端实装了渲染龙,客户端无法使用传统的光影,只能使用硬件光追或延迟渲染改善游戏画面。
|
||||
- 1.18.30 :从该版本开始,由于客户端实装了渲染龙,客户端无法使用传统的光影,只能使用硬件光追或延迟渲染改善游戏画面。
|
||||
|
||||
## 喜欢“自动更新”的玩家们
|
||||
|
||||
本意上为了确保用户第一时间接收到最新功能和错误修复,包括 App Store、Microsoft Store、Google Play 在内的主流应用商店都具备了自动更新 app 的功能,并且推荐用户开启。
|
||||
本意上为了确保用户第一时间接收到最新功能和错误修复,包括 App Store、Microsoft Store、Google Play 在内的主流应用商店都具备了自动更新 app 的功能,并且推荐用户开启。
|
||||
|
||||
然而这个功能在基岩版上却造成了这样的问题:由于基岩版每隔若干版本都要更换协议,这就导致一些玩家的客户端在其不知情的情况下自动更新,并导致他们无法进入服务器,遇到类似“所有的玩家都应该更新到最新版本然后再试一次”的提示。在 Java 版上这个问题很少见到,因为只有官启中有类似自动更新的机制,而玩家们并不都习惯于用官启。
|
||||
然而这个功能在基岩版上却造成了这样的问题:由于基岩版每隔若干版本都要更换协议,这就导致一些玩家的客户端在其不知情的情况下自动更新,并导致他们无法进入服务器,遇到类似“所有的玩家都应该更新到最新版本然后再试一次”的提示。在 Java 版上这个问题很少见到,因为只有官启中有类似自动更新的机制,而玩家们并不都习惯于用官启。
|
||||
|
||||
为了让这些玩家们能够进入服务器,你需要持续不断地把你的服务器更新最新版,或者要求玩家们必须关闭自动更新或使用指定游戏安装包。然而后者会带来这个问题:由于 iOS 系统的机制原因,iOS 玩家无法使用特定的安装包安装游戏,他们只能下载安装最新版本的游戏。iOS 玩家的这个问题是社区一直无法完美解决的相当棘手的问题,在后面的章节中,我们会陆续介绍一些折中的方案来让你应对这些 iOS 玩家。
|
||||
为了让这些玩家们能够进入服务器,你需要持续不断地把你的服务器更新最新版,或者要求玩家们必须关闭自动更新或使用指定游戏安装包。然而后者会带来这个问题:由于 iOS 系统的机制原因,iOS 玩家无法使用特定的安装包安装游戏,他们只能下载安装最新版本的游戏。iOS 玩家的这个问题是社区一直无法完美解决的相当棘手的问题,在后面的章节中,我们会陆续介绍一些折中的方案来让你应对这些 iOS 玩家。
|
||||
|
||||
除了自动更新机制外,玩家们仍然倾向于使用最新版,主要因为以下原因:
|
||||
除了自动更新机制外,玩家们仍然倾向于使用最新版,主要因为以下原因:
|
||||
- Microsoft Store、App Store、Google play、第三方应用商店提供的破解版安卓版安装包会优先下载安装最新版
|
||||
- 社区资讯媒体都倾向于发表最新版游戏相关内容,玩家们会在这些信息源的引导下优先选择最新版
|
||||
- 基岩版游戏在任何一个平台切换版本都不容易,因此社区形成了全员跟进最新版这一不成文的规定。如果玩某旧版本的服务器,玩家就只能玩所有该指定版本的服务器,要玩其他服务器时只能进行繁琐的操作切换版本,自由度大打折扣。
|
||||
- 社区资讯媒体都倾向于发表最新版游戏相关内容,玩家们会在这些信息源的引导下优先选择最新版
|
||||
- 基岩版游戏在任何一个平台切换版本都不容易,因此社区形成了全员跟进最新版这一不成文的规定。如果玩某旧版本的服务器,玩家就只能玩所有该指定版本的服务器,要玩其他服务器时只能进行繁琐的操作切换版本,自由度大打折扣。
|
||||
|
||||
这些因素均导致了玩家们始终倾向于玩新版服务器。
|
||||
|
||||
## 权衡版本间的利弊
|
||||
|
||||
**除非你有明确需求,任何新手服主都应选择支持最新版客户端加入的服务器**
|
||||
**除非你有明确需求,任何新手服主都应选择支持最新版客户端加入的服务器**
|
||||
|
||||
在选择版本时,你**首先需要考虑是否需要强制玩家固定版本。**
|
||||
在选择版本时,你**首先需要考虑是否需要强制玩家固定版本。**
|
||||
|
||||
上文已经介绍了玩家倾向于自动更新的行为。如果你强制玩家固定版本,将产生以下后果:
|
||||
上文已经介绍了玩家倾向于自动更新的行为。如果你强制玩家固定版本,将产生以下后果:
|
||||
1. 你将失去几乎所有 iOS 玩家。
|
||||
2. 你将失去所有只玩最新版的玩家。**由于跟进最新版的服务器数量庞大,对应的玩家群体也非常庞大,失去他们将是重大损失** 。
|
||||
2. 你将失去所有只玩最新版的玩家。**由于跟进最新版的服务器数量庞大,对应的玩家群体也非常庞大,失去他们将是重大损失** 。
|
||||
3. 你的客服团队需要人工指导一些完全不会安装 appx 或 apk 格式安装包的小白。
|
||||
|
||||
如果你确定这些后果不会严重影响服务器的受欢迎度,你就可以选择特定版本。在选择版本时,除了根据游戏内容进行选择外,你还需要考虑玩家客户端所具备的功能,尤其是渲染龙、安卓版本的卡顿问题等饱受社区诟病的问题。选择让服务器匹配一个游戏体验较好的客户端版本,可以在一定程度上提高玩家在你服务器中的游戏体验。
|
||||
如果你确定这些后果不会严重影响服务器的受欢迎度,你就可以选择特定版本。在选择版本时,除了根据游戏内容进行选择外,你还需要考虑玩家客户端所具备的功能,尤其是渲染龙、安卓版本的卡顿问题等饱受社区诟病的问题。选择让服务器匹配一个游戏体验较好的客户端版本,可以在一定程度上提高玩家在你服务器中的游戏体验。
|
||||
|
@ -4,21 +4,21 @@ sidebar_position: 9
|
||||
|
||||
# MiniMessage
|
||||
|
||||
MiniMessage 旨在用简单字符串表示聊天组件,便于用户学习和开发人员扩展。
|
||||
MiniMessage 旨在用简单字符串表示聊天组件,便于用户学习和开发人员扩展。
|
||||
|
||||
MiniMessage 的实质是一个叫 Adventure 的库,这是它的 [文档](https://docs.advntr.dev/getting-started.html)。
|
||||
MiniMessage 的实质是一个叫 Adventure 的库,这是它的 [文档](https://docs.advntr.dev/getting-started.html)。
|
||||
|
||||
## 支持列表
|
||||
|
||||
目前,一些平台已经支持原生使用 Adventure 来扩展字符串,以下是内置此库的列表:
|
||||
目前,一些平台已经支持原生使用 Adventure 来扩展字符串,以下是内置此库的列表:
|
||||
|
||||
| 支持平台 | 支持版本 | 备注 |
|
||||
|----------|------------------------------------|----------------------------------------------------------------------|
|
||||
| Sponge | Sponge 8 (1.16.5) | / |
|
||||
| Velocity | 1.1.0 build 158 | 仅支持消息、操作栏标题、boss栏和标题 |
|
||||
| Paper | 1.16.5 build 473 | / |
|
||||
| Minestom | Build 7494725 | 内容有点杂,详见[minestom wiki](https://wiki.minestom.net/feature/adventure) |
|
||||
| Fabric | `adventure-platform-fabric` 5.3.0* | 虽然不是一个东西(?),但是体验是一样的 |
|
||||
| Minestom | Build 7494725 | 内容有点杂,详见[minestom wiki](https://wiki.minestom.net/feature/adventure) |
|
||||
| Fabric | `adventure-platform-fabric` 5.3.0* | 虽然不是一个东西(?),但是体验是一样的 |
|
||||
|
||||
*详情可以参阅 [Adventure 本机支持](https://docs.advntr.dev/platform/native.html)*
|
||||
|
||||
@ -26,9 +26,9 @@ MiniMessage 的实质是一个叫 Adventure 的库,这是它的 [文档](https
|
||||
|
||||
平台原生支持 ≠ 使用此平台开发的模组/插件支持!!!
|
||||
|
||||
举个例子,仔细观察上述列表,你会发现bukkit并没有支持 MiniMessage ,所以你会发现大部分基于 Bukkit 开发的插件没有 MiniMessage 这一功能(如 EssentialsX),*除非他们自身引入了 Adventure 库(如PlaceholderAPI)。*
|
||||
举个例子,仔细观察上述列表,你会发现bukkit并没有支持 MiniMessage ,所以你会发现大部分基于 Bukkit 开发的插件没有 MiniMessage 这一功能(如 EssentialsX),*除非他们自身引入了 Adventure 库(如PlaceholderAPI)。*
|
||||
|
||||
而基于 Paper 开发的大部分插件都引入了这一功能,所以不要发现一个新奇玩意就到处瞎套。
|
||||
而基于 Paper 开发的大部分插件都引入了这一功能,所以不要发现一个新奇玩意就到处瞎套。
|
||||
|
||||
:::
|
||||
|
||||
@ -40,7 +40,7 @@ MiniMessage 的实质是一个叫 Adventure 的库,这是它的 [文档](https
|
||||
|
||||
:::
|
||||
|
||||
和 [格式化代码](format-code.md) 篇一样,用一个 TrMenu 菜单配置展示下:
|
||||
和 [格式化代码](format-code.md) 篇一样,用一个 TrMenu 菜单配置展示下:
|
||||
|
||||
```
|
||||
Icons:
|
||||
@ -53,21 +53,21 @@ Icons:
|
||||
|
||||
![](_images/MiniMessage/展示.png)
|
||||
|
||||
记住 MiniMessage 语言使用标签,也就是说你所做的一切都将使用标签进行定义。
|
||||
记住 MiniMessage 语言使用标签,也就是说你所做的一切都将使用标签进行定义。
|
||||
|
||||
对于 MiniMessage ,你必须要有一个开始标签 `<yellow>`,在非严格模式下,你可以省略结束标签 `</yellow>` ,如下:
|
||||
对于 MiniMessage ,你必须要有一个开始标签 `<yellow>`,在非严格模式下,你可以省略结束标签 `</yellow>` ,如下:
|
||||
|
||||
```
|
||||
<yellow>Hello <blue>World</blue>!
|
||||
```
|
||||
|
||||
在非严格模式下,所有标记名称**都不区分大小写**,以减少冲突的可能性(懒癌晚期患者狂喜),但美观和符合规定起见,请使用小写字母编写以便减少被他人嘲讽的几率:
|
||||
在非严格模式下,所有标记名称**都不区分大小写**,以减少冲突的可能性(懒癌晚期患者狂喜),但美观和符合规定起见,请使用小写字母编写以便减少被他人嘲讽的几率:
|
||||
|
||||
```
|
||||
<YelLOw>Hello World!
|
||||
```
|
||||
|
||||
此外,这里有一个[测试网站](https://webui.advntr.dev/),他可以使得你无需启动 Minecraft 便可以预览实际效果。
|
||||
此外,这里有一个[测试网站](https://webui.advntr.dev/),他可以使得你无需启动 Minecraft 便可以预览实际效果。
|
||||
|
||||
关于实际使用格式详见 [标准标签](https://docs.advntr.dev/minimessage/format.html#standard-tags)。
|
||||
|
||||
|
@ -9,15 +9,15 @@ sidebar_position: 10
|
||||
|
||||
**注意**
|
||||
|
||||
JAVA 版的资源包分发与基岩版不同,它是云分发的,提供给客户端的应该是一个**直链**,而不是资源包本身
|
||||
JAVA 版的资源包分发与基岩版不同,它是云分发的,提供给客户端的应该是一个**直链**,而不是资源包本身
|
||||
|
||||
不管你用什么方式,都必须是直链才可正常使用!
|
||||
不管你用什么方式,都必须是直链才可正常使用!
|
||||
|
||||
**什么是直链?**
|
||||
|
||||
> 直接从服务器下载数据
|
||||
|
||||
不需要登陆账号,不需要点击链接打开网页才下载
|
||||
不需要登陆账号,不需要点击链接打开网页才下载
|
||||
|
||||
# 分发
|
||||
|
||||
@ -33,7 +33,7 @@ mc服务端自己就有这个材质包分发功能
|
||||
resource-pack=
|
||||
```
|
||||
|
||||
把我们刚才拿到的资源包直链放进去,现在看起来应该是这样
|
||||
把我们刚才拿到的资源包直链放进去,现在看起来应该是这样
|
||||
|
||||
```
|
||||
resource-pack=https://github.com/xMikux/Slimefun-Resourcepack/releases/download/latest-build/Slimefun-ResourcePack.zip
|
||||
@ -45,13 +45,13 @@ resource-pack=https://github.com/xMikux/Slimefun-Resourcepack/releases/download/
|
||||
require-resource-pack=false
|
||||
```
|
||||
|
||||
这个值代表是否需要强制资源包,开启后,如果玩家拒绝应用这个资源包,就不让玩家进入服务器
|
||||
这个值代表是否需要强制资源包,开启后,如果玩家拒绝应用这个资源包,就不让玩家进入服务器
|
||||
|
||||
调好后,你只需要重启服务器就可以享受到资源包了
|
||||
调好后,你只需要重启服务器就可以享受到资源包了
|
||||
|
||||
:::note
|
||||
|
||||
上面的例子链接是 GitHub 的,而国内的网络环境有时连不上 GitHub
|
||||
上面的例子链接是 GitHub 的,而国内的网络环境有时连不上 GitHub
|
||||
|
||||
:::
|
||||
|
||||
@ -65,7 +65,7 @@ https://itemsadder.devs.beer/v/chinese/plugin-usage/resourcepack-hosting
|
||||
|
||||
# 托管
|
||||
|
||||
以下均为ia文档中所说的 第三方平台托管(external-host)
|
||||
以下均为ia文档中所说的 第三方平台托管(external-host)
|
||||
|
||||
## GitHub
|
||||
|
||||
@ -73,9 +73,9 @@ https://github.com
|
||||
|
||||
国内的网络环境不建议用这个
|
||||
|
||||
> 方案一:首先创建一个新的仓库,接着创建发行版,把资源包上传至发行版,复制下载链接,将链接填入ia的 第三方平台托管(external-host) 或使用 server.properties
|
||||
> 方案一:首先创建一个新的仓库,接着创建发行版,把资源包上传至发行版,复制下载链接,将链接填入ia的 第三方平台托管(external-host) 或使用 server.properties
|
||||
|
||||
> 方案二:首先创建一个新的仓库,接着上传资源包文件到仓库中,点击你上传的文件,复制这单个文件的下载链接
|
||||
> 方案二:首先创建一个新的仓库,接着上传资源包文件到仓库中,点击你上传的文件,复制这单个文件的下载链接
|
||||
|
||||
创建新仓库:https://docs.github.com/zh/repositories/creating-and-managing-repositories/creating-a-new-repository
|
||||
|
||||
@ -85,11 +85,11 @@ https://github.com
|
||||
|
||||
https://gitee.com
|
||||
|
||||
国内的代码托管平台,访问速度快,推荐使用
|
||||
国内的代码托管平台,访问速度快,推荐使用
|
||||
|
||||
> 方案一:首先创建一个新的仓库,接着创建发行版,把资源包上传至发行版,复制下载链接,将链接填入ia的 第三方平台托管(external-host) 或使用 server.properties
|
||||
> 方案一:首先创建一个新的仓库,接着创建发行版,把资源包上传至发行版,复制下载链接,将链接填入ia的 第三方平台托管(external-host) 或使用 server.properties
|
||||
|
||||
> 方案二:首先创建一个新的仓库,接着上传资源包文件到仓库中,点击你上传的文件,复制这单个文件的下载链接
|
||||
> 方案二:首先创建一个新的仓库,接着上传资源包文件到仓库中,点击你上传的文件,复制这单个文件的下载链接
|
||||
|
||||
创建发行版:https://help.gitee.com/repository/release/create#%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E5%8F%91%E8%A1%8C%E7%89%88
|
||||
|
||||
@ -99,9 +99,9 @@ https://gitlab.com
|
||||
|
||||
国内访问比较稳定的代码托管平台
|
||||
|
||||
> 方案一:首先创建一个新的仓库,接着创建发行版,把资源包上传至发行版,复制下载链接,将链接填入ia的 第三方平台托管(external-host) 或使用 server.properties
|
||||
> 方案一:首先创建一个新的仓库,接着创建发行版,把资源包上传至发行版,复制下载链接,将链接填入ia的 第三方平台托管(external-host) 或使用 server.properties
|
||||
|
||||
> 方案二:首先创建一个新的仓库,接着上传资源包文件到仓库中,点击你上传的文件,复制这单个文件的下载链接
|
||||
> 方案二:首先创建一个新的仓库,接着上传资源包文件到仓库中,点击你上传的文件,复制这单个文件的下载链接
|
||||
|
||||
创建仓库:https://www.bookstack.cn/read/gitlab-doc-zh/docs-150.md#2rp8yq
|
||||
|
||||
@ -113,7 +113,7 @@ ia的文档教了如何使用 [Google Drive](https://itemsadder.devs.beer/v/chin
|
||||
|
||||
:::tip
|
||||
|
||||
鉴于国内的网络环境,这两个网盘均不建议使用
|
||||
鉴于国内的网络环境,这两个网盘均不建议使用
|
||||
|
||||
:::
|
||||
|
||||
@ -121,7 +121,7 @@ ia的文档教了如何使用 [Google Drive](https://itemsadder.devs.beer/v/chin
|
||||
|
||||
## 自托管
|
||||
|
||||
使用 ItemsAdder,可以直接在服务器上托管资源包:https://itemsadder.devs.beer/v/chinese/plugin-usage/resourcepack-hosting/resourcepack-self-hosting
|
||||
使用 ItemsAdder,可以直接在服务器上托管资源包:https://itemsadder.devs.beer/v/chinese/plugin-usage/resourcepack-hosting/resourcepack-self-hosting
|
||||
|
||||
或者自己搭建个直链下载站来用
|
||||
|
||||
@ -129,13 +129,13 @@ ia的文档教了如何使用 [Google Drive](https://itemsadder.devs.beer/v/chin
|
||||
|
||||
## 我想让客户端不要下载重复的资源包可以吗?
|
||||
|
||||
当然可以,找到以下配置
|
||||
当然可以,找到以下配置
|
||||
|
||||
```
|
||||
resource-pack-sha1=
|
||||
```
|
||||
|
||||
填入资源包的sha1就行,如果你不知道怎么生成,你可以前往 [在线网站](https://www.strerr.com/cn/sha1_file.html),把你文件上传然后复制生成的哈希值到这里就可以
|
||||
填入资源包的sha1就行,如果你不知道怎么生成,你可以前往 [在线网站](https://www.strerr.com/cn/sha1_file.html),把你文件上传然后复制生成的哈希值到这里就可以
|
||||
|
||||
我们以 Slimefun 为例子
|
||||
|
||||
|
@ -9,19 +9,19 @@ sidebar_position: 3
|
||||
|
||||
## skript-reflect
|
||||
|
||||
**skript-reflect** 是 **Skript** 的一个拓展插件,允许你运用Java的反射机制来进行更高级的操作,它旨在将 **Java** 的功能与 **Skript** 易于使用的开发环境相结合。
|
||||
**skript-reflect** 是 **Skript** 的一个拓展插件,允许你运用Java的反射机制来进行更高级的操作,它旨在将 **Java** 的功能与 **Skript** 易于使用的开发环境相结合。
|
||||
|
||||
有了 **skript-reflect** 的 **Skript** 几乎可以完成插件能做的任何事,不过是复杂性的问题。
|
||||
有了 **skript-reflect** 的 **Skript** 几乎可以完成插件能做的任何事,不过是复杂性的问题。
|
||||
|
||||
为什么需要 skript-reflect?
|
||||
|
||||
- 正确编写插件是很困难的,特别是如果你是 **Java** 的新手。 **skript-reflect** 将为你负重前行,让你专注于编写高质量的 **Skript** 脚本。
|
||||
- 正确编写插件是很困难的,特别是如果你是 **Java** 的新手。 **skript-reflect** 将为你负重前行,让你专注于编写高质量的 **Skript** 脚本。
|
||||
|
||||
- 用 **skript-reflect** 编写的扩展可以快速测试,就像任何其他脚本一样。与需要编译和完全重新启动服务器的 **Skript** 插件不同, **skript-reflect** 脚本可以使用简单的 `sk reload`。
|
||||
- 用 **skript-reflect** 编写的扩展可以快速测试,就像任何其他脚本一样。与需要编译和完全重新启动服务器的 **Skript** 插件不同, **skript-reflect** 脚本可以使用简单的 `sk reload`。
|
||||
|
||||
- 在 sk 脚本中实现某些功能可能需要使用反射来访问私有方法、字段和构造函数。 **skript-reflect** 的内置反射允许你无缝访问这些私有成员。
|
||||
|
||||
- **Skript** 的基本特性之一是其极大的可定制性。使用 **skript-reflect** 编写的扩展使 sk 的这点更为突出,这允许你在必要时快速更改你的代码。
|
||||
- **Skript** 的基本特性之一是其极大的可定制性。使用 **skript-reflect** 编写的扩展使 sk 的这点更为突出,这允许你在必要时快速更改你的代码。
|
||||
|
||||
下面的代码块包含了一些 **skript-reflect** 基础的语法。
|
||||
|
||||
@ -50,26 +50,26 @@ import:
|
||||
|
||||
这两行代码意为导入`net.ess3.api.events`包中的`TPARequestEvent`**类**。
|
||||
|
||||
`import:`块必须放在脚本的最左端,前面不能有缩进。
|
||||
`import:`块必须放在脚本的最左端,前面不能有缩进。
|
||||
|
||||
对类的调用必须在导入完成后进行,因此我们建议你尽可能将此语句放在脚本中靠顶端的位置。
|
||||
对类的调用必须在导入完成后进行,因此我们建议你尽可能将此语句放在脚本中靠顶端的位置。
|
||||
|
||||
通过`import:`块导入类后, **skript-reflect** 将创建一个 **Expressions** ,允许你通过其名称轻易地引用 Java 类。
|
||||
通过`import:`块导入类后, **skript-reflect** 将创建一个 **Expressions** ,允许你通过其名称轻易地引用 Java 类。
|
||||
|
||||
```sk
|
||||
on TPARequestEvent:
|
||||
```
|
||||
|
||||
这行代码意为注册监听`TPARequestEvent`事件,与普通 sk 里注册事件的语法没啥区别。
|
||||
这行代码意为注册监听`TPARequestEvent`事件,与普通 sk 里注册事件的语法没啥区别。
|
||||
|
||||
```sk
|
||||
set {_ess_IUser} to event.getTarget() # 获取IUser对象
|
||||
set {_player} to {_ess_IUser}.getBase() # 获取Player对象
|
||||
```
|
||||
|
||||
这行代码意为调用这个事件里的`getTarget()`方法,来获取 tpa 的目标,其返回一个`IUser`。
|
||||
这行代码意为调用这个事件里的`getTarget()`方法,来获取 tpa 的目标,其返回一个`IUser`。
|
||||
|
||||
这个`IUser`是 EssentialsX 的一个**接口**,`User`类**实现**了它,可以在[essentialsx 的 javadoc](https://jd-v2.essentialsx.net/net/ess3/api/iuser)里查看。
|
||||
这个`IUser`是 EssentialsX 的一个**接口**,`User`类**实现**了它,可以在[essentialsx 的 javadoc](https://jd-v2.essentialsx.net/net/ess3/api/iuser)里查看。
|
||||
|
||||
```sk
|
||||
if {_player} is player("lilingfeng"):
|
||||
@ -77,45 +77,45 @@ on TPARequestEvent:
|
||||
cancel event
|
||||
```
|
||||
|
||||
这几行和普通的 sk 语法没什么区别,作用是判断然后取消事件。
|
||||
这几行和普通的 sk 语法没什么区别,作用是判断然后取消事件。
|
||||
|
||||
### 使用方法
|
||||
|
||||
如果你需要调用其他的插件或是一些 **skript** 里没有而 [Bukkit API](https://bukkit.windit.net/javadoc/) 有的 API,那么会很棘手。
|
||||
如果你需要调用其他的插件或是一些 **skript** 里没有而 [Bukkit API](https://bukkit.windit.net/javadoc/) 有的 API,那么会很棘手。
|
||||
|
||||
**skript-reflect** 很好的解决了这一点。
|
||||
|
||||
比如,你正在使用 **Leaves** 服务端,想要用sk来改变Leaves中假人在玩家列表中显示的名字,那么可以遵循以下步骤:
|
||||
比如,你正在使用 **Leaves** 服务端,想要用sk来改变Leaves中假人在玩家列表中显示的名字,那么可以遵循以下步骤:
|
||||
|
||||
#### 查询 Javadoc
|
||||
|
||||
修改假人的名字这一行为应该在假人加入服务器时进行,所以我们得监听这一事件。
|
||||
修改假人的名字这一行为应该在假人加入服务器时进行,所以我们得监听这一事件。
|
||||
|
||||
我们需要找到 bot 事件到底是哪个,查询[Leaves 的 Javadoc](https://repo.leavesmc.org/javadoc/snapshots/org/leavesmc/leaves/leaves-api/1.20.6-R0.1-SNAPSHOT):
|
||||
我们需要找到 bot 事件到底是哪个,查询[Leaves 的 Javadoc](https://repo.leavesmc.org/javadoc/snapshots/org/leavesmc/leaves/leaves-api/1.20.6-R0.1-SNAPSHOT):
|
||||
|
||||
![搜索事件](_images/SearchEvent.png)
|
||||
|
||||
这里查询找到了`org.leavesmc.leaves.event.bot.BotEvent`事件。
|
||||
|
||||
看命名就知道应该会有更详细的**子类**来**继承**它,点进去看看,可以看到:
|
||||
看命名就知道应该会有更详细的**子类**来**继承**它,点进去看看,可以看到:
|
||||
|
||||
![查找子类](_images/QuerySubclasses.png)
|
||||
|
||||
通过看类名可以知道,`BotJoinEvent`就是我们要的事件。
|
||||
通过看类名可以知道,`BotJoinEvent`就是我们要的事件。
|
||||
|
||||
看介绍,发现这个事件会“Called when a fakeplayer joins a server”
|
||||
看介绍,发现这个事件会“Called when a fakeplayer joins a server”
|
||||
|
||||
接下来让我们看看这个类有哪些**方法**。
|
||||
|
||||
![查找方法](_images/SearchMethods.png)
|
||||
|
||||
可以看到,最主要的是一个`getBot()`方法,在让我们看看这个方法会返回什么。
|
||||
可以看到,最主要的是一个`getBot()`方法,在让我们看看这个方法会返回什么。
|
||||
|
||||
点击超链接,可以看到这个方法会返回一个`Bot`对象。
|
||||
点击超链接,可以看到这个方法会返回一个`Bot`对象。
|
||||
|
||||
这个`Bot`接口是继承自`Player`的,也就是说,`Player`有的方法,`Bot`都有。
|
||||
这个`Bot`接口是继承自`Player`的,也就是说,`Player`有的方法,`Bot`都有。
|
||||
|
||||
再次查询 [Bukkit API](https://bukkit.windit.net/javadoc/org/bukkit/entity/Player.html) 可以找到`Player`类有的方法,如`Player#setPlayerListName()`,这正是我们需要的方法。
|
||||
再次查询 [Bukkit API](https://bukkit.windit.net/javadoc/org/bukkit/entity/Player.html) 可以找到`Player`类有的方法,如`Player#setPlayerListName()`,这正是我们需要的方法。
|
||||
|
||||
#### 编写程序
|
||||
|
||||
@ -132,10 +132,10 @@ on BotJoinEvent:
|
||||
{_bot}.setPlayerListName("假的%{_bot_name}%") # 修改假人在tab列表里的名字
|
||||
```
|
||||
|
||||
这一过程也可适用于其他插件,比如[zimzaza4大蛇](https://github.com/zimzaza4)的 [Skript-Floodgate-Api](https://github.com/zimzaza4/Skript-Floodgate-Api) ,
|
||||
这一过程也可适用于其他插件,比如[zimzaza4大蛇](https://github.com/zimzaza4)的 [Skript-Floodgate-Api](https://github.com/zimzaza4/Skript-Floodgate-Api) ,
|
||||
就是利用 **skript-reflect** 来调用 [Floodagate API](https://wiki.geysermc.org/floodgate/api/) 的。
|
||||
|
||||
可以查看下面的教程来详细学习 **skript-reflect** 的基础功能(对,下面这一大坨只是基础)
|
||||
可以查看下面的教程来详细学习 **skript-reflect** 的基础功能(对,下面这一大坨只是基础)
|
||||
|
||||
### skript-reflect 基础教程
|
||||
|
||||
@ -147,13 +147,13 @@ on BotJoinEvent:
|
||||
|
||||
#### 导入 Java 类
|
||||
|
||||
##### _在解析时导入类(推荐)_
|
||||
##### _在解析时导入类(推荐)_
|
||||
|
||||
在大多数情况下,无需运行脚本即可知道所需类的确切限定名称。如果是这种情况,你应该使用 **skript-reflect** 的`import`块:
|
||||
在大多数情况下,无需运行脚本即可知道所需类的确切限定名称。如果是这种情况,你应该使用 **skript-reflect** 的`import`块:
|
||||
|
||||
:::info
|
||||
|
||||
为避免冲突,`import`块创建的表达式仅对导入它们的脚本可用。你必须在使用它们的每个脚本中导入 Java 类。
|
||||
为避免冲突,`import`块创建的表达式仅对导入它们的脚本可用。你必须在使用它们的每个脚本中导入 Java 类。
|
||||
|
||||
:::
|
||||
|
||||
@ -204,11 +204,11 @@ command /example:
|
||||
|
||||
###### 在低于 1.17 的 Minecraft 版本上导入 NMS 类
|
||||
|
||||
由于 **Minecraft** 1.17 以下版本的 **NMS** 包会随着每个 **Minecraft** 版本而变化,因此你应该动态生成包前缀。有关详细信息,请参阅[计算选项](https://tpgamesnl.gitbook.io/skript-reflect/advanced/computed-options#using-computed-options-for-nms-imports)。
|
||||
由于 **Minecraft** 1.17 以下版本的 **NMS** 包会随着每个 **Minecraft** 版本而变化,因此你应该动态生成包前缀。有关详细信息,请参阅[计算选项](https://tpgamesnl.gitbook.io/skript-reflect/advanced/computed-options#using-computed-options-for-nms-imports)。
|
||||
|
||||
##### _在运行时导入类_
|
||||
|
||||
有时,在执行脚本之前,无法确定所需的类引用。
|
||||
有时,在执行脚本之前,无法确定所需的类引用。
|
||||
|
||||
###### 从完全限定的名称
|
||||
|
||||
@ -247,21 +247,21 @@ command /example:
|
||||
|
||||
###### 在effect命令中导入
|
||||
|
||||
由于导入块在 effect 命令中不可用,因此你可以使用 import effect(仅在 effect 命令中可用):
|
||||
由于导入块在 effect 命令中不可用,因此你可以使用 import effect(仅在 effect 命令中可用):
|
||||
|
||||
```sk
|
||||
import <fully qualified name> [as <alias>]
|
||||
```
|
||||
|
||||
此导入只能在以上效果命令中使用,直到你停止服务器。
|
||||
此导入只能在以上效果命令中使用,直到你停止服务器。
|
||||
|
||||
##### _处理内部类_
|
||||
|
||||
有时,一个类可能嵌套在另一个类中。当引用类的完全限定名称时,内部类使用一个`$`而不是`.`
|
||||
有时,一个类可能嵌套在另一个类中。当引用类的完全限定名称时,内部类使用一个`$`而不是`.`
|
||||
|
||||
例如,将`org.bukkit.entity.EnderDragon.Phase`变成`org.bukkit.entity.EnderDragon$Phase`。
|
||||
例如,将`org.bukkit.entity.EnderDragon.Phase`变成`org.bukkit.entity.EnderDragon$Phase`。
|
||||
|
||||
内部类通常比其周围的类具有更通用的名称,因此应在别名下导入这些名称:
|
||||
内部类通常比其周围的类具有更通用的名称,因此应在别名下导入这些名称:
|
||||
|
||||
```sk
|
||||
import:
|
||||
@ -296,11 +296,11 @@ event-block.breakNaturally()
|
||||
player.giveExpLevels({_levels})
|
||||
```
|
||||
|
||||
方法可以用作 **Effects** 、 **Expressions** 和 **Conditions** 。如果用作**Conditions**,则只要方法的返回值不是 `false` 、`null`或`0` ,这个 **Conditions** 就会通过。
|
||||
方法可以用作 **Effects** 、 **Expressions** 和 **Conditions** 。如果用作**Conditions**,则只要方法的返回值不是 `false` 、`null`或`0` ,这个 **Conditions** 就会通过。
|
||||
|
||||
###### 调用非公共方法
|
||||
|
||||
如果尝试调用的方法不是公共的,则可能需要在方法名称前面加上括号中的声明类。由于一个对象在多个父类中可能具有同名的非公共方法,因此必须显式指定在何处查找该方法。
|
||||
如果尝试调用的方法不是公共的,则可能需要在方法名称前面加上括号中的声明类。由于一个对象在多个父类中可能具有同名的非公共方法,因此必须显式指定在何处查找该方法。
|
||||
|
||||
语法:
|
||||
|
||||
@ -310,7 +310,7 @@ player.giveExpLevels({_levels})
|
||||
|
||||
###### 调用重载的方法
|
||||
|
||||
通常, **skript-reflect** 可以从运行时传递的参数中推断出要调用的正确的重载方法。如果需要使用某个方法的某种实现,可以在方法名称的末尾附加一个逗号分隔的列表,并用括号括起来。
|
||||
通常, **skript-reflect** 可以从运行时传递的参数中推断出要调用的正确的重载方法。如果需要使用某个方法的某种实现,可以在方法名称的末尾附加一个逗号分隔的列表,并用括号括起来。
|
||||
|
||||
语法:
|
||||
|
||||
@ -330,7 +330,7 @@ Math.max[int, int](0, {_value})
|
||||
|
||||
###### 调用非公共字段
|
||||
|
||||
如果你尝试访问的字段不是公共的,则可能需要在字段名称前面加上括号中的声明类。由于一个对象在多个父类中可能具有同名的非公共字段,因此必须显式指定查找该字段的位置。
|
||||
如果你尝试访问的字段不是公共的,则可能需要在字段名称前面加上括号中的声明类。由于一个对象在多个父类中可能具有同名的非公共字段,因此必须显式指定查找该字段的位置。
|
||||
|
||||
示例:
|
||||
|
||||
@ -356,7 +356,7 @@ new Location(player's world, 0, 0, 0)
|
||||
|
||||
##### 监听事件
|
||||
|
||||
你可以通过引用导入的类来收听任何基于 Bukkit 的事件(包括其他插件添加的事件)。例如,如果要收听 `org.bukkit.event.entity.EnderDragonChangePhaseEvent`:
|
||||
你可以通过引用导入的类来收听任何基于 Bukkit 的事件(包括其他插件添加的事件)。例如,如果要收听 `org.bukkit.event.entity.EnderDragonChangePhaseEvent`:
|
||||
|
||||
```sk
|
||||
import:
|
||||
@ -368,13 +368,13 @@ on EnderDragonChangePhaseEvent:
|
||||
|
||||
:::warning
|
||||
|
||||
一些插件使用自己的事件处理系统,或者不通过 **Bukkit** 的事件执行器传递他们的事件( **Skript** 的一些内部事件就是这种情况)。
|
||||
一些插件使用自己的事件处理系统,或者不通过 **Bukkit** 的事件执行器传递他们的事件( **Skript** 的一些内部事件就是这种情况)。
|
||||
|
||||
为了侦听事件,它必须扩展`org.bukkit.event.Event`并由 **Bukkit** 的事件执行器执行。
|
||||
为了侦听事件,它必须扩展`org.bukkit.event.Event`并由 **Bukkit** 的事件执行器执行。
|
||||
|
||||
:::
|
||||
|
||||
你还可以使用同一处理程序侦听多个事件。这些事件不必相关,但如果尝试访问在一个事件中可用但在另一个事件中不可用的方法,则应采取适当的预防措施。例如,如果要同时侦听`org.bukkit.event.entity.ProjectileLaunchEvent`和`org.bukkit.event.entity.ProjectileHitEvent`:
|
||||
你还可以使用同一处理程序侦听多个事件。这些事件不必相关,但如果尝试访问在一个事件中可用但在另一个事件中不可用的方法,则应采取适当的预防措施。例如,如果要同时侦听`org.bukkit.event.entity.ProjectileLaunchEvent`和`org.bukkit.event.entity.ProjectileHitEvent`:
|
||||
|
||||
```sk
|
||||
import:
|
||||
@ -387,7 +387,7 @@ on ProjectileLaunchEvent and ProjectileHitEvent:
|
||||
|
||||
##### 使用`event` **Expressions**
|
||||
|
||||
**skript-reflect** 公开一个叫做`event`的 **Expressions**,允许你使用反射访问事件值。
|
||||
**skript-reflect** 公开一个叫做`event`的 **Expressions**,允许你使用反射访问事件值。
|
||||
|
||||
语法:
|
||||
|
||||
@ -442,7 +442,7 @@ monitor
|
||||
|
||||
##### 处理已取消的事件
|
||||
|
||||
默认情况下,如果事件被优先级较低的处理程序取消,则不会调用事件处理程序。可以通过指定处理程序应处理`all`事件来更改此行为。
|
||||
默认情况下,如果事件被优先级较低的处理程序取消,则不会调用事件处理程序。可以通过指定处理程序应处理`all`事件来更改此行为。
|
||||
|
||||
示例:
|
||||
|
||||
@ -467,7 +467,7 @@ on all BlockBreakEvent:
|
||||
|
||||
:::info
|
||||
|
||||
此语法中的括号是文字,不表示可选组。
|
||||
此语法中的括号是文字,不表示可选组。
|
||||
|
||||
:::
|
||||
|
||||
@ -491,11 +491,11 @@ set {_list::*} to ...{_array}
|
||||
new %javatype%[%integer%]
|
||||
```
|
||||
|
||||
创建给定类型和大小的数组。类型可能是原始类型,不需要导入。
|
||||
创建给定类型和大小的数组。类型可能是原始类型,不需要导入。
|
||||
|
||||
:::info
|
||||
|
||||
此语法中的括号是文字,不表示可选组。
|
||||
此语法中的括号是文字,不表示可选组。
|
||||
|
||||
:::
|
||||
|
||||
@ -511,7 +511,7 @@ new %javatype%[%integer%]
|
||||
|
||||
:::info
|
||||
|
||||
此语法中的括号是文字,不表示可选组。
|
||||
此语法中的括号是文字,不表示可选组。
|
||||
|
||||
:::
|
||||
|
||||
@ -544,7 +544,7 @@ null
|
||||
|
||||
:::info
|
||||
|
||||
与 [Expression](https://tpgamesnl.gitbook.io/skript-reflect/advanced/custom-syntax#expression) 一起使用时,可以将其设置为一个值,这将更改该参数的输入值。这可用于将数据存储在调用触发器的变量中。
|
||||
与 [Expression](https://tpgamesnl.gitbook.io/skript-reflect/advanced/custom-syntax#expression) 一起使用时,可以将其设置为一个值,这将更改该参数的输入值。这可用于将数据存储在调用触发器的变量中。
|
||||
|
||||
```sk
|
||||
import:
|
||||
@ -567,9 +567,9 @@ effect put %objects% in %objects%:
|
||||
%objects%'[s] (fields|methods|constructors)
|
||||
```
|
||||
|
||||
返回对象的字段、方法或构造函数的列表,包括其修饰符和参数。
|
||||
返回对象的字段、方法或构造函数的列表,包括其修饰符和参数。
|
||||
|
||||
如果需要不带修饰符或参数详细信息的字段或方法名称列表,请参阅[成员名称](https://tpgamesnl.gitbook.io/skript-reflect/basics/utilities#member-names)。
|
||||
如果需要不带修饰符或参数详细信息的字段或方法名称列表,请参阅[成员名称](https://tpgamesnl.gitbook.io/skript-reflect/basics/utilities#member-names)。
|
||||
|
||||
##### 成员的名字
|
||||
|
||||
@ -603,6 +603,6 @@ effect put %objects% in %objects%:
|
||||
[(an|the)] instance of [the] plugin %javatype/string%
|
||||
```
|
||||
|
||||
返回给定插件的实例(字符串形式的名称或插件类)。
|
||||
返回给定插件的实例(字符串形式的名称或插件类)。
|
||||
|
||||
更高级的用法及详细内容请自行查阅[skript-reflect文档](https://tpgamesnl.gitbook.io/skript-reflect)
|
||||
|
@ -11,13 +11,13 @@ sidebar_position: 2
|
||||
|
||||
### Events - 事件
|
||||
|
||||
什么是事件? 谁在某地做了某事,最简单的三要素构成了事件。
|
||||
什么是事件? 谁在某地做了某事,最简单的三要素构成了事件。
|
||||
|
||||
在 Bukkit 服务器中,事件是系统或玩家行为触发的特定情况或变化。
|
||||
在 Bukkit 服务器中,事件是系统或玩家行为触发的特定情况或变化。
|
||||
|
||||
插件可以通过监听这些事件来扩展服务器的功能或改变其默认行为。
|
||||
|
||||
在 SK 中,事件往往作为触发器,**定义了何时以及如何触发脚本中的事件处理逻辑**。
|
||||
在 SK 中,事件往往作为触发器,**定义了何时以及如何触发脚本中的事件处理逻辑**。
|
||||
|
||||
举例:
|
||||
|
||||
@ -32,9 +32,9 @@ on click:
|
||||
|
||||
### Conditions - 条件
|
||||
|
||||
条件语句用于判断某个表达式的结果,根据结果来执行不同的代码块。
|
||||
条件语句用于判断某个表达式的结果,根据结果来执行不同的代码块。
|
||||
|
||||
在 SK 中常与事件一起使用,**用于判断是否应该执行特定的效果或操作**。
|
||||
在 SK 中常与事件一起使用,**用于判断是否应该执行特定的效果或操作**。
|
||||
|
||||
举例:
|
||||
|
||||
@ -54,7 +54,7 @@ on join:
|
||||
|
||||
效果可以是修改游戏模式、发送消息、移动玩家等任何能够改变游戏世界的动作。
|
||||
|
||||
在 SK 中效果是脚本中实际执行的操作或指令,用于**改变游戏结果或执行动作**
|
||||
在 SK 中效果是脚本中实际执行的操作或指令,用于**改变游戏结果或执行动作**
|
||||
|
||||
举例:
|
||||
|
||||
@ -75,7 +75,7 @@ on player jump:
|
||||
|
||||
表达式是计算值或引用数据的语句。它们可以返回各种类型的结果。如数字、字符串、列表等。
|
||||
|
||||
在 SK 中一般配合条件判断,用于**在脚本中传递和处理数据**。
|
||||
在 SK 中一般配合条件判断,用于**在脚本中传递和处理数据**。
|
||||
|
||||
举例:
|
||||
|
||||
@ -85,7 +85,7 @@ on join:
|
||||
set `{playerIP::%player%}` to ip of player
|
||||
set `{playername::%player%}` to name of player
|
||||
# 将玩家的名字存储到变量`{playerName}``{playerIP}`中
|
||||
broadcast "玩家名字为: %`{playerName%,IP为:`{playerIP::%player%}`}`!"
|
||||
broadcast "玩家名字为: %`{playerName%,IP为:`{playerIP::%player%}`}`!"
|
||||
# 广播玩家的名字和 IP
|
||||
```
|
||||
|
||||
@ -93,7 +93,7 @@ on join:
|
||||
|
||||
### Types - 类型
|
||||
|
||||
类型定义了变量、参数和返回值的数据种类。在 Skript 中,虽然不像某些编程语言那样严格区分类型,但理解不同类型的值(如字符串、数字、列表等)对于编写正确的脚本至关重要。
|
||||
类型定义了变量、参数和返回值的数据种类。在 Skript 中,虽然不像某些编程语言那样严格区分类型,但理解不同类型的值(如字符串、数字、列表等)对于编写正确的脚本至关重要。
|
||||
|
||||
```skript
|
||||
on bed enter:
|
||||
@ -104,21 +104,21 @@ on bed enter:
|
||||
# 发送消息
|
||||
```
|
||||
|
||||
此处的 `"world"` 为 Types - 类型。(注意,此处的 `"world"` 是包含引号的内容,指的是具体的世界名)
|
||||
此处的 `"world"` 为 Types - 类型。(注意,此处的 `"world"` 是包含引号的内容,指的是具体的世界名)
|
||||
|
||||
### Functions - 功能
|
||||
|
||||
功能是封装了特定逻辑的代码块,可以在脚本中多次调用,常用的功能是计算、向量等类型的。
|
||||
功能是封装了特定逻辑的代码块,可以在脚本中多次调用,常用的功能是计算、向量等类型的。
|
||||
|
||||
在 SK 中,作用主要是**快捷计算、指定类型(如世界、颜色、玩家类型)等**
|
||||
在 SK 中,作用主要是**快捷计算、指定类型(如世界、颜色、玩家类型)等**
|
||||
|
||||
举例:
|
||||
|
||||
```skript
|
||||
on elytra boost:
|
||||
# 鞘翅加速时(skbee拓展)
|
||||
# 鞘翅加速时(skbee拓展)
|
||||
set `{_vector1}` to vector(0, 1, 0)
|
||||
# 设置局部变量为向量(向上)
|
||||
# 设置局部变量为向量(向上)
|
||||
push player `{_vector1}`
|
||||
# 以设定向量推动玩家向上
|
||||
```
|
||||
@ -127,7 +127,7 @@ on elytra boost:
|
||||
|
||||
### Sections - 部分
|
||||
|
||||
部分是指脚本中按功能或逻辑组织的代码块。它们可以是事件处理器、条件判断、循环体等,通常用于将相关代码组织在一起,以便更好地管理和维护。
|
||||
部分是指脚本中按功能或逻辑组织的代码块。它们可以是事件处理器、条件判断、循环体等,通常用于将相关代码组织在一起,以便更好地管理和维护。
|
||||
|
||||
举例:
|
||||
|
||||
@ -139,7 +139,7 @@ on tool break:
|
||||
give player 1 of diamand
|
||||
# 给玩家一个钻石
|
||||
else:
|
||||
# 另一种情况(如果玩家不是管理)
|
||||
# 另一种情况(如果玩家不是管理)
|
||||
send "哦不你失去了你的工具" to player
|
||||
# 发消息给玩家
|
||||
```
|
||||
@ -148,7 +148,7 @@ on tool break:
|
||||
|
||||
### Structures - 结构
|
||||
|
||||
结构是控制脚本执行流程的语言元素,如循环、条件判断等。它们允许开发者根据特定的条件或逻辑来执行或跳过代码块,从而实现复杂的脚本逻辑。
|
||||
结构是控制脚本执行流程的语言元素,如循环、条件判断等。它们允许开发者根据特定的条件或逻辑来执行或跳过代码块,从而实现复杂的脚本逻辑。
|
||||
|
||||
举例:
|
||||
|
||||
@ -160,24 +160,24 @@ function welcome(msg: text,p: player):
|
||||
broadcast `{_msg}`
|
||||
# 广播消息
|
||||
message "欢迎 %`{_p}`% 来到`{@servername}`服务器!"
|
||||
# 定义了 welcome(参数1:type, 参数2:type),使用option中的变量 `{@servername}`
|
||||
# 定义了 welcome(参数1:type, 参数2:type),使用option中的变量 `{@servername}`
|
||||
on join:
|
||||
bcd("欢迎玩家加入游戏",player)
|
||||
```
|
||||
|
||||
此处的 `options` 和 `function` 为 Structures - 结构。
|
||||
|
||||
通过合理使用这八大类语法,你可以编写出功能强大、易于维护的 Skript 脚本,为 Minecraft 服务器增添丰富的功能和玩法。
|
||||
通过合理使用这八大类语法,你可以编写出功能强大、易于维护的 Skript 脚本,为 Minecraft 服务器增添丰富的功能和玩法。
|
||||
|
||||
## 入门
|
||||
|
||||
Skript 仍然是编程语言,所有的编程语言都必须在拥有理论基础的情况下多实践。
|
||||
Skript 仍然是编程语言,所有的编程语言都必须在拥有理论基础的情况下多实践。
|
||||
|
||||
### 缩进
|
||||
|
||||
在 Skript 中 如果一行代码以 ":" 结尾 那么下一行需要进行缩进操作,如果没有就不需要进行缩进。
|
||||
在 Skript 中 如果一行代码以 ":" 结尾 那么下一行需要进行缩进操作,如果没有就不需要进行缩进。
|
||||
|
||||
缩进的方式可以选择两个/四个空格或者一个 Tab (Tab 虽然不是很规范但是真的很爽)。
|
||||
缩进的方式可以选择两个/四个空格或者一个 Tab (Tab 虽然不是很规范但是真的很爽)。
|
||||
|
||||
### 文本编辑器
|
||||
|
||||
@ -185,7 +185,7 @@ Skript 仍然是编程语言,所有的编程语言都必须在拥有理论基
|
||||
|
||||
### Helloworld
|
||||
|
||||
在 `/plugins/Skripts/scripts` 目录下创建一个名为 `test.sk` 的文件,并打开粘贴以下代码。
|
||||
在 `/plugins/Skripts/scripts` 目录下创建一个名为 `test.sk` 的文件,并打开粘贴以下代码。
|
||||
|
||||
```
|
||||
on join:
|
||||
@ -194,46 +194,46 @@ on join:
|
||||
|
||||
随后在权限账号或者后台输入 `/skript reload scripts` 即可完成重载。然后退出服务器并重新进入。
|
||||
|
||||
如果进入服务器时收到了 "Hello World" 的消息,那么证明脚本 `test.sk` 已经生效了。
|
||||
如果进入服务器时收到了 "Hello World" 的消息,那么证明脚本 `test.sk` 已经生效了。
|
||||
|
||||
### 查询语法
|
||||
|
||||
很好,想必你已经大概知道 Skript 是一款什么样的编程语言了。
|
||||
很好,想必你已经大概知道 Skript 是一款什么样的编程语言了。
|
||||
|
||||
想必你一定有一些想法,市面上可能找不到,而且因为你不会使用 Java 写插件所以难以实现。
|
||||
想必你一定有一些想法,市面上可能找不到,而且因为你不会使用 Java 写插件所以难以实现。
|
||||
|
||||
前往 [skhub](https://skripthub.net/docs/) 或 [skunity](https://docs.skunity.com/syntax)查询 Skript 语法,现在开始构思你的插件吧。
|
||||
前往 [skhub](https://skripthub.net/docs/) 或 [skunity](https://docs.skunity.com/syntax)查询 Skript 语法,现在开始构思你的插件吧。
|
||||
|
||||
### 如何使用语法
|
||||
|
||||
首先,最重要的是 Event(事件),这是所有逻辑的先决要素,我们在[skhub](https://skripthub.net/docs/) 或 [skunity](https://docs.skunity.com/syntax) 上,
|
||||
首先,最重要的是 Event(事件),这是所有逻辑的先决要素,我们在[skhub](https://skripthub.net/docs/) 或 [skunity](https://docs.skunity.com/syntax) 上,
|
||||
|
||||
在侧边栏中选中(Skript 和 Events),即可筛选 Skript 原生事件。此处以指令监听器为例:
|
||||
在侧边栏中选中(Skript 和 Events),即可筛选 Skript 原生事件。此处以指令监听器为例:
|
||||
|
||||
在侧边栏中选中(Skript 和 Events)后,在搜索栏中输入 "on command",得到以下结果。
|
||||
在侧边栏中选中(Skript 和 Events)后,在搜索栏中输入 "on command",得到以下结果。
|
||||
|
||||
![](_images/SkriptBasic1.png)
|
||||
|
||||
#### 语法
|
||||
|
||||
举一个例子,点击事件的语法是这样的:
|
||||
举一个例子,点击事件的语法是这样的:
|
||||
|
||||
```
|
||||
[on] [(right|left)(| |-)][mouse(| |-)]click[ing] (with|using|holding) %itemtype% on %entitydata/itemtype%
|
||||
```
|
||||
##### `[xxx]`
|
||||
|
||||
表示这部分可以被省略,但省略后可能会导致意义改变,如此处 `on click:` 和 `on rightclick:` 意义不同,前者为所有类型的点击,而后者为右键。
|
||||
表示这部分可以被省略,但省略后可能会导致意义改变,如此处 `on click:` 和 `on rightclick:` 意义不同,前者为所有类型的点击,而后者为右键。
|
||||
|
||||
##### `(x|y|z)`
|
||||
|
||||
表示这部分可以从 `x`、`y`、`z` 中选择一个值,`x`、`y`、`z` 可以是空格或者空(也就是左右可以直接连起来),
|
||||
表示这部分可以从 `x`、`y`、`z` 中选择一个值,`x`、`y`、`z` 可以是空格或者空(也就是左右可以直接连起来),
|
||||
|
||||
例如 `[mouse(| |-)]click` 代表着:`mouseclick` `mouse-click` `mouse click` 这三者有相同的含义。
|
||||
|
||||
##### `%type%`
|
||||
|
||||
表示这部分只能是固定的某种 type,如 `%itemtype%`,这部分可以勾选 [skhub](https://skripthub.net/docs/) 侧边栏 `Type` 获取。
|
||||
表示这部分只能是固定的某种 type,如 `%itemtype%`,这部分可以勾选 [skhub](https://skripthub.net/docs/) 侧边栏 `Type` 获取。
|
||||
|
||||
|
||||
#### 属性
|
||||
@ -242,11 +242,11 @@ on join:
|
||||
|
||||
我们要重点关注的是 `Event Values` 这一标签下所对应的内容:
|
||||
|
||||
1. "event-world"("事件-世界")
|
||||
2. "event-commandsender"("事件-指令发送者")
|
||||
3. "event-player"("事件-玩家")
|
||||
1. "event-world"("事件-世界")
|
||||
2. "event-commandsender"("事件-指令发送者")
|
||||
3. "event-player"("事件-玩家")
|
||||
|
||||
利用这些,我们便可以获取到事件中的,“谁”和“某地”之类具体的信息。
|
||||
利用这些,我们便可以获取到事件中的,“谁”和“某地”之类具体的信息。
|
||||
|
||||
我们看一个 "on command" 相关示例:
|
||||
|
||||
@ -257,54 +257,54 @@ on command "/op":
|
||||
send "%event-player%" to console
|
||||
```
|
||||
|
||||
此时,任何执行者执行 "/op" 指令都会触发此监听。并将三个元素 "event-world" "event-commandsender" "event-player" 输出到后台。
|
||||
此时,任何执行者执行 "/op" 指令都会触发此监听。并将三个元素 "event-world" "event-commandsender" "event-player" 输出到后台。
|
||||
|
||||
如果是后台执行了 "/op" 指令时,因为后台并不存于任何一个世界,也没有名字。上述三个元素只会有 "event-commandsender" 存在并正常输出为 "console" 而其余不存在元素将全部输出为 `"<none>"`
|
||||
如果是后台执行了 "/op" 指令时,因为后台并不存于任何一个世界,也没有名字。上述三个元素只会有 "event-commandsender" 存在并正常输出为 "console" 而其余不存在元素将全部输出为 `"<none>"`
|
||||
|
||||
相同地,你可以利用这样的方法,输出任何一个监听器下 "Event Values" 的元素值。
|
||||
相同地,你可以利用这样的方法,输出任何一个监听器下 "Event Values" 的元素值。
|
||||
|
||||
这种获取元素值的方法将在你需要使用任何从来没有接触过的监听器的时候,快速让你掌握监听器的基本信息。
|
||||
这种获取元素值的方法将在你需要使用任何从来没有接触过的监听器的时候,快速让你掌握监听器的基本信息。
|
||||
|
||||
### 最初的脚本
|
||||
|
||||
在这个板块中,请利用 [skhub](https://skripthub.net/docs/) 或 [skunity](https://docs.skunity.com/syntax)查询 Skript 语法,满足缩进等要求,尝试写一些最基础脚本吧~
|
||||
在这个板块中,请利用 [skhub](https://skripthub.net/docs/) 或 [skunity](https://docs.skunity.com/syntax)查询 Skript 语法,满足缩进等要求,尝试写一些最基础脚本吧~
|
||||
|
||||
#### 事件
|
||||
|
||||
在这一节中,我们学习如何选取如何选用合适的事件。因为事件是一切行为的触发器,需要事件发生了什么,在哪发生的,
|
||||
在这一节中,我们学习如何选取如何选用合适的事件。因为事件是一切行为的触发器,需要事件发生了什么,在哪发生的,
|
||||
|
||||
才能够进一步进行操作,事件发生的顺序是:
|
||||
才能够进一步进行操作,事件发生的顺序是:
|
||||
|
||||
`事件准备发生` > `监听器监听到` > `事件正式发生`。
|
||||
|
||||
##### 事件的取消
|
||||
|
||||
如果我们在监听器监听到后,加入取消事件这一环节。事件发生的顺序就变为了:
|
||||
如果我们在监听器监听到后,加入取消事件这一环节。事件发生的顺序就变为了:
|
||||
|
||||
`事件准备发生` > `监听器监听到` > `取消事件` > `事件未发生`
|
||||
|
||||
我们就成功阻止了指令的发生,我们使用 `cancel event` 来达到这一点。
|
||||
我们就成功阻止了指令的发生,我们使用 `cancel event` 来达到这一点。
|
||||
|
||||
##### 事件优先级
|
||||
|
||||
要注意,事件的监听是有优先级的,其中有六个优先级,其中执行顺序为**从上到下**分别为:
|
||||
要注意,事件的监听是有优先级的,其中有六个优先级,其中执行顺序为**从上到下**分别为:
|
||||
|
||||
|优先级| Priority|
|
||||
-------- | -----
|
||||
|最低| Lowest|
|
||||
|低 |Low|
|
||||
|正常(默认)|Normal|
|
||||
|正常(默认)|Normal|
|
||||
|高 |High|
|
||||
|最高 |Highest|
|
||||
|监控 |Monitor|
|
||||
|
||||
:::warning[吐槽]
|
||||
|
||||
Bukkit 的事件就是这样的,所以 Skript 也继承了这个抽象名字,发生顺序为 `Lowest -> Low -> Normal -> High -> Highest -> Monitor`
|
||||
Bukkit 的事件就是这样的,所以 Skript 也继承了这个抽象名字,发生顺序为 `Lowest -> Low -> Normal -> High -> Highest -> Monitor`
|
||||
|
||||
没错,Lowest 的事件最先发生,如果一个插件事件优先级更高且这个事件没有被更低优先级的插件取消,那么更高优先级的事件将会覆盖更低优先级的结果。
|
||||
没错,Lowest 的事件最先发生,如果一个插件事件优先级更高且这个事件没有被更低优先级的插件取消,那么更高优先级的事件将会覆盖更低优先级的结果。
|
||||
|
||||
我们来简单假设一个条件,我们想要写一个脚本禁止管理使用 tp 指令传送玩家到其他地方,我们会这样写:
|
||||
我们来简单假设一个条件,我们想要写一个脚本禁止管理使用 tp 指令传送玩家到其他地方,我们会这样写:
|
||||
|
||||
```
|
||||
on teleport with priority lowest:
|
||||
@ -315,19 +315,19 @@ on teleport with priority lowest:
|
||||
cancel event
|
||||
```
|
||||
|
||||
此时我们在常用的 `on teleport` 事件后加上优先级 `with priority lowest` (以最低优先级先发生并取消)
|
||||
此时我们在常用的 `on teleport` 事件后加上优先级 `with priority lowest` (以最低优先级先发生并取消)
|
||||
|
||||
由此可见,Lowest 可以理解为 First,而 Highest 可以理解为 Last,更符合逻辑
|
||||
由此可见,Lowest 可以理解为 First,而 Highest 可以理解为 Last,更符合逻辑
|
||||
|
||||
:::
|
||||
|
||||
##### 事件选用
|
||||
|
||||
选用不合适的事件可能会导致逻辑混乱复杂,性能拉胯,臃肿等。所以在任何脚本编写之前应该充分考虑选用什么事件是合理的。
|
||||
选用不合适的事件可能会导致逻辑混乱复杂,性能拉胯,臃肿等。所以在任何脚本编写之前应该充分考虑选用什么事件是合理的。
|
||||
|
||||
例如,我们想写一个脚本,检测玩家在 00:00 - 06:00 没有在床上睡觉,那么就每秒扣玩家 1 生命值。
|
||||
例如,我们想写一个脚本,检测玩家在 00:00 - 06:00 没有在床上睡觉,那么就每秒扣玩家 1 生命值。
|
||||
|
||||
查询 [skhub](https://skripthub.net/docs/) 或 [skunity](https://docs.skunity.com/syntax) ,根据直觉选择,与时间和睡觉有关系的事件可能有这些:
|
||||
查询 [skhub](https://skripthub.net/docs/) 或 [skunity](https://docs.skunity.com/syntax) ,根据直觉选择,与时间和睡觉有关系的事件可能有这些:
|
||||
|
||||
```
|
||||
every 10 seconds:
|
||||
@ -347,13 +347,13 @@ every 1 second:
|
||||
remove 1 from health of loop-player
|
||||
```
|
||||
|
||||
该脚本利用 `every %tiemspan%` 作为事件触发,本身也是周期循环。
|
||||
该脚本利用 `every %tiemspan%` 作为事件触发,本身也是周期循环。
|
||||
|
||||
可以发现,该循环使用 `every 1 second`,触发频率比较高,即使在白天这个事件循环仍在继续,
|
||||
可以发现,该循环使用 `every 1 second`,触发频率比较高,即使在白天这个事件循环仍在继续,
|
||||
|
||||
虽然整体任务不算复杂,但是如果遇到复杂判断时,高频率(尤其是 `every tick`)的事件是很低效的。
|
||||
虽然整体任务不算复杂,但是如果遇到复杂判断时,高频率(尤其是 `every tick`)的事件是很低效的。
|
||||
|
||||
在这里,我们可以改写为:
|
||||
在这里,我们可以改写为:
|
||||
|
||||
```
|
||||
脚本1改
|
||||
@ -364,9 +364,9 @@ every 1 second:
|
||||
remove 1 from health of loop-player
|
||||
```
|
||||
|
||||
相对脚本 1,我们发现,在时间在 0 - 6 点之外的时候,我们不会 loop 和判断玩家睡眠,因为这本身是没有意义的。
|
||||
相对脚本 1,我们发现,在时间在 0 - 6 点之外的时候,我们不会 loop 和判断玩家睡眠,因为这本身是没有意义的。
|
||||
|
||||
仅仅只是交换两行代码顺序,就能起到提升性能的效果。(这里举例是非常轻量的例子,不足以产生任何性能问题)
|
||||
仅仅只是交换两行代码顺序,就能起到提升性能的效果。(这里举例是非常轻量的例子,不足以产生任何性能问题)
|
||||
|
||||
```
|
||||
脚本2
|
||||
@ -384,9 +384,9 @@ at 00:00 in world "world":
|
||||
|
||||
```
|
||||
|
||||
该脚本利用 `at time` 作为事件触发,也使用 `while` + `wait` 保持时间周期循环。使用 `bed leave` `bed enter` + 变量作为条件。
|
||||
该脚本利用 `at time` 作为事件触发,也使用 `while` + `wait` 保持时间周期循环。使用 `bed leave` `bed enter` + 变量作为条件。
|
||||
|
||||
属于错误使用了监听事件,因为玩家是否在睡觉不需要我们自行使用事件判断,而是有直接的条件语法。
|
||||
属于错误使用了监听事件,因为玩家是否在睡觉不需要我们自行使用事件判断,而是有直接的条件语法。
|
||||
|
||||
```
|
||||
脚本2改
|
||||
@ -398,21 +398,21 @@ at 00:00 in world "world":
|
||||
wait 1 second
|
||||
```
|
||||
|
||||
该脚本利用 `at time` 作为事件触发,使用 `while` + `wait` 保持时间周期循环,使用 `is not sleeping` 作为条件。
|
||||
该脚本利用 `at time` 作为事件触发,使用 `while` + `wait` 保持时间周期循环,使用 `is not sleeping` 作为条件。
|
||||
|
||||
##### 练习
|
||||
|
||||
制作一个 Skript 脚本,用于在大厅使用,不会刷新怪物,玩家不会受伤也不可伤害,也不会掉饱食度。
|
||||
制作一个 Skript 脚本,用于在大厅使用,不会刷新怪物,玩家不会受伤也不可伤害,也不会掉饱食度。
|
||||
|
||||
普通玩家不可放置方块,或破坏方块,而有权限 `lobby.admin` 的玩家可以放置和破坏方块。
|
||||
普通玩家不可放置方块,或破坏方块,而有权限 `lobby.admin` 的玩家可以放置和破坏方块。
|
||||
|
||||
<details>
|
||||
<summary>参考写法,不唯一</summary>
|
||||
<summary>参考写法,不唯一</summary>
|
||||
|
||||
不刷新怪物的事件建议去掉,直接设置**难度为和平**。
|
||||
不刷新怪物的事件建议去掉,直接设置**难度为和平**。
|
||||
|
||||
```
|
||||
不推荐,即使这是有用的!
|
||||
不推荐,即使这是有用的!
|
||||
on spawn of any monster:
|
||||
cancel event
|
||||
on food level change:
|
||||
@ -432,13 +432,13 @@ on break with priority lowest::
|
||||
on place with priority lowest::
|
||||
if player has permission "lobby.admin":
|
||||
stop
|
||||
#停止进一步对有权限玩家的逻辑,即什么也不做
|
||||
#停止进一步对有权限玩家的逻辑,即什么也不做
|
||||
else:
|
||||
cancel event
|
||||
#取消没有权限玩家的方块放置行为
|
||||
```
|
||||
|
||||
在这里,以下两种写法是等价的。
|
||||
在这里,以下两种写法是等价的。
|
||||
|
||||
```
|
||||
if player do not have permission "lobby.admin":
|
||||
@ -452,7 +452,7 @@ else:
|
||||
cancel event
|
||||
```
|
||||
|
||||
如果只需要判断是或不是,可以灵活选用更简洁的方法,简化为:
|
||||
如果只需要判断是或不是,可以灵活选用更简洁的方法,简化为:
|
||||
|
||||
```
|
||||
on place:
|
||||
@ -460,7 +460,7 @@ on place:
|
||||
cancel event
|
||||
```
|
||||
|
||||
在这里省略了一个 if,因此后面也不需要跟上冒号 `:`,也无需重新换行,但注意,这只适用于只对没有权限的人进行取消,而对有权限的人没有任何限制时才可以这么写。
|
||||
在这里省略了一个 if,因此后面也不需要跟上冒号 `:`,也无需重新换行,但注意,这只适用于只对没有权限的人进行取消,而对有权限的人没有任何限制时才可以这么写。
|
||||
|
||||
</details>
|
||||
|
||||
@ -470,25 +470,25 @@ TODO
|
||||
|
||||
#### 练习 2 - /command、局部变量、运算练习
|
||||
|
||||
制作一个 Skript 脚本,用于简单的跨世界传送,输入 `/world xxx` 即可传送到对应世界,坐标对应为:`主世界:地狱:末地=8:1:8`,
|
||||
制作一个 Skript 脚本,用于简单的跨世界传送,输入 `/world xxx` 即可传送到对应世界,坐标对应为:`主世界:地狱:末地=8:1:8`,
|
||||
|
||||
即玩家在末地 `800, 100, 800` 传送到主世界坐标为 `800 100 800`,如果传送到地狱坐标为 `100 100 100`
|
||||
即玩家在末地 `800, 100, 800` 传送到主世界坐标为 `800 100 800`,如果传送到地狱坐标为 `100 100 100`
|
||||
|
||||
<details>
|
||||
<summary>参考写法,不唯一</summary>
|
||||
<summary>参考写法,不唯一</summary>
|
||||
|
||||
:::tip
|
||||
|
||||
1. `command /xxx` 后一定要使用 `trigger:` 否则指令将不会注册并报错。
|
||||
2. `/xxx` 为 "指令",第 n 个空格后的参数即为 `arg-n`,如此处的 `<world>` 为 `arg-1`
|
||||
3. 参数类型可以查 [skhub](https://skripthub.net/docs/) 选择 `type` 为参数类型,万能参数可用 `string` / `text`。
|
||||
4. 参数以 `<>` 引用起来时说明该参数为必要参数,如果输入时没有这个参数时会提示格式错误,如果这个参数是可以省略的,那么可以使用类似 `[<text>]` 的方法。
|
||||
2. `/xxx` 为 "指令",第 n 个空格后的参数即为 `arg-n`,如此处的 `<world>` 为 `arg-1`
|
||||
3. 参数类型可以查 [skhub](https://skripthub.net/docs/) 选择 `type` 为参数类型,万能参数可用 `string` / `text`。
|
||||
4. 参数以 `<>` 引用起来时说明该参数为必要参数,如果输入时没有这个参数时会提示格式错误,如果这个参数是可以省略的,那么可以使用类似 `[<text>]` 的方法。
|
||||
|
||||
在这里,我们分析一下指令,应该是 `/world xxx` 中的 `xxx` 代表世界,所以我们选择 `/world <world>` 作为指令。
|
||||
在这里,我们分析一下指令,应该是 `/world xxx` 中的 `xxx` 代表世界,所以我们选择 `/world <world>` 作为指令。
|
||||
|
||||
另外,我们可以发现,玩家输入的指令可能包括自己在的世界,这件事本身是没意义的,应该在最开始检查一次。
|
||||
另外,我们可以发现,玩家输入的指令可能包括自己在的世界,这件事本身是没意义的,应该在最开始检查一次。
|
||||
|
||||
如果你是新手,很有可能会写出类似以下的脚本:
|
||||
如果你是新手,很有可能会写出类似以下的脚本:
|
||||
|
||||
```
|
||||
if arg-1 is world "world_the_end":
|
||||
@ -507,13 +507,13 @@ TODO
|
||||
|
||||
:::warning[为什么这是不好的]
|
||||
|
||||
1. 在这里,每行代码都过长了,非常不利于阅读。
|
||||
2. 此想要调整不同世界的比例时,需要一个个调整参数,这不利于代码的维护。
|
||||
3. 使用的 `if` 套在 `if` 后的情况比较多,在逻辑上可能会出现问题。
|
||||
1. 在这里,每行代码都过长了,非常不利于阅读。
|
||||
2. 此想要调整不同世界的比例时,需要一个个调整参数,这不利于代码的维护。
|
||||
3. 使用的 `if` 套在 `if` 后的情况比较多,在逻辑上可能会出现问题。
|
||||
|
||||
:::
|
||||
|
||||
所以,我们选择使用局部变量暂存玩家的坐标,并基于玩家所在世界及目标世界计算变量,
|
||||
所以,我们选择使用局部变量暂存玩家的坐标,并基于玩家所在世界及目标世界计算变量,
|
||||
|
||||
最后根据计算出的量直接使用 `teleport player to [location]` 传送即可。
|
||||
|
||||
@ -537,7 +537,7 @@ command /world <world>:
|
||||
set {_x} to player's x-coord
|
||||
set {_z} to player's z-coord
|
||||
if arg-1 is world "world_nether":
|
||||
#如果玩家从其他地方到地狱,将暂存的 x z 坐标除以 8
|
||||
#如果玩家从其他地方到地狱,将暂存的 x z 坐标除以 8
|
||||
set {_x} to {_x}/8
|
||||
set {_z} to {_z}/8
|
||||
teleport player to location({_x},{_y},{_z},world "world_nether")
|
||||
@ -552,28 +552,28 @@ command /world <world>:
|
||||
#### 练习 3 -
|
||||
|
||||
<details>
|
||||
<summary>参考写法,不唯一</summary>
|
||||
<summary>参考写法,不唯一</summary>
|
||||
|
||||
</details>
|
||||
|
||||
#### 练习 4 -
|
||||
|
||||
<details>
|
||||
<summary>参考写法,不唯一</summary>
|
||||
<summary>参考写法,不唯一</summary>
|
||||
|
||||
</details>
|
||||
|
||||
#### 练习 5 -
|
||||
|
||||
<details>
|
||||
<summary>参考写法,不唯一</summary>
|
||||
<summary>参考写法,不唯一</summary>
|
||||
|
||||
</details>
|
||||
|
||||
#### 练习 6 -
|
||||
|
||||
<details>
|
||||
<summary>参考写法,不唯一</summary>
|
||||
<summary>参考写法,不唯一</summary>
|
||||
|
||||
</details>
|
||||
|
||||
@ -581,7 +581,7 @@ command /world <world>:
|
||||
|
||||
:::warning
|
||||
|
||||
后文为 TUCAOEVER 在 mcbbs 的教程未参考部分,没有进行任何格式化,TODO
|
||||
后文为 TUCAOEVER 在 mcbbs 的教程未参考部分,没有进行任何格式化,TODO
|
||||
|
||||
:::
|
||||
=
|
||||
@ -591,19 +591,19 @@ command /world <world>:
|
||||
|
||||
### Conditions(条件)
|
||||
|
||||
条件用于判断句:有没有,是不是。它的基本格式为 "if" + 条件。
|
||||
条件用于判断句:有没有,是不是。它的基本格式为 "if" + 条件。
|
||||
|
||||
这里我们和学习 Events 一样,我们先通过官方 Doc 找到所有的条件。
|
||||
这里我们和学习 Events 一样,我们先通过官方 Doc 找到所有的条件。
|
||||
|
||||
这里我们拿最常用的一个条件作示例,判断玩家是否有权限。
|
||||
这里我们拿最常用的一个条件作示例,判断玩家是否有权限。
|
||||
|
||||
权限的英文是什么? "permission" 我们通过翻阅侧边栏可以得知与 "permission" 相关的只有 "Has Permission" 一条,官方对这个条件的解释为:"Test whether a player has a certain permission.",翻译过来就是 "检测一个玩家是否拥有某一权限"。即我们所需要的:判断玩家是否有权限,那么我们又该如何使用呢 "Has Permssion" 条件呢?
|
||||
权限的英文是什么? "permission" 我们通过翻阅侧边栏可以得知与 "permission" 相关的只有 "Has Permission" 一条,官方对这个条件的解释为:"Test whether a player has a certain permission.",翻译过来就是 "检测一个玩家是否拥有某一权限"。即我们所需要的:判断玩家是否有权限,那么我们又该如何使用呢 "Has Permssion" 条件呢?
|
||||
|
||||
在 "Has Permission" 下 "Patterns" 给了我们两种标准格式用法:
|
||||
- `%players/console% (has|have) [the] permission[s] %texts%`
|
||||
- `%players/console% (doesn't|does not|do not|don't) have [the] permission[s] %texts%`
|
||||
|
||||
针对这样的格式,我相信很多人可能一头雾水。了解如下几点,或许能帮助你更好的了解用法:
|
||||
针对这样的格式,我相信很多人可能一头雾水。了解如下几点,或许能帮助你更好的了解用法:
|
||||
- "[]" 内可以省略
|
||||
- "(...|...)" 内必须选择一项填写
|
||||
- "%%" 内必须根据其所对应的类型进行填写
|
||||
@ -612,9 +612,9 @@ command /world <world>:
|
||||
- `player have the permissions "player.op"`
|
||||
- `player have permissions "player.op"`
|
||||
|
||||
正如之前所说的:可以省略的地方,无论如何搭配,表达的意思都是一样的。
|
||||
正如之前所说的:可以省略的地方,无论如何搭配,表达的意思都是一样的。
|
||||
|
||||
这也是 Skript 一大特点,并不需要非常严谨的语法。只要意思对,语法可以根据个人喜好进行选择。
|
||||
这也是 Skript 一大特点,并不需要非常严谨的语法。只要意思对,语法可以根据个人喜好进行选择。
|
||||
|
||||
同样我们还是举一个以 "on command" 监听器为核心的例子加深一下大家的理解:
|
||||
|
||||
@ -628,17 +628,17 @@ on command "/op":
|
||||
send "false" to event-player
|
||||
```
|
||||
|
||||
那么在玩家触发此监听器后,系统将会判断玩家是否有 "player.op" 权限。
|
||||
那么在玩家触发此监听器后,系统将会判断玩家是否有 "player.op" 权限。
|
||||
|
||||
如果有,指令将会正常进行,并发送 "true" 给玩家。
|
||||
如果有,指令将会正常进行,并发送 "true" 给玩家。
|
||||
|
||||
如果没有,指令执行事件将被强制取消,并发送 "false" 给玩家。
|
||||
如果没有,指令执行事件将被强制取消,并发送 "false" 给玩家。
|
||||
|
||||
---
|
||||
|
||||
### Effects(效果)
|
||||
|
||||
与其说它是效果,不如称作行动。
|
||||
与其说它是效果,不如称作行动。
|
||||
|
||||
我们把条件类的示例拿下来接着分析:
|
||||
|
||||
@ -652,7 +652,7 @@ on command "/op":
|
||||
send "false" to event-player
|
||||
```
|
||||
|
||||
我们把两个条件判断句替换为条件1和条件2,那么这段代码就可以理解为:
|
||||
我们把两个条件判断句替换为条件1和条件2,那么这段代码就可以理解为:
|
||||
```
|
||||
指令监听 "/op":
|
||||
事件-发送者类别 是 玩家
|
||||
@ -663,11 +663,11 @@ on command "/op":
|
||||
send "false" to event-player # 发送消息给玩家
|
||||
```
|
||||
|
||||
我们可以看到,条件判断结束后,代码并没有直接结束,而是分别执行行动。
|
||||
我们可以看到,条件判断结束后,代码并没有直接结束,而是分别执行行动。
|
||||
|
||||
如果我希望执行其他行动呢? 比如我想给一个玩家发送一个 Title 消息:
|
||||
|
||||
通过在官方 Doc 搜索,我们得知关于 Title 相关的 Effects 一共有两个:
|
||||
通过在官方 Doc 搜索,我们得知关于 Title 相关的 Effects 一共有两个:
|
||||
- (EffResetTitle)[https://docs.skriptlang.org/docs.html?search=#EffResetTitle]
|
||||
"Resets the title of the player to the default values."
|
||||
"重置玩家的 Title 至默认值"
|
||||
@ -675,7 +675,7 @@ on command "/op":
|
||||
"Sends a title/subtitle to the given player(s) with optional fadein/stay/fadeout times."
|
||||
"发送 Title/Subtitle 至指定玩家 可自定义渐入和淡出的时间"
|
||||
|
||||
我们需要知道的是 #EffSendTitle 的用法。关于怎么用,这里本质上和学习Conditions(条件)一样,我们将注意点放在 "Patterns" 上。
|
||||
我们需要知道的是 #EffSendTitle 的用法。关于怎么用,这里本质上和学习Conditions(条件)一样,我们将注意点放在 "Patterns" 上。
|
||||
|
||||
``` skript
|
||||
send title %text% [with subtitle %text%] [to %players%] [for %time span%] [with fade[(-| )]in %time span%] [(and|with) fade[(-| )]out %time span%]
|
||||
@ -687,7 +687,7 @@ send subtitle %text% [to %players%] [for %time span%] [with fade[(-| )]in %time
|
||||
- "(...|...)" 内必须选择一项填写
|
||||
- "%%" 内必须根据其所对应的类型进行填写
|
||||
|
||||
我们大致上认识到行动的基本用法,即:
|
||||
我们大致上认识到行动的基本用法,即:
|
||||
`send title "..." with subtitle "..." to player for ... seconds with fade-in ... seconds and fade-out ... seconds`
|
||||
|
||||
将其带入进我们的伪代码:
|
||||
@ -707,35 +707,35 @@ send subtitle %text% [to %players%] [for %time span%] [with fade[(-| )]in %time
|
||||
send "false" to event-player
|
||||
```
|
||||
|
||||
通过以上三种方式,我们都能成功的发送了 Title 信息。
|
||||
通过以上三种方式,我们都能成功的发送了 Title 信息。
|
||||
|
||||
只要记住以上基本原则,所有的用法问题迎刃而解。
|
||||
只要记住以上基本原则,所有的用法问题迎刃而解。
|
||||
|
||||
而学会读 "Patterns" 是初学者必备的技能,下文我将不会再提及如何使用 "Patterns" 查阅用法。
|
||||
而学会读 "Patterns" 是初学者必备的技能,下文我将不会再提及如何使用 "Patterns" 查阅用法。
|
||||
|
||||
---
|
||||
|
||||
### Expressions(表达) & Types(类型)
|
||||
|
||||
有一天你心血来潮,想要调整玩家的最大血量。
|
||||
有一天你心血来潮,想要调整玩家的最大血量。
|
||||
|
||||
调整血量,之前我们提过这属于动词 + 名词形式,这是属于 Effects(效果) 类。
|
||||
调整血量,之前我们提过这属于动词 + 名词形式,这是属于 Effects(效果) 类。
|
||||
|
||||
但是实际上是这样么?
|
||||
|
||||
实际上并不是,所谓的 Effect(效果) 虽然都是 `动词 + 名词` 形式,但是对于 Effect(效果) 而言。
|
||||
实际上并不是,所谓的 Effect(效果) 虽然都是 `动词 + 名词` 形式,但是对于 Effect(效果) 而言。
|
||||
|
||||
注重的是 `动词` 而非后面跟着的 `名词` 例如 `在玩家所在位置生成僵尸`。
|
||||
|
||||
Effect(效果) 所能提供的 只有 "生成"
|
||||
通过查阅[官方文档](https://docs.skriptlang.org/docs.html?search=#EffSecSpawn),我们知道生成的用法基本为:
|
||||
通过查阅[官方文档](https://docs.skriptlang.org/docs.html?search=#EffSecSpawn),我们知道生成的用法基本为:
|
||||
|
||||
```skript
|
||||
(spawn|summon) %entity types% [%directions% %locations%]
|
||||
(spawn|summon) %number% of %entity types% [%directions% %locations%]
|
||||
```
|
||||
|
||||
但是除去这个词语,我们还剩 "在玩家所在位置" 和 "僵尸"。
|
||||
但是除去这个词语,我们还剩 "在玩家所在位置" 和 "僵尸"。
|
||||
|
||||
这两个词我们又该怎么处理呢? 这时候我们就需要用到 Expressions(表达)。
|
||||
|
||||
@ -744,23 +744,23 @@ Effect(效果) 所能提供的 只有 "生成"
|
||||
- https://docs.skriptlang.org/docs.html?search=#ExprLocationOf
|
||||
- https://docs.skriptlang.org/docs.html?search=#ExprLocationAt
|
||||
|
||||
我们需要什么呢? 我们需要 "玩家所在的位置"。相同地,通过查看官方的注释,我们知道我们需要的是 #ExprLocationOf (The location of a block or entity.)。
|
||||
我们需要什么呢? 我们需要 "玩家所在的位置"。相同地,通过查看官方的注释,我们知道我们需要的是 #ExprLocationOf (The location of a block or entity.)。
|
||||
|
||||
但是这只解决了我们 "所在位置" 的问题 并没有解决 "玩家" 和 "僵尸" 的问题。
|
||||
|
||||
我们可以看到 "所在位置",Expressions(表达) 是没有主语的。
|
||||
我们可以看到 "所在位置",Expressions(表达) 是没有主语的。
|
||||
|
||||
Skript 不同于其他语言,正如我在开头所展示的,相比较 Java 而言 Skript 更**注重的是语言而非编程**。
|
||||
Skript 不同于其他语言,正如我在开头所展示的,相比较 Java 而言 Skript 更**注重的是语言而非编程**。
|
||||
|
||||
我们需要把这些零碎的东西组成句子,必不可少的是主语,次要的是宾语。
|
||||
我们需要把这些零碎的东西组成句子,必不可少的是主语,次要的是宾语。
|
||||
|
||||
这时候我们就需要引入 Types(类型),但凡你发现你的表达里缺少主语/宾语(对象),来这里准没错:
|
||||
这时候我们就需要引入 Types(类型),但凡你发现你的表达里缺少主语/宾语(对象),来这里准没错:
|
||||
|
||||
https://docs.skriptlang.org/classes.html
|
||||
|
||||
通过翻译我们可以轻松知道玩家的英文以及僵尸的英文,分别为 "player"和"zombie"。
|
||||
通过翻译我们可以轻松知道玩家的英文以及僵尸的英文,分别为 "player"和"zombie"。
|
||||
|
||||
与之相对应的,我们分别在 Types(类别) 中找到:
|
||||
与之相对应的,我们分别在 Types(类别) 中找到:
|
||||
- https://docs.skriptlang.org/docs.html?search=#player
|
||||
- https://docs.skriptlang.org/docs.html?search=#entity
|
||||
|
||||
@ -770,40 +770,40 @@ https://docs.skriptlang.org/classes.html
|
||||
|
||||
---
|
||||
|
||||
WOW,恭喜你!看到这,你就可以开始尝试着写一些插件了。
|
||||
WOW,恭喜你!看到这,你就可以开始尝试着写一些插件了。
|
||||
|
||||
|
||||
## 例子
|
||||
|
||||
这里刚好有一个例子,不妨动动手,试一试。
|
||||
这里刚好有一个例子,不妨动动手,试一试。
|
||||
|
||||
- 在玩家破坏方块时 检查玩家是否有 "fundamental.break" 这个权限
|
||||
- 如果有那就在让后台发送一条指令 "/broadcast %player% 破坏了方块"
|
||||
- 如果没有那就取消这个事件 并 向这个玩家发送 "你不能破坏这个方块"
|
||||
|
||||
答案不唯一,仅供参考。
|
||||
答案不唯一,仅供参考。
|
||||
|
||||
当然仅仅学这些并不够,为了做到能更快更灵活的使用各类语法,在闲暇的时候,把官方 Doc 提供的所有语法的注释都认真的看一遍是快速上手 Skript 的一种好办法。
|
||||
当然仅仅学这些并不够,为了做到能更快更灵活的使用各类语法,在闲暇的时候,把官方 Doc 提供的所有语法的注释都认真的看一遍是快速上手 Skript 的一种好办法。
|
||||
|
||||
---
|
||||
|
||||
你开始尝试着写一些有一些小功能的脚本了,但是难免的你会出现这样的问题:
|
||||
你开始尝试着写一些有一些小功能的脚本了,但是难免的你会出现这样的问题:
|
||||
|
||||
你为玩家创建了很多变量,很多都是属于一个类型的。
|
||||
你为玩家创建了很多变量,很多都是属于一个类型的。
|
||||
|
||||
比如你把所有人的游戏币数量都存在了 `{(玩家的名称)的游戏币数}` 这些变量内,你把所有人的点券数量都存在了 `{(玩家的名称)的点券数}` 这些变量内……
|
||||
比如你把所有人的游戏币数量都存在了 `{(玩家的名称)的游戏币数}` 这些变量内,你把所有人的点券数量都存在了 `{(玩家的名称)的点券数}` 这些变量内……
|
||||
|
||||
平时你单独去操作这些变量的时候,觉得也很容易。
|
||||
平时你单独去操作这些变量的时候,觉得也很容易。
|
||||
|
||||
但是假设突然有一次,由于回档需要补偿玩家损失。
|
||||
但是假设突然有一次,由于回档需要补偿玩家损失。
|
||||
|
||||
你需要将所有玩家的 `{(玩家的名称)的游戏币数}` 变量都 +1000。
|
||||
|
||||
还好只有10个玩家数据,你可以一个一个调,就是浪费一点时间,倒还不成问题。
|
||||
还好只有10个玩家数据,你可以一个一个调,就是浪费一点时间,倒还不成问题。
|
||||
|
||||
但是如果你有10000个玩家数据,如果你一个一个调,可能玩家都走完了,你也调不完。
|
||||
但是如果你有10000个玩家数据,如果你一个一个调,可能玩家都走完了,你也调不完。
|
||||
|
||||
你遇到了新的问题,如何存储并快速操作一类变量?
|
||||
你遇到了新的问题,如何存储并快速操作一类变量?
|
||||
|
||||
这时候你需要两样东西:"数组"和"loop"。
|
||||
|
||||
@ -811,25 +811,25 @@ WOW,恭喜你!看到这,你就可以开始尝试着写一些插件了。
|
||||
|
||||
数组的基本格式为 `{变量名::变量名::变量名......}`。
|
||||
|
||||
我们带入实景,将用 `{(玩家的名称)的游戏币数}` 存储转为用 `{金币::(玩家的名称)}` 存储玩家的游戏币数量。
|
||||
我们带入实景,将用 `{(玩家的名称)的游戏币数}` 存储转为用 `{金币::(玩家的名称)}` 存储玩家的游戏币数量。
|
||||
|
||||
例如,服务器有 10000 个玩家,玩家名称为 1,2,3,......,10000,玩家游戏币数量为 100,200,300,......,1000000。
|
||||
例如,服务器有 10000 个玩家,玩家名称为 1,2,3,......,10000,玩家游戏币数量为 100,200,300,......,1000000。
|
||||
|
||||
那么对应的 `{金币::1}` 就是:名为 "1" 玩家的游戏币数量 100。
|
||||
|
||||
如果我用输出语句输出 `{金币::1}` 至后台,那么很显然我会得到 100 这个数值。
|
||||
如果我用输出语句输出 `{金币::1}` 至后台,那么很显然我会得到 100 这个数值。
|
||||
|
||||
同样的我用输出语句输出 `{金币::10000}` 至后台,我会得到 1000000 这个数值。
|
||||
同样的我用输出语句输出 `{金币::10000}` 至后台,我会得到 1000000 这个数值。
|
||||
|
||||
你可能会说,这不是和用 `{(玩家的名称)的游戏币数}` 一样么?
|
||||
你可能会说,这不是和用 `{(玩家的名称)的游戏币数}` 一样么?
|
||||
|
||||
是的,确实。如果仅仅需要获得某一个玩家的游戏币数量,两者并没有什么区别。
|
||||
是的,确实。如果仅仅需要获得某一个玩家的游戏币数量,两者并没有什么区别。
|
||||
|
||||
但是,如果我将 `{金币::(玩家的名称)}` 中玩家的名称改为 "*" 即 ``{金币::*}``,这时候会产生什么样的效果呢?
|
||||
但是,如果我将 `{金币::(玩家的名称)}` 中玩家的名称改为 "*" 即 ``{金币::*}``,这时候会产生什么样的效果呢?
|
||||
|
||||
``{金币::*}`` 将包含,所有 ``{金币::(玩家的名称)}`` 变量。
|
||||
``{金币::*}`` 将包含,所有 ``{金币::(玩家的名称)}`` 变量。
|
||||
|
||||
而这个,却是 `{(玩家的名称)的游戏币数量}` 怎么改也做不到的。
|
||||
而这个,却是 `{(玩家的名称)的游戏币数量}` 怎么改也做不到的。
|
||||
|
||||
### Loop
|
||||
|
||||
@ -837,7 +837,7 @@ WOW,恭喜你!看到这,你就可以开始尝试着写一些插件了。
|
||||
|
||||
但是我们又该如何快速操作这一类数据呢? 这时候就需要引入我们的 Loop 结构。
|
||||
|
||||
Loop 即 循环结构,是 Skript 里非常常用的结构语句,主要用于操作数据量较大的一类变量。
|
||||
Loop 即 循环结构,是 Skript 里非常常用的结构语句,主要用于操作数据量较大的一类变量。
|
||||
|
||||
以下是 Loop 的几大标准配合:
|
||||
|
||||
@ -857,10 +857,10 @@ Loop 即 循环结构,是 Skript 里非常常用的结构语句,主要用于
|
||||
|
||||
### 注册指令
|
||||
|
||||
说到现在,我们所有的代码,似乎都是基于监听器进行编写的。
|
||||
说到现在,我们所有的代码,似乎都是基于监听器进行编写的。
|
||||
|
||||
我们都需要去触发监听器,才能执行我们的代码,那有没有什么办法可以主动触发我们的代码?
|
||||
这时候我们就需要引入 Minecraft 插件最核心的功能,指令功能。
|
||||
我们都需要去触发监听器,才能执行我们的代码,那有没有什么办法可以主动触发我们的代码?
|
||||
这时候我们就需要引入 Minecraft 插件最核心的功能,指令功能。
|
||||
|
||||
在 Java 里你可能需要这样注册一个指令。
|
||||
|
||||
@ -882,9 +882,9 @@ command /自定义指令:
|
||||
代码段
|
||||
```
|
||||
|
||||
你并不需要理解前者是什么意思,仅仅需要记住后者的格式即可。
|
||||
你并不需要理解前者是什么意思,仅仅需要记住后者的格式即可。
|
||||
|
||||
如果我想注册一个 "/我学你马Java" 的指令,你只需这样:(编者注:不建议注册中文指令。)
|
||||
如果我想注册一个 "/我学你马Java" 的指令,你只需这样:(编者注:不建议注册中文指令。)
|
||||
|
||||
```skript
|
||||
command /我学你马Java:
|
||||
@ -893,11 +893,11 @@ command /我学你马Java:
|
||||
send "不许说Java坏话" to player
|
||||
```
|
||||
|
||||
通过测试,指令正常触发。
|
||||
通过测试,指令正常触发。
|
||||
|
||||
通过套公式,你可以创造成千上万的指令不成问题,但是实际上我们在使用一个插件的时候,并不是只有 `/...` 结构的指令存在,更多的是 `/... ... ...` 来构成一类指令。
|
||||
通过套公式,你可以创造成千上万的指令不成问题,但是实际上我们在使用一个插件的时候,并不是只有 `/...` 结构的指令存在,更多的是 `/... ... ...` 来构成一类指令。
|
||||
|
||||
那我们又该如何注册这样结构的指令呢? 非常简单,基本格式与上面几乎无异。
|
||||
那我们又该如何注册这样结构的指令呢? 非常简单,基本格式与上面几乎无异。
|
||||
|
||||
```skript
|
||||
command /自定义指令 [<类型>] [<类型>] ...:
|
||||
@ -907,9 +907,9 @@ command /自定义指令 [<类型>] [<类型>] ...:
|
||||
|
||||
本人写代码时常用的结构就是这样。
|
||||
|
||||
有人问 "类型" 有哪些,其实我也说不全,我常用的有这几种。(编者注,见本页 `了解八大类`。)
|
||||
有人问 "类型" 有哪些,其实我也说不全,我常用的有这几种。(编者注,见本页 `了解八大类`。)
|
||||
|
||||
- "text" - 字符类型。什么是字符? 可以按照字面意思来理解,字词符号。
|
||||
- "text" - 字符类型。什么是字符? 可以按照字面意思来理解,字词符号。
|
||||
- "player" - 在线玩家。
|
||||
- "offline player" - 离线玩家。
|
||||
- "number" - 数字类型。
|
||||
@ -925,23 +925,23 @@ command /hello [<player>]:
|
||||
代码段
|
||||
```
|
||||
|
||||
可以看到,第一个空格的位置,我需要的参数类型为在线玩家。
|
||||
可以看到,第一个空格的位置,我需要的参数类型为在线玩家。
|
||||
|
||||
那么我在执行这个指令的时候,必须在这个位置上填上一个在线玩家的名称。
|
||||
那么我在执行这个指令的时候,必须在这个位置上填上一个在线玩家的名称。
|
||||
|
||||
同样的如果我把 `"[<player>]"` 换成 `"[<integer>]"`,我就需要在这个位置上填写一个整数。
|
||||
同样的如果我把 `"[<player>]"` 换成 `"[<integer>]"`,我就需要在这个位置上填写一个整数。
|
||||
|
||||
如果我填了 "1.2"(小数/浮点数),Skript 就会提示我,填写的参数类型错误。
|
||||
如果我填了 "1.2"(小数/浮点数),Skript 就会提示我,填写的参数类型错误。
|
||||
|
||||
为什么填写参数?那肯定是在代码段内需要使用这些输进来的参数。
|
||||
|
||||
那么我们在代码段里有该如何调用这些被我们输入进来的参数呢?
|
||||
|
||||
比如像是上面这个指令,它只有一个可以填参数的位置。那么在代码段内,它就是 `arg-1`,即`第一个参数`的意思。
|
||||
比如像是上面这个指令,它只有一个可以填参数的位置。那么在代码段内,它就是 `arg-1`,即`第一个参数`的意思。
|
||||
|
||||
我们只需要记住核心规则,它排在第几位,在代码段内,它就是 "arg-几"。
|
||||
我们只需要记住核心规则,它排在第几位,在代码段内,它就是 "arg-几"。
|
||||
|
||||
当然我在这块的了解并不是很深入,为了不把大家带上歪路,这里引用国外 Skript 原作者更为详细的指令注册的教程。
|
||||
当然我在这块的了解并不是很深入,为了不把大家带上歪路,这里引用国外 Skript 原作者更为详细的指令注册的教程。
|
||||
|
||||
```skript
|
||||
command /<指令名称> <参数>:
|
||||
@ -960,17 +960,17 @@ command /<指令名称> <参数>:
|
||||
```
|
||||
|
||||
- 指令名称(必填)
|
||||
指令名称基本上是指令,你可以在指令名称中使用任何字符(空格字符除外)。
|
||||
当然如果在指令名称中使用空格字符,那么空格字符后的文本将成为参数。
|
||||
指令名称基本上是指令,你可以在指令名称中使用任何字符(空格字符除外)。
|
||||
当然如果在指令名称中使用空格字符,那么空格字符后的文本将成为参数。
|
||||
指令名称前的斜杠字符(/)是可选的(但这并不意味着你可以在执行指令时不带斜杠)。
|
||||
- 参数(可选)
|
||||
可以通过将参数放在 "[]" 中来使其成为可选参数。
|
||||
- 类型参数
|
||||
可以通过使用规定的格式来限制参数的类型,例如: `<type = default value>`。
|
||||
- 类型为 "text/string" 的参数可以接受任何字符,但 "object" 类型不能用作于参数(编者注:原因大抵是无法输入 `object`)。
|
||||
- 类型可以是多个 (例如 number -> numbers entity -> entities)。通过这样的方法,可以使参数接受多个值。
|
||||
- "= default value" 这一部分是可选的,如果指令执行者未输入参数,系统将自动使用默认值。
|
||||
- 同样你也可以使用这样的方式设置参数默认值,例如: `<item = %player's tool%>`。
|
||||
可以通过使用规定的格式来限制参数的类型,例如: `<type = default value>`。
|
||||
- 类型为 "text/string" 的参数可以接受任何字符,但 "object" 类型不能用作于参数(编者注:原因大抵是无法输入 `object`)。
|
||||
- 类型可以是多个 (例如 number -> numbers entity -> entities)。通过这样的方法,可以使参数接受多个值。
|
||||
- "= default value" 这一部分是可选的,如果指令执行者未输入参数,系统将自动使用默认值。
|
||||
- 同样你也可以使用这样的方式设置参数默认值,例如: `<item = %player's tool%>`。
|
||||
|
||||
以下是一份指令示例:
|
||||
|
||||
@ -978,25 +978,25 @@ command /<指令名称> <参数>:
|
||||
|
||||
使用 `/kill zombies /kill creepers and animals in radius 100` 或 `/kill monsters in the radius 6` 都是可以的。
|
||||
|
||||
但是如果没有输入数值,系统将自动使用默认值,半径 20。
|
||||
但是如果没有输入数值,系统将自动使用默认值,半径 20。
|
||||
- Aliases
|
||||
子指令,指令的别名。如果需要创建多个子指令,请使用用逗号分隔。
|
||||
示例:(/alias1,alias2,/alias3)
|
||||
子指令,指令的别名。如果需要创建多个子指令,请使用用逗号分隔。
|
||||
示例:(/alias1,alias2,/alias3)
|
||||
- Executable By
|
||||
指定可以使用该指令的执行者。
|
||||
例如:console(后台), players(玩家), the console and players(后台和玩家)
|
||||
- Usage
|
||||
执行者用法不正确时,将发送的消息。
|
||||
执行者用法不正确时,将发送的消息。
|
||||
- Description
|
||||
指令描述,其他插件可以获取/显示此信息。
|
||||
指令描述,其他插件可以获取/显示此信息。
|
||||
- Permission
|
||||
执行指令所需要的权限。
|
||||
- Permission Message
|
||||
执行者没有权限时的提示信息。
|
||||
- Cooldown
|
||||
多长冷却时间后可以再次使用该指令,需要注意的是,关服时所有指令冷却时间将被重置。
|
||||
多长冷却时间后可以再次使用该指令,需要注意的是,关服时所有指令冷却时间将被重置。
|
||||
- Cooldown Message
|
||||
冷却期间,提示信息。
|
||||
冷却期间,提示信息。
|
||||
- Cooldown Bypass
|
||||
无视冷却时间所需要的权限。
|
||||
- Cooldown Storage
|
||||
@ -1006,9 +1006,9 @@ command /<指令名称> <参数>:
|
||||
|
||||
### Function 第一类结构
|
||||
|
||||
众所周知,一个复杂的插件,不免出现相似的代码段。
|
||||
众所周知,一个复杂的插件,不免出现相似的代码段。
|
||||
|
||||
有时候你看着不舒服,想要缩减段落,却又无从下手。这时你就需要 Function 来帮忙了。
|
||||
有时候你看着不舒服,想要缩减段落,却又无从下手。这时你就需要 Function 来帮忙了。
|
||||
|
||||
这里取 SUPERGUILDS 的一段代码做讲解。
|
||||
|
||||
@ -1021,17 +1021,17 @@ file "plugins/SUPERGUILDS/%{_fileDir}%.yml" does not exists:
|
||||
save yaml "plugins/SUPERGUILDS/%{_fileDir}%.yml"
|
||||
```
|
||||
|
||||
可能你不知道这段代码的意思,简而言之,这段代码的功能是存储一些数据至一个 YAML 文件内。对于一个相对复杂的脚本,数据的存储是必不可少的,同样也会频繁出现在我们的代码中的。难道真的每一次需要存储数据的时候,都需要再去复制粘贴么?
|
||||
可能你不知道这段代码的意思,简而言之,这段代码的功能是存储一些数据至一个 YAML 文件内。对于一个相对复杂的脚本,数据的存储是必不可少的,同样也会频繁出现在我们的代码中的。难道真的每一次需要存储数据的时候,都需要再去复制粘贴么?
|
||||
|
||||
对于一个初学者来说,无可厚非,就是多几行而已。但是对于一个老手来说,**复制粘贴不可取**。
|
||||
对于一个初学者来说,无可厚非,就是多几行而已。但是对于一个老手来说,**复制粘贴不可取**。
|
||||
|
||||
首先对于一个 5000+ 以上的插件来说,你需要关注的东西很多:一个是代码优化,一个是代码可读性。
|
||||
首先对于一个 5000+ 以上的插件来说,你需要关注的东西很多:一个是代码优化,一个是代码可读性。
|
||||
|
||||
就拿 SUPERGUILDS 来说,它有 7000 多行。我所有的数据读取和存储都是通过方法完成,单一个数据写入方法我就使用了 100 多次,(也就是以上的代码)。如果我们把它都像上面一样全部展开,我的脚本将立即增加 600+ 行。但是我们在写脚本的时候真正需要的是这些么? 不,我们需要的是效果,是功能,不是数据处理的流程。
|
||||
就拿 SUPERGUILDS 来说,它有 7000 多行。我所有的数据读取和存储都是通过方法完成,单一个数据写入方法我就使用了 100 多次,(也就是以上的代码)。如果我们把它都像上面一样全部展开,我的脚本将立即增加 600+ 行。但是我们在写脚本的时候真正需要的是这些么? 不,我们需要的是效果,是功能,不是数据处理的流程。
|
||||
|
||||
每次写入数据都需要白白多占 6 行,既不方便后期维护,又要因为要兼顾路径正确与否,浪费很多时间在查错上面,不划算。
|
||||
每次写入数据都需要白白多占 6 行,既不方便后期维护,又要因为要兼顾路径正确与否,浪费很多时间在查错上面,不划算。
|
||||
|
||||
Function 为你解决了这些难题,方法的注册和指令的注册有共同的地方,比如它们同样需要参数,结构一般为:
|
||||
Function 为你解决了这些难题,方法的注册和指令的注册有共同的地方,比如它们同样需要参数,结构一般为:
|
||||
|
||||
```skript
|
||||
function 方法名(参数名:参数类型, 参数名:参数类型, ...):
|
||||
@ -1070,9 +1070,9 @@ SG_writeFile("Datas.Username", "**EVER", "playerdata/%uuid of player%")
|
||||
|
||||
**使用**方法的时候请勿画蛇添足在前面另加 "function"。
|
||||
|
||||
通过这样的方法我们大大减少了代码量,提高了开发效率。你以为 Function 就结束了?
|
||||
通过这样的方法我们大大减少了代码量,提高了开发效率。你以为 Function 就结束了?
|
||||
|
||||
其实不然,作为方法,很多的时候它并没有 "操作" 功能,更多的是 "整理/查找/判断" 功能。
|
||||
其实不然,作为方法,很多的时候它并没有 "操作" 功能,更多的是 "整理/查找/判断" 功能。
|
||||
|
||||
上面我提到了使用 Function 写入了数据 那么有写入肯定需要读取 我们又该如何利用 Function 来缩短我们读取的代码呢?
|
||||
|
||||
@ -1086,19 +1086,19 @@ function 方法名(参数名:参数类型, 参数名:参数类型, ...) :: 输
|
||||
return 返回值
|
||||
```
|
||||
|
||||
与我们之前提到的写入不同,此时在方法的第一行的末尾我们新增了 "输出参数类型"。
|
||||
与我们之前提到的写入不同,此时在方法的第一行的末尾我们新增了 "输出参数类型"。
|
||||
|
||||
什么是输出? 就是代码执行完,我们会得到一个值,而输出即返回这个值。
|
||||
什么是输出? 就是代码执行完,我们会得到一个值,而输出即返回这个值。
|
||||
|
||||
什么是参数类型?这里举一个例子,我们知道 1+1=2,这是因为 1 是一个数字,2 也是一个数字,所以才有数字+数字=数字。
|
||||
什么是参数类型?这里举一个例子,我们知道 1+1=2,这是因为 1 是一个数字,2 也是一个数字,所以才有数字+数字=数字。
|
||||
|
||||
那“①+一”又等于什么呢? 在你的思维中,很可能会认为它们仍然是数字,你会觉得答案还是 2。
|
||||
那“①+一”又等于什么呢? 在你的思维中,很可能会认为它们仍然是数字,你会觉得答案还是 2。
|
||||
|
||||
但是执行我们代码的是计算机,并不是“我们”。在大部分情况下,计算机所能识别的数字,只有阿拉伯数字 "1,2,3..."
|
||||
但是执行我们代码的是计算机,并不是“我们”。在大部分情况下,计算机所能识别的数字,只有阿拉伯数字 "1,2,3..."
|
||||
|
||||
而对于 "①,一...",计算机只能识别它们中的一些字符,并不能利用这些字符进行加减运算。如果有个人突然问你一句水 + 苹果 = ? 你或许也没有一个准确的答案。
|
||||
而对于 "①,一...",计算机只能识别它们中的一些字符,并不能利用这些字符进行加减运算。如果有个人突然问你一句水 + 苹果 = ? 你或许也没有一个准确的答案。
|
||||
|
||||
计算机更是这样。所以这时候就需要参数类型来规范我们运算中的这些值,以下是一份示例。
|
||||
计算机更是这样。所以这时候就需要参数类型来规范我们运算中的这些值,以下是一份示例。
|
||||
|
||||
```skript
|
||||
function SI_isSlotAvaliable(s: integer, z: integer) :: boolean:
|
||||
@ -1109,13 +1109,13 @@ function SI_isSlotAvaliable(s: integer, z: integer) :: boolean:
|
||||
|
||||
```
|
||||
|
||||
通过第一类 Function 的学习我们知道,这个方法可以放入两个参数,最终会返回一个参数类型为 boolean("布尔") 的值 即 "false/true"。
|
||||
通过第一类 Function 的学习我们知道,这个方法可以放入两个参数,最终会返回一个参数类型为 boolean("布尔") 的值 即 "false/true"。
|
||||
|
||||
那么实际操作中我们就可以通过这样一段代码,判断给定的数值是否满足条件。满足将返回 "true" ,不满足将返回 "false"。
|
||||
那么实际操作中我们就可以通过这样一段代码,判断给定的数值是否满足条件。满足将返回 "true" ,不满足将返回 "false"。
|
||||
|
||||
切记,对于 Skript,如果代码已经成功获得的最终值,那么方法代码将立即终止,也就是说,从返回成功的一行开始,后面所有代码将不再执行。
|
||||
切记,对于 Skript,如果代码已经成功获得的最终值,那么方法代码将立即终止,也就是说,从返回成功的一行开始,后面所有代码将不再执行。
|
||||
|
||||
到此,所有基础教程已结束,谢谢大家赏脸看完。全文 11111 字,都是自己的一些干货,点个收藏,给点人气便是对我最大的支持。
|
||||
到此,所有基础教程已结束,谢谢大家赏脸看完。全文 11111 字,都是自己的一些干货,点个收藏,给点人气便是对我最大的支持。
|
||||
|
||||
请支持原作者 [TUCAOEVER](https://github.com/TUCAOEVER)。
|
||||
|
||||
@ -1123,5 +1123,5 @@ function SI_isSlotAvaliable(s: integer, z: integer) :: boolean:
|
||||
|
||||
1. 在部分地方加上了注释。
|
||||
2. 改动了已经失效的原文档链接。
|
||||
3. 对整篇文章进行了重格式化,使之更符合现代汉语语法和 Markdown 语法,一定程度上增强了可读性。
|
||||
4. 统一了文章中出现的部分译名,如 `command`,统一使用 `指令` 来指代。
|
||||
3. 对整篇文章进行了重格式化,使之更符合现代汉语语法和 Markdown 语法,一定程度上增强了可读性。
|
||||
4. 统一了文章中出现的部分译名,如 `command`,统一使用 `指令` 来指代。
|
||||
|
@ -8,7 +8,7 @@ sidebar_position: 11
|
||||
|
||||
:::warning
|
||||
|
||||
本文档大量参考了其他作者的教程,目前属于 **不可读** 状态
|
||||
本文档大量参考了其他作者的教程,目前属于 **不可读** 状态
|
||||
|
||||
引用的内容主要来源于
|
||||
|
||||
@ -18,17 +18,17 @@ TUCAOEVER 在 mcbbs 的教程
|
||||
|
||||
:::
|
||||
|
||||
Skript 是一个脚本插件,取名来自 "script"。是一个面向 Bukkit 的编程语言,缩写为 SK。
|
||||
Skript 是一个脚本插件,取名来自 "script"。是一个面向 Bukkit 的编程语言,缩写为 SK。
|
||||
|
||||
因为其语法简单而受到很多中小型服主的青睐,很多人多多少少对这块有一些了解,
|
||||
因为其语法简单而受到很多中小型服主的青睐,很多人多多少少对这块有一些了解,
|
||||
|
||||
但是毕竟受众人群小,很多时候也会出现想学却无从下手,有问题却无处可问的尴尬境地。
|
||||
但是毕竟受众人群小,很多时候也会出现想学却无从下手,有问题却无处可问的尴尬境地。
|
||||
|
||||
## 特点
|
||||
|
||||
### 简单易上手
|
||||
|
||||
举一个简单的例子,为了实现玩家每次进入服务器就给有 "xxx" 权限的玩家 64 钻石的功能。
|
||||
举一个简单的例子,为了实现玩家每次进入服务器就给有 "xxx" 权限的玩家 64 钻石的功能。
|
||||
|
||||
使用 Java 时的代码:
|
||||
|
||||
@ -53,17 +53,17 @@ on join:
|
||||
give 64 diamond to player // 给予钻石
|
||||
```
|
||||
|
||||
在大多数情况下, Skript 不会在意大小写、定冠词 "the",只需要符合英语语法和基本的缩进。
|
||||
在大多数情况下, Skript 不会在意大小写、定冠词 "the",只需要符合英语语法和基本的缩进。
|
||||
|
||||
即使使用了错误的语法,报错时也基本会提示具体错误类型。
|
||||
即使使用了错误的语法,报错时也基本会提示具体错误类型。
|
||||
|
||||
### 拓展插件多
|
||||
|
||||
使用 Skript 时如果遇到 Skript 不包含的语法,可以使用其他拓展插件如 [Skbee](https://github.com/ShaneBeee/SkBee)、[Skript-reflect](https://github.com/SkriptLang/skript-reflect) 等插件拓展。
|
||||
使用 Skript 时如果遇到 Skript 不包含的语法,可以使用其他拓展插件如 [Skbee](https://github.com/ShaneBeee/SkBee)、[Skript-reflect](https://github.com/SkriptLang/skript-reflect) 等插件拓展。
|
||||
|
||||
### 性能较低
|
||||
|
||||
相较使用 Java 编写的插件,进行相同的操作时, Skript 的性能会略低于 Java。
|
||||
相较使用 Java 编写的插件,进行相同的操作时, Skript 的性能会略低于 Java。
|
||||
|
||||
但大多数情况下性能和代码本身的质量有巨大的关系。代码质量差对于性能的影响远大于使用 Skript 对性能的影响。
|
||||
|
||||
|
@ -9,34 +9,34 @@ sidebar_position: 4
|
||||
|
||||
## 什么是 YAML?
|
||||
|
||||
> YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。
|
||||
> YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。
|
||||
>
|
||||
> YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表、标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、调试内容、文件大纲(例如:许多电子邮件标题格式和 YAML 非常接近)。
|
||||
> YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表、标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、调试内容、文件大纲(例如:许多电子邮件标题格式和 YAML 非常接近)。
|
||||
>
|
||||
> YAML 的配置文件后缀为 *.yml* 或者 *.yaml* ,如:`config.yml` 。
|
||||
> YAML 的配置文件后缀为 *.yml* 或者 *.yaml* ,如:`config.yml` 。
|
||||
|
||||
Minecraft 服务器用到的 YAML 语法都是非常非常基础的,只要了解一下就可以。(甚至看看配置文件就明白了)
|
||||
Minecraft 服务器用到的 YAML 语法都是非常非常基础的,只要了解一下就可以。(甚至看看配置文件就明白了)
|
||||
|
||||
|
||||
|
||||
## 概要 TL;DR
|
||||
- 大小写敏感
|
||||
- 使用缩进表示层级关系
|
||||
- 缩进不允许使用 **TAB** ,只允许**空格**
|
||||
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
|
||||
- 缩进不允许使用 **TAB** ,只允许**空格**
|
||||
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
|
||||
- `#` 表示注释
|
||||
- 冒号后面有空格
|
||||
- 字符串要加单引号或双引号
|
||||
|
||||
:::info
|
||||
在不涉及转义字符 (形如 \n, \r) 时,单双引号等价。
|
||||
在不涉及转义字符 (形如 \n, \r) 时,单双引号等价。
|
||||
|
||||
在部分特殊情况,字符串不需要加引号,仍然建议使用引号来减小歧义。
|
||||
在部分特殊情况,字符串不需要加引号,仍然建议使用引号来减小歧义。
|
||||
:::
|
||||
|
||||
:::info
|
||||
|
||||
有可能你的文本编辑器用的缩进不是**空格**,这会导致插件报错。
|
||||
有可能你的文本编辑器用的缩进不是**空格**,这会导致插件报错。
|
||||
|
||||
自己在文本编辑器找找或者浏览器搜下怎么改。
|
||||
|
||||
|
@ -64,7 +64,7 @@ test:
|
||||
|
||||
### 保留换行
|
||||
|
||||
使用 `|` 来表示该语法,每行的缩进和行尾空白都会被去掉,而额外的缩进会被保留。
|
||||
使用 `|` 来表示该语法,每行的缩进和行尾空白都会被去掉,而额外的缩进会被保留。
|
||||
```YAML
|
||||
lines: |
|
||||
我是第一行
|
||||
@ -73,14 +73,14 @@ lines: |
|
||||
我是第四行
|
||||
我是第五行
|
||||
```
|
||||
使用 `|+` 来表示该语法,保留行尾及字符末尾的换行符。
|
||||
使用 `|+` 来表示该语法,保留行尾及字符末尾的换行符。
|
||||
```YAML
|
||||
lines: |+
|
||||
我是第一行
|
||||
我是第二行
|
||||
```
|
||||
|
||||
使用 `|-` 来表示该语法,保留行尾换行符,但不保留字符末尾的换行符。
|
||||
使用 `|-` 来表示该语法,保留行尾换行符,但不保留字符末尾的换行符。
|
||||
```YAML
|
||||
lines: |-
|
||||
我是第一行
|
||||
@ -89,7 +89,7 @@ lines: |-
|
||||
|
||||
### 折叠换行
|
||||
|
||||
使用 `>` 来表示该语法,只有空白行才会被识别为换行,原来的换行符都会被转换成空格。
|
||||
使用 `>` 来表示该语法,只有空白行才会被识别为换行,原来的换行符都会被转换成空格。
|
||||
```YAML
|
||||
lines: >
|
||||
我是第一行
|
||||
@ -100,14 +100,14 @@ lines: >
|
||||
这么巧我也是第二行
|
||||
```
|
||||
|
||||
使用 `>+` 来表示该语法,将行尾换行符替换成空格,保留字符末尾的换行符。
|
||||
使用 `>+` 来表示该语法,将行尾换行符替换成空格,保留字符末尾的换行符。
|
||||
```YAML
|
||||
lines: >+
|
||||
我是第一行
|
||||
我也是第一行
|
||||
```
|
||||
|
||||
使用 `>-` 来表示该语法,将行尾换行符替换成空格,不保留字符末尾的换行符。
|
||||
使用 `>-` 来表示该语法,将行尾换行符替换成空格,不保留字符末尾的换行符。
|
||||
```YAML
|
||||
lines: >-
|
||||
我是第一行
|
||||
|
@ -5,7 +5,7 @@ sidebar_position: 2
|
||||
|
||||
# 基础
|
||||
|
||||
假如你想更进一步,请继续阅读。
|
||||
假如你想更进一步,请继续阅读。
|
||||
|
||||
## 数据类型
|
||||
|
||||
@ -17,9 +17,9 @@ sidebar_position: 2
|
||||
比如这里 `key` 是键, `value` 是这个键的值 `: `(冒号后有个空格)被称为 `映射标记` 。
|
||||
|
||||
### 数组
|
||||
以 `-` 开头的行表示构成一个数组,数组是一组按次序排列的值。
|
||||
以 `-` 开头的行表示构成一个数组,数组是一组按次序排列的值。
|
||||
|
||||
YAML 支持多维数组,可以使用行内表示:`key: [value1, value2, ...]` 。
|
||||
YAML 支持多维数组,可以使用行内表示:`key: [value1, value2, ...]` 。
|
||||
|
||||
这个写法相当于:
|
||||
```yaml
|
||||
@ -39,10 +39,10 @@ companies:
|
||||
name: company2
|
||||
price: 500W
|
||||
```
|
||||
意思是 companies 属性是一个数组,数组中的每一个元素又由 id, name, price 三个属性构成。
|
||||
意思是 companies 属性是一个数组,数组中的每一个元素又由 id, name, price 三个属性构成。
|
||||
|
||||
### 复合结构
|
||||
数组和对象可以构成复合结构,例:
|
||||
数组和对象可以构成复合结构,例:
|
||||
|
||||
```yaml
|
||||
languages:
|
||||
@ -70,7 +70,7 @@ websites:
|
||||
```
|
||||
|
||||
### 纯量
|
||||
纯量是最基本的,不可再分的值,包括:
|
||||
纯量是最基本的,不可再分的值,包括:
|
||||
- 字符串
|
||||
- 布尔值
|
||||
- 整数
|
||||
@ -97,9 +97,9 @@ string:
|
||||
- 哈哈
|
||||
- 'Hello world' # 可以使用双引号或者单引号包裹特殊字符。
|
||||
- newline
|
||||
newline2 # 字符串可以拆成多行,每一行会被转化成一个空格。
|
||||
newline2 # 字符串可以拆成多行,每一行会被转化成一个空格。
|
||||
date:
|
||||
- 2018-02-17 # 日期必须使用 ISO 8601 格式,即 yyyy-MM-dd 。
|
||||
- 2018-02-17 # 日期必须使用 ISO 8601 格式,即 yyyy-MM-dd 。
|
||||
datetime:
|
||||
- 2018-02-17T15:02:31+08:00 # 时间和日期之间使用 T 连接, 最后使用 + 代表时区。
|
||||
```
|
||||
@ -123,11 +123,11 @@ guide:
|
||||
|
||||
我们称 `options` 和 `guide` 在同一缩进下。
|
||||
|
||||
`enable` 和 `check` 在同一缩进下,同样的,`enable` 和 `drop-block` 也在同一缩进下,以此类推。
|
||||
`enable` 和 `check` 在同一缩进下,同样的,`enable` 和 `drop-block` 也在同一缩进下,以此类推。
|
||||
|
||||
而 `options.enable` (指 options 缩进下的 enable 键) 和 `options.other.money` 以及 `guide.show` 则不在同一缩进下。
|
||||
|
||||
在同一缩进下不允许出现相同的键,如:
|
||||
在同一缩进下不允许出现相同的键,如:
|
||||
|
||||
```
|
||||
options:
|
||||
@ -136,9 +136,9 @@ options:
|
||||
check: false
|
||||
```
|
||||
|
||||
如果你的文本编辑器支持 YAML 语法,那么它应该会标红提示你语法错误,这样的配置插件读取也会报错。
|
||||
如果你的文本编辑器支持 YAML 语法,那么它应该会标红提示你语法错误,这样的配置插件读取也会报错。
|
||||
|
||||
不在同一缩进下则可以出现相同的键,如:
|
||||
不在同一缩进下则可以出现相同的键,如:
|
||||
|
||||
```
|
||||
options:
|
||||
|
@ -6,9 +6,9 @@ sidebar_position: 6
|
||||
|
||||
# 进阶教程
|
||||
|
||||
这一部分并不适合新手阅读,主要是给有一定开服经验或读完了本文档的其他内容的人。
|
||||
这一部分并不适合新手阅读,主要是给有一定开服经验或读完了本文档的其他内容的人。
|
||||
|
||||
可以将本章视为是对之前的补充部分,如果你能完全理解这一部分的内容,那么恭喜你,已经完全摆脱了笨蛋的称号!
|
||||
可以将本章视为是对之前的补充部分,如果你能完全理解这一部分的内容,那么恭喜你,已经完全摆脱了笨蛋的称号!
|
||||
|
||||
import DocCardList from '@theme/DocCardList';
|
||||
|
||||
|
@ -10,9 +10,9 @@ sidebar_position: 12
|
||||
|
||||
:::info
|
||||
|
||||
一般而言,已经存在的机器人方案实现起来相对容易且功能多。
|
||||
一般而言,已经存在的机器人方案实现起来相对容易且功能多。
|
||||
|
||||
如果你不是专业开发者,非常推荐直接使用已存在的机器人插件实现。
|
||||
如果你不是专业开发者,非常推荐直接使用已存在的机器人插件实现。
|
||||
|
||||
:::-->
|
||||
目前比较推荐的方案:
|
||||
@ -23,30 +23,30 @@ sidebar_position: 12
|
||||
|
||||
:::warning
|
||||
|
||||
EasyBot 的更新程序貌似存在漏洞,如果突然终止或是因为某些意料之外的原因,
|
||||
EasyBot 的更新程序貌似存在漏洞,如果突然终止或是因为某些意料之外的原因,
|
||||
|
||||
在从旧版本更新到新版本后,浏览器编辑器的消息同步有概率无法显示,这种情况请删除 EasyBot *主程序* (不是插件!)的 *所有* 文件后重新安装
|
||||
在从旧版本更新到新版本后,浏览器编辑器的消息同步有概率无法显示,这种情况请删除 EasyBot *主程序* (不是插件!)的 *所有* 文件后重新安装
|
||||
|
||||
(记得保留配置)
|
||||
(记得保留配置)
|
||||
|
||||
:::
|
||||
|
||||
<!--[EasyBot 实现账号绑定教程](https://www.yuque.com/miuxue/cgyipv/vng1gtu9wk71xtg6)
|
||||
|
||||
EasyBot 可简单地通过自定义命令实现查看服务器TPS,玩家数据等。 [EasyBot 自定义命令教程](https://www.yuque.com/miuxue/cgyipv/vng1gtu9wk71xtg6)-->
|
||||
EasyBot 可简单地通过自定义命令实现查看服务器TPS,玩家数据等。 [EasyBot 自定义命令教程](https://www.yuque.com/miuxue/cgyipv/vng1gtu9wk71xtg6)-->
|
||||
1. [账号绑定](https://www.yuque.com/miuxue/cgyipv/vng1gtu9wk71xtg6) - 介绍
|
||||
|
||||
2. [自定义命令教程](https://www.yuque.com/miuxue/cgyipv/vng1gtu9wk71xtg6) - 简单地通过自定义命令实现查看服务器 TPS,玩家数据等。
|
||||
2. [自定义命令教程](https://www.yuque.com/miuxue/cgyipv/vng1gtu9wk71xtg6) - 简单地通过自定义命令实现查看服务器 TPS,玩家数据等。
|
||||
|
||||
EasyBot 开发者目前没有撰写关于消息同步的教程,但由于网页编辑器而非配置非常容易上手,在此不做赘述。
|
||||
EasyBot 开发者目前没有撰写关于消息同步的教程,但由于网页编辑器而非配置非常容易上手,在此不做赘述。
|
||||
|
||||
:::warning
|
||||
|
||||
不推荐使用 EasyBot 的群组服务器内消息同步功能,使用 TrChat 等插件可以更好的实现它们。
|
||||
不推荐使用 EasyBot 的群组服务器内消息同步功能,使用 TrChat 等插件可以更好的实现它们。
|
||||
|
||||
:::
|
||||
|
||||
优点:配置简单,网页编辑器方便新手,轻量。
|
||||
优点:配置简单,网页编辑器方便新手,轻量。
|
||||
|
||||
缺点:功能上不如 XinxinBot 丰富。
|
||||
|
||||
@ -58,16 +58,16 @@ EasyBot 开发者目前没有撰写关于消息同步的教程,但由于网页
|
||||
|
||||
[消息同步](http://wiki.mcxin.cn/zh/%E6%96%B0%E9%91%AB%E6%9C%BA%E5%99%A8%E4%BA%BA%E9%99%84%E5%B1%9E%E6%95%99%E7%A8%8B/XinxinChatSync)
|
||||
|
||||
优点:使用附属插件,功能更多。
|
||||
优点:使用附属插件,功能更多。
|
||||
|
||||
缺点:配置稍复杂。
|
||||
|
||||
<!--### 其他方案的注意事项
|
||||
|
||||
如果某个方案基于 MiraiMC,请参见下文。-->
|
||||
如果某个方案基于 MiraiMC,请参见下文。-->
|
||||
|
||||
### [MiraiMC](https://github.com/DreamVoid/MiraiMC)
|
||||
|
||||
MiraiMC 是一款能够作为服务器插件加载的机器人框架。它非常适合仅有一个服务端,尤其是使用面板开服的 **小型服务器** 使用。MiraiMC 的大多数排障方法和特性都与 Mirai 相同,遇到问题时你可以参考 [Mirai](../../advance/bot/framework#mirai) 框架的使用文档。<!--[点击跳转](https://github.com/DreamVoid/MiraiMC)-->
|
||||
MiraiMC 是一款能够作为服务器插件加载的机器人框架。它非常适合仅有一个服务端,尤其是使用面板开服的 **小型服务器** 使用。MiraiMC 的大多数排障方法和特性都与 Mirai 相同,遇到问题时你可以参考 [Mirai](../../advance/bot/framework#mirai) 框架的使用文档。<!--[点击跳转](https://github.com/DreamVoid/MiraiMC)-->
|
||||
|
||||
MiraiMC 已添加了 [对 Overflow 的支持附属插件](https://github.com/DreamVoid/MiraiMC/issues/510),因此你可以使用 Overflow 协助登录。这也帮助了许多停更的基于 MiraiMC 的老机器人插件。
|
||||
MiraiMC 已添加了 [对 Overflow 的支持附属插件](https://github.com/DreamVoid/MiraiMC/issues/510),因此你可以使用 Overflow 协助登录。这也帮助了许多停更的基于 MiraiMC 的老机器人插件。
|
||||
|
@ -5,15 +5,15 @@ sidebar_position: 10
|
||||
|
||||
# 使用中文名进入服务器
|
||||
|
||||
MineCraft 自 `1.18` 版本后,默认不再允许使用 _除英文字母、数字、下划线以外的_ 字符作为游戏名。
|
||||
MineCraft 自 `1.18` 版本后,默认不再允许使用 _除英文字母、数字、下划线以外的_ 字符作为游戏名。
|
||||
而 [CnUsername](https://github.com/0XPYEX0/CnUsername) 被设计用于解决此痛点。
|
||||
|
||||
## 安装途径
|
||||
|
||||
| 方式 | 优点 | 缺点 |
|
||||
|----------------|----------------|------------------------|
|
||||
| `JavaAgent` 加载 | 操作权限高,可以完成所有操作 | 需要自定义命令行,部分面板服可能不支持 |
|
||||
| 作为`插件`加载 | 灵活,即装即用 | 部分操作无法实现,例如无法修改原版命令选择器 |
|
||||
| `JavaAgent` 加载 | 操作权限高,可以完成所有操作 | 需要自定义命令行,部分面板服可能不支持 |
|
||||
| 作为`插件`加载 | 灵活,即装即用 | 部分操作无法实现,例如无法修改原版命令选择器 |
|
||||
|
||||
:::tip
|
||||
|
||||
@ -21,8 +21,8 @@ MineCraft 自 `1.18` 版本后,默认不再允许使用 _除英文字母、数
|
||||
|
||||
:::
|
||||
|
||||
正确安装后,在启动器中填入中文名字正常启动,即可开始享受游戏
|
||||
正确安装后,在启动器中填入中文名字正常启动,即可开始享受游戏
|
||||
|
||||
CnUsername 与某些昵称插件不同: CnUsername 是真正实现中文名,而非披着中文名的幌子,里子还是英文名的“游戏昵称”
|
||||
CnUsername 与某些昵称插件不同: CnUsername 是真正实现中文名,而非披着中文名的幌子,里子还是英文名的“游戏昵称”
|
||||
|
||||
后续教程及下载请查阅[Github](https://github.com/0XPYEX0/CnUsername)
|
@ -4,9 +4,9 @@ sidebar_position: 6
|
||||
|
||||
# Command.yml 介绍
|
||||
|
||||
commands.yml 是一个配置文件,用于为 CraftBukkit 服务器定义自定义命令和命令方块覆盖。
|
||||
commands.yml 是一个配置文件,用于为 CraftBukkit 服务器定义自定义命令和命令方块覆盖。
|
||||
|
||||
命令覆盖系统可强制服务器对特定命令方块使用 Mojang 提供的命令,而别名系统允许管理员定义自定义命令并强制使用特定版本的命令。
|
||||
命令覆盖系统可强制服务器对特定命令方块使用 Mojang 提供的命令,而别名系统允许管理员定义自定义命令并强制使用特定版本的命令。
|
||||
|
||||
# 命令覆盖系统
|
||||
|
||||
@ -14,17 +14,17 @@ Bukkit 在默认情况下提供了一个命令覆盖系统。
|
||||
|
||||
### 优先级:
|
||||
|
||||
Aliases(自定义命令)> Plugin Commands(插件命令)> Bukkit Commands(Bukkit 命令)> Mojang Commands(Mojang 命令)。
|
||||
Aliases(自定义命令)> Plugin Commands(插件命令)> Bukkit Commands(Bukkit 命令)> Mojang Commands(Mojang 命令)。
|
||||
|
||||
Aliases(定义命令):具有最高优先级,会覆盖所有命令。这意味着如果存在与某个命令匹配的别名,服务器将优先执行该别名所定义的命令。
|
||||
Aliases(定义命令):具有最高优先级,会覆盖所有命令。这意味着如果存在与某个命令匹配的别名,服务器将优先执行该别名所定义的命令。
|
||||
|
||||
Plugin Commands(插件命令):如果没有找到匹配的命令,服务器会查找匹配的插件命令并使用它。
|
||||
Plugin Commands(插件命令):如果没有找到匹配的命令,服务器会查找匹配的插件命令并使用它。
|
||||
|
||||
Bukkit Commands(Bukkit 命令):如果没有找到匹配的插件命令,服务器将使用 Bukkit 提供的内置命令。
|
||||
Bukkit Commands(Bukkit 命令):如果没有找到匹配的插件命令,服务器将使用 Bukkit 提供的内置命令。
|
||||
|
||||
Mojang Commands(Mojang 命令):如果没有找到匹配的 Bukkit 命令,作为最后一个回退选项,服务器将使用 Mojang 提供的内置命令。
|
||||
Mojang Commands(Mojang 命令):如果没有找到匹配的 Bukkit 命令,作为最后一个回退选项,服务器将使用 Mojang 提供的内置命令。
|
||||
|
||||
每个 fallback 都有相应的权限控制,除插件命令外,Bukkit 命令的权限为 `bukkit.command.*`,Mojang 命令的权限为 `minecraft.command.*`
|
||||
每个 fallback 都有相应的权限控制,除插件命令外,Bukkit 命令的权限为 `bukkit.command.*`,Mojang 命令的权限为 `minecraft.command.*`
|
||||
|
||||
# Command.yml 内容
|
||||
|
||||
@ -39,11 +39,11 @@ aliases:
|
||||
### 关于 command-block-overrides 部分
|
||||
|
||||
表明当前没有对命令方块的覆盖进行设置。
|
||||
这个部分的作用是控制命令方块覆盖功能。在 Bukkit 的历史中,曾提供过一些与 Minecraft 原本不同版本的命令。通过这个设置,可以强制服务器专门为命令方块使用 Mojang 提供的版本的命令 (MC 原版命令)。而在命令方块之外使用的命令,将按照正常情况使用 Bukkit(或插件)版本的命令。
|
||||
这个部分的作用是控制命令方块覆盖功能。在 Bukkit 的历史中,曾提供过一些与 Minecraft 原本不同版本的命令。通过这个设置,可以强制服务器专门为命令方块使用 Mojang 提供的版本的命令 (MC 原版命令)。而在命令方块之外使用的命令,将按照正常情况使用 Bukkit(或插件)版本的命令。
|
||||
|
||||
**命令覆盖:**
|
||||
|
||||
当你需要命令方块执行 Mojang 命令 (MC 原版命令) 而不是被插件覆盖的命令覆盖时,您可以将这个命令加入到 `command-block-overrides` 中,以下使用 give 命令举例 :
|
||||
当你需要命令方块执行 Mojang 命令 (MC 原版命令) 而不是被插件覆盖的命令覆盖时,您可以将这个命令加入到 `command-block-overrides` 中,以下使用 give 命令举例 :
|
||||
|
||||
```
|
||||
command-block-overrides:
|
||||
@ -52,7 +52,7 @@ command-block-overrides:
|
||||
|
||||
当在 Essentitals 插件加载时在命令方块中的实现效果将会是 `minecraft:give` 而不是 `essentials:give`
|
||||
|
||||
当你需要命令方块执行大量 Mojang 命令 (MC 原版命令) 而不被插件等覆盖时,您可以将这个命令加入到 `command-block-overrides` 中,以下指令会覆盖命令方块中所有的命令使用 MC 原版命令 :
|
||||
当你需要命令方块执行大量 Mojang 命令 (MC 原版命令) 而不被插件等覆盖时,您可以将这个命令加入到 `command-block-overrides` 中,以下指令会覆盖命令方块中所有的命令使用 MC 原版命令 :
|
||||
|
||||
```
|
||||
command-block-overrides:
|
||||
@ -61,31 +61,31 @@ command-block-overrides:
|
||||
|
||||
### 关于 aliases 部分
|
||||
|
||||
在这个配置中,定义了一个自定义命令为 `icanhasbukkit` 。
|
||||
对应的命令为"version $1-",这意味着当玩家输入 `icanhasbukkit` 这个命令时,实际上会执行 `version $1-` 这个命令
|
||||
在这个配置中,定义了一个自定义命令为 `icanhasbukkit` 。
|
||||
对应的命令为"version $1-",这意味着当玩家输入 `icanhasbukkit` 这个命令时,实际上会执行 `version $1-` 这个命令
|
||||
|
||||
**自定义命令:**
|
||||
|
||||
这一部分允许您为服务器上的命令定义自定义命令。从本质上讲,自定义命令允许您创建可以同时执行多个功能的自定义命令。这是一个强大的工具,允许您为服务器玩家定义更容易记住的命令。
|
||||
这一部分允许您为服务器上的命令定义自定义命令。从本质上讲,自定义命令允许您创建可以同时执行多个功能的自定义命令。这是一个强大的工具,允许您为服务器玩家定义更容易记住的命令。
|
||||
|
||||
| **修饰语** | **描述** | **例子** |
|
||||
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- |
|
||||
| `$<argument number>` | 在一个命令结构中,当存在多个参数输入时,`$<argument number>` 可以根据给定的参数编号来获取对应的输入值。例如在 `say $1 $2 $3` 这个命令中,`$1`代表第一个输入的参数,`$2` 代表第二个输入的参数,`$3` 代表第三个输入的参数。如果执行该命令时输入 `say word1 word2 word3` ,那么`$1` 将被替换为 `word1`,`$2`将被替换为 `word2`,`$3` 将被替换为 `word3`。 | `say $1 $2 $3` |
|
||||
| `$<argument number>-` | 在命令执行过程中,此表达式可以获取从指定参数位置开始及之后的所有参数值。例如在 `say $1-` 中,如果输入`say phrase1 phrase2 phrase3`,那么 `$1-` 将代表 `phrase1 phrase2 phrase3` 这个完整的参数序列。 | ` say $1-` |
|
||||
| `$$<argument number>` | 在命令设计中,这种形式强调特定位置的参数的必要性。例如 `say $1`,如果执行命令时没有为第一个位置提供参数值,那么该命令将不会被触发执行。只有当有输入值对应到第一个位置时,例如`say something`,这里 `$1` 将被替换为 `something`,命令才会正常执行。 | `say $$1` |
|
||||
| `$$<argument number>-` | 与前面的解释类似,但涉及到一个参数范围。例如在 `say $1-` 中,如果输入 `say onlyword`,由于只有一个参数且该参数对应第一个位置,但是这里要求起始参数必须有值且后面还有其他参数才满足条件,所以这个命令不会执行。而如果输入 `say start second third`,从第一个参数 `start` 开始到后面的参数都有值,满足条件,此时 `$1-` 将代表 `start second third` 这个参数序列。 | `say $$1-` |
|
||||
| \ | 在一些命令语法中,某些字符被赋予了特定的功能含义,比如 `$` 通常用于参数引用。但当我们希望这个字符不作为特殊功能字符,而仅仅作为普通字符出现时,就可以使用 `\` 进行转义。例如在`say $100` 中,`$` 使得 `““` 失去了参数引用的特殊含义,而仅作为字符出现 | `say \$100` |
|
||||
| `$<argument number>` | 在一个命令结构中,当存在多个参数输入时,`$<argument number>` 可以根据给定的参数编号来获取对应的输入值。例如在 `say $1 $2 $3` 这个命令中,`$1`代表第一个输入的参数,`$2` 代表第二个输入的参数,`$3` 代表第三个输入的参数。如果执行该命令时输入 `say word1 word2 word3` ,那么`$1` 将被替换为 `word1`,`$2`将被替换为 `word2`,`$3` 将被替换为 `word3`。 | `say $1 $2 $3` |
|
||||
| `$<argument number>-` | 在命令执行过程中,此表达式可以获取从指定参数位置开始及之后的所有参数值。例如在 `say $1-` 中,如果输入`say phrase1 phrase2 phrase3`,那么 `$1-` 将代表 `phrase1 phrase2 phrase3` 这个完整的参数序列。 | ` say $1-` |
|
||||
| `$$<argument number>` | 在命令设计中,这种形式强调特定位置的参数的必要性。例如 `say $1`,如果执行命令时没有为第一个位置提供参数值,那么该命令将不会被触发执行。只有当有输入值对应到第一个位置时,例如`say something`,这里 `$1` 将被替换为 `something`,命令才会正常执行。 | `say $$1` |
|
||||
| `$$<argument number>-` | 与前面的解释类似,但涉及到一个参数范围。例如在 `say $1-` 中,如果输入 `say onlyword`,由于只有一个参数且该参数对应第一个位置,但是这里要求起始参数必须有值且后面还有其他参数才满足条件,所以这个命令不会执行。而如果输入 `say start second third`,从第一个参数 `start` 开始到后面的参数都有值,满足条件,此时 `$1-` 将代表 `start second third` 这个参数序列。 | `say $$1-` |
|
||||
| \ | 在一些命令语法中,某些字符被赋予了特定的功能含义,比如 `$` 通常用于参数引用。但当我们希望这个字符不作为特殊功能字符,而仅仅作为普通字符出现时,就可以使用 `\` 进行转义。例如在`say $100` 中,`$` 使得 `““` 失去了参数引用的特殊含义,而仅作为字符出现 | `say \$100` |
|
||||
|
||||
| **场景** | **描述** | **命令用法** | **示例配置** |
|
||||
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
|
||||
| 添加运行 /version 命令的替代方法 | 通过注册一个名为 `icanhasbukkit` 的自定义命令,在使用该自定义命令时会执行 version 命令,从而提供了一种运行 /version 命令的替代方式。 | 输入 `/icanhasbukkit` | aliases:<br/> icanhasbukkit:<br/> \- "version" |
|
||||
| 删除命令 | 注册一个名为 `summon` 的自定义命令并将其映射到空列表,以此告诉服务器取消注册该命令,防止其存在和发挥作用。 | 无特定命令输入示例,因为目的是删除命令 | aliases:<br/> summon:<br/> \- \[\] |
|
||||
| 重命名 /version 命令 | 注册一个名为 `icanhasversion` 的自定义命令来执行 version 命令,同时创建一个名为 “version” 的自定义命令并映射到空列表以删除原有的 /version 命令。 | 输入 `/icanhasversion` | aliases:<br/> icanhasversion:<br/> \- "bukkit:version"<br/> version:<br/> \- \[\] |
|
||||
| 需要参数 | 创建一个名为 `givedirt` 的自定义命令,该自定义命令需要提供一个参数(这里是玩家的名字)才能成功运行。 | 输入 `/givedirt <player>`,其中 `<player>` 为玩家名称 | aliases:<br/> givedirt:<br/> \- "give $$1 minecraft:dirt` |
|
||||
| 运行多个命令 | 创建一个名为 `givedirtmsg` 的自定义命令,该自定义命令会在成功运行前执行两个需要参数的命令。 | 输入 `/givedirtmsg <player>`,其中 `<player>` 为玩家名称 | aliases:<br/> givedirtmsg:<br/> \- "give $$1 minecraft:dirt"<br/> \- "say Gave dirt to $$1" |
|
||||
| 使用插件提供的命令 | 通过自定义命令覆盖内置的 `/time` 命令,使用插件 ScrapBukkit 提供的版本。 | 输入 `/time <set\|add> <value>` | aliases:<br/> time:<br/> \- "scrapbukkit:time $1\-" |
|
||||
| 使用 Mojang 提供的命令 | 通过自定义命令覆盖内置的 `/time` 命令,使用 Mojang 提供的版本。 | 输入 `/time <set\|add> <value>` | aliases:<br/> time:<br/> \- "minecraft:time $1\-" |
|
||||
| 使用 Bukkit 提供的命令 | 通过自定义命令覆盖内置的 `/time` 命令,使用 Bukkit 提供的版本。 | 输入 `/time <set\|add> <value>` | aliases:<br/> time:<br/> \- "bukkit:time $1\-" |
|
||||
| 接受所有参数 | 创建一个名为 `broadcast` 的自定义命令,该自定义命令将执行 `say` 命令并接受传递给它的任何参数。 | 输入 `/broadcast <message>`,其中 `<message>` 为要广播的消息。 | aliases:<br/> broadcast:<br/> \- "say $$1\-" |
|
||||
| 需要第一个参数,同时使第二个参数可选 | 覆盖内置的 `ban` 命令,这个自定义命令需要第一个参数(这里是玩家的名字),同时支持可选的封禁理由。当使用该自定义命令时,玩家将被封禁,并广播一条消息通知服务器上的其他人有人被封禁了。 | 输入 `/ban <player> [optional reason]`,其中 `<player>` 为玩家名称,`[optional reason]` 为可选的封禁理由 | aliases:<br/> ban:<br/> \- "bukkit:ban $$1 $2\-"<br/> \- "say Banned $$1\. Reason: $2\-" |
|
||||
| 在命令中使用$符号 | 创建一个名为 `dollar` 的自定义命令,该自定义命令会向服务器广播消息 “That will be 200,thanks!'' 由于字符用于表示参数,所以在创建自定义命令时需要用反斜杠(\\)对其进行转义。 | 输入 `/dollar` | aliases:<br/> dollar:<br/> \- "say That will be \\$200, thanks\!" |
|
||||
| 添加运行 /version 命令的替代方法 | 通过注册一个名为 `icanhasbukkit` 的自定义命令,在使用该自定义命令时会执行 version 命令,从而提供了一种运行 /version 命令的替代方式。 | 输入 `/icanhasbukkit` | aliases:<br/> icanhasbukkit:<br/> \- "version" |
|
||||
| 删除命令 | 注册一个名为 `summon` 的自定义命令并将其映射到空列表,以此告诉服务器取消注册该命令,防止其存在和发挥作用。 | 无特定命令输入示例,因为目的是删除命令 | aliases:<br/> summon:<br/> \- \[\] |
|
||||
| 重命名 /version 命令 | 注册一个名为 `icanhasversion` 的自定义命令来执行 version 命令,同时创建一个名为 “version” 的自定义命令并映射到空列表以删除原有的 /version 命令。 | 输入 `/icanhasversion` | aliases:<br/> icanhasversion:<br/> \- "bukkit:version"<br/> version:<br/> \- \[\] |
|
||||
| 需要参数 | 创建一个名为 `givedirt` 的自定义命令,该自定义命令需要提供一个参数(这里是玩家的名字)才能成功运行。 | 输入 `/givedirt <player>`,其中 `<player>` 为玩家名称 | aliases:<br/> givedirt:<br/> \- "give $$1 minecraft:dirt` |
|
||||
| 运行多个命令 | 创建一个名为 `givedirtmsg` 的自定义命令,该自定义命令会在成功运行前执行两个需要参数的命令。 | 输入 `/givedirtmsg <player>`,其中 `<player>` 为玩家名称 | aliases:<br/> givedirtmsg:<br/> \- "give $$1 minecraft:dirt"<br/> \- "say Gave dirt to $$1" |
|
||||
| 使用插件提供的命令 | 通过自定义命令覆盖内置的 `/time` 命令,使用插件 ScrapBukkit 提供的版本。 | 输入 `/time <set\|add> <value>` | aliases:<br/> time:<br/> \- "scrapbukkit:time $1\-" |
|
||||
| 使用 Mojang 提供的命令 | 通过自定义命令覆盖内置的 `/time` 命令,使用 Mojang 提供的版本。 | 输入 `/time <set\|add> <value>` | aliases:<br/> time:<br/> \- "minecraft:time $1\-" |
|
||||
| 使用 Bukkit 提供的命令 | 通过自定义命令覆盖内置的 `/time` 命令,使用 Bukkit 提供的版本。 | 输入 `/time <set\|add> <value>` | aliases:<br/> time:<br/> \- "bukkit:time $1\-" |
|
||||
| 接受所有参数 | 创建一个名为 `broadcast` 的自定义命令,该自定义命令将执行 `say` 命令并接受传递给它的任何参数。 | 输入 `/broadcast <message>`,其中 `<message>` 为要广播的消息。 | aliases:<br/> broadcast:<br/> \- "say $$1\-" |
|
||||
| 需要第一个参数,同时使第二个参数可选 | 覆盖内置的 `ban` 命令,这个自定义命令需要第一个参数(这里是玩家的名字),同时支持可选的封禁理由。当使用该自定义命令时,玩家将被封禁,并广播一条消息通知服务器上的其他人有人被封禁了。 | 输入 `/ban <player> [optional reason]`,其中 `<player>` 为玩家名称,`[optional reason]` 为可选的封禁理由 | aliases:<br/> ban:<br/> \- "bukkit:ban $$1 $2\-"<br/> \- "say Banned $$1\. Reason: $2\-" |
|
||||
| 在命令中使用$符号 | 创建一个名为 `dollar` 的自定义命令,该自定义命令会向服务器广播消息 “That will be 200,thanks!'' 由于字符用于表示参数,所以在创建自定义命令时需要用反斜杠(\\)对其进行转义。 | 输入 `/dollar` | aliases:<br/> dollar:<br/> \- "say That will be \\$200, thanks\!" |
|
||||
|
@ -49,7 +49,7 @@ servers:
|
||||
restricted: false
|
||||
```
|
||||
|
||||
照着把你的子服都写上去,就像这样
|
||||
照着把你的子服都写上去,就像这样
|
||||
|
||||
```yaml
|
||||
servers:
|
||||
|
@ -8,7 +8,7 @@ sidebar_position: 1
|
||||
|
||||
此篇教程适用于 BungeeCord / waterfall
|
||||
|
||||
注意,BungeeCord 算是较为古老的核心(好比后端服务器中的 Spigot)
|
||||
注意,BungeeCord 算是较为古老的核心(好比后端服务器中的 Spigot)
|
||||
|
||||
如果开高版本尽量选择 Waterfall 或 Velocity
|
||||
|
||||
|
@ -6,9 +6,9 @@ sidebar_position: 3
|
||||
# config.yml
|
||||
|
||||
```yaml
|
||||
# forgeMOD支持,如果你的服务器中有MOD服务器,请打开这个选项
|
||||
# forgeMOD支持,如果你的服务器中有MOD服务器,请打开这个选项
|
||||
forge_support: false
|
||||
# 玩家真实限制,它将限制整个服务器的玩家人数,-1为不限
|
||||
# 玩家真实限制,它将限制整个服务器的玩家人数,-1为不限
|
||||
player_limit: -1
|
||||
# BC服务器权限组 不建议用这东西而是使用bc版luckperms
|
||||
permissions:
|
||||
@ -20,26 +20,26 @@ permissions:
|
||||
- bungeecord.command.end
|
||||
- bungeecord.command.ip
|
||||
- bungeecord.command.reload
|
||||
# 当玩家在BC中无响应多长时间,BC才会将他踢出去,在这里是毫秒,一秒等于1000毫秒,30000=30秒
|
||||
# 当玩家在BC中无响应多长时间,BC才会将他踢出去,在这里是毫秒,一秒等于1000毫秒,30000=30秒
|
||||
timeout: 30000
|
||||
# 正版验证,如果是盗版服请关闭,否则会调用API进行验证
|
||||
# 正版验证,如果是盗版服请关闭,否则会调用API进行验证
|
||||
log_commands: false
|
||||
online_mode: true
|
||||
# 这里是服务器禁止的指令,例如我填- help服务器就会禁用/help指令
|
||||
# 这里是服务器禁止的指令,例如我填- help服务器就会禁用/help指令
|
||||
disabled_commands:
|
||||
- disabledcommandhere
|
||||
servers:
|
||||
lobby:
|
||||
# 服务器标语 (不用设置,建议用插件而不是这玩意)
|
||||
# 服务器标语 (不用设置,建议用插件而不是这玩意)
|
||||
motd: '&1Just another BungeeCord - Forced Host'
|
||||
# 服务器地址
|
||||
address: localhost:25565
|
||||
restricted: false
|
||||
# 这是子服务器的列表,在下面我会讲解
|
||||
# 这是子服务器的列表,在下面我会讲解
|
||||
listeners:
|
||||
# 监听查询端口,端口不能和host项的相同。
|
||||
# 监听查询端口,端口不能和host项的相同。
|
||||
- query_port: 25577
|
||||
# BC的标语,支持彩色(也不用设置)
|
||||
# BC的标语,支持彩色(也不用设置)
|
||||
motd: '&1Another Bungee server'
|
||||
tab_list: GLOBAL_PING
|
||||
# 是否开启监听查询
|
||||
@ -48,26 +48,26 @@ listeners:
|
||||
forced_hosts:
|
||||
pvp.md-5.net: pvp
|
||||
ping_passthrough: false
|
||||
# 优先服务器列表 玩家将优先加入靠上设置的子服,进不去会尝试下一个子服
|
||||
# 优先服务器列表 玩家将优先加入靠上设置的子服,进不去会尝试下一个子服
|
||||
priorities:
|
||||
- lobby
|
||||
bind_local_address: true
|
||||
# BC的IP地址,开启后访问它就能进入服务器
|
||||
# BC的IP地址,开启后访问它就能进入服务器
|
||||
host: 0.0.0.0:25577
|
||||
# 服务器显示的最大人数,如要设置真实的人数请找到player_limit选项填写
|
||||
# 服务器显示的最大人数,如要设置真实的人数请找到player_limit选项填写
|
||||
max_players: 1
|
||||
tab_size: 60
|
||||
force_default_server: false
|
||||
# 一定要打开,否则会被拒绝
|
||||
# 一定要打开,否则会被拒绝
|
||||
ip_forward: false
|
||||
# BC op设置,这也是漏洞之一,待会修改
|
||||
# BC op设置,这也是漏洞之一,待会修改
|
||||
network_compression_threshold: 256
|
||||
groups:
|
||||
md_5:
|
||||
- admin
|
||||
# 连接间隔,当玩家退出后多就能加入,在这里一秒等于1000,4000=4秒
|
||||
# 连接间隔,当玩家退出后多就能加入,在这里一秒等于1000,4000=4秒
|
||||
connection_throttle: 4000
|
||||
# 机器码,请不要修改,修改之后就会duang的没用
|
||||
# 机器码,请不要修改,修改之后就会duang的没用
|
||||
stats: c86020bc-ddf6-467e-84d9-90974afcf90e
|
||||
prevent_proxy_connections: false
|
||||
```
|
||||
|
@ -43,21 +43,21 @@ java -Xms1024M -Xmx1024M -jar 核心名字.jar
|
||||
[详细配置文件讲解](velocity.toml.md)
|
||||
|
||||
```toml
|
||||
# velocity端的端口号,数字1000~65536随意
|
||||
# velocity端的端口号,数字1000~65536随意
|
||||
bind = "0.0.0.0:25577"
|
||||
# 正版验证,有1.19.1+的子服不建议开启此项
|
||||
# 正版验证,有1.19.1+的子服不建议开启此项
|
||||
online-mode = false
|
||||
# 1.13+这里填modern 1.12-填bungeeguard
|
||||
player-info-forwarding-mode = "modern"
|
||||
# 是否应将服务器列表ping请求传递给后端服务器?
|
||||
# 可用选项:
|
||||
# - "disabled":不会进行任何传递。velocity.toml和server-icon.png将确定初始服务器列表ping响应。
|
||||
# - "mods":仅将后端服务器的mod列表传递到响应中。将使用具有mod列表的后端服务器的第一个服务器。如果无法联系后端服务器,则Velocity不会显示任何mod信息。
|
||||
# - "description":使用后端服务器的描述和mod列表。将使用响应的第一个服务器列表中的第一个服务器(或强制主机)进行描述和mod列表。
|
||||
# - "all":将后端服务器的响应用作代理响应。如果无法联系服务器,则使用Velocity配置。
|
||||
# 人话,motd插件在代理端用"disabled",否则用"all"
|
||||
# - "mods":仅将后端服务器的mod列表传递到响应中。将使用具有mod列表的后端服务器的第一个服务器。如果无法联系后端服务器,则Velocity不会显示任何mod信息。
|
||||
# - "description":使用后端服务器的描述和mod列表。将使用响应的第一个服务器列表中的第一个服务器(或强制主机)进行描述和mod列表。
|
||||
# - "all":将后端服务器的响应用作代理响应。如果无法联系服务器,则使用Velocity配置。
|
||||
# 人话,motd插件在代理端用"disabled",否则用"all"
|
||||
ping-passthrough = "all"
|
||||
# 子服名称和地址,名称不可包含”.”
|
||||
# 子服名称和地址,名称不可包含”.”
|
||||
[servers]
|
||||
## 登录服
|
||||
login = "0.0.0.0:25501"
|
||||
@ -78,24 +78,24 @@ try = [
|
||||
|
||||
## 子服配置
|
||||
|
||||
Velocity 支持将玩家信息(如 IP 地址、UUID 和皮肤)转发到你的服务器。Velocity 支持三种转发格式:
|
||||
Velocity 支持将玩家信息(如 IP 地址、UUID 和皮肤)转发到你的服务器。Velocity 支持三种转发格式:
|
||||
|
||||
- **Velocity Modern 转发** (现代转发)是一种自定义的转发格式(modern 转发),它更安全。
|
||||
- **BungeeCord 转发**(也称为*传统转发*),它有更好的兼容性但安全性较低。
|
||||
- **BungeeGuard**,与传统 BungeeCord 转发相同,但包含了一个密钥。它比单独的 BungeeCord 转发更好,但不如 Velocitymodern 转发理想。
|
||||
- **Velocity Modern 转发** (现代转发)是一种自定义的转发格式(modern 转发),它更安全。
|
||||
- **BungeeCord 转发**(也称为*传统转发*),它有更好的兼容性但安全性较低。
|
||||
- **BungeeGuard**,与传统 BungeeCord 转发相同,但包含了一个密钥。它比单独的 BungeeCord 转发更好,但不如 Velocitymodern 转发理想。
|
||||
|
||||
你只能选择这些转发格式中的一种。目前不可能“混合匹配”转发模式或同时使用所有转发格式。一般来说,如果你只支持使用 Minecraft 1.13 及更新版本的客户端,请使用 Velocity Modern 转发;否则,你必须使用 BungeeCord 转发。
|
||||
你只能选择这些转发格式中的一种。目前不可能“混合匹配”转发模式或同时使用所有转发格式。一般来说,如果你只支持使用 Minecraft 1.13 及更新版本的客户端,请使用 Velocity Modern 转发;否则,你必须使用 BungeeCord 转发。
|
||||
|
||||
### 配置现代转发(Modern Forwarding)
|
||||
### 配置现代转发(Modern Forwarding)
|
||||
|
||||
<details>
|
||||
<summary>点击展开</summary>
|
||||
|
||||
**`modern` 转发** 是 Velocity 的原生格式,以高效的二进制格式转发所有玩家信息,并采用 MAC 代码增加安全性,使非法服务器难以绕过你的 Velocity 代理。但它**仅支持 Minecraft 1.13 或更高版本**。
|
||||
**`modern` 转发** 是 Velocity 的原生格式,以高效的二进制格式转发所有玩家信息,并采用 MAC 代码增加安全性,使非法服务器难以绕过你的 Velocity 代理。但它**仅支持 Minecraft 1.13 或更高版本**。
|
||||
|
||||
#### 警告
|
||||
|
||||
- `modern` 转发与 **Minecraft 1.13 以下版本** 和 **ProtocolSupport 插件** 不兼容。如果使用这些,你需要使用传统的 BungeeCord 兼容转发。
|
||||
- `modern` 转发与 **Minecraft 1.13 以下版本** 和 **ProtocolSupport 插件** 不兼容。如果使用这些,你需要使用传统的 BungeeCord 兼容转发。
|
||||
|
||||
#### 配置步骤
|
||||
|
||||
@ -106,26 +106,26 @@ Velocity 支持将玩家信息(如 IP 地址、UUID 和皮肤)转发到你
|
||||
|
||||
- Paper **1.14 及以上版本** 以及 **1.13.1/1.13.2 版本 377 及以上版本** 原生支持 Velocity 现代转发。
|
||||
|
||||
1. 在 `server.properties` 文件中禁用 `online-mode` 设置,以防止服务器自行验证玩家身份。
|
||||
2. 如果之前已启用 BungeeCord 转发,需在 `spigot.yml` 中将 `settings.bungeecord` 设置为 `false`。
|
||||
1. 在 `server.properties` 文件中禁用 `online-mode` 设置,以防止服务器自行验证玩家身份。
|
||||
2. 如果之前已启用 BungeeCord 转发,需在 `spigot.yml` 中将 `settings.bungeecord` 设置为 `false`。
|
||||
3. 在 `config/paper-global.yml` 中:
|
||||
- 设置 `proxies.velocity.enabled` 为 true。
|
||||
- 设置 `proxies.velocity.secret` 以匹配你的 `forwarding.secret` 文件中的密钥。
|
||||
- 设置 `proxies.velocity.online-mode` 与你的 `velocity.toml` 中的 `online-mode` 一致。
|
||||
4. 编辑完成后,重新启动服务器。
|
||||
4. 编辑完成后,重新启动服务器。
|
||||
|
||||
**注意**:如果你使用的是 Paper **1.18.2 或更低版本**,请在 `paper.yml` 文件中查找相关设置。
|
||||
**注意**:如果你使用的是 Paper **1.18.2 或更低版本**,请在 `paper.yml` 文件中查找相关设置。
|
||||
|
||||
<details>
|
||||
<summary>点击展开-为Fabric/Forge配置现代转发</summary>
|
||||
|
||||
#### 为 Fabric 配置现代转发
|
||||
|
||||
- 使用名为 **FabricProxy-Lite** 的 mod,可以在 Fabric 上使用修改过的服务器与 Velocity 现代转发。
|
||||
- 使用名为 **FabricProxy-Lite** 的 mod,可以在 Fabric 上使用修改过的服务器与 Velocity 现代转发。
|
||||
|
||||
#### 为 Forge 配置现代转发
|
||||
|
||||
- 使用名为 **ProxyCompatibleForge** 的 mod,可以在 Forge **1.16.5 或更高版本** 的修改过的服务器上使用 Velocity 现代转发。
|
||||
- 使用名为 **ProxyCompatibleForge** 的 mod,可以在 Forge **1.16.5 或更高版本** 的修改过的服务器上使用 Velocity 现代转发。
|
||||
|
||||
</details>
|
||||
|
||||
@ -138,16 +138,16 @@ Velocity 支持将玩家信息(如 IP 地址、UUID 和皮肤)转发到你
|
||||
|
||||
#### 警告
|
||||
|
||||
- 传统转发 **本质上是不安全的**。如果必须使用,应了解如何正确保护你的服务器。
|
||||
- 传统转发 **本质上是不安全的**。如果必须使用,应了解如何正确保护你的服务器。
|
||||
|
||||
1. `legacy` 转发是 BungeeCord 启用 IP 转发时使用的玩家信息转发协议。
|
||||
2. 它广泛支持且兼容性强,但 **不安全**。
|
||||
2. 它广泛支持且兼容性强,但 **不安全**。
|
||||
3. 在 `velocity.toml` 中将 `player-info-forwarding` 设置为 `legacy`。
|
||||
4. 确保服务器能接受 Velocity 发送的转发玩家数据。
|
||||
|
||||
#### 增加安全性
|
||||
|
||||
- 对于托管在共享主机上的代理,Velocity 可选地支持 **BungeeGuard**。
|
||||
- 对于托管在共享主机上的代理,Velocity 可选地支持 **BungeeGuard**。
|
||||
- 将 `velocity.toml` 中的 `player-info-forwarding` 设置为 `bungeeguard`。
|
||||
- 在 BungeeGuard 配置的令牌部分添加 `forwarding.secret` 文件中的值。
|
||||
|
||||
|
@ -12,13 +12,13 @@ sidebar_position: 2
|
||||
|
||||
## 什么是 Velocity ?
|
||||
|
||||
velocity 可以说是目前最优秀的**Minecraft代理端**之一,由经验丰富的PaperMC团队研发,Velocity 拥有先进的转发方式和极高的安全性。与此同时,Velocity 也有优秀的性能表现
|
||||
velocity 可以说是目前最优秀的**Minecraft代理端**之一,由经验丰富的PaperMC团队研发,Velocity 拥有先进的转发方式和极高的安全性。与此同时,Velocity 也有优秀的性能表现
|
||||
|
||||
使用 Velocity ,能让你的群组服务器锦上添花
|
||||
使用 Velocity ,能让你的群组服务器锦上添花
|
||||
|
||||
如果你开的是mod群组服务器,那么强烈推荐使用 Velocity ,因为他对 forge 和 fabric 服务端做了特别的适配
|
||||
如果你开的是mod群组服务器,那么强烈推荐使用 Velocity ,因为他对 forge 和 fabric 服务端做了特别的适配
|
||||
|
||||
当然,Mod 服务端原生不支持 Velocity,需要安装让 Mod 端支持 Velocity 的 Mod
|
||||
当然,Mod 服务端原生不支持 Velocity,需要安装让 Mod 端支持 Velocity 的 Mod
|
||||
|
||||
- Fabric 端支持 Velocity Mod:[CrossTitch](https://www.curseforge.com/minecraft/mc-mods/crossstitch)
|
||||
|
||||
@ -30,25 +30,25 @@ velocity 可以说是目前最优秀的**Minecraft代理端**之一,由经验
|
||||
|
||||
**1.Q:velocity 支持bungeecord和waterfall插件吗?**
|
||||
|
||||
A: 不支持,因为如果我们支持 BungeeCord 插件的话,那么很多velocity的功能就无从实现了
|
||||
A: 不支持,因为如果我们支持 BungeeCord 插件的话,那么很多velocity的功能就无从实现了
|
||||
|
||||
但是有些插件可能同时也支持 Velocity 或者有 Velocity 的版本。并且,有些 BungeeCord 插件仅要求在子服务器安装,那么这些插件理论上也是可以在 Velocity 为基础的代理服务器上使用的
|
||||
但是有些插件可能同时也支持 Velocity 或者有 Velocity 的版本。并且,有些 BungeeCord 插件仅要求在子服务器安装,那么这些插件理论上也是可以在 Velocity 为基础的代理服务器上使用的
|
||||
|
||||
**2.Q:我应当使用哪个版本的 JAVA 来运行 Velocity**
|
||||
|
||||
推荐你使用 JAVA 17 以及以上版本的 JAVA ,如 JAVA 21
|
||||
推荐你使用 JAVA 17 以及以上版本的 JAVA ,如 JAVA 21
|
||||
|
||||
**3.Q:为什么我的玩家连不进服务器?**
|
||||
|
||||
*<font color="gray">这里是一些可能的原因</font>*
|
||||
|
||||
首先,你需要检查:
|
||||
首先,你需要检查:
|
||||
|
||||
- 你有没有把子服务器打开,控制台有没有未响应?
|
||||
- 你有没有把子服务器打开,控制台有没有未响应?
|
||||
- 代理端打开没?
|
||||
- 是否将代理端和子服务器链接,也就是有没有在代理端设置子服务器 IP 和端口以及子服务器有没有启用 Velocity 功能
|
||||
- 是否将代理端和子服务器链接,也就是有没有在代理端设置子服务器 IP 和端口以及子服务器有没有启用 Velocity 功能
|
||||
|
||||
此外,这是一些常见的代理端报错:
|
||||
此外,这是一些常见的代理端报错:
|
||||
|
||||
```
|
||||
Can't connect to server lobby: If you wish to use IP forwarding, please enable it in your Bungeecord config as well!
|
||||
@ -60,13 +60,13 @@ Can't connect to server lobby: Your server did not send a forwarding request t
|
||||
|
||||
这些报错是你不正确配置代理端引起的 [点此前往了解velocity配置](velocity.toml.md)
|
||||
|
||||
此外,如果你同时启用了 BungeeCord 模式,也会报出以上错误,如果你使用 Velocity ,那么请务必关闭 BungeeCord 模式
|
||||
此外,如果你同时启用了 BungeeCord 模式,也会报出以上错误,如果你使用 Velocity ,那么请务必关闭 BungeeCord 模式
|
||||
|
||||
```
|
||||
Can't connect to server lobby: This server requires you to connect with Velocity.
|
||||
```
|
||||
|
||||
这条报错出现的原因是你在子服务器上启用了 Velocity ,但是却没有在 Velocity 上添加此子服务器,请检查你的 Velocity 配置
|
||||
这条报错出现的原因是你在子服务器上启用了 Velocity ,但是却没有在 Velocity 上添加此子服务器,请检查你的 Velocity 配置
|
||||
|
||||
**4.Q:为什么会出现 Invalid payload REGISTER**
|
||||
|
||||
@ -77,30 +77,30 @@ Can't connect to server lobby: This server requires you to connect with Veloci
|
||||
[connected player] player1 (/localhost:58943): kicked from server hub: Invalid payload REGISTER!
|
||||
```
|
||||
|
||||
这种情况一般发生在插件服群组中。当有些人使用 Mod 客户端进入服务器时,有可能出现这种问题。
|
||||
这种情况一般发生在插件服群组中。当有些人使用 Mod 客户端进入服务器时,有可能出现这种问题。
|
||||
|
||||
如果你使用 Paper (或者其他 Fork 版本) 1.12.2或者以上的服务端,你可以在启动脚本中添加 flag `-Dpaper.disableChannelLimit=true` 来解决这个问题
|
||||
如果你使用 Paper (或者其他 Fork 版本) 1.12.2或者以上的服务端,你可以在启动脚本中添加 flag `-Dpaper.disableChannelLimit=true` 来解决这个问题
|
||||
|
||||
~~虽然没什么人遇到这个问题就是了~~
|
||||
|
||||
**5.Q:在加入到 Froge 服务器时 readTimeout**
|
||||
|
||||
一句话, Mod 太多太大导致连接时间延长了。你可以减少服务器的 Mod 数量或者在 Velocity 配置文件中设置 `read-timeout` 的值,同时在你的 Forge 子服的启动参数中添加 `-Dfml.readTimeout` 参数来提高阈值。比如,你想设置你的 readTimeout 时间到 120 秒
|
||||
一句话, Mod 太多太大导致连接时间延长了。你可以减少服务器的 Mod 数量或者在 Velocity 配置文件中设置 `read-timeout` 的值,同时在你的 Forge 子服的启动参数中添加 `-Dfml.readTimeout` 参数来提高阈值。比如,你想设置你的 readTimeout 时间到 120 秒
|
||||
那么你可以设置:
|
||||
|
||||
`read-timeout = 120000` (单位:毫秒)
|
||||
|
||||
`-Dfml.readTimeout=120` (单位:秒)
|
||||
|
||||
这样,将服务器重启后,readTimeout 时间就拉长了,下次就可以正常进入服务器了
|
||||
这样,将服务器重启后,readTimeout 时间就拉长了,下次就可以正常进入服务器了
|
||||
|
||||
**6.Q:我可以每个子服都使用不同的转发模式吗?**
|
||||
|
||||
不行,至少现在不行,你只能在 `velocity.toml` 中设置一个单一的转发模式
|
||||
不行,至少现在不行,你只能在 `velocity.toml` 中设置一个单一的转发模式
|
||||
|
||||
关于各个不同的转发模式,可以看到这里 [搭建](./build-up.md#子服配置)
|
||||
关于各个不同的转发模式,可以看到这里 [搭建](./build-up.md#子服配置)
|
||||
|
||||
有大佬提出了关于这个问题的 [PR](https://github.com/PaperMC/Velocity/pull/1357)
|
||||
|
||||
可以坐等合并了,合并之后就可以给各个不同的子服配置不同的转发模式啦
|
||||
可以坐等合并了,合并之后就可以给各个不同的子服配置不同的转发模式啦
|
||||
|
||||
|
@ -8,63 +8,63 @@ sidebar_position: 3
|
||||
# 配置版本。不要更改这个
|
||||
config-version = "2.7"
|
||||
|
||||
# 代理应该绑定到哪个端口?默认情况下,我们将绑定到25577端口的所有地址。
|
||||
# 代理应该绑定到哪个端口?默认情况下,我们将绑定到25577端口的所有地址。
|
||||
bind = "0.0.0.0:25577"
|
||||
|
||||
# 应该显示什么MOTD(服务器消息)?当玩家将你的服务器添加到他们的服务器列表时,会显示这个。只接受MiniMessage格式。
|
||||
# 应该显示什么MOTD(服务器消息)?当玩家将你的服务器添加到他们的服务器列表时,会显示这个。只接受MiniMessage格式。
|
||||
motd = "<#09add3>一个Velocity服务器"
|
||||
|
||||
# 我们应该显示多少最大玩家数?(Velocity不支持在线玩家数的限制。)
|
||||
# 我们应该显示多少最大玩家数?(Velocity不支持在线玩家数的限制。)
|
||||
show-max-players = 500
|
||||
|
||||
# 我们应该使用Mojang对玩家进行身份验证吗 (译者注: 正版验证)? 默认情况下,这是开启的。
|
||||
# 我们应该使用Mojang对玩家进行身份验证吗 (译者注: 正版验证)? 默认情况下,这是开启的。
|
||||
online-mode = true
|
||||
|
||||
# 代理是否应该强制执行新的公钥安全标准?默认情况下,这是开启的。
|
||||
# 代理是否应该强制执行新的公钥安全标准?默认情况下,这是开启的。
|
||||
force-key-authentication = true
|
||||
|
||||
# 如果从这个代理发送的客户端的ISP/AS与Mojang的认证服务器的不同,玩家将被踢出。这禁止了一些VPN和代理连接,但这是一种较弱的保护形式。
|
||||
# 如果从这个代理发送的客户端的ISP/AS与Mojang的认证服务器的不同,玩家将被踢出。这禁止了一些VPN和代理连接,但这是一种较弱的保护形式。
|
||||
prevent-client-proxy-connections = false
|
||||
|
||||
# 我们应该将IP地址和其他数据转发到后端服务器吗?
|
||||
# 可用选项:
|
||||
# - "none": 不会进行任何转发。所有玩家看起来都是从代理连接的,并且将拥有离线模式的UUID。
|
||||
# - "legacy": 以BungeeCord兼容格式转发玩家IP和UUID。如果你运行的是Minecraft 1.12或更低版本的服务器,请使用此选项。
|
||||
# - "bungeeguard": 以BungeeGuard插件支持的格式转发玩家IP和UUID。如果你运行的是Minecraft 1.12或更低版本的服务器,并且无法实现网络级防火墙(在共享主机上),请使用此选项。
|
||||
# - "modern": 使用Velocity的原生转发,在登录过程中转发玩家IP和UUID。仅适用于Minecraft 1.13或更高版本。
|
||||
# - "none": 不会进行任何转发。所有玩家看起来都是从代理连接的,并且将拥有离线模式的UUID。
|
||||
# - "legacy": 以BungeeCord兼容格式转发玩家IP和UUID。如果你运行的是Minecraft 1.12或更低版本的服务器,请使用此选项。
|
||||
# - "bungeeguard": 以BungeeGuard插件支持的格式转发玩家IP和UUID。如果你运行的是Minecraft 1.12或更低版本的服务器,并且无法实现网络级防火墙(在共享主机上),请使用此选项。
|
||||
# - "modern": 使用Velocity的原生转发,在登录过程中转发玩家IP和UUID。仅适用于Minecraft 1.13或更高版本。
|
||||
player-info-forwarding-mode = "NONE"
|
||||
|
||||
# 如果你使用modern 或BungeeGuard IP转发,请在此处配置包含唯一密钥的文件。
|
||||
# 文件应该是UTF-8编码的,并且不为空。
|
||||
# 如果你使用modern 或BungeeGuard IP转发,请在此处配置包含唯一密钥的文件。
|
||||
# 文件应该是UTF-8编码的,并且不为空。
|
||||
forwarding-secret-file = "forwarding.secret"
|
||||
|
||||
# 宣布你的服务器是否支持Forge。如果你运行一个模组服务器,我们建议开启这个。
|
||||
# 宣布你的服务器是否支持Forge。如果你运行一个模组服务器,我们建议开启这个。
|
||||
#
|
||||
# 如果你的网络持续运行一个模组包,考虑使用ping-passthrough = "mods"代替,以便在服务器列表中更好地显示。
|
||||
# 如果你的网络持续运行一个模组包,考虑使用ping-passthrough = "mods"代替,以便在服务器列表中更好地显示。
|
||||
announce-forge = false
|
||||
|
||||
# 如果启用(默认为false),并且代理处于在线模式,Velocity将踢出任何已在线的玩家,如果尝试进行重复连接。
|
||||
# 如果启用(默认为false),并且代理处于在线模式,Velocity将踢出任何已在线的玩家,如果尝试进行重复连接。
|
||||
kick-existing-players = false
|
||||
|
||||
# Velocity是否应该将服务器列表ping请求传递给后端服务器?
|
||||
# 可用选项:
|
||||
# - "disabled": 不会进行任何传递。velocity.toml和server-icon.png将决定初始服务器列表ping响应。
|
||||
# - "mods": 只将后端服务器的模组列表传递到响应中。
|
||||
# 使用你尝试列表中的第一个服务器(或强制主机)的模组列表。如果无法联系到后端服务器,Velocity将不会显示任何模组信息。
|
||||
# - "description": 使用来自后端服务器的描述和模组列表。尝试列表中(或强制主机)响应的第一个服务器将被用于描述和模组列表。
|
||||
# - "all": 使用后端服务器的响应作为代理响应。如果没有服务器可以联系,将使用Velocity配置。
|
||||
# 使用你尝试列表中的第一个服务器(或强制主机)的模组列表。如果无法联系到后端服务器,Velocity将不会显示任何模组信息。
|
||||
# - "description": 使用来自后端服务器的描述和模组列表。尝试列表中(或强制主机)响应的第一个服务器将被用于描述和模组列表。
|
||||
# - "all": 使用后端服务器的响应作为代理响应。如果没有服务器可以联系,将使用Velocity配置。
|
||||
ping-passthrough = "DISABLED"
|
||||
|
||||
# 如果未启用(默认为true),玩家IP地址将被替换为<ip address withheld>在日志中
|
||||
# 如果未启用(默认为true),玩家IP地址将被替换为<ip address withheld>在日志中
|
||||
enable-player-address-logging = true
|
||||
|
||||
[servers]
|
||||
# 在此处配置你的服务器。每个键代表服务器的名称,值代表要连接到的服务器的IP地址。
|
||||
# 在此处配置你的服务器。每个键代表服务器的名称,值代表要连接到的服务器的IP地址。
|
||||
lobby = "127.0.0.1:30066"
|
||||
factions = "127.0.0.1:30067"
|
||||
minigames = "127.0.0.1:30068"
|
||||
|
||||
# 当玩家登录或从服务器被踢出时,我们应该尝试让他进入哪个服务器?
|
||||
# 当玩家登录或从服务器被踢出时,我们应该尝试让他进入哪个服务器?
|
||||
try = [
|
||||
"lobby"
|
||||
]
|
||||
@ -82,13 +82,13 @@ try = [
|
||||
]
|
||||
|
||||
[advanced]
|
||||
# Minecraft数据包必须有多大,我们才会压缩它。将其设置为零将压缩所有数据包,将其设置为-1将完全禁用压缩。
|
||||
# Minecraft数据包必须有多大,我们才会压缩它。将其设置为零将压缩所有数据包,将其设置为-1将完全禁用压缩。
|
||||
compression-threshold = 256
|
||||
|
||||
# 应该进行多少压缩(从0-9)。默认是-1,使用默认级别6。
|
||||
# 应该进行多少压缩(从0-9)。默认是-1,使用默认级别6。
|
||||
compression-level = -1
|
||||
|
||||
# 客户端在上次连接后允许多快连接(以毫秒为单位)?默认是三秒。通过将其设置为0来禁用此功能。
|
||||
# 客户端在上次连接后允许多快连接(以毫秒为单位)?默认是三秒。通过将其设置为0来禁用此功能。
|
||||
login-ratelimit = 3000
|
||||
|
||||
# 在此处指定连接超时的自定义超时时间。默认是五秒。
|
||||
@ -97,7 +97,7 @@ connection-timeout = 5000
|
||||
# 在此处指定连接的读取超时时间。默认是30秒。
|
||||
read-timeout = 30000
|
||||
|
||||
# 启用与HAProxy的PROXY协议的兼容性。如果你不知道这是干什么用的,那么就不要启用它。
|
||||
# 启用与HAProxy的PROXY协议的兼容性。如果你不知道这是干什么用的,那么就不要启用它。
|
||||
haproxy-protocol = false
|
||||
|
||||
# 在代理上启用TCP快速打开支持。需要代理在Linux上运行。
|
||||
@ -109,7 +109,7 @@ bungee-plugin-message-channel = true
|
||||
# 显示来自客户端的ping请求到代理。
|
||||
show-ping-requests = false
|
||||
|
||||
# 默认情况下,Velocity将尝试优雅地处理用户意外失去与服务器的连接而没有明确的断开消息的情况,通过尝试回退用户,除了读取超时的情况。BungeeCord将断开用户连接。你可以禁用此设置以使用BungeeCord的行为。
|
||||
# 默认情况下,Velocity将尝试优雅地处理用户意外失去与服务器的连接而没有明确的断开消息的情况,通过尝试回退用户,除了读取超时的情况。BungeeCord将断开用户连接。你可以禁用此设置以使用BungeeCord的行为。
|
||||
failover-on-unexpected-server-disconnect = true
|
||||
|
||||
# 向1.13+客户端声明代理命令。
|
||||
@ -118,17 +118,17 @@ announce-proxy-commands = true
|
||||
# 启用命令的日志记录
|
||||
log-command-executions = false
|
||||
|
||||
# 启用记录玩家连接到代理,切换服务器以及从代理断开连接的日志。
|
||||
# 启用记录玩家连接到代理,切换服务器以及从代理断开连接的日志。
|
||||
log-player-connections = true
|
||||
|
||||
# 允许通过Transfer数据包(Minecraft 1.20.5)从其他主机传输的玩家被接收。
|
||||
# 允许通过Transfer数据包(Minecraft 1.20.5)从其他主机传输的玩家被接收。
|
||||
accepts-transfers = false
|
||||
|
||||
[query]
|
||||
# 是否启用对GameSpy 4查询响应的响应。
|
||||
enabled = false
|
||||
|
||||
# 如果查询已启用,查询协议应该在哪个端口上监听?
|
||||
# 如果查询已启用,查询协议应该在哪个端口上监听?
|
||||
port = 25577
|
||||
|
||||
# 这是向查询服务报告的名称。
|
||||
|
@ -7,14 +7,14 @@ sidebar_position: 1
|
||||
|
||||
| 命令 | 权限 | 描述 |
|
||||
| --- | --- |--- |
|
||||
| `/alert` | `bungeecord.command.alert` | 发送一条整个群组的公告,会显示在所有的子服务器内。颜色符是&,使用&h 可以清除所有默认的格式 |
|
||||
| `/alertraw <json格式的信息>` | `bungeecord.command.alert` | 和上一个命令一样,但是仅允许使用json格式的内容 |
|
||||
| `/alert` | `bungeecord.command.alert` | 发送一条整个群组的公告,会显示在所有的子服务器内。颜色符是&,使用&h 可以清除所有默认的格式 |
|
||||
| `/alertraw <json格式的信息>` | `bungeecord.command.alert` | 和上一个命令一样,但是仅允许使用json格式的内容 |
|
||||
| `/bungee` | N/A | 显示BungeeCord的版本信息 |
|
||||
| `/end` | `bungeecord.command.end` | 关闭BungeeCord代理端,类似于Bukkit服务器下的/stop |
|
||||
| `/end` | `bungeecord.command.end` | 关闭BungeeCord代理端,类似于Bukkit服务器下的/stop |
|
||||
| `/find` | `bungeecord.command.find` | 确认指定玩家是否在线和他现在在哪个子服务器内 |
|
||||
| `/glist` | `bungeecord.command.list` | 显示所有的子服务器和每个服务器当前在线人数 |
|
||||
| `/greload` | `bungeecord.command.reload` | 重载BungeeCord代理端的配置文件,将重新载入子服务器列表、监听选项和一些配置项目,但是不会重载BC端插件和权限 |
|
||||
| `/greload` | `bungeecord.command.reload` | 重载BungeeCord代理端的配置文件,将重新载入子服务器列表、监听选项和一些配置项目,但是不会重载BC端插件和权限 |
|
||||
| `/ip` | `bungeecord.command.ip` | 查看指定玩家的真实连接IP |
|
||||
| `/perms` | `N/A` | 显示你拥有的权限和所在权限组 |
|
||||
| `/send` | `bungeecord.command.send` | 将指定玩家移动到目标子服务器,使用“current”将会把你所在服务器的所有玩家移动到目标服务器,使用“all”将会把整个群组下的玩家移动到目标服务器。子服务器名就是你在“config.yml”的“servers”下面设置的服务器名 |
|
||||
| `/server` | `bungeecord.command.server` | 送到指定子服务器,这个权限默认是高于Bukkit插件权限的,也就是说玩家可以在未登录之前使用此命令跳转到另外一个服务器,如果另外的服务器没登陆插件,那么通过此方法就可以使用到OP账号 |
|
||||
| `/send` | `bungeecord.command.send` | 将指定玩家移动到目标子服务器,使用“current”将会把你所在服务器的所有玩家移动到目标服务器,使用“all”将会把整个群组下的玩家移动到目标服务器。子服务器名就是你在“config.yml”的“servers”下面设置的服务器名 |
|
||||
| `/server` | `bungeecord.command.server` | 送到指定子服务器,这个权限默认是高于Bukkit插件权限的,也就是说玩家可以在未登录之前使用此命令跳转到另外一个服务器,如果另外的服务器没登陆插件,那么通过此方法就可以使用到OP账号 |
|
||||
|
@ -5,17 +5,17 @@ sidebar_position: 2
|
||||
|
||||
# 命令
|
||||
|
||||
Velocity 默认在代理的核心中包含了一些命令,这些命令是基于它们对大多数用户所需的。如果你需要更多命令,你可以安装插件来添加。
|
||||
Velocity 默认在代理的核心中包含了一些命令,这些命令是基于它们对大多数用户所需的。如果你需要更多命令,你可以安装插件来添加。
|
||||
|
||||
| 命令 | 权限 | 描述 |
|
||||
|-------------------------------------------|--------------------------------------|--------------------------------------------------------------|
|
||||
| `/velocity` | N/A | 包含许多子命令,用于管理代理。 |
|
||||
| `/velocity plugins` | `velocity.command.plugins` | 可以使用此命令查看代理上当前激活的所有插件,包括名称、作者和版本。 |
|
||||
| `/velocity version` | `velocity.command.info` | (默认所有用户拥有),可以查看代理上运行的 Velocity 版本。 |
|
||||
| `/velocity` | N/A | 包含许多子命令,用于管理代理。 |
|
||||
| `/velocity plugins` | `velocity.command.plugins` | 可以使用此命令查看代理上当前激活的所有插件,包括名称、作者和版本。 |
|
||||
| `/velocity version` | `velocity.command.info` | (默认所有用户拥有),可以查看代理上运行的 Velocity 版本。 |
|
||||
| `/velocity reload` | `velocity.command.reload` | 代理将从磁盘上的 `velocity.toml` 读取并重新配置自己。 |
|
||||
| `/velocity dump` | `velocity.command.plugins` | 可以使用此命令获取代理的匿名详细信息转储。 |
|
||||
| `/velocity heap` | `velocity.command.heap` | **警告**:此命令生成的堆转储包含有关你的 Velocity 实例的详细信息,可能相当敏感。 |
|
||||
| `/server` | `velocity.command.server` | (默认所有用户拥有),玩家可以使用此命令查看并切换到另一个服务器。 |
|
||||
| `/shutdown` | 无(从控制台执行) | 此命令将优雅地关闭 Velocity 代理,所有玩家将从代理断开连接。 |
|
||||
| `/glist` | `velocity.command.glist` | 如果用户具有此权限(默认无人具有),玩家可以使用此命令查看当前在代理上的玩家数量。 |
|
||||
| `/send` | `velocity.command.send` | 他们可以将其他玩家(或代理上的所有玩家)发送到另一个服务器。 |
|
||||
| `/velocity heap` | `velocity.command.heap` | **警告**:此命令生成的堆转储包含有关你的 Velocity 实例的详细信息,可能相当敏感。 |
|
||||
| `/server` | `velocity.command.server` | (默认所有用户拥有),玩家可以使用此命令查看并切换到另一个服务器。 |
|
||||
| `/shutdown` | 无(从控制台执行) | 此命令将优雅地关闭 Velocity 代理,所有玩家将从代理断开连接。 |
|
||||
| `/glist` | `velocity.command.glist` | 如果用户具有此权限(默认无人具有),玩家可以使用此命令查看当前在代理上的玩家数量。 |
|
||||
| `/send` | `velocity.command.send` | 他们可以将其他玩家(或代理上的所有玩家)发送到另一个服务器。 |
|
@ -6,50 +6,50 @@ sidebar_position: 2
|
||||
|
||||
# 跨服端
|
||||
|
||||
简单的来说就是将多个服务器连成一个整体(比如你经常看到的某些生存一区,生存二区),玩家可以自由选择到哪个服务器,而不用退出重连,
|
||||
简单的来说就是将多个服务器连成一个整体(比如你经常看到的某些生存一区,生存二区),玩家可以自由选择到哪个服务器,而不用退出重连,
|
||||
|
||||
不同服务器之间可以通过跨服同步(比如 HuskSync )和数据库同步数据,平时常听到的群组服也是一个意思. 跨服通常的实现方法是:
|
||||
不同服务器之间可以通过跨服同步(比如 HuskSync )和数据库同步数据,平时常听到的群组服也是一个意思. 跨服通常的实现方法是:
|
||||
|
||||
一个反向代理端(如 Velocity / BungeeCord )和多个子服务器(如 Paper / Purpur / Leaf 等). 玩家只需要连接到反向代理端即可让反向代理端和子服务器联系,最后把玩家送到对应的服务器.
|
||||
一个反向代理端(如 Velocity / BungeeCord )和多个子服务器(如 Paper / Purpur / Leaf 等). 玩家只需要连接到反向代理端即可让反向代理端和子服务器联系,最后把玩家送到对应的服务器.
|
||||
|
||||
# 原理讲解
|
||||
|
||||
假设你现在有三个服务器,分别为登录服,生存服和资源服,三个服务器都能正常进入和游玩,
|
||||
假设你现在有三个服务器,分别为登录服,生存服和资源服,三个服务器都能正常进入和游玩,
|
||||
|
||||
现在你想建设一个群组服把这三个服务器连接起来,那么,你的服务器结构就会是这样
|
||||
现在你想建设一个群组服把这三个服务器连接起来,那么,你的服务器结构就会是这样
|
||||
|
||||
![](_images/灵魂画师教开群组服.png)
|
||||
|
||||
:::info
|
||||
|
||||
BungeeCord / Velocity 端(或他们的 Fork )在这里我们称为`跨服端`(或者称为上游服务器)
|
||||
BungeeCord / Velocity 端(或他们的 Fork )在这里我们称为`跨服端`(或者称为上游服务器)
|
||||
|
||||
这三个服务器都称为 `子服` 图中为三个子服,子服没有先后之分(或者称为下游服务器)
|
||||
这三个服务器都称为 `子服` 图中为三个子服,子服没有先后之分(或者称为下游服务器)
|
||||
|
||||
:::
|
||||
|
||||
> 如果你的群组服搭建完成,那么正常流程是:
|
||||
> 如果你的群组服搭建完成,那么正常流程是:
|
||||
>
|
||||
> > 玩家通过客户端连接到跨服端,接着由跨服端送至各个子服,玩家可以通过一些方式切换自己所在的子服,感觉上就像是切换维度,玩家甚至意识不到自己换过服
|
||||
> > 玩家通过客户端连接到跨服端,接着由跨服端送至各个子服,玩家可以通过一些方式切换自己所在的子服,感觉上就像是切换维度,玩家甚至意识不到自己换过服
|
||||
|
||||
# 为什么需要代理端?
|
||||
|
||||
1. Minecraft 是个单核心游戏,玩家数量在超过 50-100 后几乎任何核心都无法保证完全流畅( Folia 除外),而使用多个服务器则可以充分利用多核心优势,大服务器必备;
|
||||
1. Minecraft 是个单核心游戏,玩家数量在超过 50-100 后几乎任何核心都无法保证完全流畅( Folia 除外),而使用多个服务器则可以充分利用多核心优势,大服务器必备;
|
||||
|
||||
2. 对多个服务器,玩家需要退出重新进入,且数据不能共享. 仅仅只是开两个服务器无法产生有效交互. 所以需要跨服端对服务器进行切换和交互的完善;
|
||||
2. 对多个服务器,玩家需要退出重新进入,且数据不能共享. 仅仅只是开两个服务器无法产生有效交互. 所以需要跨服端对服务器进行切换和交互的完善;
|
||||
|
||||
3. 对单个服务器,在内存有一点点富裕的情况下(通常不到 1GB ),仍推荐使用代理端,服务端对于反假人攻击的性能不如代理端,如果你被攻击了,更换成代理端再说;
|
||||
3. 对单个服务器,在内存有一点点富裕的情况下(通常不到 1GB ),仍推荐使用代理端,服务端对于反假人攻击的性能不如代理端,如果你被攻击了,更换成代理端再说;
|
||||
|
||||
4. 有些插件是代理端才能安装的,而在 Bukkit 系下可能不稳定(如[ MultiLogin ](https://github.com/CaaMoe/MultiLogin)).
|
||||
4. 有些插件是代理端才能安装的,而在 Bukkit 系下可能不稳定(如[ MultiLogin ](https://github.com/CaaMoe/MultiLogin)).
|
||||
|
||||
# 推荐用什么?
|
||||
|
||||
**推荐使用 Velocity**,除非你的版本不适合 Velocity 的现代转发
|
||||
**推荐使用 Velocity**,除非你的版本不适合 Velocity 的现代转发
|
||||
|
||||
## 安装数据库
|
||||
|
||||
你都跨服了,估计会有多端数据同步的需求吧?
|
||||
你都跨服了,估计会有多端数据同步的需求吧?
|
||||
|
||||
看 [数据库相关](https://yizhan.wiki/NitWikit/database)
|
||||
|
||||
一般需要安装两个数据库,MySQL 和 Redis,MySQL 用于存储重要信息,比如账号密码,经济,权限 Redis 用于快速跨服同步
|
||||
一般需要安装两个数据库,MySQL 和 Redis,MySQL 用于存储重要信息,比如账号密码,经济,权限 Redis 用于快速跨服同步
|
||||
|
@ -11,9 +11,9 @@ sidebar_position: 7
|
||||
|
||||
+ <u>注意不是所有 CDN 都支持四层转发 购买前请询问客服时候支持</u>
|
||||
|
||||
+ 请自行寻找服务商,记得买国内节点<u>(写着需要备案 MC其实不需要的)</u>
|
||||
+ 请自行寻找服务商,记得买国内节点<u>(写着需要备案 MC其实不需要的)</u>
|
||||
|
||||
### 配置 CDN 四层转发 (以cdnfly系统为例)
|
||||
### 配置 CDN 四层转发 (以cdnfly系统为例)
|
||||
|
||||
+ ![1.png](https://img2.imgtp.com/2024/05/20/ZNjg7mkL.png)
|
||||
+ ![2.png](https://img2.imgtp.com/2024/05/20/XRtFbjwE.png)
|
||||
|
@ -5,7 +5,7 @@ sidebar_position: 3
|
||||
|
||||
# 加入服务器
|
||||
|
||||
在客户端点击加入服务器,输入你的跨服端的地址,连接即可。
|
||||
在客户端点击加入服务器,输入你的跨服端的地址,连接即可。
|
||||
|
||||
# 连接到子服
|
||||
|
||||
@ -19,7 +19,7 @@ sidebar_position: 3
|
||||
|
||||
:::warning
|
||||
|
||||
此命令只能由玩家自己在聊天框里敲命令执行,插件不能让玩家执行此命令!
|
||||
此命令只能由玩家自己在聊天框里敲命令执行,插件不能让玩家执行此命令!
|
||||
|
||||
**因为这条命令压根没有被注册到子服**
|
||||
|
||||
@ -37,7 +37,7 @@ https://wiki.citizensnpcs.co/NPC_Commands#Bungee
|
||||
|
||||
### Adyeshach
|
||||
|
||||
ady 没有跨服动作,你可以导入其他插件的跨服动作来使用
|
||||
ady 没有跨服动作,你可以导入其他插件的跨服动作来使用
|
||||
|
||||
如安装 Invero 插件后:
|
||||
|
||||
|
@ -27,13 +27,13 @@ sidebar_position: 1
|
||||
|
||||
:::
|
||||
|
||||
这是 BungeeCord 版本的 AuthMe 。如果你的登录服使用 AuthMe 登录,请务必在 BungeeCord 上安装此插件,以增加登录系统的安全性和完整性,这可以为你避免一些不必要的麻烦
|
||||
这是 BungeeCord 版本的 AuthMe 。如果你的登录服使用 AuthMe 登录,请务必在 BungeeCord 上安装此插件,以增加登录系统的安全性和完整性,这可以为你避免一些不必要的麻烦
|
||||
|
||||
如果你不安装此插件,在玩家登录时很可能乘此跳到其他子服务器来跳过登录,以此获取管理员账号来炸服
|
||||
如果你不安装此插件,在玩家登录时很可能乘此跳到其他子服务器来跳过登录,以此获取管理员账号来炸服
|
||||
|
||||
# 可安装在跨服端或子服
|
||||
|
||||
这一分类中的插件有单端版和跨服端版,你可以删除单端版使用跨服端版。
|
||||
这一分类中的插件有单端版和跨服端版,你可以删除单端版使用跨服端版。
|
||||
|
||||
## MiniMOTD
|
||||
|
||||
@ -67,7 +67,7 @@ sidebar_position: 1
|
||||
|
||||
比如 %viaversion_player_protocol_version% 来查看玩家客户端版本
|
||||
|
||||
不利于任何反作弊的运行,因为后端服务器中的反作弊将认为玩家均来自于服务版本,这会导致**大量的误判**。
|
||||
不利于任何反作弊的运行,因为后端服务器中的反作弊将认为玩家均来自于服务版本,这会导致**大量的误判**。
|
||||
|
||||
:::
|
||||
|
||||
@ -100,7 +100,7 @@ sidebar_position: 1
|
||||
|
||||
# 装在跨服端或+子服端
|
||||
|
||||
这类插件可以只装在跨服端,但同时在子服安装可以有更多的功能。
|
||||
这类插件可以只装在跨服端,但同时在子服安装可以有更多的功能。
|
||||
|
||||
## PlayerBalancer
|
||||
|
||||
@ -114,7 +114,7 @@ sidebar_position: 1
|
||||
|
||||
:::
|
||||
|
||||
可以用来设置多个子大厅,设置主大厅,并按照你配置的方式发送玩家到子服。
|
||||
可以用来设置多个子大厅,设置主大厅,并按照你配置的方式发送玩家到子服。
|
||||
|
||||
## ServerUtils
|
||||
|
||||
@ -146,8 +146,8 @@ sidebar_position: 1
|
||||
|
||||
:::
|
||||
|
||||
PAPIProxyBridge 是安装在后端和代理服务器上的库桥插件,它允许代理端插件使用 PlaceholderAPI 占位符设置文本格式
|
||||
PAPIProxyBridge 是安装在后端和代理服务器上的库桥插件,它允许代理端插件使用 PlaceholderAPI 占位符设置文本格式
|
||||
|
||||
在 Spigot (1.16.5+) 上安装最新版本的插件以及 [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/) 插件,或在 Fabric (1.19.3+) 服务器上安装 [PlaceholderAPI mod](https://placeholders.pb4.eu/),然后在 BungeeCord 或 Velocity 代理服务器上安装该插件
|
||||
在 Spigot (1.16.5+) 上安装最新版本的插件以及 [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/) 插件,或在 Fabric (1.19.3+) 服务器上安装 [PlaceholderAPI mod](https://placeholders.pb4.eu/),然后在 BungeeCord 或 Velocity 代理服务器上安装该插件
|
||||
|
||||
请注意,此插件不能替代 PlaceholderAPI。你仍然需要在 Spigot/Fabric 服务器上安装 PlaceholderAPI
|
||||
请注意,此插件不能替代 PlaceholderAPI。你仍然需要在 Spigot/Fabric 服务器上安装 PlaceholderAPI
|
||||
|
@ -6,8 +6,8 @@ sidebar_position: 4
|
||||
|
||||
# 插件
|
||||
|
||||
和后端服务器一样,反代核心也可以安装一些插件,但他们和后端使用的插件往往不能互相兼容,在安装时请查看插件是否支持对应的反代核心。
|
||||
和后端服务器一样,反代核心也可以安装一些插件,但他们和后端使用的插件往往不能互相兼容,在安装时请查看插件是否支持对应的反代核心。
|
||||
|
||||
一般说来,反代核心的插件相对功能性会偏向于网络协议、验证、MOTD 等而非后端多种多样的表现方式,
|
||||
一般说来,反代核心的插件相对功能性会偏向于网络协议、验证、MOTD 等而非后端多种多样的表现方式,
|
||||
|
||||
但是,网络协议类的插件安装在反向代理将会有非常明显的提升,如反假人、FastMOTD 等,这是因为反向代理在网络方面高度优化。
|
||||
但是,网络协议类的插件安装在反向代理将会有非常明显的提升,如反假人、FastMOTD 等,这是因为反向代理在网络方面高度优化。
|
@ -41,9 +41,9 @@ sidebar_position: 2
|
||||
|
||||
:::
|
||||
|
||||
这是 Velocity 版本的 AuthMe 。如果你的登录服使用 AuthMe 登录,请务必在 Velocity 上安装此插件,以增加登录系统的安全性和完整性,这可以为你避免一些不必要的麻烦
|
||||
这是 Velocity 版本的 AuthMe 。如果你的登录服使用 AuthMe 登录,请务必在 Velocity 上安装此插件,以增加登录系统的安全性和完整性,这可以为你避免一些不必要的麻烦
|
||||
|
||||
如果你不安装此插件,在玩家登录时很可能乘此跳到其他子服务器来跳过登录,以此获取管理员账号来炸服
|
||||
如果你不安装此插件,在玩家登录时很可能乘此跳到其他子服务器来跳过登录,以此获取管理员账号来炸服
|
||||
|
||||
## HuskChat
|
||||
|
||||
@ -59,7 +59,7 @@ sidebar_position: 2
|
||||
|
||||
很轻量、简单的跨服聊天插件
|
||||
|
||||
基本上该有的功能都有,但是无法做到与聊天信息互动等 Trchat 能够做到的功能。他只需要在 Velocity 端安装就能生效,适合追求精简清爽 ~~(其实就是懒)~~ 的服主使用
|
||||
基本上该有的功能都有,但是无法做到与聊天信息互动等 Trchat 能够做到的功能。他只需要在 Velocity 端安装就能生效,适合追求精简清爽 ~~(其实就是懒)~~ 的服主使用
|
||||
|
||||
:::warning
|
||||
|
||||
@ -69,9 +69,9 @@ sidebar_position: 2
|
||||
|
||||
如果你的服务器安装了 QuickShop 等需要输入聊天消息来录入参数的插件
|
||||
|
||||
那么你安装 HuskChat 会让这些插件失效,这是因为子服务器的聊天事件已经被取消了,这会导致这些插件无法获取玩家的聊天消息
|
||||
那么你安装 HuskChat 会让这些插件失效,这是因为子服务器的聊天事件已经被取消了,这会导致这些插件无法获取玩家的聊天消息
|
||||
|
||||
可以根据作者的方案解决这个问题,介意的建议不要使用 HuskChat ,转而用 [TrChat](https://www.spigotmc.org/resources/.111858/)
|
||||
可以根据作者的方案解决这个问题,介意的建议不要使用 HuskChat ,转而用 [TrChat](https://www.spigotmc.org/resources/.111858/)
|
||||
:::
|
||||
|
||||
## Sonar
|
||||
@ -86,13 +86,13 @@ sidebar_position: 2
|
||||
|
||||
:::
|
||||
|
||||
一款轻量级的反假人插件,能够有效的防止大部分假人进入你的服务器
|
||||
一款轻量级的反假人插件,能够有效的防止大部分假人进入你的服务器
|
||||
|
||||
它内置多种**反假人策略**和**验证方式**,可以任你选择
|
||||
它内置多种**反假人策略**和**验证方式**,可以任你选择
|
||||
|
||||
**特色反假人机制**:
|
||||
|
||||
CAPTCHA 在玩家进入服务器时,会进入 Sonar 创建的虚拟服务器中,玩家需要在聊天栏中输入随机生成的验证码才能进入服务器,这样可以防御 **100%** 的假人。非常的安全
|
||||
CAPTCHA 在玩家进入服务器时,会进入 Sonar 创建的虚拟服务器中,玩家需要在聊天栏中输入随机生成的验证码才能进入服务器,这样可以防御 **100%** 的假人。非常的安全
|
||||
|
||||
非常推荐安装
|
||||
|
||||
@ -116,7 +116,7 @@ CAPTCHA 在玩家进入服务器时,会进入 Sonar 创建的虚拟服务器
|
||||
|
||||
# 装在跨服端或+子服端
|
||||
|
||||
这类插件可以只装在跨服端,但同时在子服安装可以有更多的功能。
|
||||
这类插件可以只装在跨服端,但同时在子服安装可以有更多的功能。
|
||||
|
||||
## ServerUtils
|
||||
|
||||
@ -146,17 +146,17 @@ CAPTCHA 在玩家进入服务器时,会进入 Sonar 创建的虚拟服务器
|
||||
|
||||
:::
|
||||
|
||||
一款好用的 tab 栏插件,此外,还可以制作计分板,Bossbar
|
||||
一款好用的 tab 栏插件,此外,还可以制作计分板,Bossbar
|
||||
|
||||
支持制作文字动画,支持 RGB 颜色
|
||||
支持制作文字动画,支持 RGB 颜色
|
||||
|
||||
想让他显示 PlaceholderAPI 的变量?请在所有子服务器上安装 [Tab-Bridge](https://www.spigotmc.org/resources/.83966/)
|
||||
|
||||
此外,如果你使用了 Layout 功能,如果你不安装此插件,会导致一些显示 Bug
|
||||
此外,如果你使用了 Layout 功能,如果你不安装此插件,会导致一些显示 Bug
|
||||
|
||||
因此强烈建议将 Tab-Bridge 一起安装
|
||||
|
||||
_插件需要安装在代理端上,如果你在子服安装了TAB,可能会导致在高版本上出现“网络协议错误”等位置问题。_
|
||||
_插件需要安装在代理端上,如果你在子服安装了TAB,可能会导致在高版本上出现“网络协议错误”等位置问题。_
|
||||
|
||||
# 装在跨服端+子服端
|
||||
|
||||
@ -178,7 +178,7 @@ _插件需要安装在代理端上,如果你在子服安装了TAB,可能会
|
||||
|
||||
:::
|
||||
|
||||
从 Minecraft 1.19.1 开始,Mojang 实现了一个[新的聊天系统](https://zh.minecraft.wiki/w/Java%E7%89%881.19.1#%E5%B8%B8%E8%A7%84),该系统使用每个玩家拥有的签名密钥。Velocity 尚不完全支持取消或修改这种类型的消息和命令,因此你可以安装 SignedVelocity 插件, 这将允许将消息或命令传输到你的服务器,在服务器上收到消息或命令后, 将应用在 Velocity 中计算的结果。 —— Velocity 官方文档
|
||||
从 Minecraft 1.19.1 开始,Mojang 实现了一个[新的聊天系统](https://zh.minecraft.wiki/w/Java%E7%89%881.19.1#%E5%B8%B8%E8%A7%84),该系统使用每个玩家拥有的签名密钥。Velocity 尚不完全支持取消或修改这种类型的消息和命令,因此你可以安装 SignedVelocity 插件, 这将允许将消息或命令传输到你的服务器,在服务器上收到消息或命令后, 将应用在 Velocity 中计算的结果。 —— Velocity 官方文档
|
||||
|
||||
_此外由于其功能实现,它也能修复因缺少个人信钥而导致无法加入服务器等问题_
|
||||
_此外由于其功能实现,它也能修复因缺少个人信钥而导致无法加入服务器等问题_
|
||||
|
||||
|
@ -7,19 +7,19 @@ sidebar_position: 8
|
||||
|
||||
:::danger[非常危险]
|
||||
|
||||
不要不要不要给子服开公网!!!你的玩家只要靠跨服端就可以去到子服,如果你脑子有问题非要给子服开公网......这将会导致很多问题,比如绕过登录服随便登录别人账号,窃取 OP 账号权限等严重时可能会直接导致服务器被提权或后门等。
|
||||
不要不要不要给子服开公网!!!你的玩家只要靠跨服端就可以去到子服,如果你脑子有问题非要给子服开公网......这将会导致很多问题,比如绕过登录服随便登录别人账号,窃取 OP 账号权限等严重时可能会直接导致服务器被提权或后门等。
|
||||
|
||||
:::
|
||||
|
||||
## 不要给玩家 `/server` 权限
|
||||
|
||||
用 `菜单/npc` 或其他东西跨服,但是不要给玩家这个权限(玩家默认有),会被玩家发现服主的小 ♂ 秘 ♂ 密 ♂
|
||||
用 `菜单/npc` 或其他东西跨服,但是不要给玩家这个权限(玩家默认有),会被玩家发现服主的小 ♂ 秘 ♂ 密 ♂
|
||||
|
||||
这个权限默认是高于 Bukkit 插件权限的,也就是说玩家可以在未登录之前使用此命令跳转到另外一个服务器,如果另外的服务器没登陆插件,那么通过此方法就可以使用到 OP 账号
|
||||
这个权限默认是高于 Bukkit 插件权限的,也就是说玩家可以在未登录之前使用此命令跳转到另外一个服务器,如果另外的服务器没登陆插件,那么通过此方法就可以使用到 OP 账号
|
||||
|
||||
:::tip
|
||||
|
||||
如果你使用的是 AutheMe 登录插件,请务必在代理端安装对应的 AuthMe 插件,如 AuthMe-Velocity、AuthMeBungee 等插件
|
||||
如果你使用的是 AutheMe 登录插件,请务必在代理端安装对应的 AuthMe 插件,如 AuthMe-Velocity、AuthMeBungee 等插件
|
||||
|
||||
这样就可以避免一些此类问题了
|
||||
|
||||
@ -41,18 +41,18 @@ sidebar_position: 8
|
||||
/lpv group default permission set velocity.* false
|
||||
```
|
||||
|
||||
自己搭了个 vc 然后权限节点没有补全,你把权限全 `false` 了算了,反正玩家也用不到
|
||||
自己搭了个 vc 然后权限节点没有补全,你把权限全 `false` 了算了,反正玩家也用不到
|
||||
|
||||
## bc 的语义扩大
|
||||
|
||||
bc 这个缩写应只指 BungeeCord 核心
|
||||
|
||||
但是很多人用 bc 指 BungeeCord 和它的分支,甚至指所有的跨服端(把 Velocity 和包括进去了)
|
||||
但是很多人用 bc 指 BungeeCord 和它的分支,甚至指所有的跨服端(把 Velocity 和包括进去了)
|
||||
|
||||
希望在看的你用 bc 这个缩写时只用来指 BungeeCord 核心,避免产生不必要的误会
|
||||
希望在看的你用 bc 这个缩写时只用来指 BungeeCord 核心,避免产生不必要的误会
|
||||
|
||||
:::note
|
||||
|
||||
服务端有个命令是 `/bc` ,用来发公告的,这和此处的 BungeeCord 没有关系
|
||||
服务端有个命令是 `/bc` ,用来发公告的,这和此处的 BungeeCord 没有关系
|
||||
|
||||
:::
|
||||
|
@ -19,7 +19,7 @@ sidebar_position: 1
|
||||
|
||||
:::info
|
||||
|
||||
停止维护是指不再为其添加新功能或错误修补,
|
||||
停止维护是指不再为其添加新功能或错误修补,
|
||||
|
||||
Waterfall 仍然会合并来自 BungeeCord 的更改。
|
||||
|
||||
@ -27,21 +27,21 @@ Waterfall 仍然会合并来自 BungeeCord 的更改。
|
||||
|
||||
:::
|
||||
|
||||
目前为止,你可以选择以下核心进行转发:
|
||||
目前为止,你可以选择以下核心进行转发:
|
||||
|
||||
| 名称 | 介绍 | 推荐与否 | 下载镜像 |
|
||||
|-----------------------------------------------------------|-----------------------------------------|------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| [Waterfall](https://papermc.io/software/waterfall) | Papermc 对 BungeeCord 的分支,但已停止向其添加新功能 | 不推荐 | [McRes](https://mcres.cn/downloads/waterfall.html) [FastMirror](https://www.fastmirror.net/#/download/Waterfall) [原子云](https://res.nullatom.com/Minecraft/Server/Waterfall/) |
|
||||
| [Lightfall](https://github.com/ArclightPowered/lightfall) | Arclight waterfall的分支,支持forge玩家进入服务器 | - | [McRes](https://dev.mcres.cn/job/Lightfall/lastBuild/) [FastMirror](https://www.fastmirror.net/#/download/lightfall) |
|
||||
| [Velocity](https://papermc.io/software/velocity) | 新生代代理端核心,拥有高安全性和高性能,但是插件不如BungeeCord那边多 | 非常推荐 | [McRes(自己点进去找)](https://mcres.cn/) [FastMirror](https://www.fastmirror.net/#/download/Velocity) [原子云](https://res.nullatom.com/Minecraft/Server/Velocity/) |
|
||||
| [BungeeCord](https://github.com/SpigotMC/BungeeCord) | 最古老的代理端核心,甚至有网页版mc的核心 | - | [McRes](https://repo.wdsj.io/repository/Bungeecord/BungeeCord.jar) [FastMirror](https://www.fastmirror.net/#/download/BungeeCord) |
|
||||
| [Gate](https://gate.minekube.com/) | 基于Go开发的核心,拥有超高的性能和极低内存占用。 | - |
|
||||
| [Waterfall](https://papermc.io/software/waterfall) | Papermc 对 BungeeCord 的分支,但已停止向其添加新功能 | 不推荐 | [McRes](https://mcres.cn/downloads/waterfall.html) [FastMirror](https://www.fastmirror.net/#/download/Waterfall) [原子云](https://res.nullatom.com/Minecraft/Server/Waterfall/) |
|
||||
| [Lightfall](https://github.com/ArclightPowered/lightfall) | Arclight waterfall的分支,支持forge玩家进入服务器 | - | [McRes](https://dev.mcres.cn/job/Lightfall/lastBuild/) [FastMirror](https://www.fastmirror.net/#/download/lightfall) |
|
||||
| [Velocity](https://papermc.io/software/velocity) | 新生代代理端核心,拥有高安全性和高性能,但是插件不如BungeeCord那边多 | 非常推荐 | [McRes(自己点进去找)](https://mcres.cn/) [FastMirror](https://www.fastmirror.net/#/download/Velocity) [原子云](https://res.nullatom.com/Minecraft/Server/Velocity/) |
|
||||
| [BungeeCord](https://github.com/SpigotMC/BungeeCord) | 最古老的代理端核心,甚至有网页版mc的核心 | - | [McRes](https://repo.wdsj.io/repository/Bungeecord/BungeeCord.jar) [FastMirror](https://www.fastmirror.net/#/download/BungeeCord) |
|
||||
| [Gate](https://gate.minekube.com/) | 基于Go开发的核心,拥有超高的性能和极低内存占用。 | - |
|
||||
| [Travertine](https://github.com/PaperMC/Travertine) | Waterfall 1.7.10的分支 | - |
|
||||
|
||||
富哥的选择
|
||||
|
||||
| 名称 | 介绍 | 价格 |
|
||||
|----------------------------------------------------------------------------------|-----------------------------------------------------|-----------------------------------------|
|
||||
| [NullCordX](https://polymart.org/resource/nullcordx.1476/updates) | 基于反机器人原生构建的复杂瀑布叉,提高了性能 | 10美元 |
|
||||
| [XCord](https://builtbybit.com/resources/xcord-high-performance-anti-bot.16843/) | BC叉:高级反机器人 | 性能 反漏洞利用 Anti-SpigotExploit(1.7-1.20.4) | 10美元 |
|
||||
| [FlameCord](https://www.flamecord.com/) | 终极反机器人解决方案,Anti-VPN和高性能BungeeCord分叉,适用于Minecraft服务器 | 6美元(永久15美元) |
|
||||
| [NullCordX](https://polymart.org/resource/nullcordx.1476/updates) | 基于反机器人原生构建的复杂瀑布叉,提高了性能 | 10美元 |
|
||||
| [XCord](https://builtbybit.com/resources/xcord-high-performance-anti-bot.16843/) | BC叉:高级反机器人 | 性能 反漏洞利用 Anti-SpigotExploit(1.7-1.20.4) | 10美元 |
|
||||
| [FlameCord](https://www.flamecord.com/) | 终极反机器人解决方案,Anti-VPN和高性能BungeeCord分叉,适用于Minecraft服务器 | 6美元(永久15美元) |
|
||||
|
@ -5,7 +5,7 @@ sidebar_position: 3
|
||||
|
||||
# Folia
|
||||
|
||||
Folia 是 Paper 的一个分支,由 Minecraft 优化 BOSS Spottedleaf 开发。
|
||||
Folia 是 Paper 的一个分支,由 Minecraft 优化 BOSS Spottedleaf 开发。
|
||||
|
||||
## 简介
|
||||
|
||||
@ -45,9 +45,9 @@ Folia这么好,但并不是每个服务器都可以体验的,你需要确保你
|
||||
|
||||
## LightLuminol
|
||||
|
||||
LightingLuminol 是 Luminol 的分支,旨在修复对 BukkitAPI 的破坏,最大程度保证 Bukkit 插件的兼容性。但是,虽然LightLuminol对于Bukkit插兼容性较好,但是会有许多问题,包括不定时的NullPointerError,Thread不安全,内存泄露,数据丢失(一天崩个几十次,挺正常的)
|
||||
LightingLuminol 是 Luminol 的分支,旨在修复对 BukkitAPI 的破坏,最大程度保证 Bukkit 插件的兼容性。但是,虽然LightLuminol对于Bukkit插兼容性较好,但是会有许多问题,包括不定时的NullPointerError,Thread不安全,内存泄露,数据丢失(一天崩个几十次,挺正常的)
|
||||
|
||||
所以在开始使用LightingLuminol,请想想Leaf是不是更好?
|
||||
所以在开始使用LightingLuminol,请想想Leaf是不是更好?
|
||||
|
||||
如果你需要1.20.1/2,你可以使用[DirtyMolia](https://github.com/Era4FunMC/DirtyMolia)
|
||||
|
||||
@ -59,9 +59,9 @@ LightingLuminol 是 Luminol 的分支,旨在修复对 BukkitAPI 的破坏,
|
||||
|
||||
### 分配线程数
|
||||
|
||||
众所周知 Folia 默认的分配线程数非常脑瘫,会出现一核有难,八核围观的场景
|
||||
众所周知 Folia 默认的分配线程数非常脑瘫,会出现一核有难,八核围观的场景
|
||||
|
||||
打开Paper的全局配置,找到`threaded-regions.threads`,通常情况下,分配给区块 Tick 线程数应该是 80% 乘上你物理CPU核数
|
||||
打开Paper的全局配置,找到`threaded-regions.threads`,通常情况下,分配给区块 Tick 线程数应该是 80% 乘上你物理CPU核数
|
||||
|
||||
### 生电配置
|
||||
|
||||
|
@ -5,9 +5,9 @@ sidebar_position: 8
|
||||
|
||||
# 格式化代码
|
||||
|
||||
**格式化代码(Formatting code)**,又称**颜色代码(Color code)**,能使在游戏中加入含颜色和格式信息。
|
||||
**格式化代码(Formatting code)**,又称**颜色代码(Color code)**,能使在游戏中加入含颜色和格式信息。
|
||||
|
||||
在 Minecraft 中,可以以分节符号(`§`)产生带色文字。
|
||||
在 Minecraft 中,可以以分节符号(`§`)产生带色文字。
|
||||
|
||||
|
||||
![](_images/格式化代码/Minecraft_Formatting.gif)
|
||||
@ -17,17 +17,17 @@ sidebar_position: 8
|
||||
|
||||
:::note
|
||||
|
||||
通常在游戏客户端中,你不能打出 `§` 这个符号。需要使用 `\u00A7` 或者 `\u00a7`
|
||||
通常在游戏客户端中,你不能打出 `§` 这个符号。需要使用 `\u00A7` 或者 `\u00a7`
|
||||
|
||||
在配置文件中,你可以直接复制粘贴这个符号而不用自己输入。
|
||||
在配置文件中,你可以直接复制粘贴这个符号而不用自己输入。
|
||||
|
||||
你也可以在按住 `Alt` 键的同时,**小键盘** **按顺序** 输入 `167` 以输出 `§` 符号
|
||||
你也可以在按住 `Alt` 键的同时,**小键盘** **按顺序** 输入 `167` 以输出 `§` 符号
|
||||
|
||||
:::
|
||||
|
||||
:::tip
|
||||
|
||||
为了方便,多数插件的配置中支持使用 `&` 来代表 `§` 。
|
||||
为了方便,多数插件的配置中支持使用 `&` 来代表 `§` 。
|
||||
|
||||
比如下面这个 TrMenu 菜单例子:
|
||||
|
||||
@ -45,7 +45,7 @@ Icons:
|
||||
|
||||
:::
|
||||
|
||||
如果你想要更绚丽的颜色和更丰富的功能(比如点击文本执行命令)。
|
||||
如果你想要更绚丽的颜色和更丰富的功能(比如点击文本执行命令)。
|
||||
|
||||
可以去看 [MiniMessage](MiniMessage.md) 部分。
|
||||
|
||||
|
@ -5,25 +5,25 @@ sidebar_position: 2
|
||||
|
||||
# 基础
|
||||
|
||||
> 动作,又称语句,每个动作都功能明确,如:Tell(输出文本)
|
||||
> 动作,又称语句,每个动作都功能明确,如:Tell(输出文本)
|
||||
|
||||
在这一节中,我将告诉你在 kether 中的一些基本概念
|
||||
在这一节中,我将告诉你在 kether 中的一些基本概念
|
||||
|
||||
我们先了解几个简单的动作
|
||||
|
||||
## 输出文本(Tell)
|
||||
## 输出文本(Tell)
|
||||
|
||||
> https://kether.tabooproject.org/list.html#Tell
|
||||
|
||||
![](_images/vul-tell.png)
|
||||
|
||||
这个动作的作用是给玩家发送一条信息(图中的 1 )
|
||||
这个动作的作用是给玩家发送一条信息(图中的 1 )
|
||||
|
||||
下面的 `< > Result:` 是动作的返回值(下面会讲)
|
||||
下面的 `< > Result:` 是动作的返回值(下面会讲)
|
||||
|
||||
:::note
|
||||
|
||||
非调试(/vul evel)是不会看到这个的
|
||||
非调试(/vul evel)是不会看到这个的
|
||||
|
||||
![](_images/result.png)
|
||||
|
||||
@ -31,13 +31,13 @@ sidebar_position: 2
|
||||
|
||||
:::
|
||||
|
||||
然而,他不能搞颜色
|
||||
然而,他不能搞颜色
|
||||
|
||||
![](_images/vul-tell_noColor.png)
|
||||
|
||||
我们可以用下面的 `color Text` 动作来搞颜色
|
||||
|
||||
## 彩色(color Text)
|
||||
## 彩色(color Text)
|
||||
|
||||
> https://kether.tabooproject.org/list.html#Color_Text
|
||||
|
||||
@ -45,11 +45,11 @@ sidebar_position: 2
|
||||
|
||||
这里要用 `" "` 把要打印的信息包裹起来
|
||||
|
||||
否则他会把这个当成变量,具体的会在后面讲到
|
||||
否则他会把这个当成变量,具体的会在后面讲到
|
||||
|
||||
:::note
|
||||
|
||||
值得一提的是,Invero插件会自动翻译tell中的颜色,内联,papi
|
||||
值得一提的是,Invero插件会自动翻译tell中的颜色,内联,papi
|
||||
|
||||
:::
|
||||
|
||||
@ -57,15 +57,15 @@ sidebar_position: 2
|
||||
|
||||
![](_images/vul-tell_color.png)
|
||||
|
||||
我们同时使用了 tell 和 color 两个语句,打印了带颜色的信息给玩家看
|
||||
我们同时使用了 tell 和 color 两个语句,打印了带颜色的信息给玩家看
|
||||
|
||||
## 语句的返回值
|
||||
|
||||
![](_images/vul-color.png)
|
||||
|
||||
在使用 `/vul evel` 时,语句的返回值会在 `< > Result:` 显示
|
||||
在使用 `/vul evel` 时,语句的返回值会在 `< > Result:` 显示
|
||||
|
||||
于是我们可以知道,`color` 动作先翻译了颜色,然后把翻译好的交给了 `Tell` 动作
|
||||
于是我们可以知道,`color` 动作先翻译了颜色,然后把翻译好的交给了 `Tell` 动作
|
||||
|
||||
所以动作的执行顺序为:color -> tell
|
||||
|
||||
@ -75,7 +75,7 @@ sidebar_position: 2
|
||||
|
||||
![](_images/痴呆.jpg)
|
||||
|
||||
## \{action\},\{token\}和Literal
|
||||
## \{action\},\{token\}和Literal
|
||||
|
||||
查阅 https://kether.tabooproject.org/list.html 我们可以发现
|
||||
|
||||
@ -90,25 +90,25 @@ sidebar_position: 2
|
||||
- `{action}` 这里要写一个语句
|
||||
- `{token}` 写固定不变的内容
|
||||
|
||||
所以在 [语句的连用](#语句的连用) 那里,我们可以在 `tell` 后面接一个 `color` 动作
|
||||
所以在 [语句的连用](#语句的连用) 那里,我们可以在 `tell` 后面接一个 `color` 动作
|
||||
|
||||
那么问题来了,为什么在 [Tell](#输出文本tell) 那里可以接一句话(此处写了个1)?
|
||||
那么问题来了,为什么在 [Tell](#输出文本tell) 那里可以接一句话(此处写了个1)?
|
||||
|
||||
![](_images/vul-tell.png)
|
||||
|
||||
因为在这个示例中,kether找不到名为 `1` 的动作,所以用了 `Literal` 动作将他转为字符串
|
||||
因为在这个示例中,kether找不到名为 `1` 的动作,所以用了 `Literal` 动作将他转为字符串
|
||||
|
||||
> https://kether.tabooproject.org/list.html#Literal
|
||||
|
||||
它给出的使用方式:`literal {token} | {token}`
|
||||
|
||||
两种使用方式,特别是后一种,你随便写点啥,只要不是已有的动作,它最后就会被转为字符串
|
||||
两种使用方式,特别是后一种,你随便写点啥,只要不是已有的动作,它最后就会被转为字符串
|
||||
|
||||
## 变量(PlaceholderAPI)
|
||||
## 变量(PlaceholderAPI)
|
||||
|
||||
> https://kether.tabooproject.org/list.html#PlaceholderAPI
|
||||
|
||||
翻译一个papi变量(如图)
|
||||
翻译一个papi变量(如图)
|
||||
|
||||
![](_images/vul-papi.png)
|
||||
|
||||
@ -116,17 +116,17 @@ sidebar_position: 2
|
||||
papi {action} | placeholder {action}
|
||||
```
|
||||
|
||||
两种用法,papi是简写
|
||||
两种用法,papi是简写
|
||||
|
||||
## inline和join
|
||||
|
||||
![](_images/vul-tell_papiNoInline.png)
|
||||
|
||||
假如你用的那个插件不会给你自动翻译动作中的papi,阁下又当如何应对?
|
||||
假如你用的那个插件不会给你自动翻译动作中的papi,阁下又当如何应对?
|
||||
|
||||
> https://kether.tabooproject.org/list.html#Inline
|
||||
|
||||
`内联(inline)` 动作!在一段文本中插入 kether !
|
||||
`内联(inline)` 动作!在一段文本中插入 kether !
|
||||
|
||||
用法为:
|
||||
|
||||
@ -134,17 +134,17 @@ papi {action} | placeholder {action}
|
||||
inline "阿巴阿巴{{你要用的kether}}qwq"
|
||||
```
|
||||
|
||||
比如上面的案例中,可以这样做
|
||||
比如上面的案例中,可以这样做
|
||||
|
||||
```
|
||||
/vul eval tell inline "我叫{{papi %player_name%}},我今年{{papi %player_level%}}级了"
|
||||
/vul eval tell inline "我叫{{papi %player_name%}},我今年{{papi %player_level%}}级了"
|
||||
```
|
||||
|
||||
![](_images/vul-tell_papiWithInline.png)
|
||||
|
||||
> https://kether.tabooproject.org/list.html#Join
|
||||
|
||||
而 `join` 则是可以把多个动作拼接在一起,很多时候 `inline` 和 `join` 可以互相替代
|
||||
而 `join` 则是可以把多个动作拼接在一起,很多时候 `inline` 和 `join` 可以互相替代
|
||||
|
||||
用法为:
|
||||
```
|
||||
@ -152,10 +152,10 @@ join [ 动作1 动作2 动作3 更多 ]
|
||||
```
|
||||
动作之间要空格
|
||||
|
||||
在上面的案例中,可以这样做
|
||||
在上面的案例中,可以这样做
|
||||
|
||||
```
|
||||
/vul eval tell join [ "我叫" papi %player_name% ",我今年" papi %player_level% "级了" ]
|
||||
/vul eval tell join [ "我叫" papi %player_name% ",我今年" papi %player_level% "级了" ]
|
||||
```
|
||||
|
||||
![](_images/vul-tell_papiWithJoin.png)
|
||||
@ -174,9 +174,9 @@ player [(display|list) ] name
|
||||
|
||||
> 该语句没有在官方文档中给出
|
||||
|
||||
> 它的作用是获取脚本执行者的名字。跟 player name 作用类似,它也能用来获取玩家的名字,并且都没有参数。
|
||||
> 除此之外,当控制台作为脚本执行者时,它还能获取控制台的名字:console,只不过这并没有什么用而已。
|
||||
> 但它的优点在于不依赖玩家执行,相对来说会比 player name 更安全保守一些。
|
||||
> 它的作用是获取脚本执行者的名字。跟 player name 作用类似,它也能用来获取玩家的名字,并且都没有参数。
|
||||
> 除此之外,当控制台作为脚本执行者时,它还能获取控制台的名字:console,只不过这并没有什么用而已。
|
||||
> 但它的优点在于不依赖玩家执行,相对来说会比 player name 更安全保守一些。
|
||||
> 摘自 https://www.yuque.com/sacredcraft/kether/action-start#su0PY
|
||||
|
||||
### papi %player_name%
|
||||
|
@ -9,7 +9,7 @@ sidebar_position: 6
|
||||
|
||||
## inline
|
||||
|
||||
inline是在一段文本中插入语句,实际上会创造一个新的 kether 环境
|
||||
inline是在一段文本中插入语句,实际上会创造一个新的 kether 环境
|
||||
|
||||
例如这个 TrMenu 例子中:
|
||||
```yaml
|
||||
@ -25,15 +25,15 @@ inline是在一段文本中插入语句,实际上会创造一个新的 kether
|
||||
|
||||
而第二个 tell 打印了空值
|
||||
|
||||
因为第二个 tell 后面是一个新的 kether 环境,里面没有原 kether 环境里的变量
|
||||
因为第二个 tell 后面是一个新的 kether 环境,里面没有原 kether 环境里的变量
|
||||
|
||||
同时,你也不能使用原插件提供的 kether 私有语句,不过你可以尝试 [导入语句](https://www.yuque.com/sacredcraft/kether/namespace#zVbkg)
|
||||
同时,你也不能使用原插件提供的 kether 私有语句,不过你可以尝试 [导入语句](https://www.yuque.com/sacredcraft/kether/namespace#zVbkg)
|
||||
|
||||
![](_images/inline.png)
|
||||
|
||||
## join
|
||||
|
||||
join 是拼接多个语句,不会像 inline 那样创造新的环境,所以没有上述特性,join 里的语句会使用原 kether 环境
|
||||
join 是拼接多个语句,不会像 inline 那样创造新的环境,所以没有上述特性,join 里的语句会使用原 kether 环境
|
||||
|
||||
## 行内复合文本
|
||||
|
||||
|
@ -5,49 +5,49 @@ sidebar_position: 3
|
||||
|
||||
# 逻辑判断
|
||||
|
||||
## 布尔值(boolean)
|
||||
## 布尔值(boolean)
|
||||
|
||||
它只有两个取值,即 **真(true)** 和 **假(false)**
|
||||
它只有两个取值,即 **真(true)** 和 **假(false)**
|
||||
|
||||
或者说,**是(true)** 和 **否(false)**
|
||||
或者说,**是(true)** 和 **否(false)**
|
||||
|
||||
## 权限判断(Permission)
|
||||
## 权限判断(Permission)
|
||||
|
||||
> https://kether.tabooproject.org/list.html#Permission
|
||||
|
||||
判断玩家是否拥有某权限,如果是,则返回 **true** ,否,则返回 **false**
|
||||
判断玩家是否拥有某权限,如果是,则返回 **true** ,否,则返回 **false**
|
||||
|
||||
![](_images/vul-perm.png)
|
||||
|
||||
我是op,所以我拥有此权限,返回了 true
|
||||
我是op,所以我拥有此权限,返回了 true
|
||||
|
||||
同 [PlaceholderAPI](basic.md#变量placeholderapi) 一样,**Permission** 也有一个简写 **perm**
|
||||
同 [PlaceholderAPI](basic.md#变量placeholderapi) 一样,**Permission** 也有一个简写 **perm**
|
||||
|
||||
## 判断为否(Not)
|
||||
## 判断为否(Not)
|
||||
|
||||
上面是判断拥有此权限,那么我如何判断不拥有此权限呢?
|
||||
上面是判断拥有此权限,那么我如何判断不拥有此权限呢?
|
||||
|
||||
![](_images/vul-permNot_1.png)
|
||||
|
||||
![](_images/正经笑.jpg)
|
||||
|
||||
咳咳,开玩笑的,驿站怎么可能用过这么傻逼的写法呢
|
||||
咳咳,开玩笑的,驿站怎么可能用过这么傻逼的写法呢
|
||||
|
||||
![](_images/冒汗.jpg)
|
||||
|
||||
> https://kether.tabooproject.org/list.html#Not
|
||||
|
||||
> 判断动作的返回值是否为否,即否定动作的结果。
|
||||
> 判断动作的返回值是否为否,即否定动作的结果。
|
||||
|
||||
![](_images/vul-permNot_2.png)
|
||||
|
||||
因为我拥有此权限,所以 perm 判断是 true
|
||||
因为我拥有此权限,所以 perm 判断是 true
|
||||
|
||||
接着因为 not,最后的结果是 false
|
||||
接着因为 not,最后的结果是 false
|
||||
|
||||
perm -> not
|
||||
|
||||
## 判断(Check)
|
||||
## 判断(Check)
|
||||
|
||||
> https://kether.tabooproject.org/list.html#Check
|
||||
|
||||
@ -59,20 +59,20 @@ check 动作1 {symbol} 动作2
|
||||
|
||||
具体判断关系由中间的符号参数 Symbol 决定
|
||||
|
||||
1. 等于(==、is):指两个值字面意思上相同。
|
||||
2. 不等于(!=、not):指两个值字面意思上不同。
|
||||
3. 相似等于(=?、is?):指两个值字面意思上忽略大小写的条件下相同。
|
||||
4. 绝对等于(=!、is!):指两个值内存路径上相同。
|
||||
5. 大于(>、gt):指第一个值大于第二个值。
|
||||
6. 大于等于(>=):指第一个值大于或等于第二个值。
|
||||
7. 小于(\<、lt):指第一个值小于第二个值。
|
||||
8. 小于等于(\<=):指第一个值小于或等于第二个值。
|
||||
9. 右含左(in):左侧 action A 的返回值是否属于右侧 action B 返回值的内容之一
|
||||
10. 左含右(has):左侧 action A 是否含有右侧 action B 内容
|
||||
1. 等于(==、is):指两个值字面意思上相同。
|
||||
2. 不等于(!=、not):指两个值字面意思上不同。
|
||||
3. 相似等于(=?、is?):指两个值字面意思上忽略大小写的条件下相同。
|
||||
4. 绝对等于(=!、is!):指两个值内存路径上相同。
|
||||
5. 大于(>、gt):指第一个值大于第二个值。
|
||||
6. 大于等于(>=):指第一个值大于或等于第二个值。
|
||||
7. 小于(\<、lt):指第一个值小于第二个值。
|
||||
8. 小于等于(\<=):指第一个值小于或等于第二个值。
|
||||
9. 右含左(in):左侧 action A 的返回值是否属于右侧 action B 返回值的内容之一
|
||||
10. 左含右(has):左侧 action A 是否含有右侧 action B 内容
|
||||
|
||||
![](_images/vul-check.png)
|
||||
|
||||
## 分支判断(if esle)
|
||||
## 分支判断(if esle)
|
||||
|
||||
> https://kether.tabooproject.org/list.html#If_&_Else
|
||||
|
||||
@ -84,11 +84,11 @@ check 动作1 {symbol} 动作2
|
||||
|
||||
条件判断为 **true** 则执行 then 后面的动作
|
||||
|
||||
注:这里的条件也是指动作,即 动作的返回值为 **true** 则执行 then 后面的动作
|
||||
注:这里的条件也是指动作,即 动作的返回值为 **true** 则执行 then 后面的动作
|
||||
|
||||
![](_images/if_1.png)
|
||||
|
||||
上面只是执行单个动作,那么,如何让他判断 **true** 后执行多行动作?
|
||||
上面只是执行单个动作,那么,如何让他判断 **true** 后执行多行动作?
|
||||
|
||||
```
|
||||
if 条件 then {
|
||||
@ -141,7 +141,7 @@ if 条件1 then {
|
||||
}
|
||||
```
|
||||
|
||||
## 多分支(Case & When)
|
||||
## 多分支(Case & When)
|
||||
|
||||
> https://kether.tabooproject.org/list.html#Case_&_When
|
||||
|
||||
@ -195,7 +195,7 @@ case 1 [
|
||||
|
||||
## 多条件判断
|
||||
|
||||
### 全部满足(All)
|
||||
### 全部满足(All)
|
||||
|
||||
> https://kether.tabooproject.org/list.html#All
|
||||
|
||||
@ -210,11 +210,11 @@ all [ 动作1 动作2 动作3 更多 ]
|
||||
/vul eval if all [ perm vulpecula.command not perm luckperms.editor ] then tell 通过 else 不通过
|
||||
```
|
||||
|
||||
玩家拥有权限 vulpecula.command 没有权限 luckperms.editor 则通过,否则不通过
|
||||
玩家拥有权限 vulpecula.command 没有权限 luckperms.editor 则通过,否则不通过
|
||||
|
||||
![](_images/if_2.png)
|
||||
|
||||
### 一个满足(Any)
|
||||
### 一个满足(Any)
|
||||
|
||||
> https://kether.tabooproject.org/list.html#Any
|
||||
|
||||
@ -254,7 +254,7 @@ any [
|
||||
|
||||
#### 判断null字符串
|
||||
|
||||
如果一个动作,变量,或者其他什么东西会有输出null的情况,而你想判断这个情况
|
||||
如果一个动作,变量,或者其他什么东西会有输出null的情况,而你想判断这个情况
|
||||
|
||||
但是 `null` 是一个已有的动作:https://kether.tabooproject.org/list.html#Null
|
||||
|
||||
|
@ -6,7 +6,7 @@ sidebar_position: 12
|
||||
|
||||
# 概览
|
||||
|
||||
kether 并不是一个插件,而是使用 Taboolib 框架开发的插件(如TrMenu,TrChat,Adyeshach)所使用的脚本语言。
|
||||
kether 并不是一个插件,而是使用 Taboolib 框架开发的插件(如TrMenu,TrChat,Adyeshach)所使用的脚本语言。
|
||||
|
||||
推荐教程:https://www.yuque.com/sacredcraft/kether
|
||||
|
||||
|
@ -29,7 +29,7 @@ math * [ 3 2 5 ]
|
||||
math div [ 6 2 ]
|
||||
math / [ 6 2 ]
|
||||
```
|
||||
除了上面几种用法,Math 还有一种比较舒服的写法:
|
||||
除了上面几种用法,Math 还有一种比较舒服的写法:
|
||||
|
||||
```
|
||||
/* 计算 1 + 3 x 6 ÷ 3 - 2 */
|
||||
@ -53,7 +53,7 @@ math 1 + 3 * 5 / 6 - 2
|
||||
- 乘法:a * b
|
||||
- 除法:a / b
|
||||
|
||||
- 取余:取余操作使用 % 符号。例如,计算 10 除以 3 的余数:10 % 3。
|
||||
- 取余:取余操作使用 % 符号。例如,计算 10 除以 3 的余数:10 % 3。
|
||||
|
||||
当然也可以使用括号:
|
||||
|
||||
|
@ -5,9 +5,9 @@ sidebar_position: 1
|
||||
|
||||
# 安装教学插件
|
||||
|
||||
在本篇教程中,我将使用 [Vulpecula](https://www.yuque.com/lanscarlos/vulpecula-wiki-v2)
|
||||
在本篇教程中,我将使用 [Vulpecula](https://www.yuque.com/lanscarlos/vulpecula-wiki-v2)
|
||||
|
||||
你可以点击 [此处](https://github.com/Lanscarlos/Vulpecula) 跳转到 GitHub ,从 Actions 中下载
|
||||
你可以点击 [此处](https://github.com/Lanscarlos/Vulpecula) 跳转到 GitHub ,从 Actions 中下载
|
||||
|
||||
或者加入他的 QQ交流群 759705478 从群文件下载
|
||||
|
||||
@ -25,7 +25,7 @@ sidebar_position: 1
|
||||
|
||||
**别的插件执行kether?**
|
||||
|
||||
好吧,如果你已经安装了其他可以用命令调试kether的插件......
|
||||
好吧,如果你已经安装了其他可以用命令调试kether的插件......
|
||||
|
||||
**TrMenu v3**
|
||||
|
||||
|
@ -14,7 +14,7 @@ sidebar_position: 4
|
||||
|
||||
</details>
|
||||
|
||||
### 类型转换(Type)
|
||||
### 类型转换(Type)
|
||||
|
||||
> https://kether.tabooproject.org/list.html#Type
|
||||
|
||||
@ -28,7 +28,7 @@ type {token} | type {type} {action}
|
||||
|
||||
TODO
|
||||
|
||||
## 变量(Variable)
|
||||
## 变量(Variable)
|
||||
|
||||
在这里想一个非常巧妙的比喻
|
||||
|
||||
@ -36,9 +36,9 @@ TODO
|
||||
|
||||
## kether
|
||||
|
||||
此处讲解 kether 自己的变量,此变量特点是 kether 环境摧毁就消失
|
||||
此处讲解 kether 自己的变量,此变量特点是 kether 环境摧毁就消失
|
||||
|
||||
比如:TrMenu 关闭菜单,Vulpecula 的命令执行完成
|
||||
比如:TrMenu 关闭菜单,Vulpecula 的命令执行完成
|
||||
|
||||
### 基础
|
||||
|
||||
@ -49,7 +49,7 @@ TODO
|
||||
set {token} {token} | set {token} to {action}
|
||||
```
|
||||
|
||||
注意上面的语法,前者只能输入固定内容,后者可以把动作的返回值传入变量
|
||||
注意上面的语法,前者只能输入固定内容,后者可以把动作的返回值传入变量
|
||||
|
||||
![](_images/var_1.png)
|
||||
|
||||
@ -67,13 +67,13 @@ get {token} | &{token}
|
||||
|
||||
啪!空的!
|
||||
|
||||
我擦嘞,这是咋回事?
|
||||
我擦嘞,这是咋回事?
|
||||
|
||||
还记得我说过的吗
|
||||
|
||||
> 此变量特点是 kether 环境摧毁就消失
|
||||
|
||||
是的,当你执行完 `/vul eval set yizhan to 114514` 之后,kether环境已经被摧毁了,所以这个变量就消失了
|
||||
是的,当你执行完 `/vul eval set yizhan to 114514` 之后,kether环境已经被摧毁了,所以这个变量就消失了
|
||||
|
||||
正确做法:
|
||||
|
||||
@ -85,14 +85,14 @@ get {token} | &{token}
|
||||
|
||||
成功得到了变量里的内容!
|
||||
|
||||
对于获取变量,我们有个更简单的办法 `&{token}`
|
||||
对于获取变量,我们有个更简单的办法 `&{token}`
|
||||
|
||||
![](_images/var_4.png)
|
||||
|
||||
看到这里,你就应该知道,为什么前面讲 [彩色(color Text)](basic.md#彩色color-text) 动作的时候会说
|
||||
看到这里,你就应该知道,为什么前面讲 [彩色(color Text)](basic.md#彩色color-text) 动作的时候会说
|
||||
|
||||
> 这里要用 `" "` 把要打印的信息包裹起来
|
||||
> 否则他会把这个当成变量,具体的会在后面讲到
|
||||
> 否则他会把这个当成变量,具体的会在后面讲到
|
||||
|
||||
### array
|
||||
|
||||
@ -100,7 +100,7 @@ get {token} | &{token}
|
||||
|
||||
> https://kether.tabooproject.org/list.html#Array
|
||||
|
||||
这也是一个动作,作用是
|
||||
这也是一个动作,作用是
|
||||
|
||||
> 将动作列表的所有返回值作为集合返回。
|
||||
|
||||
@ -113,11 +113,11 @@ array [ 动作1 动作2 动作3 更多 ]
|
||||
|
||||
![](_images/var_5.png)
|
||||
|
||||
在这个集合中,数据被英文 `,` 分割开来,我们称为 **元素**
|
||||
在这个集合中,数据被英文 `,` 分割开来,我们称为 **元素**
|
||||
|
||||
比如在上面共有三个元素:`HelloWord!` `postyizhan` `0.0`
|
||||
|
||||
接下来,我们把数组存进变量里
|
||||
接下来,我们把数组存进变量里
|
||||
|
||||
```
|
||||
set yizhan to array [ HelloWord! player name 0.0 ]
|
||||
@ -127,7 +127,7 @@ set yizhan to array [ HelloWord! player name 0.0 ]
|
||||
|
||||
如果我们只需要获取某数组中其中一个元素的值该怎么办?
|
||||
|
||||
我们给每个元素都标上号,然后获取指定号数的就好啦!`&变量名[标号]`
|
||||
我们给每个元素都标上号,然后获取指定号数的就好啦!`&变量名[标号]`
|
||||
|
||||
![](_images/var_6.png)
|
||||
|
||||
@ -141,7 +141,7 @@ set yizhan to array [ HelloWord! player name 0.0 ]
|
||||
|
||||
除了上面的 `&变量名[标号]`
|
||||
|
||||
我们还有一种办法获取到指定元素的值,那就是 `element` 动作
|
||||
我们还有一种办法获取到指定元素的值,那就是 `element` 动作
|
||||
|
||||
![](_images/var_7.png)
|
||||
|
||||
|
@ -5,11 +5,11 @@ sidebar_position: 7
|
||||
|
||||
# 登录方式
|
||||
|
||||
在开启服务器之前,选择合适的登录方式至关重要。这不仅关系到玩家们的 **生命财产安全**,还涉及到服务器的管理和稳定性。因此,请在选择时务必 **慎重** 考虑!
|
||||
在开启服务器之前,选择合适的登录方式至关重要。这不仅关系到玩家们的 **生命财产安全**,还涉及到服务器的管理和稳定性。因此,请在选择时务必 **慎重** 考虑!
|
||||
|
||||
:::danger
|
||||
|
||||
一旦选定了登录方式,请尽量不要更换它,除非你了解这样做的风险和后果!
|
||||
一旦选定了登录方式,请尽量不要更换它,除非你了解这样做的风险和后果!
|
||||
|
||||
:::
|
||||
|
||||
@ -17,40 +17,40 @@ sidebar_position: 7
|
||||
|
||||
通用外置登录是基于分析 `Minecraft 官方 Yggdrasil 认证服务器` 的行为总结出来的一种外置登录方式。
|
||||
|
||||
它的特点是玩家只需在 `Minecraft 启动器` 上完成账号登录,在进入服务器时会使用会话登录自动加入游戏。
|
||||
它的特点是玩家只需在 `Minecraft 启动器` 上完成账号登录,在进入服务器时会使用会话登录自动加入游戏。
|
||||
|
||||
|
||||
在这种登录方式下,玩家的游戏档案(包括皮肤和玩家UUID)由 `Yggdrasil` 决定。因此,选择一个 **可信任** 的外置身份验证服务器非常非常非常非常重要。
|
||||
在这种登录方式下,玩家的游戏档案(包括皮肤和玩家UUID)由 `Yggdrasil` 决定。因此,选择一个 **可信任** 的外置身份验证服务器非常非常非常非常重要。
|
||||
|
||||
### 正版登录
|
||||
|
||||
正版登录是绝大多数服务端默认设置的登录方式,仅允许 Minecraft Java 正版 用户加入游戏,使用 Mojang 的身份认证服务器来验证玩家身份和分配游戏档案数据。
|
||||
正版登录是绝大多数服务端默认设置的登录方式,仅允许 Minecraft Java 正版 用户加入游戏,使用 Mojang 的身份认证服务器来验证玩家身份和分配游戏档案数据。
|
||||
|
||||
**优点:**
|
||||
|
||||
* 数据包通讯全程加密,确保游戏数据安全。
|
||||
* 服务端默认配置,无需额外配置。
|
||||
* 数据包通讯全程加密,确保游戏数据安全。
|
||||
* 服务端默认配置,无需额外配置。
|
||||
* 身份验证服务值得信赖。
|
||||
* 支持自定义角色皮肤以及更改角色名字。
|
||||
|
||||
**缺点:**
|
||||
|
||||
* 身份验证服务器位于国外,可能因网络问题导致会话验证失败。
|
||||
* 需要购买正版游戏,限制了一部分玩家。
|
||||
* 身份验证服务器位于国外,可能因网络问题导致会话验证失败。
|
||||
* 需要购买正版游戏,限制了一部分玩家。
|
||||
|
||||
### Authlib-Injector实现的外置登录
|
||||
|
||||
[Authlib-Injector](https://github.com/yushijinhun/authlib-injector) 是一个允许 Minecraft 使用自定义 Yggdrasil 验证服务器的工具。它可以提供与正版登录几乎相同的游戏体验,但使用的是非官方的身份验证服务器。
|
||||
[Authlib-Injector](https://github.com/yushijinhun/authlib-injector) 是一个允许 Minecraft 使用自定义 Yggdrasil 验证服务器的工具。它可以提供与正版登录几乎相同的游戏体验,但使用的是非官方的身份验证服务器。
|
||||
|
||||
:::info
|
||||
|
||||
Authlib-Injector 仅作为工具,它本身不提供认证服务。你需要找到一个合适的、完全实现了 [Yggdrasil 服务端技术规范](https://github.com/yushijinhun/authlib-injector/wiki/Yggdrasil-%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%8A%80%E6%9C%AF%E8%A7%84%E8%8C%83) 的认证服务提供商,比如:
|
||||
Authlib-Injector 仅作为工具,它本身不提供认证服务。你需要找到一个合适的、完全实现了 [Yggdrasil 服务端技术规范](https://github.com/yushijinhun/authlib-injector/wiki/Yggdrasil-%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%8A%80%E6%9C%AF%E8%A7%84%E8%8C%83) 的认证服务提供商,比如:
|
||||
* [LittleSkin](https://littleskin.cn/)
|
||||
* [红石皮肤站](https://mcskin.com.cn/)
|
||||
|
||||
|
||||
:::warning
|
||||
**不能确保以上列出的所有服务提供商绝对安全可靠,请注意甄别**
|
||||
**不能确保以上列出的所有服务提供商绝对安全可靠,请注意甄别**
|
||||
:::
|
||||
|
||||
**优点:**
|
||||
@ -59,27 +59,27 @@ Authlib-Injector 仅作为工具,它本身不提供认证服务。你需要找
|
||||
|
||||
**缺点:**
|
||||
* 需要使用受支持的启动器。
|
||||
* 配置和登录相对复杂,有一定的接受和学习成本。
|
||||
* 配置和登录相对复杂,有一定的接受和学习成本。
|
||||
* 部分玩家可能不接受非正版的外置登录。
|
||||
* 需要考虑认证服务的可信度。
|
||||
|
||||
:::danger
|
||||
|
||||
由于 Yggdrasil 拥有绝对的游戏外账号管理权,即使在游戏内实施了多重安全保障措施,也无法完全确保账号安全。因此,建议选择 **值得信赖的服务商** 或自行搭建认证服务器!
|
||||
由于 Yggdrasil 拥有绝对的游戏外账号管理权,即使在游戏内实施了多重安全保障措施,也无法完全确保账号安全。因此,建议选择 **值得信赖的服务商** 或自行搭建认证服务器!
|
||||
|
||||
在极端情况下,如果你的竞争对手贿赂或收买了你正在使用的 Yggdrasil 服务提供商,你的服务器就完了。最轻的情况是所有用户都获得了管理权限(全员OP),而最严重的情况则可能导致服务器完全崩溃,造成不可估量的损失!!!
|
||||
在极端情况下,如果你的竞争对手贿赂或收买了你正在使用的 Yggdrasil 服务提供商,你的服务器就完了。最轻的情况是所有用户都获得了管理权限(全员OP),而最严重的情况则可能导致服务器完全崩溃,造成不可估量的损失!!!
|
||||
|
||||
:::
|
||||
|
||||
## 内置登录
|
||||
|
||||
内置登录,也称为离线模式,允许未经过认证的用户以自定义用户名加入游戏,此种模式下,
|
||||
玩家只需输入任意有效的游戏ID即可加入服务器,皮肤是随机分配的,UUID则由服务器根据用户名生成。
|
||||
内置登录,也称为离线模式,允许未经过认证的用户以自定义用户名加入游戏,此种模式下,
|
||||
玩家只需输入任意有效的游戏ID即可加入服务器,皮肤是随机分配的,UUID则由服务器根据用户名生成。
|
||||
|
||||
:::danger
|
||||
|
||||
内置登录模式安全性较低,通常在玩家登录服务器后才进行验证。
|
||||
在验证通过之前,玩家在游戏中的行为可能仅依靠第三方登录插件来限制。
|
||||
内置登录模式安全性较低,通常在玩家登录服务器后才进行验证。
|
||||
在验证通过之前,玩家在游戏中的行为可能仅依靠第三方登录插件来限制。
|
||||
恶意用户可以利用这一点进行假人压测、干扰或盗号行为。
|
||||
|
||||
:::
|
||||
@ -95,55 +95,55 @@ Authlib-Injector 仅作为工具,它本身不提供认证服务。你需要找
|
||||
|
||||
## 自定义登录
|
||||
|
||||
自定义登录通常需要客户端安装MOD来辅助登录。根据登录时机的不同,它可以属于内置登录或外置登录。由于市场上自定义登录程序较少,安全性难以评估,这里不做详细讨论。
|
||||
自定义登录通常需要客户端安装MOD来辅助登录。根据登录时机的不同,它可以属于内置登录或外置登录。由于市场上自定义登录程序较少,安全性难以评估,这里不做详细讨论。
|
||||
|
||||
## 无登录
|
||||
|
||||
:::danger
|
||||
|
||||
不推荐在没有任何登录方式的情况下运行服务器,除非你完全清楚这样做的目的和风险。
|
||||
不推荐在没有任何登录方式的情况下运行服务器,除非你完全清楚这样做的目的和风险。
|
||||
|
||||
:::
|
||||
|
||||
## 多重验证登录
|
||||
|
||||
多重验证登录是指服务器同时启用两种或多种验证方式,用户必须通过所有验证才能登录。这种方式通常适用于需要严格控制的账号(比如管理员),但对所有玩家启用会增加登录复杂性和成本。
|
||||
多重验证登录是指服务器同时启用两种或多种验证方式,用户必须通过所有验证才能登录。这种方式通常适用于需要严格控制的账号(比如管理员),但对所有玩家启用会增加登录复杂性和成本。
|
||||
|
||||
## 混合验证登录
|
||||
|
||||
混合验证登录允许服务器提供多种验证方式,供玩家选择。
|
||||
混合验证登录允许服务器提供多种验证方式,供玩家选择。
|
||||
|
||||
:::danger
|
||||
|
||||
这种方式适用于兼容多种登录方式的需求,但通常会增加维护难度和安全风险。
|
||||
这种方式适用于兼容多种登录方式的需求,但通常会增加维护难度和安全风险。
|
||||
|
||||
如果没有明确的需求,不建议使用混合验证登录。任何实现混合登录的尝试都可能增加维护成本和复杂性,增加安全隐患。
|
||||
如果没有明确的需求,不建议使用混合验证登录。任何实现混合登录的尝试都可能增加维护成本和复杂性,增加安全隐患。
|
||||
|
||||
:::
|
||||
|
||||
### Floodgate(正版登录和基岩(Xbox)登录共存)
|
||||
### Floodgate(正版登录和基岩(Xbox)登录共存)
|
||||
|
||||
Floodgate 是一个允许使用 Minecraft 基岩版的游戏绕过 `通用外置登录` 直接加入游戏的逆天插件,它可以说也是一种混合验证登录插件,能让正版和基岩版共存。
|
||||
Floodgate 是一个允许使用 Minecraft 基岩版的游戏绕过 `通用外置登录` 直接加入游戏的逆天插件,它可以说也是一种混合验证登录插件,能让正版和基岩版共存。
|
||||
|
||||
其中基岩版的玩家 UUID 由 Floodgate 通过 `Xbox账号的XUID` 来生成,UUID碰撞风险极低。
|
||||
其中基岩版的玩家 UUID 由 Floodgate 通过 `Xbox账号的XUID` 来生成,UUID碰撞风险极低。
|
||||
|
||||
### 正版登录和离线(内置)登录共存
|
||||
### 正版登录和离线(内置)登录共存
|
||||
|
||||
一般它指实现`使正版玩家自动登录、离线玩家则需要游戏内登录`的插件
|
||||
|
||||
通常此类程序内置的账号管理系统已经十分完善,如果配置得当不太可能出现UUID碰撞的风险,除非它们自身就有问题。
|
||||
通常此类程序内置的账号管理系统已经十分完善,如果配置得当不太可能出现UUID碰撞的风险,除非它们自身就有问题。
|
||||
|
||||
### 正版登录和通用外置登录共存
|
||||
|
||||
:::danger
|
||||
多外置共存问题最大,如果操作不当,可能导致一下后果:
|
||||
多外置共存问题最大,如果操作不当,可能导致一下后果:
|
||||
1. 可能重名:
|
||||
> 在多外置共存的环境下,不同外置中的玩家可能会有相同的名字,但他们的 UUID 是不一样的。当这些玩家同时在线时可能会造成服务端整体系统的一些混淆。此外,一些不怀好意的用户可能故意使用与别人相同的名字来进行欺诈行为,这种重名和冒名的情况可能会导致安全和信任问题,给游戏环境带来潜在风险。
|
||||
> 在多外置共存的环境下,不同外置中的玩家可能会有相同的名字,但他们的 UUID 是不一样的。当这些玩家同时在线时可能会造成服务端整体系统的一些混淆。此外,一些不怀好意的用户可能故意使用与别人相同的名字来进行欺诈行为,这种重名和冒名的情况可能会导致安全和信任问题,给游戏环境带来潜在风险。
|
||||
|
||||
2. UUID碰撞
|
||||
> 在多外置共存的环境下,UUID碰撞的概率被放大了,而UUID相当于玩家的身份证,一旦出现 UUID 碰撞的话,可能会带来严重的后果。这将会导致玩家数据丢失设置错乱,并且排查和解决这些问题会极其困难,将导致灾难性的损失。
|
||||
> 在多外置共存的环境下,UUID碰撞的概率被放大了,而UUID相当于玩家的身份证,一旦出现 UUID 碰撞的话,可能会带来严重的后果。这将会导致玩家数据丢失设置错乱,并且排查和解决这些问题会极其困难,将导致灾难性的损失。
|
||||
:::
|
||||
|
||||
相比于 `正版登录和离线(内置)登录共存` 以及 `Floodgate(正版登录和基岩版(Xbox)登录共存)`,他们两个通常都拥有专用的账号管理系统来防止玩家身份混淆和相关问题。然而,Yggdrasil 本身就是一个独立的账号管理系统,多外置之间通常无法直接通信和同步信息。因此在多外置系统共存的环境下,如果不设计一个完善的身份管理系统,极有可能出现上述后果,从而引发严重的安全和信任问题。
|
||||
相比于 `正版登录和离线(内置)登录共存` 以及 `Floodgate(正版登录和基岩版(Xbox)登录共存)`,他们两个通常都拥有专用的账号管理系统来防止玩家身份混淆和相关问题。然而,Yggdrasil 本身就是一个独立的账号管理系统,多外置之间通常无法直接通信和同步信息。因此在多外置系统共存的环境下,如果不设计一个完善的身份管理系统,极有可能出现上述后果,从而引发严重的安全和信任问题。
|
||||
|
||||
好在UUID碰撞概率相当的低,普通服主或管理员只需要考虑重名问题就好了,是吧。
|
||||
好在UUID碰撞概率相当的低,普通服主或管理员只需要考虑重名问题就好了,是吧。
|
||||
|
@ -7,13 +7,13 @@ sidebar_position: 1
|
||||
|
||||
👋 欢迎来到笨蛋开服教程 **Java** 板块!
|
||||
|
||||
此板块是一篇主要针对 **高版本 Java 版** 服务器的开服指南,而非**基岩版**或**远古核心**。
|
||||
此板块是一篇主要针对 **高版本 Java 版** 服务器的开服指南,而非**基岩版**或**远古核心**。
|
||||
|
||||
# 开始你的旅程
|
||||
|
||||
![:NitWikit](https://count.kjchmc.cn/get/@:NitWikit)
|
||||
|
||||
如果你确定你符合条件,请点击一侧的目录开始阅读文档。
|
||||
如果你确定你符合条件,请点击一侧的目录开始阅读文档。
|
||||
|
||||
# 更多
|
||||
|
||||
|
@ -6,7 +6,7 @@ sidebar_position: 3
|
||||
|
||||
# 准备工作
|
||||
|
||||
在正式开 Minecraft 服务器之前,请一定确认已经准备好了以下必备软件或网页:
|
||||
在正式开 Minecraft 服务器之前,请一定确认已经准备好了以下必备软件或网页:
|
||||
|
||||
import DocCardList from '@theme/DocCardList';
|
||||
|
||||
@ -16,8 +16,8 @@ import DocCardList from '@theme/DocCardList';
|
||||
|
||||
Java 是开 Java 版 Minecraft 服务器必要的;
|
||||
|
||||
文档编辑软件能够有效提高编辑插件、核心配置时的效率,降低错误使用语法的可能性;
|
||||
文档编辑软件能够有效提高编辑插件、核心配置时的效率,降低错误使用语法的可能性;
|
||||
|
||||
网页主要包括了寻找插件、mod、生成 MOTD,生成指令等便捷功能;
|
||||
网页主要包括了寻找插件、mod、生成 MOTD,生成指令等便捷功能;
|
||||
|
||||
笨蛋脚本主要用于一键式配置文件、安装插件等。
|
||||
|
@ -5,15 +5,15 @@ sidebar_position: 3
|
||||
|
||||
# 可能用到的网站
|
||||
|
||||
开服不能只是从某一网站或者简单百度、谷歌获取资源,这样获取的资源种类非常贫乏。
|
||||
开服不能只是从某一网站或者简单百度、谷歌获取资源,这样获取的资源种类非常贫乏。
|
||||
|
||||
因此,如果你是失去了 MCBBS 就不知道去哪里搜索 Minecraft 相关资源,
|
||||
因此,如果你是失去了 MCBBS 就不知道去哪里搜索 Minecraft 相关资源,
|
||||
|
||||
以下是一些可供参考的推荐网站:
|
||||
|
||||
# SpigotMC
|
||||
|
||||
Minecraft 最大的插件网站,***建议注册账号并安装 [Spigot Search Engine](https://www.spigotmc.org/resources/spigotsearchengine.54108/)***
|
||||
Minecraft 最大的插件网站,***建议注册账号并安装 [Spigot Search Engine](https://www.spigotmc.org/resources/spigotsearchengine.54108/)***
|
||||
|
||||
<details>
|
||||
<summary>点击展开</summary>
|
||||
@ -30,14 +30,14 @@ Minecraft 最大的插件网站,***建议注册账号并安装 [Spigot Search
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
SpigotMC 应该是目前 Minecraft 开服圈最大的插件网站了,最大的问题是插件搜索引擎十分狗屎。
|
||||
SpigotMC 应该是目前 Minecraft 开服圈最大的插件网站了,最大的问题是插件搜索引擎十分狗屎。
|
||||
|
||||
<details>
|
||||
<summary>注册问题</summary>
|
||||
|
||||
![](_images/spigotmc.png)
|
||||
|
||||
使用魔法就可以看到验证了,而不是傻呵呵的跟人说。
|
||||
使用魔法就可以看到验证了,而不是傻呵呵的跟人说。
|
||||
|
||||
*SpigotMC不开放注册* *老外的网站真反人类*
|
||||
|
||||
@ -72,7 +72,7 @@ SpigotMC 应该是目前 Minecraft 开服圈最大的插件网站了,最大的
|
||||
|
||||
虽然不登录账号不影响你浏览仓库和下载 Release 等。
|
||||
|
||||
但是登录后可以给作者发 Issues 来报告问题,提交新需求/建议,还可以下载 Actions 中的文件。
|
||||
但是登录后可以给作者发 Issues 来报告问题,提交新需求/建议,还可以下载 Actions 中的文件。
|
||||
|
||||
<details>
|
||||
<summary>注册问题</summary>
|
||||
@ -84,12 +84,12 @@ SpigotMC 应该是目前 Minecraft 开服圈最大的插件网站了,最大的
|
||||
<details>
|
||||
<summary>连不上怎么办</summary>
|
||||
|
||||
这是由于 GitHub 是开放的外国网站,网站上时不时会有一些不能在此讨论的内容,所以运营商会刻意地屏蔽这个网站,在很多时候都不能正常访问。具体的表现如下:[只要Github域名指向任意IP,该IP的443端口就会超时3分钟](https://blog.csdn.net/weixin_43659597/article/details/118882176)。
|
||||
这是由于 GitHub 是开放的外国网站,网站上时不时会有一些不能在此讨论的内容,所以运营商会刻意地屏蔽这个网站,在很多时候都不能正常访问。具体的表现如下:[只要Github域名指向任意IP,该IP的443端口就会超时3分钟](https://blog.csdn.net/weixin_43659597/article/details/118882176)。
|
||||
|
||||
有以下几种解决办法:
|
||||
1. 魔法
|
||||
2. [改hosts](https://www.cnblogs.com/eudaimonia/p/16001981.html#1034247326)
|
||||
3. [Watt Toolkit](https://steampp.net/):下载安装完成后,在左侧侧边栏切换到**网络加速**,点击**平台加速(免费)**,往下翻勾上GitHub,然后点击**一键加速**,随后就可以正常访问GitHub了
|
||||
3. [Watt Toolkit](https://steampp.net/):下载安装完成后,在左侧侧边栏切换到**网络加速**,点击**平台加速(免费)**,往下翻勾上GitHub,然后点击**一键加速**,随后就可以正常访问GitHub了
|
||||
<!--[点击此处](https://cn.bing.com/search?q=%E8%BF%9E%E4%B8%8D%E4%B8%8AGitHub%E6%80%8E%E4%B9%88%E5%8A%9E)-->
|
||||
|
||||
</details>
|
||||
@ -115,7 +115,7 @@ GitHub 汉化插件:https://github.com/maboloshi/github-chinese
|
||||
|
||||
# MineBBS
|
||||
|
||||
国内较为知名的综合性 Minecraft 论坛。曾以基岩版开服内容为主,MCBBS 关闭后其 Java 版相关内容丰富了许多。
|
||||
国内较为知名的综合性 Minecraft 论坛。曾以基岩版开服内容为主,MCBBS 关闭后其 Java 版相关内容丰富了许多。
|
||||
|
||||
<details>
|
||||
<summary>点击展开</summary>
|
||||
@ -134,15 +134,15 @@ GitHub 汉化插件:https://github.com/maboloshi/github-chinese
|
||||
|
||||
插件板块:https://www.minebbs.com/forums/mcjeplugin/
|
||||
|
||||
同时,本教程在 MineBBS 也有搬运贴:https://www.minebbs.com/threads/nitwikit-geyser.26356/
|
||||
同时,本教程在 MineBBS 也有搬运贴:https://www.minebbs.com/threads/nitwikit-geyser.26356/
|
||||
|
||||
</details>
|
||||
|
||||
# Builtbybit
|
||||
|
||||
一个综合交易平台,其中的 Minecraft 插件大多数都是付费的。
|
||||
一个综合交易平台,其中的 Minecraft 插件大多数都是付费的。
|
||||
|
||||
有一些圈钱的垃圾插件,请仔细辨别后购买。
|
||||
有一些圈钱的垃圾插件,请仔细辨别后购买。
|
||||
|
||||
<details>
|
||||
<summary>点击展开</summary>
|
||||
@ -161,7 +161,7 @@ GitHub 汉化插件:https://github.com/maboloshi/github-chinese
|
||||
|
||||
如果你的钱包空空就别考虑了。
|
||||
|
||||
此外,此网站和 CurseForge 一样并不只有 Minecraft 相关资源,请注意识别别看错了。
|
||||
此外,此网站和 CurseForge 一样并不只有 Minecraft 相关资源,请注意识别别看错了。
|
||||
|
||||
*链接已重定向到 Minecraft 相关资源区*
|
||||
地址:https://builtbybit.com/resources/categories/minecraft-plugins.1/
|
||||
@ -193,7 +193,7 @@ GitHub 汉化插件:https://github.com/maboloshi/github-chinese
|
||||
|
||||
# Bukkit
|
||||
|
||||
一个相对 SpigotMC 更加古老的插件发布网站,一般用于寻找远古插件。
|
||||
一个相对 SpigotMC 更加古老的插件发布网站,一般用于寻找远古插件。
|
||||
|
||||
<details>
|
||||
<summary>点击展开</summary>
|
||||
@ -218,7 +218,7 @@ GitHub 汉化插件:https://github.com/maboloshi/github-chinese
|
||||
|
||||
# Modrinth
|
||||
|
||||
现代化的 Minecraft 新兴资源站,插件相对较新较少,而且大部分都开源。
|
||||
现代化的 Minecraft 新兴资源站,插件相对较新较少,而且大部分都开源。
|
||||
|
||||
<details>
|
||||
<summary>点击展开</summary>
|
||||
@ -237,7 +237,7 @@ GitHub 汉化插件:https://github.com/maboloshi/github-chinese
|
||||
|
||||
插件搜索引擎比 spigot 强了好几倍。
|
||||
|
||||
因为是新兴资源站,某些资源并未在此发布,但是足够你用了。
|
||||
因为是新兴资源站,某些资源并未在此发布,但是足够你用了。
|
||||
|
||||
地址:https://modrinth.com/
|
||||
|
||||
@ -245,7 +245,7 @@ GitHub 汉化插件:https://github.com/maboloshi/github-chinese
|
||||
|
||||
# PaperMC
|
||||
|
||||
Paper 的现代化的插件平台,目前正在 Beta 阶段,插件相对较新较少,但是都经过 Paper 官方验证,并且可以找到支持 Folia 和 Velocity 的插件。
|
||||
Paper 的现代化的插件平台,目前正在 Beta 阶段,插件相对较新较少,但是都经过 Paper 官方验证,并且可以找到支持 Folia 和 Velocity 的插件。
|
||||
|
||||
<details>
|
||||
<summary>点击展开</summary>
|
||||
@ -270,7 +270,7 @@ Paper 的现代化的插件平台,目前正在 Beta 阶段,插件相对较
|
||||
|
||||
# MOTD 生成网站
|
||||
|
||||
MOTD 就是 Minecraft 客户端在尝试连接服务器之前,服务器对客户端发送的一条短消息,这通常包含1-3行文字和一张图片。
|
||||
MOTD 就是 Minecraft 客户端在尝试连接服务器之前,服务器对客户端发送的一条短消息,这通常包含1-3行文字和一张图片。
|
||||
|
||||
<details>
|
||||
<summary>听不懂描述就展开看图</summary>
|
||||
@ -279,7 +279,7 @@ MOTD 就是 Minecraft 客户端在尝试连接服务器之前,服务器对客
|
||||
|
||||
</details>
|
||||
|
||||
MOTD 是玩家进入服务器之前最先看到的东西,决定了玩家对一个服务器的第一印象,所以,请任选一个 MOTD 生成器生成个性化 MOTD:
|
||||
MOTD 是玩家进入服务器之前最先看到的东西,决定了玩家对一个服务器的第一印象,所以,请任选一个 MOTD 生成器生成个性化 MOTD:
|
||||
|
||||
[MOTD.gg](https://motd.gg)(非常非常推荐)(~~还可以偷别的服务器的motd~~)
|
||||
|
||||
@ -289,21 +289,21 @@ MOTD 是玩家进入服务器之前最先看到的东西,决定了玩家对一
|
||||
|
||||
# Minecraft 工具箱
|
||||
|
||||
有时候你项要加三两个数据包形式的自定义合成,自定义超平坦地图,烟花,文本生成等,但苦恼不会使用?
|
||||
有时候你项要加三两个数据包形式的自定义合成,自定义超平坦地图,烟花,文本生成等,但苦恼不会使用?
|
||||
|
||||
请选择 [Minecraft 工具箱](https://minecraft.tools/),自动生成各种 Minecraft 指令、数据包等。
|
||||
请选择 [Minecraft 工具箱](https://minecraft.tools/),自动生成各种 Minecraft 指令、数据包等。
|
||||
|
||||
# 像素云黑
|
||||
|
||||
指像素论坛的[失信人员名单页面](https://www.pixelbbs.cn/f-50-1.html)。
|
||||
|
||||
交易前查询下这人有没有被记录过,被记录过就别交易了。如果你被骗了,搜集证据去发个帖,给大家避个雷。
|
||||
交易前查询下这人有没有被记录过,被记录过就别交易了。如果你被骗了,搜集证据去发个帖,给大家避个雷。
|
||||
|
||||
能为你避开 90% 诈骗坑的[防骗小技巧](https://www.pixelbbs.cn/t-1377-1-1.html)。
|
||||
|
||||
# bStats
|
||||
|
||||
常用的统计数据网站,不少开发者会在自己的插件中写统计数据功能(一般默认开启)
|
||||
常用的统计数据网站,不少开发者会在自己的插件中写统计数据功能(一般默认开启)
|
||||
|
||||
例如:
|
||||
|
||||
|
@ -6,9 +6,9 @@ slug: /anticheat
|
||||
|
||||
# 概览
|
||||
|
||||
在各种各样的 Minecraft 服务器中都存在各种各样的 **Hacker Client User**(作弊端用户)
|
||||
在各种各样的 Minecraft 服务器中都存在各种各样的 **Hacker Client User**(作弊端用户)
|
||||
|
||||
作弊者通过作弊软件获取其他合法玩家无法取得的优势,从而影响游戏平衡性。
|
||||
作弊者通过作弊软件获取其他合法玩家无法取得的优势,从而影响游戏平衡性。
|
||||
|
||||
各服主和合法玩家都会为解决这些作弊端用户头痛不已。所以这章来了解一些反作弊插件
|
||||
|
||||
@ -19,7 +19,7 @@ slug: /anticheat
|
||||
一般认为的作弊包括但不限于:
|
||||
|
||||
- 种子推演
|
||||
- RNG(随机数)预测
|
||||
- RNG(随机数)预测
|
||||
- 自动前往、药品、举盾、挖矿等
|
||||
- 刀刀暴击、杀戮光环等战斗作弊
|
||||
- 穿墙、高跳、飞行等移动作弊
|
||||
@ -27,10 +27,10 @@ slug: /anticheat
|
||||
|
||||
# 注意
|
||||
|
||||
反作弊在尽量不影响合法玩家游玩的前提下,**惩戒**和**阻拦**作弊玩家。
|
||||
反作弊在尽量不影响合法玩家游玩的前提下,**惩戒**和**阻拦**作弊玩家。
|
||||
|
||||
但由于 Minecraft 协议的特殊性,很多数据是服务端难以判断是否合法的。
|
||||
但由于 Minecraft 协议的特殊性,很多数据是服务端难以判断是否合法的。
|
||||
|
||||
作弊和反作弊永远是一个你追我赶的永无休止的竞赛,你无法抓到每一个作弊者。
|
||||
作弊和反作弊永远是一个你追我赶的永无休止的竞赛,你无法抓到每一个作弊者。
|
||||
|
||||
**_最好的反作弊是社区,一个良好的社区会自发的举报作弊。_**
|
||||
**_最好的反作弊是社区,一个良好的社区会自发的举报作弊。_**
|
||||
|
@ -5,7 +5,7 @@ sidebar_position: 1
|
||||
|
||||
:::tip[写在最前]
|
||||
|
||||
混合端**不要**用下面所列的反作弊插件,建议使用 [次元反作弊](https://www.mcmod.cn/class/6578.html) 或 [猫反作弊](https://www.wxmwl.com/?p=95)
|
||||
混合端**不要**用下面所列的反作弊插件,建议使用 [次元反作弊](https://www.mcmod.cn/class/6578.html) 或 [猫反作弊](https://www.wxmwl.com/?p=95)
|
||||
|
||||
次元反作弊的交流群:327175980
|
||||
|
||||
@ -13,25 +13,25 @@ sidebar_position: 1
|
||||
|
||||
# 选择反作弊插件
|
||||
|
||||
好的反作弊插件通过对玩家行为进行分析从而找出违规者可能的违规行为,从而限制甚至封禁。
|
||||
好的反作弊插件通过对玩家行为进行分析从而找出违规者可能的违规行为,从而限制甚至封禁。
|
||||
|
||||
市面上的反作弊很多,常常让人难以选择。为了让新手入门反作弊,我们写了一部分常见的反作弊插件。
|
||||
市面上的反作弊很多,常常让人难以选择。为了让新手入门反作弊,我们写了一部分常见的反作弊插件。
|
||||
|
||||
虽然这些插件均存在绕过,但是仍然能检测或削弱 **大部分** 的作弊玩家,希望能帮到你。
|
||||
虽然这些插件均存在绕过,但是仍然能检测或削弱 **大部分** 的作弊玩家,希望能帮到你。
|
||||
|
||||
:::warning[警告]
|
||||
|
||||
不要使用任何已经停止更新的反作弊插件,因为他们并不能支持最新版本且缺少对其他插件的兼容性,除非你有能力自己解决这些问题,不然就尽量不去使用已经停止更新的反作弊。而大多数反作弊插件对混合端和 Geyser 的支持有限甚至没有,可能需要其他方式解决。
|
||||
不要使用任何已经停止更新的反作弊插件,因为他们并不能支持最新版本且缺少对其他插件的兼容性,除非你有能力自己解决这些问题,不然就尽量不去使用已经停止更新的反作弊。而大多数反作弊插件对混合端和 Geyser 的支持有限甚至没有,可能需要其他方式解决。
|
||||
|
||||
没有任何一个反作弊是无法被绕过的,且所以反作弊都会有误判。反作弊该做的应是限制玩家的作弊行为并帮助管理员辨别作弊者,不要过度依赖或期望反作弊自动识别作弊者并将其封禁或踢出。
|
||||
没有任何一个反作弊是无法被绕过的,且所以反作弊都会有误判。反作弊该做的应是限制玩家的作弊行为并帮助管理员辨别作弊者,不要过度依赖或期望反作弊自动识别作弊者并将其封禁或踢出。
|
||||
|
||||
:::
|
||||
|
||||
## Matrix(推荐)
|
||||
|
||||
Matrix 是由国人 RE 编写的一款反作弊插件,当年诞生是用于取代 AAC 这款反作弊插件,
|
||||
Matrix 是由国人 RE 编写的一款反作弊插件,当年诞生是用于取代 AAC 这款反作弊插件,
|
||||
|
||||
而如今经过不断改良也拥有了不错的检测性能和质量,足以对抗部分脑溢血参数。
|
||||
而如今经过不断改良也拥有了不错的检测性能和质量,足以对抗部分脑溢血参数。
|
||||
|
||||
!试用版只拥有少部分检测且只支持一台机器
|
||||
!7天使用权到期后可继续订阅试用版使用
|
||||
@ -43,39 +43,39 @@ Matrix 是由国人 RE 编写的一款反作弊插件,当年诞生是用于取
|
||||
|
||||
企业版 - 499 RMB
|
||||
|
||||
- 拥有所有检测(虽然多的检测误判挺多的)
|
||||
- 拥有所有检测(虽然多的检测误判挺多的)
|
||||
- 可同时给 40 台机器使用
|
||||
- 可对你的服务器进行深度定制
|
||||
|
||||
如果你是生存服,可以先使用试用版进行测试,如何再进行付费版本的购买
|
||||
如果你是生存服,可以先使用试用版进行测试,如何再进行付费版本的购买
|
||||
|
||||
如果你是大型小游戏/大型群组服,可以购买企业版,这能让 Matrix 对你的服务器进行更深度的定制
|
||||
如果你是大型小游戏/大型群组服,可以购买企业版,这能让 Matrix 对你的服务器进行更深度的定制
|
||||
|
||||
> 官网: matrix.rip
|
||||
|
||||
## NoCheatPlus-Update
|
||||
|
||||
非常经典的老牌反作弊,拥有悠久历史且和作弊者们对抗许久,但目前并不积极的进行更新,
|
||||
非常经典的老牌反作弊,拥有悠久历史且和作弊者们对抗许久,但目前并不积极的进行更新,
|
||||
|
||||
且由于远古代码遗留导致部分检测较为低下,但这并不影响它是个不错的反作弊。
|
||||
且由于远古代码遗留导致部分检测较为低下,但这并不影响它是个不错的反作弊。
|
||||
|
||||
!只推荐影响原版插件较少的生存服务器使用。
|
||||
|
||||
!由于配置文件过于复杂,需要花费一段时间来理解和调整配置文件。
|
||||
!由于配置文件过于复杂,需要花费一段时间来理解和调整配置文件。
|
||||
|
||||
!不建议在不接触配置文件的情况下直接使用该插件。
|
||||
|
||||
> GitHub: https://github.com/Updated-NoCheatPlus/NoCheatPlus
|
||||
|
||||
或者 Leaf 核心作者 [Dreeam](https://github.com/Dreeam-qwq)(国人)的分支版本,这个版本剔除了一些检测以提升性能。
|
||||
或者 Leaf 核心作者 [Dreeam](https://github.com/Dreeam-qwq)(国人)的分支版本,这个版本剔除了一些检测以提升性能。
|
||||
|
||||
> https://github.com/Dreeam-qwq/NoCheatPlus
|
||||
|
||||
## GrimAC 2.0
|
||||
|
||||
一个不错的实验性反作弊,支持避免检查来自 Geyser 的玩家,移动检测虽然强大但有很多误判。
|
||||
一个不错的实验性反作弊,支持避免检查来自 Geyser 的玩家,移动检测虽然强大但有很多误判。
|
||||
|
||||
!目前仍然有很多不稳定因素,但 Timer 和 Reach , BadPackets 检查都是较为稳定的。
|
||||
!目前仍然有很多不稳定因素,但 Timer 和 Reach , BadPackets 检查都是较为稳定的。
|
||||
|
||||
!除了实验性检查, 其余的检查是不可被关闭的。
|
||||
|
||||
@ -85,21 +85,21 @@ Matrix 是由国人 RE 编写的一款反作弊插件,当年诞生是用于取
|
||||
|
||||
## Vulcan
|
||||
|
||||
老牌火神反作弊,虽然在几个版本存在十分严重的漏洞,但并不影响他一些检测强力的事实,尽管他的配置文件非常脑淤血,但还是深受多人喜爱。
|
||||
老牌火神反作弊,虽然在几个版本存在十分严重的漏洞,但并不影响他一些检测强力的事实,尽管他的配置文件非常脑淤血,但还是深受多人喜爱。
|
||||
|
||||
!拥有中规中矩的检测,但由于拉回系统非常不稳定,建议慎用或与其它反作弊搭配使用。
|
||||
!拥有中规中矩的检测,但由于拉回系统非常不稳定,建议慎用或与其它反作弊搭配使用。
|
||||
|
||||
> SpigotMC: https://www.spigotmc.org/resources/vulcan-anti-cheat-advanced-cheat-detection-1-7-1-20-4.83626/
|
||||
|
||||
## 不推荐 - Spartan
|
||||
|
||||
老牌垃圾反作弊,性能拉胯误判多,有很多无用和多余的检测,不如其它开源或具有相同价格的反作弊。
|
||||
老牌垃圾反作弊,性能拉胯误判多,有很多无用和多余的检测,不如其它开源或具有相同价格的反作弊。
|
||||
|
||||
对于 Geyser 的基岩版支持也是如此,并且从一开始的同时检查基岩版玩家和 Java 版玩家被拆分成了 Spartan: Java 和 Spartan: Bedrock 两个不同的版本。
|
||||
对于 Geyser 的基岩版支持也是如此,并且从一开始的同时检查基岩版玩家和 Java 版玩家被拆分成了 Spartan: Java 和 Spartan: Bedrock 两个不同的版本。
|
||||
|
||||
被 md_5 警告后在 SpigotMC上 捆绑销售。就算你需要退款,先请在 SpigotMC 上撤回你的负面言论后才可进行 Spartan 的退款服务,
|
||||
被 md_5 警告后在 SpigotMC上 捆绑销售。就算你需要退款,先请在 SpigotMC 上撤回你的负面言论后才可进行 Spartan 的退款服务,
|
||||
|
||||
由于购买后 6 个月需要重新支付才能继续使用且包含额外的需要付费的功能导致被 md_5 警告的传奇反作弊,这就是 Spartan-AntiCheat。
|
||||
由于购买后 6 个月需要重新支付才能继续使用且包含额外的需要付费的功能导致被 md_5 警告的传奇反作弊,这就是 Spartan-AntiCheat。
|
||||
|
||||
> SpigotMC: https://www.spigotmc.org/resources/spartan-anti-cheat-advanced-cheat-hack-detection-1-7-1-20-4-33-off.25638/
|
||||
|
||||
@ -112,28 +112,28 @@ Matrix 是由国人 RE 编写的一款反作弊插件,当年诞生是用于取
|
||||
* 自动药水
|
||||
* 自动工具
|
||||
* 分析不可能发送的数据包
|
||||
* (以及更多)
|
||||
* (以及更多)
|
||||
|
||||
[查看地址](https://www.spigotmc.org/resources/anticheataddition.33590/)
|
||||
|
||||
## XCatch
|
||||
## AntiCheatObfuscator
|
||||
|
||||
这个插件是一个通过分析玩家发现矿物的数量的反 X-ray 插件。
|
||||
此插件会 "混淆 你的服务器上的反作弊,可以避免作弊者发现你的反作弊组合而针对性绕过
|
||||
|
||||
[查看地址](https://www.spigotmc.org/resources/xcatch-anti-xray-1-13-1-19.101227/)
|
||||
[下载地址](https://www.minebbs.com/resources/anticheatobfuscator-1-8-1-20.9251/)
|
||||
|
||||
## ClientDetectorPlus
|
||||
|
||||
一个可以用来查端的插件,可以检测客户端是什么类型的客户端,可以检测到部分模组。
|
||||
一个可以用来查端的插件,可以检测客户端是什么类型的客户端,可以检测到部分模组。
|
||||
|
||||
[查看地址](https://www.spigotmc.org/resources/clientdetectorplus-now-in-alpha-testing.90375/)
|
||||
|
||||
---
|
||||
## 只有这几个?
|
||||
|
||||
你难道想让我把 Intave Karhu Polar那些什么全部都列出来吗,
|
||||
你难道想让我把 Intave Karhu Polar那些什么全部都列出来吗,
|
||||
|
||||
要求不高这几个主流就差不多够用了,毕竟是面向小白的开服教程,
|
||||
要求不高这几个主流就差不多够用了,毕竟是面向小白的开服教程,
|
||||
|
||||
后面想试试非主流反作弊请自己去官网购买就好了捏。
|
||||
|
||||
@ -141,25 +141,25 @@ Matrix 是由国人 RE 编写的一款反作弊插件,当年诞生是用于取
|
||||
|
||||
## Talent 先生的反作弊配置
|
||||
|
||||
一款面向萌新的主流反作弊配置,对配置有任何问题骚扰 Talents 先生项目的 Issues 即可解决!
|
||||
一款面向萌新的主流反作弊配置,对配置有任何问题骚扰 Talents 先生项目的 Issues 即可解决!
|
||||
|
||||
GitHub:https://github.com/TalentsRC/Talents-AntiCheat-Config
|
||||
|
||||
## ViaBackwards
|
||||
|
||||
如果你在你的服务器使用了跨版本插件(Viaversion),你需要开启这个选项以增加反作弊对其他版本的兼容性。
|
||||
如果你在你的服务器使用了跨版本插件(Viaversion),你需要开启这个选项以增加反作弊对其他版本的兼容性。
|
||||
|
||||
打开 `ViaBackwards/config.yml` ,找到 `handle-pings-as-inv-acknowledgements` 配置项,把它改成 `true` 就可以增加对反作弊的兼容性
|
||||
|
||||
## 笨蛋脚本
|
||||
|
||||
[自动为你配置反作弊,下载!](https://github.com/lilingfengdev/NitWiki-Script/releases/download/windows-latest/config-anticheat.exe)
|
||||
[自动为你配置反作弊,下载!](https://github.com/lilingfengdev/NitWiki-Script/releases/download/windows-latest/config-anticheat.exe)
|
||||
|
||||
# 组合反作弊
|
||||
|
||||
一般个人建议是一个服务器的反作弊两个足够,一个的话容易被绕,
|
||||
一般个人建议是一个服务器的反作弊两个足够,一个的话容易被绕,
|
||||
|
||||
太多又会严重影响服务器性能,并产生大量误判,一般装两个足够了。
|
||||
太多又会严重影响服务器性能,并产生大量误判,一般装两个足够了。
|
||||
|
||||
:::warning
|
||||
|
||||
|
@ -8,22 +8,22 @@ sidebar_position: 2
|
||||
为什么常规的反作弊插件不会包括部分作弊类型?
|
||||
|
||||
* 矿物透视与种子破解其实是很难从服务器所收到的玩家行为包分析得到的。
|
||||
* 插件往往术语有专攻,一个过于齐全的插件会像 ESS / CMI 一样累赘。
|
||||
* 插件往往术语有专攻,一个过于齐全的插件会像 ESS / CMI 一样累赘。
|
||||
* 插件对于"种子"这种相当底层的特征的修改并不如核心稳定高效。
|
||||
|
||||
## 矿物透视与种子破解
|
||||
|
||||
矿物透视是作弊客户端通过材质包、透明渲染非矿物方块等方式实现的对服务器矿物的快速搜索。
|
||||
|
||||
而 Minecraft 的结构和矿物等的生成均由种子决定,因此也可以进行种子反推了解服务器结构位置。
|
||||
而 Minecraft 的结构和矿物等的生成均由种子决定,因此也可以进行种子反推了解服务器结构位置。
|
||||
|
||||
矿物透视和种子破解会导致玩家在非常短的时间内获取大量物资,这会影响大多数服务器的平衡和经济。
|
||||
矿物透视和种子破解会导致玩家在非常短的时间内获取大量物资,这会影响大多数服务器的平衡和经济。
|
||||
|
||||
### 延长种子反推
|
||||
|
||||
#### 自动版
|
||||
|
||||
请使用[笨蛋脚本](https://github.com/lilingfengdev/NitWiki-Script/releases/download/windows-latest/auto-antiseedcracker.exe),在服务器根目录执行即可自动配置!!
|
||||
请使用[笨蛋脚本](https://github.com/lilingfengdev/NitWiki-Script/releases/download/windows-latest/auto-antiseedcracker.exe),在服务器根目录执行即可自动配置!!
|
||||
|
||||
#### 特征使用随机种子
|
||||
|
||||
@ -35,9 +35,9 @@ sidebar_position: 2
|
||||
feature-seeds:
|
||||
generate-random-seeds-for-all: true
|
||||
```
|
||||
> 这是对每个建筑使用随机种子,防止你的世界种子轻易的被破解
|
||||
> 这是对每个建筑使用随机种子,防止你的世界种子轻易的被破解
|
||||
|
||||
> 如果发现你的 `spigot.yml` 中出现了类似以下的配置配置就成功了,你可以修改其中的种子。(但其实不改也完全没问题)
|
||||
> 如果发现你的 `spigot.yml` 中出现了类似以下的配置配置就成功了,你可以修改其中的种子。(但其实不改也完全没问题)
|
||||
|
||||
```yaml
|
||||
seed-village: 10387312
|
||||
@ -66,15 +66,15 @@ feature-seeds:
|
||||
|
||||
#### Matter 安全种子
|
||||
|
||||
如果你使用包含 Matter 安全种子补丁的分支(目前仅存在 Leaf),那么恭喜你,你可以体验到安全功能种子,
|
||||
如果你使用包含 Matter 安全种子补丁的分支(目前仅存在 Leaf),那么恭喜你,你可以体验到安全功能种子,
|
||||
|
||||
地形和生物群落的生成保持不变,但所有矿石和结构都是用 1024 位种子生成的,而不是通常的 64 位种子。
|
||||
地形和生物群落的生成保持不变,但所有矿石和结构都是用 1024 位种子生成的,而不是通常的 64 位种子。
|
||||
|
||||
这种种子几乎不可能破解,因为所需的破解时间和资源极长无比,如果你正在使用,那么你基本不用担心种子破解。
|
||||
这种种子几乎不可能破解,因为所需的破解时间和资源极长无比,如果你正在使用,那么你基本不用担心种子破解。
|
||||
|
||||
:::danger[特别注意]
|
||||
|
||||
开启 Leaf 安全种子之前,你要明白这玩意儿是**不能关闭的**,也就是说,你开启后,除非你删档重开,不然必须使用安全种子
|
||||
开启 Leaf 安全种子之前,你要明白这玩意儿是**不能关闭的**,也就是说,你开启后,除非你删档重开,不然必须使用安全种子
|
||||
|
||||
:::
|
||||
|
||||
@ -82,11 +82,11 @@ feature-seeds:
|
||||
|
||||
#### 插件
|
||||
|
||||
使用插件 [AntiSeedCracker](https://www.spigotmc.org/resources/antiseedcracker-1-20-4.81495/) ,这个插件会发送一个虚假的种子到客户端,客户端仍然可以通过分析地形来破解,但难度会大大增强
|
||||
使用插件 [AntiSeedCracker](https://www.spigotmc.org/resources/antiseedcracker-1-20-4.81495/) ,这个插件会发送一个虚假的种子到客户端,客户端仍然可以通过分析地形来破解,但难度会大大增强
|
||||
|
||||
#### 重置资源世界
|
||||
|
||||
如果你还是害怕长期推演导致的种子反推。你可以在使用以上一种或多种方法的前提下重置世界,但是这往往只适用于资源世界等。
|
||||
如果你还是害怕长期推演导致的种子反推。你可以在使用以上一种或多种方法的前提下重置世界,但是这往往只适用于资源世界等。
|
||||
|
||||
### 设置假矿
|
||||
|
||||
@ -94,7 +94,7 @@ feature-seeds:
|
||||
|
||||
#### 自动版
|
||||
|
||||
使用[笨蛋脚本](https://github.com/lilingfengdev/NitWiki-Script/releases/download/windows-latest/auto_antixray.exe),在服务器根目录执行脚本即可自动配置!!
|
||||
使用[笨蛋脚本](https://github.com/lilingfengdev/NitWiki-Script/releases/download/windows-latest/auto_antixray.exe),在服务器根目录执行脚本即可自动配置!!
|
||||
|
||||
⚠警告:`engine-mode: 3` 在 `paper 1.19.3` 往后的版本才添加⚠
|
||||
|
||||
@ -107,7 +107,7 @@ feature-seeds:
|
||||
:::
|
||||
|
||||
<details>
|
||||
<summary>配置 Ⅰ - *带宽消耗较大,效果非常好*</summary>
|
||||
<summary>配置 Ⅰ - *带宽消耗较大,效果非常好*</summary>
|
||||
|
||||
```yaml
|
||||
anticheat:
|
||||
@ -166,7 +166,7 @@ anticheat:
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>配置Ⅱ - *带宽消耗中等,效果中等</summary>
|
||||
<summary>配置Ⅱ - *带宽消耗中等,效果中等</summary>
|
||||
|
||||
```yaml
|
||||
anticheat:
|
||||
@ -224,7 +224,7 @@ anticheat:
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>配置Ⅲ - *降低带宽消耗,效果较差*</summary>
|
||||
<summary>配置Ⅲ - *降低带宽消耗,效果较差*</summary>
|
||||
|
||||
```yaml
|
||||
anticheat:
|
||||
@ -268,7 +268,7 @@ anticheat:
|
||||
将下列你喜欢的配置进行复制粘贴即可
|
||||
|
||||
<details>
|
||||
<summary>下界配置 Ⅰ - *带宽压力翻倍,效果好,客户端 FPS 可能下降*</summary>
|
||||
<summary>下界配置 Ⅰ - *带宽压力翻倍,效果好,客户端 FPS 可能下降*</summary>
|
||||
|
||||
```yaml
|
||||
anticheat:
|
||||
@ -302,7 +302,7 @@ anticheat:
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>下界配置 Ⅱ - *带宽占用略微降低,效果一般(但下届合金一定会被隐藏)*</summary>
|
||||
<summary>下界配置 Ⅱ - *带宽占用略微降低,效果一般(但下届合金一定会被隐藏)*</summary>
|
||||
|
||||
```yaml
|
||||
anticheat:
|
||||
@ -326,7 +326,7 @@ anticheat:
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>下界配置 Ⅲ - *带宽占用较大提升,效果较好*</summary>
|
||||
<summary>下界配置 Ⅲ - *带宽占用较大提升,效果较好*</summary>
|
||||
|
||||
```yaml
|
||||
anticheat:
|
||||
@ -359,7 +359,7 @@ anticheat:
|
||||
|
||||
</details>
|
||||
|
||||
在末地由于没有矿物,我们推荐将 `world_the_end/paper.world.yml` 进行以下配置即可。
|
||||
在末地由于没有矿物,我们推荐将 `world_the_end/paper.world.yml` 进行以下配置即可。
|
||||
|
||||
```yaml
|
||||
anticheat:
|
||||
@ -367,13 +367,13 @@ anticheat:
|
||||
enabled: false
|
||||
```
|
||||
|
||||
注意,如果你需要隐藏暴露在空气中的方块,需要将 `air` 添加到 `hidden-blocks` 和 `replacement-blocks` ,但这非常影响性能,不推荐。
|
||||
注意,如果你需要隐藏暴露在空气中的方块,需要将 `air` 添加到 `hidden-blocks` 和 `replacement-blocks` ,但这非常影响性能,不推荐。
|
||||
|
||||
:::info
|
||||
|
||||
将配置文件复制到对应 `.yml` 文件中时,如果已经存在,请相应的进行覆盖而不是简单复制到最后。
|
||||
将配置文件复制到对应 `.yml` 文件中时,如果已经存在,请相应的进行覆盖而不是简单复制到最后。
|
||||
|
||||
如果并不存在类似的文本,那么请直接复制到对应世界 `.yml` 中。
|
||||
如果并不存在类似的文本,那么请直接复制到对应世界 `.yml` 中。
|
||||
|
||||
:::
|
||||
|
||||
@ -381,20 +381,26 @@ anticheat:
|
||||
|
||||
#### RayTraceAntiXray
|
||||
|
||||
[RayTraceAntiXray](https://builtbybit.com/resources/raytraceantixray.24914/),[开源](https://github.com/stonar96/RayTraceAntiXray)付费且仅售 7 美元。
|
||||
[RayTraceAntiXray](https://builtbybit.com/resources/raytraceantixray.24914/),[开源](https://github.com/stonar96/RayTraceAntiXray)付费且仅售 7 美元。
|
||||
|
||||
是一款用于隐藏 paper 服务器中使用 `engine-mode: 1` 时暴露在空气中的未隐藏方块的插件。
|
||||
|
||||
其使用了异步多线程光线追踪,判断玩家是否能看到目标方块,从而在玩家能够看到目标方块时发送真实方块信息。
|
||||
其使用了异步多线程光线追踪,判断玩家是否能看到目标方块,从而在玩家能够看到目标方块时发送真实方块信息。
|
||||
|
||||
可以优化自带的 Anti-Xray ,减小服务器的带宽开销,如需构建请自行构建。
|
||||
可以优化自带的 Anti-Xray ,减小服务器的带宽开销(甚至比不使用Anti-Xray的宽带占用还低!),如需构建请自行构建。
|
||||
|
||||
#### RaytraceAntiXray
|
||||
|
||||
一个功能非常多的反X光插件,支持隐藏方块(并且支持XMat命名),隐藏,箱子,刷怪笼之类的,作者现在正在编写结构隐藏
|
||||
一个功能非常多的反X光插件,支持隐藏方块(并且支持XMat命名),隐藏,箱子,刷怪笼之类的,作者现在正在编写结构隐藏
|
||||
|
||||
[购买链接](https://builtbybit.com/resources/raytraceantixray-ores-entities-tiles.41896/) 有点小贵
|
||||
|
||||
#### Xrai (服务器在国内不推荐)
|
||||
|
||||
Xrai 通过 AI 分析玩家是否开启 XRay,并在发现时运行指定操作来帮助您管理您的服务器。
|
||||
|
||||
但是该插件的服务器位于国外,所以国内访问会较慢
|
||||
|
||||
:::warning
|
||||
|
||||
在使用 Paper 及其 Fork 时。请停止使用 [Orebfuscator](https://modrinth.com/plugin/orebfuscator) 等假矿插件。换用 Paper 自带的 Anti-Xray。
|
||||
|
@ -7,13 +7,13 @@ sidebar_position: 3
|
||||
|
||||
RNG 是 **随机数生成器** 的简写。
|
||||
|
||||
本质上只是个计算器,用来计算 Minecraft 中的随机事件。
|
||||
本质上只是个计算器,用来计算 Minecraft 中的随机事件。
|
||||
|
||||
**原理?**
|
||||
|
||||
计算机产生随机数不是真正的随机,而是根据已有的数据,通过复杂的公式产生一个 “伪随机数” 。
|
||||
计算机产生随机数不是真正的随机,而是根据已有的数据,通过复杂的公式产生一个 “伪随机数” 。
|
||||
|
||||
那么,如果你知道这个公式,并且知道要使用什么数据,操纵进入公式的数据,就可以使随机数变成自己想要的结果。
|
||||
那么,如果你知道这个公式,并且知道要使用什么数据,操纵进入公式的数据,就可以使随机数变成自己想要的结果。
|
||||
|
||||
利用此漏洞的客户端 mod:
|
||||
|
||||
@ -28,15 +28,15 @@ RNG 是 **随机数生成器** 的简写。
|
||||
|
||||
## 耐久无损耗
|
||||
|
||||
耐久附魔不是增加物品的耐久,而是有概率不消耗耐久。
|
||||
耐久附魔不是增加物品的耐久,而是有概率不消耗耐久。
|
||||
|
||||
## 钓鱼出指定宝藏
|
||||
|
||||
同理,玩家可以想钓出什么,就能钓出什么。
|
||||
同理,玩家可以想钓出什么,就能钓出什么。
|
||||
|
||||
# 如何防御 RNG 漏洞
|
||||
|
||||
[purpur](https://purpurmc.org/) 和 [leaves](https://leavesmc.org/) 核心(包括它们的分支),可以防止玩家破解 RNG 。
|
||||
[purpur](https://purpurmc.org/) 和 [leaves](https://leavesmc.org/) 核心(包括它们的分支),可以防止玩家破解 RNG 。
|
||||
|
||||
你可以将配置改为如下 (默认就是开启的):
|
||||
|
||||
@ -54,5 +54,5 @@ RNG 是 **随机数生成器** 的简写。
|
||||
use-vanilla-random: false
|
||||
```
|
||||
|
||||
如果你使用 Gale、Leaf 等核心,你甚至无需为此担心,因为他们的 RNG 算法已经经过改良,不再是原版的 RNG 。
|
||||
如果你使用 Gale、Leaf 等核心,你甚至无需为此担心,因为他们的 RNG 算法已经经过改良,不再是原版的 RNG 。
|
||||
|
||||
|
@ -5,21 +5,21 @@ sidebar_position: 5
|
||||
|
||||
## 备份
|
||||
|
||||
你也不想你和你的玩家辛苦开发的世界由于一次断电,一次崩溃而毁于一旦吧? 这些情况很少发生但无法避免,经常做备份是有必要的!
|
||||
你也不想你和你的玩家辛苦开发的世界由于一次断电,一次崩溃而毁于一旦吧? 这些情况很少发生但无法避免,经常做备份是有必要的!
|
||||
|
||||
### 备份插件
|
||||
|
||||
推荐两个备份插件(高效的备份,无需停服即可备份):
|
||||
推荐两个备份插件(高效的备份,无需停服即可备份):
|
||||
|
||||
[ebackup](https://www.spigotmc.org/resources/ebackup-simple-and-reliable-backups-for-your-server-supports-ftp-sftp.69917/) 可设置黑名单不备份某些文件,FTP远程备份支持
|
||||
[ebackup](https://www.spigotmc.org/resources/ebackup-simple-and-reliable-backups-for-your-server-supports-ftp-sftp.69917/) 可设置黑名单不备份某些文件,FTP远程备份支持
|
||||
|
||||
[serverbackup](https://www.spigotmc.org/resources/server-backup-ingame-dropbox-ftp-backup-1-8-1-20-multithreaded.79320/) 可支持动态备份(即只备份最近变更过的文件),占用空间更小
|
||||
[serverbackup](https://www.spigotmc.org/resources/server-backup-ingame-dropbox-ftp-backup-1-8-1-20-multithreaded.79320/) 可支持动态备份(即只备份最近变更过的文件),占用空间更小
|
||||
|
||||
:::warning
|
||||
|
||||
虽然使用插件备份既方便又快速,但是插件备份得到的文件有可能是损坏的。
|
||||
虽然使用插件备份既方便又快速,但是插件备份得到的文件有可能是损坏的。
|
||||
|
||||
在空间和时间都充足的情况下,推荐直接关服进行备份,并定期检测备份的文件是否存在损坏。
|
||||
在空间和时间都充足的情况下,推荐直接关服进行备份,并定期检测备份的文件是否存在损坏。
|
||||
|
||||
:::
|
||||
|
||||
@ -37,11 +37,11 @@ InventoryRollbackPlus 插件可以备份玩家的背包。
|
||||
|
||||
#### [MCServerBackup](https://github.com/OblivionOcean/MCServerBackup)
|
||||
|
||||
MCServerBackup 是由 (玄云海 OblivionOcean)[https://github.com/OblivionOcean] 自主研发的一款 Minecraft Java 服务器自动备份软件,主要用于区块备份 (但也可以用于服务器整体备份)。
|
||||
MCServerBackup 是由 (玄云海 OblivionOcean)[https://github.com/OblivionOcean] 自主研发的一款 Minecraft Java 服务器自动备份软件,主要用于区块备份 (但也可以用于服务器整体备份)。
|
||||
|
||||
即将推出一个带有简易 GUI 的版本,更加方便使用,目前使用仍略有难度。
|
||||
即将推出一个带有简易 GUI 的版本,更加方便使用,目前使用仍略有难度。
|
||||
|
||||
支持将一段时间内所有变动的文件(区块、玩家信息等)全部打包为 `zip` 或 `tar.gz` 格式的压缩包或文件夹。
|
||||
支持将一段时间内所有变动的文件(区块、玩家信息等)全部打包为 `zip` 或 `tar.gz` 格式的压缩包或文件夹。
|
||||
|
||||
##### 用法:
|
||||
|
||||
@ -49,7 +49,7 @@ MCServerBackup 是由 (玄云海 OblivionOcean)[https://github.com/OblivionOcean
|
||||
python main.py [相对/绝对目录] [时长] [类型]
|
||||
```
|
||||
|
||||
优势:群友 @Lafcadia 写的,可以问群友咋用。
|
||||
优势:群友 @Lafcadia 写的,可以问群友咋用。
|
||||
|
||||
[BorgBackup](https://www.borgbackup.org/)
|
||||
|
||||
@ -57,43 +57,43 @@ python main.py [相对/绝对目录] [时长] [类型]
|
||||
|
||||
### 手动备份
|
||||
|
||||
Windows 系统在服务器根目录右键点击压缩即可(如果时间比较急推荐zip,如果空间比较紧推荐7zip)。
|
||||
Windows 系统在服务器根目录右键点击压缩即可(如果时间比较急推荐zip,如果空间比较紧推荐7zip)。
|
||||
|
||||
Linux 使用指令 ```tar -czvf backup_date.tar.gz /[path]/``` (如果使用7zip请自行查看7zip指令)。
|
||||
|
||||
面板 - 大多数面板都可以像 Windows 一键压缩。
|
||||
|
||||
### 手动精简备份(不推荐)
|
||||
### 手动精简备份(不推荐)
|
||||
|
||||
假如你的存储空间告急,**在你安装好防护软件(如火绒),确保服务器本体不会被一锅端后**,你可以试试只备份以下内容:
|
||||
假如你的存储空间告急,**在你安装好防护软件(如火绒),确保服务器本体不会被一锅端后**,你可以试试只备份以下内容:
|
||||
|
||||
#### 备份世界
|
||||
|
||||
这一点相比不用多说,肯定是很十分重要的,记得备份根目录下你创建过的和服务器生成的世界。
|
||||
这一点相比不用多说,肯定是很十分重要的,记得备份根目录下你创建过的和服务器生成的世界。
|
||||
|
||||
#### 备份插件数据文件
|
||||
|
||||
插件数据文件、数据库文件等(常见名称有 data.yml ,database.db,data 文件夹等)。
|
||||
插件数据文件、数据库文件等(常见名称有 data.yml ,database.db,data 文件夹等)。
|
||||
|
||||
这些需要自己寻找,这也是不推荐的原因,你可以等服务器稳定后找到全部类似的文件并记录下来。
|
||||
这些需要自己寻找,这也是不推荐的原因,你可以等服务器稳定后找到全部类似的文件并记录下来。
|
||||
|
||||
:::danger
|
||||
|
||||
如果安装了粘液科技,不管有没有设置 MySQL 存储(设置了也会在 data-storage 文件夹存储部分数据),一定不要忘记备份根目录下的 data-storage 文件夹!
|
||||
如果安装了粘液科技,不管有没有设置 MySQL 存储(设置了也会在 data-storage 文件夹存储部分数据),一定不要忘记备份根目录下的 data-storage 文件夹!
|
||||
|
||||
:::
|
||||
|
||||
#### (可选)日志文件
|
||||
#### (可选)日志文件
|
||||
|
||||
服务器根目录下的 logs 文件夹。
|
||||
|
||||
### 删除世界
|
||||
|
||||
要想删除世界,只需简单的将 `world` 文件夹删除即可,或删除对应维度文件夹。
|
||||
要想删除世界,只需简单的将 `world` 文件夹删除即可,或删除对应维度文件夹。
|
||||
|
||||
但是值得注意的是,大多数插件数据并不会随着世界的移除而移除,
|
||||
但是值得注意的是,大多数插件数据并不会随着世界的移除而移除,
|
||||
|
||||
如 NPC 插件可能仍然会尝试在相同名字的世界中尝试生成 NPC,即使他们已经不在原来的位置上。
|
||||
如 NPC 插件可能仍然会尝试在相同名字的世界中尝试生成 NPC,即使他们已经不在原来的位置上。
|
||||
|
||||
一些服务端可能将维度拆分成单个文件夹存放至根目录,你需要全部删除才能重置所有维度。
|
||||
一些服务端可能将维度拆分成单个文件夹存放至根目录,你需要全部删除才能重置所有维度。
|
||||
|
||||
|
@ -5,9 +5,9 @@ sidebar_position: 7
|
||||
|
||||
# 怎么让大佬帮我性能分析
|
||||
|
||||
1. 检查你的服务器有没有安装 Spark 插件, 尝试 `/spark` 命令或者 `/pl` 看看有没有 Spark
|
||||
1. 检查你的服务器有没有安装 Spark 插件, 尝试 `/spark` 命令或者 `/pl` 看看有没有 Spark
|
||||
|
||||
如果没有,手动安装一下 [Spark](performance-analysis.md)
|
||||
如果没有,手动安装一下 [Spark](performance-analysis.md)
|
||||
|
||||
2. 开启 Spark 记录
|
||||
|
||||
@ -17,7 +17,7 @@ sidebar_position: 7
|
||||
|
||||
![](_images/怎么让大佬帮我/spark_start.png)
|
||||
|
||||
在你服务器卡顿的时候开启, **一段时间后** 结束它
|
||||
在你服务器卡顿的时候开启, **一段时间后** 结束它
|
||||
|
||||
3. 结束 Spark 记录
|
||||
|
||||
@ -25,7 +25,7 @@ sidebar_position: 7
|
||||
/spark profiler stop
|
||||
```
|
||||
|
||||
它会给你一个链接,你把这个链接发给大佬并 **礼貌的** 请求帮助你
|
||||
它会给你一个链接,你把这个链接发给大佬并 **礼貌的** 请求帮助你
|
||||
|
||||
注:链接位置在下图中红框标记的部分
|
||||
|
||||
|
@ -5,45 +5,45 @@ sidebar_position: 4
|
||||
|
||||
# 调服务端配置
|
||||
|
||||
没有适用于所有服务器的设置。你应该理解每个配置选项,并根据服务器的最佳参数与服务器硬件、玩家数量和服务器性质等调整参数。
|
||||
没有适用于所有服务器的设置。你应该理解每个配置选项,并根据服务器的最佳参数与服务器硬件、玩家数量和服务器性质等调整参数。
|
||||
|
||||
所以参数因服而异,随着进入游戏后期,服务器工作量会随着机器或者玩家增加而逐渐增加,
|
||||
所以参数因服而异,随着进入游戏后期,服务器工作量会随着机器或者玩家增加而逐渐增加,
|
||||
|
||||
因此服务器优化不是一次性的任务,而是持续的努力。
|
||||
因此服务器优化不是一次性的任务,而是持续的努力。
|
||||
|
||||
准备好你的脑子,以下的推荐参数仅作为参考,具体数字请自行尝试:
|
||||
准备好你的脑子,以下的推荐参数仅作为参考,具体数字请自行尝试:
|
||||
|
||||
适用于 Paper 版本 1.20 +
|
||||
|
||||
# 更简单的
|
||||
|
||||
自动优化脚本,[下载](https://github.com/lilingfengdev/NitWiki-Script/releases/download/windows-latest/auto-optimize.exe),在服务器根目录执行,目前支持CraftBukkit,Spigot,Paper,PufferFish,Purpur,Gale,Leaf
|
||||
自动优化脚本,[下载](https://github.com/lilingfengdev/NitWiki-Script/releases/download/windows-latest/auto-optimize.exe),在服务器根目录执行,目前支持CraftBukkit,Spigot,Paper,PufferFish,Purpur,Gale,Leaf
|
||||
|
||||
# 网络优化
|
||||
|
||||
网络优化主要目的是解决服务器上行带宽占用导致的玩家 **Ping**(即网络延迟)过高导致的糟糕游戏体验。
|
||||
网络优化主要目的是解决服务器上行带宽占用导致的玩家 **Ping**(即网络延迟)过高导致的糟糕游戏体验。
|
||||
|
||||
## 降低服务器视野距离
|
||||
|
||||
:::warning
|
||||
|
||||
请注意视野距离和玩家体验相关性也较大,除非特殊情况否则不建议大幅压缩视野换取带宽占用。
|
||||
请注意视野距离和玩家体验相关性也较大,除非特殊情况否则不建议大幅压缩视野换取带宽占用。
|
||||
|
||||
:::
|
||||
|
||||
### 手动调整
|
||||
|
||||
在 `spigot.yml` 或 `server.properties` 中可以设置服务器的视野距离,其中 `spigot.yml` 会覆盖 `server.properties` 的值。
|
||||
在 `spigot.yml` 或 `server.properties` 中可以设置服务器的视野距离,其中 `spigot.yml` 会覆盖 `server.properties` 的值。
|
||||
|
||||
```yaml
|
||||
view-distance: 8 #视野距离为 8 chunks
|
||||
```
|
||||
|
||||
如果你使用的默认 10 chunks 的视野距离,可能对于带宽来说有一定的压力,可以酌情减少,
|
||||
如果你使用的默认 10 chunks 的视野距离,可能对于带宽来说有一定的压力,可以酌情减少,
|
||||
|
||||
### 自动调整
|
||||
|
||||
安装 [View Distance Tweaks](https://www.spigotmc.org/resources/view-distance-tweaks.75164/) 实现自动调整视野距离使得玩家增多时自动减少视野,玩家减少时自动增加视野。
|
||||
安装 [View Distance Tweaks](https://www.spigotmc.org/resources/view-distance-tweaks.75164/) 实现自动调整视野距离使得玩家增多时自动减少视野,玩家减少时自动增加视野。
|
||||
|
||||
## 降低区块加载速度
|
||||
|
||||
@ -53,22 +53,22 @@ view-distance: 8 #视野距离为 8 chunks
|
||||
chunk-loading-basic:
|
||||
#注:以下的单位均为 chunks / seconds
|
||||
player-max-chunk-generate-rate: -1.0
|
||||
#为每个玩家生成分块的最大速率,设置为-1 则禁用。
|
||||
#为每个玩家生成分块的最大速率,设置为-1 则禁用。
|
||||
player-max-chunk-load-rate: 100
|
||||
#任何单个玩家加载块的最大速率,设置为-1 则禁用。
|
||||
#任何单个玩家加载块的最大速率,设置为-1 则禁用。
|
||||
player-max-chunk-send-rate: 75
|
||||
#服务器发送给单个玩家的最大速率。设置为-1 则禁用。
|
||||
```
|
||||
|
||||
其中 player-max-chunk-send-rate 对应服务器每秒钟最多向玩家发送多少区块包,设置得越低玩家收到完整的地图信息越慢,
|
||||
其中 player-max-chunk-send-rate 对应服务器每秒钟最多向玩家发送多少区块包,设置得越低玩家收到完整的地图信息越慢,
|
||||
|
||||
服务器虽然总是会发送几乎同样多的区块信息,但由于发送速度降低,这会降低上行带宽的最大占用率,从而避免大量跑图导致的顿卡。
|
||||
服务器虽然总是会发送几乎同样多的区块信息,但由于发送速度降低,这会降低上行带宽的最大占用率,从而避免大量跑图导致的顿卡。
|
||||
|
||||
## 控制实体数量
|
||||
|
||||
Minecraft 服务端会将每个实体的行为实时发送给附近的玩家客户端,这个包通常来说占用是很少的,但是大量玩家处于实体密集型区域时将出现大量带宽占用。
|
||||
Minecraft 服务端会将每个实体的行为实时发送给附近的玩家客户端,这个包通常来说占用是很少的,但是大量玩家处于实体密集型区域时将出现大量带宽占用。
|
||||
|
||||
bukkit.yml 以及 config/paper-world-default.yml 中对于 spawn-limits 做了限制(若二者均有值时取 Paper 的,若 Paper 中为 -1 时取 Bukkit)
|
||||
bukkit.yml 以及 config/paper-world-default.yml 中对于 spawn-limits 做了限制(若二者均有值时取 Paper 的,若 Paper 中为 -1 时取 Bukkit)
|
||||
|
||||
```yaml
|
||||
spawn-limits:
|
||||
@ -91,11 +91,11 @@ spawn-limits:
|
||||
# 美西螈
|
||||
|
||||
ambient: 15
|
||||
# 只包括蝙蝠,建议0
|
||||
# 只包括蝙蝠,建议0
|
||||
|
||||
```
|
||||
|
||||
高版本的 config/paper-world-default.yml 中将 `animals` 改为了 `creature`,将 `water-animals` 改为了 `water-creature`,可参考这份配置文件:
|
||||
高版本的 config/paper-world-default.yml 中将 `animals` 改为了 `creature`,将 `water-animals` 改为了 `water-creature`,可参考这份配置文件:
|
||||
|
||||
```yaml
|
||||
spawn-limits:
|
||||
@ -118,15 +118,15 @@ spawn-limits:
|
||||
# 美西螈
|
||||
|
||||
ambient: 15
|
||||
# 只包括蝙蝠,建议0
|
||||
# 只包括蝙蝠,建议0
|
||||
|
||||
```
|
||||
|
||||
大多数情况下,直接将所有限制降低到原来的 50% 是合理的,由于限制和实际实体数量不成线性,实际存在的实体数量大约是原来的 72%。
|
||||
大多数情况下,直接将所有限制降低到原来的 50% 是合理的,由于限制和实际实体数量不成线性,实际存在的实体数量大约是原来的 72%。
|
||||
|
||||
## 更低的实体显示距离(不推荐)
|
||||
## 更低的实体显示距离(不推荐)
|
||||
|
||||
降低实体显示距离可以让服务器少发送实体的刷新数据包,但是代价是玩家看不到远处的实体,即使在服务器上这些实体是存在的。
|
||||
降低实体显示距离可以让服务器少发送实体的刷新数据包,但是代价是玩家看不到远处的实体,即使在服务器上这些实体是存在的。
|
||||
|
||||
```yaml
|
||||
entity-tracking-range:
|
||||
@ -139,9 +139,9 @@ entity-tracking-range:
|
||||
|
||||
## 选择更加合理的反矿物透视方式
|
||||
|
||||
停止使用 [Orebfuscator](https://modrinth.com/plugin/orebfuscator) 等矿物混淆插件,使用 Paper 自带的矿物混淆。
|
||||
停止使用 [Orebfuscator](https://modrinth.com/plugin/orebfuscator) 等矿物混淆插件,使用 Paper 自带的矿物混淆。
|
||||
|
||||
使用 Paper 矿物混淆时候,尽量不要在 **非主世界** 开启 `mode 2` 或 `mode 3`
|
||||
使用 Paper 矿物混淆时候,尽量不要在 **非主世界** 开启 `mode 2` 或 `mode 3`
|
||||
|
||||
## 心跳连接
|
||||
|
||||
@ -161,21 +161,21 @@ entity-tracking-range:
|
||||
|
||||
:::tip
|
||||
|
||||
在此之前,你必须了解的是模拟距离(Simulate distance)和视野距离(View distance)区别(下文用 SDT和 VDT 分别指代)。
|
||||
在此之前,你必须了解的是模拟距离(Simulate distance)和视野距离(View distance)区别(下文用 SDT和 VDT 分别指代)。
|
||||
|
||||
模拟距离指的是玩家在这个范围内的游戏行为正常进行,如动物、怪物等 AI 的寻路,生物生成,草地扩散,水流流动等。
|
||||
模拟距离指的是玩家在这个范围内的游戏行为正常进行,如动物、怪物等 AI 的寻路,生物生成,草地扩散,水流流动等。
|
||||
|
||||
视野距离指的是服务器将发送给玩家的区块的数据包的距离,在这个范围内,游戏行为不一定会继续发生(这取决于 SDT)
|
||||
视野距离指的是服务器将发送给玩家的区块的数据包的距离,在这个范围内,游戏行为不一定会继续发生(这取决于 SDT)
|
||||
|
||||
当玩家移动导致一个区域不在玩家的 SDT 中而又在 VDT 中,那么服务器只会读取这个区域的方块信息并发送给玩家。
|
||||
当玩家移动导致一个区域不在玩家的 SDT 中而又在 VDT 中,那么服务器只会读取这个区域的方块信息并发送给玩家。
|
||||
|
||||
而不会对这个区域进行加载。这是各种游戏常见的处理方式,弱化远处的计算能够使得服务器更加流畅。
|
||||
而不会对这个区域进行加载。这是各种游戏常见的处理方式,弱化远处的计算能够使得服务器更加流畅。
|
||||
|
||||
:::
|
||||
|
||||
你可以在末地设置更高的 `view-distance` ,这可以让鞘翅飞的更舒服而不会占用很多资源。
|
||||
你可以在末地设置更高的 `view-distance` ,这可以让鞘翅飞的更舒服而不会占用很多资源。
|
||||
|
||||
另外,应该鼓励你的玩家安装 Bobby 或 Farsight 等 mod,可以在本地缓存区块,这不会对服务器性能造成任何影响!
|
||||
另外,应该鼓励你的玩家安装 Bobby 或 Farsight 等 mod,可以在本地缓存区块,这不会对服务器性能造成任何影响!
|
||||
|
||||
##### 手动调整
|
||||
|
||||
@ -185,7 +185,7 @@ entity-tracking-range:
|
||||
simulate-distance: 8
|
||||
```
|
||||
|
||||
如果你使用的默认 10 chunks 的模拟距离,这会非常影响性能,可以酌情减少,
|
||||
如果你使用的默认 10 chunks 的模拟距离,这会非常影响性能,可以酌情减少,
|
||||
|
||||
```
|
||||
推荐值:3 - 8
|
||||
@ -193,13 +193,13 @@ simulate-distance: 8
|
||||
|
||||
##### 自动调整
|
||||
|
||||
安装 [View Distance Tweaks](https://www.spigotmc.org/resources/view-distance-tweaks.75164/) 实现自动调整视野距离使得玩家增多时自动减少视野,玩家减少时自动增加视野。
|
||||
安装 [View Distance Tweaks](https://www.spigotmc.org/resources/view-distance-tweaks.75164/) 实现自动调整视野距离使得玩家增多时自动减少视野,玩家减少时自动增加视野。
|
||||
|
||||
### 区块生成和加载
|
||||
|
||||
#### chunk-loading-basic
|
||||
|
||||
服务器生成区块非常消耗资源,希望你服务器进行了预生成,如果没有进行的话请阅读 [预生成](/docs-java/process/maintenance/optimize/optimize.md#第二步---预生成)
|
||||
服务器生成区块非常消耗资源,希望你服务器进行了预生成,如果没有进行的话请阅读 [预生成](/docs-java/process/maintenance/optimize/optimize.md#第二步---预生成)
|
||||
|
||||
在 `/config/paper-global.yml` 中有关于区块生成的一些参数
|
||||
|
||||
@ -207,16 +207,16 @@ simulate-distance: 8
|
||||
chunk-loading-basic:
|
||||
#注:以下的单位均为 chunks / seconds
|
||||
player-max-chunk-generate-rate: -1.0
|
||||
#为每个玩家生成分块的最大速率,设置为-1 则禁用。
|
||||
#为每个玩家生成分块的最大速率,设置为-1 则禁用。
|
||||
player-max-chunk-load-rate: 100
|
||||
#任何单个玩家加载块的最大速率,设置为-1 则禁用。
|
||||
#任何单个玩家加载块的最大速率,设置为-1 则禁用。
|
||||
player-max-chunk-send-rate: 75
|
||||
#服务器发送给单个玩家的最大速率。设置为-1 则禁用。
|
||||
```
|
||||
|
||||
其中 `player-max-chunk-generate-rate` 对应服务器每秒钟最多为玩家生成多少区块,设置得越低区块生成越慢。
|
||||
其中 `player-max-chunk-generate-rate` 对应服务器每秒钟最多为玩家生成多少区块,设置得越低区块生成越慢。
|
||||
|
||||
此时大量跑图的玩家可能会觉得服务器有一些滞后,但是能够保证大多数玩家的游戏体验,这是值得的。
|
||||
此时大量跑图的玩家可能会觉得服务器有一些滞后,但是能够保证大多数玩家的游戏体验,这是值得的。
|
||||
|
||||
```
|
||||
推荐值:20 - 40
|
||||
@ -228,15 +228,15 @@ chunk-loading-basic:
|
||||
推荐值: true
|
||||
```
|
||||
|
||||
防止玩家进入未加载的区块,以避免同步加载区块造成的主线程卡顿。view-distance视距越小,玩家进入未加载区块的可能性就越大。
|
||||
防止玩家进入未加载的区块,以避免同步加载区块造成的主线程卡顿。view-distance视距越小,玩家进入未加载区块的可能性就越大。
|
||||
|
||||
#### max-loads-per-projectile
|
||||
|
||||
在 Minecraft 中,射出的箭、扔出的末影珍珠等可以加载一定距离的区块。
|
||||
在 Minecraft 中,射出的箭、扔出的末影珍珠等可以加载一定距离的区块。
|
||||
|
||||
在 `pufferfish.yml` 中可以调整弹射物最多加载的区块数量。
|
||||
|
||||
降低该值可减少大量弹射物造成的区块负载,但可能会导致末影珍珠等出现问题。
|
||||
降低该值可减少大量弹射物造成的区块负载,但可能会导致末影珍珠等出现问题。
|
||||
|
||||
```
|
||||
推荐值: 8
|
||||
@ -246,7 +246,7 @@ chunk-loading-basic:
|
||||
|
||||
#### delay-chunk-unloads-by
|
||||
|
||||
区块的反复大量加载和卸载区块是很消耗性能的,而长期加载无效的区块也是浪费性能。
|
||||
区块的反复大量加载和卸载区块是很消耗性能的,而长期加载无效的区块也是浪费性能。
|
||||
|
||||
在 `paper-world-defaults.yml` 中可以调整玩家离开后多久开始卸载区块。
|
||||
|
||||
@ -255,9 +255,9 @@ chunks:
|
||||
delay-chunk-unloads-by: 10s
|
||||
```
|
||||
|
||||
这有助于避免玩家来回移动时,服务器不断加载和卸载相同的区块。过高的值可能会导致一次加载太多区块。
|
||||
这有助于避免玩家来回移动时,服务器不断加载和卸载相同的区块。过高的值可能会导致一次加载太多区块。
|
||||
|
||||
在玩家频繁传送或加载的区域,可以考虑让该区域永久加载。这可以减轻服务器不小的负担。
|
||||
在玩家频繁传送或加载的区域,可以考虑让该区域永久加载。这可以减轻服务器不小的负担。
|
||||
|
||||
| 推荐值 | 服务器类型 |
|
||||
| ------ | ---------------------------------- |
|
||||
@ -269,34 +269,34 @@ chunks:
|
||||
|
||||
#### max-auto-save-chunks-per-tick
|
||||
|
||||
在 `paper-world-defaults.yml` 中的参数,用于控制世界保存速度。
|
||||
在 `paper-world-defaults.yml` 中的参数,用于控制世界保存速度。
|
||||
|
||||
```
|
||||
max-auto-save-chunks-per-tick: 24
|
||||
```
|
||||
|
||||
这个值是每个 tick 最多可以保存的区块数量,通过降低世界区块保存速度可以提高平均性能。
|
||||
这个值是每个 tick 最多可以保存的区块数量,通过降低世界区块保存速度可以提高平均性能。
|
||||
|
||||
如果一个 tick 加载区块超过本设定值,将在下一个 tick 继续保存剩余的待保存区块。
|
||||
如果一个 tick 加载区块超过本设定值,将在下一个 tick 继续保存剩余的待保存区块。
|
||||
|
||||
这个值应该与需要保存的区块及玩家人数相匹配,当人数更多有更多区块需要保存时应该适当增加。
|
||||
这个值应该与需要保存的区块及玩家人数相匹配,当人数更多有更多区块需要保存时应该适当增加。
|
||||
|
||||
保存区块的速度快意味着保存时负载高,但保存时间更短。如果遭遇断电、突然死机等情况时,
|
||||
保存区块的速度快意味着保存时负载高,但保存时间更短。如果遭遇断电、突然死机等情况时,
|
||||
|
||||
使用更高的保存速度是有利于降低丢失区块数据的可能性的。
|
||||
|
||||
| 推荐值 | 服务器人数 |
|
||||
| ------ | ----------------- |
|
||||
| 4 | 长期不到 10 人 |
|
||||
| 8 | 20 人左右(默认) |
|
||||
| 8 | 20 人左右(默认) |
|
||||
| 12 | 30 人左右 |
|
||||
| >24 | 长期大于 50 |
|
||||
|
||||
#### entity-per-chunk-save-limit
|
||||
|
||||
在保存区块时,服务器会一并保存区块对应位置的实体。
|
||||
在保存区块时,服务器会一并保存区块对应位置的实体。
|
||||
|
||||
在 `paper-world-defaults.yml` 中的参数,用于控制世界保存时最大保存的某种实体数量。
|
||||
在 `paper-world-defaults.yml` 中的参数,用于控制世界保存时最大保存的某种实体数量。
|
||||
|
||||
推荐值:
|
||||
|
||||
@ -323,9 +323,9 @@ chunks:
|
||||
wither_skull: 4
|
||||
```
|
||||
|
||||
此项可以设置区块卸载后从内存保存到硬盘时每个区块最大的实体数量,可为每种实体规定一个限制,
|
||||
此项可以设置区块卸载后从内存保存到硬盘时每个区块最大的实体数量,可为每种实体规定一个限制,
|
||||
|
||||
以避免服务器尝试保存大量弹射物时崩溃,你还可以根据名称将其他实体添加到该列表中。
|
||||
以避免服务器尝试保存大量弹射物时崩溃,你还可以根据名称将其他实体添加到该列表中。
|
||||
|
||||
从而缓解某些玩家使用大量实体卡服。**并不适用于阻止玩家建造大型生物农场。**
|
||||
|
||||
@ -333,11 +333,11 @@ chunks:
|
||||
|
||||
#### treasure-maps.enabled
|
||||
|
||||
生成藏宝图的性能占用极高,如果要定位的结构位于未生成的区块中,服务器甚至可能会未响应。
|
||||
生成藏宝图的性能占用极高,如果要定位的结构位于未生成的区块中,服务器甚至可能会未响应。
|
||||
|
||||
只有在你预生成世界并设置原版世界边界的情况下,启用此功能才是安全的。
|
||||
只有在你预生成世界并设置原版世界边界的情况下,启用此功能才是安全的。
|
||||
|
||||
在 `paper-world-default.yml` 中的参数,决定服务器是否生成藏宝图。
|
||||
在 `paper-world-default.yml` 中的参数,决定服务器是否生成藏宝图。
|
||||
|
||||
```
|
||||
推荐值: false
|
||||
@ -345,7 +345,7 @@ chunks:
|
||||
|
||||
#### treasure-maps.find-already-discovered
|
||||
|
||||
在 `paper-world-default.yml` 中的参数,控制服务器是否强制藏宝图在未探索的地方。
|
||||
在 `paper-world-default.yml` 中的参数,控制服务器是否强制藏宝图在未探索的地方。
|
||||
|
||||
```yaml
|
||||
推荐值:
|
||||
@ -353,15 +353,15 @@ chunks:
|
||||
villager-trade: true
|
||||
```
|
||||
|
||||
由于这些未探索的结构通常位于尚未生成的区块中,这可能会滞后服务器。
|
||||
由于这些未探索的结构通常位于尚未生成的区块中,这可能会滞后服务器。
|
||||
|
||||
`villager-trade` 影响村民交易的地图。
|
||||
|
||||
`loot-tables` 影响任何生成战利品的容器,如宝箱等。
|
||||
`loot-tables` 影响任何生成战利品的容器,如宝箱等。
|
||||
|
||||
#### dolphin.disable-treasure-searching
|
||||
|
||||
在 `purpur.yml` 中的参数,控制海豚是否能够寻找藏宝图。
|
||||
在 `purpur.yml` 中的参数,控制海豚是否能够寻找藏宝图。
|
||||
|
||||
设置为 true 禁用搜索。
|
||||
|
||||
@ -371,15 +371,15 @@ chunks:
|
||||
|
||||
## 实体
|
||||
|
||||
默认情况下,实体的占用一般占服务器的 40% 左右,如果不控制实体,即使是市面上最好的 CPU ,服务器也会卡顿。
|
||||
默认情况下,实体的占用一般占服务器的 40% 左右,如果不控制实体,即使是市面上最好的 CPU ,服务器也会卡顿。
|
||||
|
||||
### 控制实体数量
|
||||
|
||||
用 spark 等性能分析插件查看,应该希望将全部实体 tick 保持在 30% 以下(有一定数量的玩家在线的情况)。
|
||||
用 spark 等性能分析插件查看,应该希望将全部实体 tick 保持在 30% 以下(有一定数量的玩家在线的情况)。
|
||||
|
||||
#### spawn-limits
|
||||
|
||||
在 `bukkit.yml` 和 `paper-world-default` 中都有一样的配置,但 paper 如果设置将覆盖 bukkit 的。
|
||||
在 `bukkit.yml` 和 `paper-world-default` 中都有一样的配置,但 paper 如果设置将覆盖 bukkit 的。
|
||||
|
||||
所以建议直接在 `paper-world-default` 中设置:
|
||||
|
||||
@ -398,14 +398,14 @@ spawn-limits:
|
||||
axolotls: 5
|
||||
# 美西螈
|
||||
ambient: 15
|
||||
# 只包括蝙蝠,建议0
|
||||
# 只包括蝙蝠,建议0
|
||||
```
|
||||
|
||||
生物生成最大数量为 `玩家数量 * 生成限制`,该值越小,玩家能遇到的生物就越少,不同生物类型在每个玩家附近生成的概率是平均的。
|
||||
生物生成最大数量为 `玩家数量 * 生成限制`,该值越小,玩家能遇到的生物就越少,不同生物类型在每个玩家附近生成的概率是平均的。
|
||||
|
||||
这是一把双刃剑:较低的值会减轻服务器负担,但在大多数游戏模式中,自然生成的生物是游戏玩法的重要组成部分。
|
||||
这是一把双刃剑:较低的值会减轻服务器负担,但在大多数游戏模式中,自然生成的生物是游戏玩法的重要组成部分。
|
||||
|
||||
下表推荐了三种不同情况的推荐值,请结合服务器卡顿程度和玩法选择合适的值:
|
||||
下表推荐了三种不同情况的推荐值,请结合服务器卡顿程度和玩法选择合适的值:
|
||||
|
||||
| 生物类型 | 推荐最小值 | 推荐值 | 推荐最大值 |
|
||||
| -------------------------- | ---------- | ------ | ---------- |
|
||||
@ -419,21 +419,21 @@ spawn-limits:
|
||||
|
||||
#### mob-spawn-range
|
||||
|
||||
另外,在 `spigot.yml` 中有关于生物生成范围的设置:
|
||||
另外,在 `spigot.yml` 中有关于生物生成范围的设置:
|
||||
|
||||
```yaml
|
||||
mob-spawn-range: 8
|
||||
```
|
||||
|
||||
因为我们降低了总生物的刷新频率和数量,生物的总密度会明显下降,考虑到过远处的怪物对于游戏性影响非常小。
|
||||
因为我们降低了总生物的刷新频率和数量,生物的总密度会明显下降,考虑到过远处的怪物对于游戏性影响非常小。
|
||||
|
||||
我们可以缩小生物刷新范围(以区块为单位,且不会大于[模拟距离](#手动调整))从而获得和原版接近的密度。
|
||||
我们可以缩小生物刷新范围(以区块为单位,且不会大于[模拟距离](#手动调整))从而获得和原版接近的密度。
|
||||
|
||||
推荐值:
|
||||
|
||||
| `spawn-limit` 值 | 对应 `mob-spawn-range`推荐值 | 实际生物量 |
|
||||
| :--------------: | :--------------------------: | :---------: |
|
||||
| 70 (默认) | 8(默认) | 100% (默认) |
|
||||
| 70 (默认) | 8(默认) | 100% (默认) |
|
||||
| 56 | 6-7 | 90% |
|
||||
| 42 | 5-6 | 78% |
|
||||
| 28 | 4-5 | 65% |
|
||||
@ -441,7 +441,7 @@ mob-spawn-range: 8
|
||||
|
||||
:::tip
|
||||
|
||||
如果你只调`mob-spawn-range`,不更改 `spawn-limit`,会导致玩家周围刷很多怪,影响游玩
|
||||
如果你只调`mob-spawn-range`,不更改 `spawn-limit`,会导致玩家周围刷很多怪,影响游玩
|
||||
|
||||
:::
|
||||
|
||||
@ -462,9 +462,9 @@ ticks-per:
|
||||
ambient-spawns: 1
|
||||
```
|
||||
|
||||
这个参数控制了多少 tick 后服务器会进行一次生物的刷新,可以看到默认情况下是每个 tick 都刷新,即每秒 20 次。
|
||||
这个参数控制了多少 tick 后服务器会进行一次生物的刷新,可以看到默认情况下是每个 tick 都刷新,即每秒 20 次。
|
||||
|
||||
这无疑是非常繁重的工作,但调整这个值到太高会导致即使服务器生物没有到达上限,生物刷新频率还是偏低。
|
||||
这无疑是非常繁重的工作,但调整这个值到太高会导致即使服务器生物没有到达上限,生物刷新频率还是偏低。
|
||||
|
||||
```yaml
|
||||
推荐值:
|
||||
@ -481,9 +481,9 @@ ticks-per:
|
||||
|
||||
为什么选择 9 、199 之类的数字作为刷新频率而不是 10、200?
|
||||
|
||||
因为选择 10 和 200 时,每 200 tick 就会有多种类型的生物需要刷新,任务量集中在了某一刻度上,这会导致负载不平均。
|
||||
因为选择 10 和 200 时,每 200 tick 就会有多种类型的生物需要刷新,任务量集中在了某一刻度上,这会导致负载不平均。
|
||||
|
||||
使用 9、199 时,需要每 1791 tick 才会有多种类型生物需要被刷新,刷新任务被平均在了更多 tick 中。
|
||||
使用 9、199 时,需要每 1791 tick 才会有多种类型生物需要被刷新,刷新任务被平均在了更多 tick 中。
|
||||
|
||||
:::
|
||||
|
||||
@ -520,7 +520,7 @@ ticks-per:
|
||||
soft: 30
|
||||
```
|
||||
|
||||
此项可以调整各种生物的消失范围(方块为单位)。降低这些值可以更快地清除远离玩家的生物。 你应该将 soft 软距离设置为约`30`,然后将 hard 硬性距离设置的稍微大于 simulation-distance,这样当玩家刚刚跑出区块时,生物不会立即消失(你可以一并调整 [paper-world configuration] 中的`delay-chunk-unloads-by`)。 当一个生物离开了 hard 距离,该生物会立刻消失。 当一个生物处于 soft 和 hard 距离之间,该生物将有概率消失。 你的 hard 距离应该大于 soft 距离。你应该根据模拟距离调整此项:`(simulation-distance * 16) + 8`。 此项还可能造成玩家经过后,区块不卸载的情况(因为生物还没消失)。
|
||||
此项可以调整各种生物的消失范围(方块为单位)。降低这些值可以更快地清除远离玩家的生物。 你应该将 soft 软距离设置为约`30`,然后将 hard 硬性距离设置的稍微大于 simulation-distance,这样当玩家刚刚跑出区块时,生物不会立即消失(你可以一并调整 [paper-world configuration] 中的`delay-chunk-unloads-by`)。 当一个生物离开了 hard 距离,该生物会立刻消失。 当一个生物处于 soft 和 hard 距离之间,该生物将有概率消失。 你的 hard 距离应该大于 soft 距离。你应该根据模拟距离调整此项:`(simulation-distance * 16) + 8`。 此项还可能造成玩家经过后,区块不卸载的情况(因为生物还没消失)。
|
||||
|
||||
### 碰撞箱
|
||||
|
||||
@ -532,7 +532,7 @@ ticks-per:
|
||||
推荐值: 2
|
||||
```
|
||||
|
||||
覆盖 [spigot.yml] 中的同名项。它让你决定一个实体可以同时处理多少次碰撞。`0`将导致无法推动其他实体,包括玩家。`2`应该可以处理大部分情况。 值得注意的是,这将会破坏 maxEntityCramming gamerule 也就是生物堆叠窒息。
|
||||
覆盖 [spigot.yml] 中的同名项。它让你决定一个实体可以同时处理多少次碰撞。`0`将导致无法推动其他实体,包括玩家。`2`应该可以处理大部分情况。 值得注意的是,这将会破坏 maxEntityCramming gamerule 也就是生物堆叠窒息。
|
||||
|
||||
|
||||
#### fix-climbing-bypassing-cramming-rule
|
||||
@ -543,13 +543,13 @@ ticks-per:
|
||||
推荐值: true
|
||||
```
|
||||
|
||||
是否修复实体在攀爬时不受实体挤压影响的问题。这将防止大量生物在攀爬时堆叠在狭小空间内(例如蜘蛛)。
|
||||
是否修复实体在攀爬时不受实体挤压影响的问题。这将防止大量生物在攀爬时堆叠在狭小空间内(例如蜘蛛)。
|
||||
|
||||
#### enable-suffocation-optimization
|
||||
|
||||
`推荐值: true`
|
||||
|
||||
此项将检查速率限制为伤害超时来优化窒息检查(检查生物是否在方块内以及它们是否应该受到窒息伤害)。除非你是生电玩家,能够使用精确计时窒息杀死实体的时间,否则这种优化应该是不可能注意到的。
|
||||
此项将检查速率限制为伤害超时来优化窒息检查(检查生物是否在方块内以及它们是否应该受到窒息伤害)。除非你是生电玩家,能够使用精确计时窒息杀死实体的时间,否则这种优化应该是不可能注意到的。
|
||||
|
||||
### 实体 AI
|
||||
|
||||
@ -559,9 +559,9 @@ ticks-per:
|
||||
|
||||
在 `spigot.yml` 中有一个控制生物激活范围的参数 `entity-activation-range`:
|
||||
|
||||
此项可以设置实体的激活AI距离(方块为单位)。降低这些值有助于提高性能,
|
||||
此项可以设置实体的激活AI距离(方块为单位)。降低这些值有助于提高性能,
|
||||
|
||||
但可能会导致怪物反应迟钝。将此值降低太多可能会破坏某些生物农场,比如刷铁机。
|
||||
但可能会导致怪物反应迟钝。将此值降低太多可能会破坏某些生物农场,比如刷铁机。
|
||||
|
||||
```yaml
|
||||
推荐值:
|
||||
@ -583,9 +583,9 @@ ticks-per:
|
||||
推荐值: true
|
||||
```
|
||||
|
||||
在实体非活动时限制其目标选择器,让非活动实体每 `20 tick` 更新一次其目标选择器,
|
||||
在实体非活动时限制其目标选择器,让非活动实体每 `20 tick` 更新一次其目标选择器,
|
||||
|
||||
而不是每 tick 更新一次。可以将性能提高几个百分点,而且对游戏体验的影响很小。
|
||||
而不是每 tick 更新一次。可以将性能提高几个百分点,而且对游戏体验的影响很小。
|
||||
|
||||
##### dab
|
||||
|
||||
@ -600,15 +600,15 @@ dab:
|
||||
blacklisted-entities: []
|
||||
```
|
||||
|
||||
`dab` 是什么?这是一个生物 AI 控制算法,以梯度降低远处生物的 AI 运行,因为远处生物相对不重要。
|
||||
`dab` 是什么?这是一个生物 AI 控制算法,以梯度降低远处生物的 AI 运行,因为远处生物相对不重要。
|
||||
|
||||
`start-distance` 单位为格,控制了从多少远开始降低生物的 AI;
|
||||
`start-distance` 单位为格,控制了从多少远开始降低生物的 AI;
|
||||
|
||||
`activation-dist-mod` 为梯度,增加此值可使较远的实体更频繁地运算。减少此值可使较远的实体运算的更慢,从而更加流畅。但会影响实体与环境互动,可能降低刷怪塔效率。
|
||||
`activation-dist-mod` 为梯度,增加此值可使较远的实体更频繁地运算。减少此值可使较远的实体运算的更慢,从而更加流畅。但会影响实体与环境互动,可能降低刷怪塔效率。
|
||||
|
||||
`max-tick-freq` 单位为 tick,控制了实体最低 tick 的间距,即无论实体有多远,只要被加载,那么至少在 20 tick 内会被运算一次。
|
||||
`max-tick-freq` 单位为 tick,控制了实体最低 tick 的间距,即无论实体有多远,只要被加载,那么至少在 20 tick 内会被运算一次。
|
||||
|
||||
`blacklisted-entities` 是可以无视 dab 控制 AI 的实体,如果某种实体 AI 特别重要,那么可以试着加入黑名单。
|
||||
`blacklisted-entities` 是可以无视 dab 控制 AI 的实体,如果某种实体 AI 特别重要,那么可以试着加入黑名单。
|
||||
|
||||
不同情况下的推荐值:
|
||||
|
||||
@ -628,13 +628,13 @@ dab:
|
||||
nerf-spawner-mobs: false
|
||||
```
|
||||
|
||||
打开此项可以卸载刷怪笼生成的生物的 AI,被卸载 AI 的生物将不会做任何事情。
|
||||
打开此项可以卸载刷怪笼生成的生物的 AI,被卸载 AI 的生物将不会做任何事情。
|
||||
|
||||
```
|
||||
推荐值: true
|
||||
```
|
||||
|
||||
这一项打开时候会大幅影响刷怪塔及游戏体验,因此 paper 为此做了[更加人性化的选项](#spawner-nerfed-mobs-should-jump)。
|
||||
这一项打开时候会大幅影响刷怪塔及游戏体验,因此 paper 为此做了[更加人性化的选项](#spawner-nerfed-mobs-should-jump)。
|
||||
|
||||
##### spawner-nerfed-mobs-should-jump
|
||||
|
||||
@ -644,7 +644,7 @@ nerf-spawner-mobs: false
|
||||
spawner-nerfed-mobs-should-jump: false
|
||||
```
|
||||
|
||||
这个参数控制了刷怪笼刷出的生物是否能给在水中跳跃,这修复了 `nerf-spawner-mobs` 导致的刷怪塔问题。
|
||||
这个参数控制了刷怪笼刷出的生物是否能给在水中跳跃,这修复了 `nerf-spawner-mobs` 导致的刷怪塔问题。
|
||||
|
||||
```
|
||||
推荐值: true
|
||||
@ -658,7 +658,7 @@ spawner-nerfed-mobs-should-jump: false
|
||||
推荐值: 2 - 3
|
||||
```
|
||||
|
||||
此项调整刷怪笼的刷新频率,如果服务器有大量刷怪笼,调高刷新间隙这会很有助。
|
||||
此项调整刷怪笼的刷新频率,如果服务器有大量刷怪笼,调高刷新间隙这会很有助。
|
||||
|
||||
#### 村民相关
|
||||
|
||||
@ -672,7 +672,7 @@ tick-inactive-villagers: true
|
||||
|
||||
非活跃的定义是村民在上述参数 `entity-activation-range` 中 `villagers` 所设定的范围外时。
|
||||
|
||||
禁用此功能将有助于提高性能,但在某些情况下会让远处的村民更蠢,此项还会降低刷铁机等的效率。
|
||||
禁用此功能将有助于提高性能,但在某些情况下会让远处的村民更蠢,此项还会降低刷铁机等的效率。
|
||||
|
||||
```
|
||||
推荐值:false
|
||||
@ -684,7 +684,7 @@ tick-inactive-villagers: true
|
||||
|
||||
由于村民被僵尸跟踪时会触发非常复杂的寻路、铁傀儡召唤等行为。
|
||||
|
||||
大量村民被僵尸恐吓时会造成卡顿,当 TPS 低于`purpur.yml` 中设置的 `lagging-threshold` 值时,启用此项会阻止僵尸追赶村民。
|
||||
大量村民被僵尸恐吓时会造成卡顿,当 TPS 低于`purpur.yml` 中设置的 `lagging-threshold` 值时,启用此项会阻止僵尸追赶村民。
|
||||
|
||||
```
|
||||
推荐值: false
|
||||
@ -698,7 +698,7 @@ tick-inactive-villagers: true
|
||||
推荐值: true
|
||||
```
|
||||
|
||||
> 仅当村民造成服务器卡顿时才应启用此项!否则,村民寻路会出现问题。
|
||||
> 仅当村民造成服务器卡顿时才应启用此项!否则,村民寻路会出现问题。
|
||||
|
||||
村民被卸载了AI后只会按时补货。启用此项会禁用村民自动寻路。
|
||||
|
||||
@ -713,7 +713,7 @@ tick-inactive-villagers: true
|
||||
nearest-bed-sensor: 16
|
||||
```
|
||||
|
||||
降低这个值会大大提高了村民的性能,但会阻止他们探测到比设定值更远的工作方块或床。
|
||||
降低这个值会大大提高了村民的性能,但会阻止他们探测到比设定值更远的工作方块或床。
|
||||
|
||||
##### tick-rates
|
||||
|
||||
@ -735,9 +735,9 @@ tick-inactive-villagers: true
|
||||
nearestlivingentitysensor: 40
|
||||
```
|
||||
|
||||
> 当 [Pufferfish's DAB](#dab) 启用时,不建议修改该项任何默认值。
|
||||
> 当 [Pufferfish's DAB](#dab) 启用时,不建议修改该项任何默认值。
|
||||
|
||||
`acquirepoi`是村民最频繁的行为, 因此它的间隔已经大大增加了。 如果村民有寻路问题,请减少此项。
|
||||
`acquirepoi`是村民最频繁的行为, 因此它的间隔已经大大增加了。 如果村民有寻路问题,请减少此项。
|
||||
|
||||
#### 寻路
|
||||
|
||||
@ -749,9 +749,9 @@ tick-inactive-villagers: true
|
||||
推荐值: false
|
||||
```
|
||||
|
||||
禁用此项将减少寻路次数,从而提高性能。在某些情况下,这会导致生物看起来更加迟钝;
|
||||
禁用此项将减少寻路次数,从而提高性能。在某些情况下,这会导致生物看起来更加迟钝;
|
||||
|
||||
它们只会每 5 个 tick(0.25 秒)被动更新一次路径。
|
||||
它们只会每 5 个 tick(0.25 秒)被动更新一次路径。
|
||||
|
||||
|
||||
### 掉落物及经验
|
||||
@ -793,7 +793,7 @@ tick-inactive-villagers: true
|
||||
scaffolding: 600
|
||||
```
|
||||
|
||||
此项可以设置指定物品消失的时间(tick 为单位), 建议用此项替代扫地姬或 `merge-radius` 来提高性能。
|
||||
此项可以设置指定物品消失的时间(tick 为单位), 建议用此项替代扫地姬或 `merge-radius` 来提高性能。
|
||||
|
||||
##### merge-radius
|
||||
|
||||
@ -806,9 +806,9 @@ tick-inactive-villagers: true
|
||||
exp: 4.0
|
||||
```
|
||||
|
||||
可减少地面未拾取物数量。 设置得太高会导致物品合并时像瞬间传送。也会使得物品穿过方块,可能破坏一些刷怪塔。
|
||||
可减少地面未拾取物数量。 设置得太高会导致物品合并时像瞬间传送。也会使得物品穿过方块,可能破坏一些刷怪塔。
|
||||
|
||||
此项不会判断物品是否穿过墙壁 (除非开启 Paper 中的`fix-items-merging-through-walls)。`
|
||||
此项不会判断物品是否穿过墙壁 (除非开启 Paper 中的`fix-items-merging-through-walls)。`
|
||||
|
||||
`经验球仅会在生成时合并。建议使用`alt-item-despawn-rate`来优化掉落物数量。
|
||||
|
||||
@ -820,7 +820,7 @@ tick-inactive-villagers: true
|
||||
推荐值: 20
|
||||
```
|
||||
|
||||
怪物射出的箭消失的时间(以 tick 为单位)。因为玩家无法捡起这些箭,所以你不妨将其设置为`20`(1 秒)之类的值。
|
||||
怪物射出的箭消失的时间(以 tick 为单位)。因为玩家无法捡起这些箭,所以你不妨将其设置为`20`(1 秒)之类的值。
|
||||
|
||||
#### creative-arrow-despawn-rate
|
||||
|
||||
@ -828,7 +828,7 @@ tick-inactive-villagers: true
|
||||
推荐值: 20
|
||||
```
|
||||
|
||||
创造模式玩家射出的箭消失的时间(以 tick 为单位)。因为玩家无法捡起这些箭,所以你不妨将其设置为`20`(1 秒)之类的值。
|
||||
创造模式玩家射出的箭消失的时间(以 tick 为单位)。因为玩家无法捡起这些箭,所以你不妨将其设置为`20`(1 秒)之类的值。
|
||||
|
||||
### 盔甲架
|
||||
|
||||
@ -840,7 +840,7 @@ tick-inactive-villagers: true
|
||||
推荐值: false
|
||||
```
|
||||
|
||||
在大部分情况下,将该项设置为 `false` 是安全的。如果你使用盔甲架或任何相关的插件时遇到了问题,请重新启用它。
|
||||
在大部分情况下,将该项设置为 `false` 是安全的。如果你使用盔甲架或任何相关的插件时遇到了问题,请重新启用它。
|
||||
|
||||
这将防止盔甲架被水推动或受到重力的影响。
|
||||
|
||||
@ -850,7 +850,7 @@ tick-inactive-villagers: true
|
||||
推荐值: false
|
||||
```
|
||||
|
||||
是否启用盔甲架碰撞。如果你有很多盔甲架,并且不想它们与任何东西发生碰撞,这将有所帮助。
|
||||
是否启用盔甲架碰撞。如果你有很多盔甲架,并且不想它们与任何东西发生碰撞,这将有所帮助。
|
||||
|
||||
## 红石
|
||||
|
||||
@ -864,9 +864,9 @@ tick-inactive-villagers: true
|
||||
推荐值: ALTERNATE_CURRENT
|
||||
```
|
||||
|
||||
将红石系统替换为优化版本,减少冗余更新,降低服务器必须计算的逻辑量。可能会对个别的红石机器产生影响,
|
||||
将红石系统替换为优化版本,减少冗余更新,降低服务器必须计算的逻辑量。可能会对个别的红石机器产生影响,
|
||||
|
||||
但其提升非常大,性能提升可能有 70%,利大于弊。甚至还可以修复 Bukkit 造成的红石同步问题。
|
||||
但其提升非常大,性能提升可能有 70%,利大于弊。甚至还可以修复 Bukkit 造成的红石同步问题。
|
||||
|
||||
`ALTERNATE_CURRENT`是基于 [Alternate Current](https://modrinth.com/mod/alternate-current)。 更多信息请阅读该页面。
|
||||
|
||||
@ -882,7 +882,7 @@ tick-inactive-villagers: true
|
||||
|
||||
仅当有插件监听 `InventoryMoveItemEvent` 时才会触发该事件。
|
||||
|
||||
**如果你想使用侦听此事件的插件,请不要设置为 true,比如保护插件!**
|
||||
**如果你想使用侦听此事件的插件,请不要设置为 true,比如保护插件!**
|
||||
|
||||
#### hopper.ignore-occluding-blocks
|
||||
|
||||
@ -892,7 +892,7 @@ tick-inactive-villagers: true
|
||||
推荐值: true
|
||||
```
|
||||
|
||||
降低沙子或沙砾中的漏斗矿车之类的情况,启用该项可能会破坏一些红石装置。
|
||||
降低沙子或沙砾中的漏斗矿车之类的情况,启用该项可能会破坏一些红石装置。
|
||||
|
||||
### tick-per
|
||||
|
||||
@ -904,11 +904,11 @@ tick-inactive-villagers: true
|
||||
|
||||
`hopper-check` 控制了漏斗一次运输多少物品。
|
||||
|
||||
在漏斗特别多的服务器中,合理搭配`hopper-transfer` 和 `hopper-check` 可以降低漏斗占用。(但可能略微影响一些机器的行为,如分类机)
|
||||
在漏斗特别多的服务器中,合理搭配`hopper-transfer` 和 `hopper-check` 可以降低漏斗占用。(但可能略微影响一些机器的行为,如分类机)
|
||||
|
||||
另外,使用更高的 `hopper-check` 能够增加漏斗在单位时间的物品传输效率,
|
||||
另外,使用更高的 `hopper-check` 能够增加漏斗在单位时间的物品传输效率,
|
||||
|
||||
降低同样数量物品的漏斗使用时间,进一步降低漏斗占用。
|
||||
降低同样数量物品的漏斗使用时间,进一步降低漏斗占用。
|
||||
|
||||
| 漏斗速度 | 服务器占用 | hopper-transfer | hopper-check |
|
||||
| -------- | ---------- | --------------- | ------------ |
|
||||
@ -925,7 +925,7 @@ tick-inactive-villagers: true
|
||||
|
||||
在 `paper-world-default.yml` 中控制是否启用爆炸优化。
|
||||
|
||||
将此项设为`true`可以将原版爆炸算法替换成优化版本,略微牺牲非常小的爆炸伤害换取爆炸时的大量性能提升。
|
||||
将此项设为`true`可以将原版爆炸算法替换成优化版本,略微牺牲非常小的爆炸伤害换取爆炸时的大量性能提升。
|
||||
|
||||
```
|
||||
推荐值: true
|
||||
@ -935,11 +935,11 @@ tick-inactive-villagers: true
|
||||
|
||||
## 减少后台垃圾内容
|
||||
|
||||
服务端自带一些非常简陋的反作弊,检测玩家是否飞行、过速等,但效果非常差。
|
||||
服务端自带一些非常简陋的反作弊,检测玩家是否飞行、过速等,但效果非常差。
|
||||
|
||||
特别是服务器出现卡顿的时候,这将在后台进行大量刷屏。如果安装了至少一个反作弊。
|
||||
特别是服务器出现卡顿的时候,这将在后台进行大量刷屏。如果安装了至少一个反作弊。
|
||||
|
||||
那么就可以关闭这些刷屏的无效信息。如果没有安装任何反作弊,还是保留基础反作弊吧。
|
||||
那么就可以关闭这些刷屏的无效信息。如果没有安装任何反作弊,还是保留基础反作弊吧。
|
||||
|
||||
在 `server.properties` 中按以下设置:
|
||||
|
||||
@ -949,7 +949,7 @@ allow-flight=true
|
||||
|
||||
这样可以防止玩家在骑马或爬上脚手架时因“飞行”而被服务器踢出。
|
||||
|
||||
设置为 true 不意味着玩家可以飞行,它只是意味着服务器认为玩家在飞行时不会被踢。
|
||||
设置为 true 不意味着玩家可以飞行,它只是意味着服务器认为玩家在飞行时不会被踢。
|
||||
|
||||
在 `spigot.yml` 中按以下设置:
|
||||
|
||||
@ -965,7 +965,7 @@ settings:
|
||||
|
||||
:::warning
|
||||
|
||||
前方二次元内容,在公共场合请谨慎观看
|
||||
前方二次元内容,在公共场合请谨慎观看
|
||||
|
||||
:::
|
||||
|
||||
|
@ -8,39 +8,39 @@ slug: /optimize/jvm/common
|
||||
|
||||
## 大页支持
|
||||
|
||||
注意在 WINDOWS 上使用大页,必须要以管理员启动
|
||||
注意在 WINDOWS 上使用大页,必须要以管理员启动
|
||||
|
||||
当然,在动手前,让我们先试一试是不是系统已经支持了这项功能 ,在控制台执行此命令
|
||||
当然,在动手前,让我们先试一试是不是系统已经支持了这项功能 ,在控制台执行此命令
|
||||
|
||||
```shell
|
||||
java -Xlog:gc+init -XX:+UseLargePages -Xmx1g -version
|
||||
```
|
||||
|
||||
如果出现了以下字样,那么说明不完全兼容:
|
||||
如果出现了以下字样,那么说明不完全兼容:
|
||||
|
||||
```shell
|
||||
UseLargePages disabled, no large pages configured and available on the system.
|
||||
UseLargePages disabled, no large pages configured and available on the system.
|
||||
```
|
||||
|
||||
那么就说明当前系统并不支持大页,不过不要急,可以试一下这一行命令:
|
||||
那么就说明当前系统并不支持大页,不过不要急,可以试一下这一行命令:
|
||||
|
||||
```shell
|
||||
java -Xlog:gc+init -XX:+UseTransparentHugePages -Xmx1g -version
|
||||
```
|
||||
|
||||
如果看到 `Large Page Support: Enabled (Transparent)` ,表示你的系统支持透明大页
|
||||
如果看到 `Large Page Support: Enabled (Transparent)` ,表示你的系统支持透明大页
|
||||
|
||||
但是如果你依然不支持或者想要追求极致性能,可以去百度搜索当前的系统如何开启大页,
|
||||
但是如果你依然不支持或者想要追求极致性能,可以去百度搜索当前的系统如何开启大页,
|
||||
|
||||
这里就不再过多的赘述了。(LargePages 对服务器提升相当巨大,在我的电脑上,它提升了 50%的性能)
|
||||
这里就不再过多的赘述了。(LargePages 对服务器提升相当巨大,在我的电脑上,它提升了 50%的性能)
|
||||
|
||||
如果支持 LargePages ,加上此参数
|
||||
如果支持 LargePages ,加上此参数
|
||||
|
||||
```shell
|
||||
-XX:+UseLargePages -XX:LargePageSizeInBytes=2m
|
||||
```
|
||||
|
||||
如果支持 TransparentHugePages (不要把两个都加上,优先 LargePages),加上此参数
|
||||
如果支持 TransparentHugePages (不要把两个都加上,优先 LargePages),加上此参数
|
||||
|
||||
```shell
|
||||
-XX:+UseTransparentHugePages -XX:LargePageSizeInBytes=2m
|
||||
@ -48,13 +48,13 @@ java -Xlog:gc+init -XX:+UseTransparentHugePages -Xmx1g -version
|
||||
|
||||
:::tip
|
||||
|
||||
在某些服务器上,开启大页后,会延长 JVM 的启动时间,时间从十秒到十分钟不等
|
||||
在某些服务器上,开启大页后,会延长 JVM 的启动时间,时间从十秒到十分钟不等
|
||||
|
||||
:::
|
||||
|
||||
## SIMD
|
||||
|
||||
如果你使用的是 Pufferfish 的分支(Purpur,Leaf,Leaves,Gale),你可以添加此参数
|
||||
如果你使用的是 Pufferfish 的分支(Purpur,Leaf,Leaves,Gale),你可以添加此参数
|
||||
|
||||
```shell
|
||||
--add-modules=jdk.incubator.vector
|
||||
@ -62,7 +62,7 @@ java -Xlog:gc+init -XX:+UseTransparentHugePages -Xmx1g -version
|
||||
|
||||
## 下载源加速
|
||||
|
||||
默认的 SpigotLibraryLoader 下载源在国内访问很慢,如果你使用的是 Leaf,你可以添加参数使用国内下载源:
|
||||
默认的 SpigotLibraryLoader 下载源在国内访问很慢,如果你使用的是 Leaf,你可以添加参数使用国内下载源:
|
||||
|
||||
```shell
|
||||
-DLeaf.library-download-repo=https://maven.aliyun.com/repository/public
|
||||
|
@ -18,7 +18,7 @@ slug: /optimize/jvm/dragonwell
|
||||
|
||||
## ZGC
|
||||
|
||||
Dragonwell11 的 ZGC 不同于 OpenJDK11 的 ZGC,Dragonwell 通过移植 OpenJDK 15+的 ZGC补丁,使得Dragonwell的ZGC可以投入生产环境
|
||||
Dragonwell11 的 ZGC 不同于 OpenJDK11 的 ZGC,Dragonwell 通过移植 OpenJDK 15+的 ZGC补丁,使得Dragonwell的ZGC可以投入生产环境
|
||||
|
||||
添加参数 `-XX:+UseZGC -XX:AllocatePrefetchStyle=1`以启用
|
||||
|
||||
@ -36,13 +36,13 @@ Dragonwell11 的 ZGC 不同于 OpenJDK11 的 ZGC,Dragonwell 通过移植 OpenJDK
|
||||
|
||||
## 对象头压缩
|
||||
|
||||
可以节约10%左右的Java对象内存占用,并可能提升程序性能。**目前仅支持G1GC和ParallelGC**
|
||||
可以节约10%左右的Java对象内存占用,并可能提升程序性能。**目前仅支持G1GC和ParallelGC**
|
||||
|
||||
添加参数`-XX:+UseCompactObjectHeaders`
|
||||
|
||||
## Wisp
|
||||
|
||||
Wisp在JVM上提供了一种用户态的线程实现。开启Wisp2后,Java线程不再简单地映射到内核级线程,而是对应到一个协程,JVM在少量内核线上调度大量协程执行,以减少内核的调度开销
|
||||
Wisp在JVM上提供了一种用户态的线程实现。开启Wisp2后,Java线程不再简单地映射到内核级线程,而是对应到一个协程,JVM在少量内核线上调度大量协程执行,以减少内核的调度开销
|
||||
|
||||
只需添加JVM参数即可开启Wisp2,无需更改程序!!
|
||||
|
||||
|
@ -31,7 +31,7 @@ G1GC 参数
|
||||
|
||||
## JWarmup
|
||||
|
||||
JWarmup的基本原理: 根据前一次程序运行的情况,记录下热点方法、类编译顺序等信息,在应用下一次启动的时候积极加载相关的类,并积极编译相关的方法,进而应用启动后可以直接运行编译好的Java代码(C2编译)。
|
||||
JWarmup的基本原理: 根据前一次程序运行的情况,记录下热点方法、类编译顺序等信息,在应用下一次启动的时候积极加载相关的类,并积极编译相关的方法,进而应用启动后可以直接运行编译好的Java代码(C2编译)。
|
||||
|
||||
### 使用步骤
|
||||
|
||||
@ -39,19 +39,19 @@ JWarmup的基本原理: 根据前一次程序运行的情况,记录下热点
|
||||
|
||||
添加参数`-XX:-ClassUnloading -XX:-CMSClassUnloadingEnabled -XX:-ClassUnloadingWithConcurrentMark -XX:CompilationWarmUpLogfile=jwarmup.log -XX:+CompilationWarmUpRecording -XX:CompilationWarmUpRecordTime=300`
|
||||
|
||||
#### 使用阶段(一般是生产环境)
|
||||
#### 使用阶段(一般是生产环境)
|
||||
|
||||
添加参数`-XX:+CompilationWarmUp -XX:-TieredCompilation -XX:CompilationWarmUpLogfile=jwarmup.log -XX:CompilationWarmUpDeoptTime=0`
|
||||
|
||||
## 对象头压缩
|
||||
|
||||
可以节约10%左右的Java对象内存占用,并可能提升程序性能。
|
||||
可以节约10%左右的Java对象内存占用,并可能提升程序性能。
|
||||
|
||||
添加参数`-XX:+UseCompactObjectHeaders`
|
||||
|
||||
## Wisp
|
||||
|
||||
Wisp在JVM上提供了一种用户态的线程实现。开启Wisp2后,Java线程不再简单地映射到内核级线程,而是对应到一个协程,JVM在少量内核线上调度大量协程执行,以减少内核的调度开销
|
||||
Wisp在JVM上提供了一种用户态的线程实现。开启Wisp2后,Java线程不再简单地映射到内核级线程,而是对应到一个协程,JVM在少量内核线上调度大量协程执行,以减少内核的调度开销
|
||||
|
||||
只需添加JVM参数即可开启Wisp2,无需更改程序!!
|
||||
|
||||
@ -61,4 +61,4 @@ Wisp在JVM上提供了一种用户态的线程实现。开启Wisp2后,Java线
|
||||
|
||||
## G1ElasticHeap
|
||||
|
||||
G1ElasticHeap 是一种 GC 功能,用于将 Java 堆的内存返回给操作系统,以减少 Java 进程的内存占用。要启用此功能,你需要通过以下选项使用 G1 GC:`-XX:+G1ElasticHeap -XX:+ElasticHeapPeriodicUncommit`
|
||||
G1ElasticHeap 是一种 GC 功能,用于将 Java 堆的内存返回给操作系统,以减少 Java 进程的内存占用。要启用此功能,你需要通过以下选项使用 G1 GC:`-XX:+G1ElasticHeap -XX:+ElasticHeapPeriodicUncommit`
|
||||
|
@ -34,8 +34,8 @@ GraalVM EE 22.3.0 修复了所有已知的 Minecraft 错误
|
||||
|
||||
## 正在考虑的标志
|
||||
|
||||
更激进的内联,在 Graal 中通过`-Dgraal.BaseTargetSpending=160`(默认为 120)和 OpenJDK 中的其他一些标志。具有较大缓存的 CPU 可能会从中受益
|
||||
更激进的内联,在 Graal 中通过`-Dgraal.BaseTargetSpending=160`(默认为 120)和 OpenJDK 中的其他一些标志。具有较大缓存的 CPU 可能会从中受益
|
||||
|
||||
`-Dgraal.OptWriteMotion=true`和`-Dgraal.WriteableCodeCache=true` ,看起来不稳定,但在 GraalVM 22.3.0 中可能更稳定,显然,针对Mod
|
||||
`-Dgraal.OptWriteMotion=true`和`-Dgraal.WriteableCodeCache=true` ,看起来不稳定,但在 GraalVM 22.3.0 中可能更稳定,显然,针对Mod
|
||||
|
||||
~~神无需优化~~
|
@ -35,11 +35,11 @@ flowchart TD
|
||||
|
||||
这可能与你想的不太一样
|
||||
|
||||
Zulu 被淘汰了,这是事实
|
||||
Zulu 被淘汰了,这是事实
|
||||
|
||||
## 垃圾回收器
|
||||
|
||||
经过我们的多次测试,G1GC和ZGC 最适合MC服务器(还有一个 Zing C4)
|
||||
经过我们的多次测试,G1GC和ZGC 最适合MC服务器(还有一个 Zing C4)
|
||||
|
||||
选择!
|
||||
|
||||
|
@ -12,15 +12,15 @@ slug: /optimize/jvm/zing
|
||||
|
||||
## ReadyNow
|
||||
|
||||
你大概已经注意到了,Zing的预热期很长,ReadyNow就是来解决这个问题的
|
||||
你大概已经注意到了,Zing的预热期很长,ReadyNow就是来解决这个问题的
|
||||
|
||||
若要启用 ReadyNow,请添加以下命令行选项,其中两者`<file>`通常相同:
|
||||
若要启用 ReadyNow,请添加以下命令行选项,其中两者`<file>`通常相同:
|
||||
|
||||
`-XX:ProfileLogIn=<file>` 指示 Azul Platform Prime 使用现有配置文件日志中的信息。
|
||||
|
||||
`-XX:ProfileLogOut=<file>` 记录之前的编译和运行中的去优化决策。
|
||||
|
||||
然后,运行应用程序将自动生成或更新配置文件日志。此配置文件日志将在应用程序的后续运行时使用,从而改进预热。
|
||||
然后,运行应用程序将自动生成或更新配置文件日志。此配置文件日志将在应用程序的后续运行时使用,从而改进预热。
|
||||
|
||||
官方推荐所有重要函数执行**5万遍**
|
||||
|
||||
@ -28,11 +28,11 @@ slug: /optimize/jvm/zing
|
||||
|
||||
## 垃圾回收器
|
||||
|
||||
C4 是 Zing 中唯一的垃圾收集器,取代了 OpenJDK 中可用的其他垃圾收集器。
|
||||
C4 是 Zing 中唯一的垃圾收集器,取代了 OpenJDK 中可用的其他垃圾收集器。
|
||||
|
||||
## 紧凑字符串
|
||||
|
||||
添加选项`-XX:+CompactStrings`可减少内存占用,提高字符串密集型应用程序的性能,并减少花费在垃圾回收上的时间
|
||||
添加选项`-XX:+CompactStrings`可减少内存占用,提高字符串密集型应用程序的性能,并减少花费在垃圾回收上的时间
|
||||
|
||||
## 更高级别的 Falcon 优化
|
||||
|
||||
@ -48,7 +48,7 @@ C4 是 Zing 中唯一的垃圾收集器,取代了 OpenJDK 中可用的其他
|
||||
|
||||
## 下载
|
||||
|
||||
虽然需要公司账户,但我们通过神秘手段搞到了安装包,都是JDK
|
||||
虽然需要公司账户,但我们通过神秘手段搞到了安装包,都是JDK
|
||||
|
||||
[RPM](https://cdn.azul.com/zing-zvm/ZVM24.07.0.0/zing24.07.0.0-3-jdk21.0.3.0.101-linux.x86_64.rpm)
|
||||
|
||||
|
@ -5,17 +5,17 @@ sidebar_position: 1
|
||||
|
||||
# 优化
|
||||
|
||||
优化是做减法,清理服务器的卡顿因素,由于 Minecraft 本身的性能低下、部分插件作者并没有优化代码的意识、服务器实体过多等。
|
||||
优化是做减法,清理服务器的卡顿因素,由于 Minecraft 本身的性能低下、部分插件作者并没有优化代码的意识、服务器实体过多等。
|
||||
|
||||
每个服务器可能有自己的卡顿原因,在这部分先做最基础的通用优化,如果你使用后作用不大请参考性能分析板块。
|
||||
每个服务器可能有自己的卡顿原因,在这部分先做最基础的通用优化,如果你使用后作用不大请参考性能分析板块。
|
||||
|
||||
在此之前,请一定查看 [优化误区](optimized-plugin.md),停止此类无效"优化",然后根据下面的步骤进行操作。
|
||||
在此之前,请一定查看 [优化误区](optimized-plugin.md),停止此类无效"优化",然后根据下面的步骤进行操作。
|
||||
|
||||
## 第一步 - Java 优化
|
||||
|
||||
为什么选择 Java 优化作为第一步 - 几乎任何情况下,服务器都会因为合适的 Java 受益,
|
||||
为什么选择 Java 优化作为第一步 - 几乎任何情况下,服务器都会因为合适的 Java 受益,
|
||||
|
||||
仅仅需要你下载一个小小的 Java 安装程序,或者更改 JVM 参数(大白话来说就是开服参数)。
|
||||
仅仅需要你下载一个小小的 Java 安装程序,或者更改 JVM 参数(大白话来说就是开服参数)。
|
||||
|
||||
### 选择合适的 Java
|
||||
|
||||
@ -23,78 +23,78 @@ sidebar_position: 1
|
||||
|
||||
### JVM 参数优化
|
||||
|
||||
可以在 [JVM 参数生成器](https://startmc.jakaco.xyz/)生成适合你服务器的基本 JVM 参数,然后复制并保存到你的启动脚本里,然后重启就完成了
|
||||
可以在 [JVM 参数生成器](https://startmc.jakaco.xyz/)生成适合你服务器的基本 JVM 参数,然后复制并保存到你的启动脚本里,然后重启就完成了
|
||||
|
||||
别急,还有一些更高阶的参数。[JVM 优化](./jvm/jvm.md)
|
||||
别急,还有一些更高阶的参数。[JVM 优化](./jvm/jvm.md)
|
||||
|
||||
## 第二步 - 预生成
|
||||
|
||||
什么是预生成 - 预生成就是让服务器在玩家进入之前,预先生成区块对应方块、结构等。
|
||||
什么是预生成 - 预生成就是让服务器在玩家进入之前,预先生成区块对应方块、结构等。
|
||||
|
||||
在 Minecraft 服务器中,生成新区块会消耗大量服务器资源,如果要开启新的地图 / 服务器,建议先预生成地图。
|
||||
在 Minecraft 服务器中,生成新区块会消耗大量服务器资源,如果要开启新的地图 / 服务器,建议先预生成地图。
|
||||
|
||||
[Chunky](https://hangar.papermc.io/pop4959/Chunky) 是最常用的预生成插件,通常与 [ChunkyBorder](https://modrinth.com/plugin/chunkyborder) 结合使用,你可以根据自己的喜好自定义边界及形状。
|
||||
[Chunky](https://hangar.papermc.io/pop4959/Chunky) 是最常用的预生成插件,通常与 [ChunkyBorder](https://modrinth.com/plugin/chunkyborder) 结合使用,你可以根据自己的喜好自定义边界及形状。
|
||||
|
||||
通常来说,即使你不设置边界,也务必进行预生成大约 1w x 1w 大小的世界。这对降低后期服务器负载很有效。
|
||||
通常来说,即使你不设置边界,也务必进行预生成大约 1w x 1w 大小的世界。这对降低后期服务器负载很有效。
|
||||
|
||||
预生成时应该注意,默认情况 1.20 原版 1w x 1w 的地图需要 4-5 GB 硬盘。应根据硬盘大小选择世界的预生成大小。
|
||||
预生成时应该注意,默认情况 1.20 原版 1w x 1w 的地图需要 4-5 GB 硬盘。应根据硬盘大小选择世界的预生成大小。
|
||||
|
||||
## 第三步 - 更换核心
|
||||
|
||||
在插件和配置层面能进行的优化其实不多(受限于 API 还有服务端核心),所以最好的方法是更换服务器核心。
|
||||
在插件和配置层面能进行的优化其实不多(受限于 API 还有服务端核心),所以最好的方法是更换服务器核心。
|
||||
|
||||
:::warning
|
||||
|
||||
任何时候都不要再使用 CraftBukkit 和 Spigot 了。追求稳定/性能上 Purpur ,追求原版特性上 Leaves,性能上 Leaf
|
||||
任何时候都不要再使用 CraftBukkit 和 Spigot 了。追求稳定/性能上 Purpur ,追求原版特性上 Leaves,性能上 Leaf
|
||||
:::
|
||||
|
||||
<details>
|
||||
|
||||
<summary>选择更换的服务器核心</summary>
|
||||
|
||||
此处只是作为最基础的核心选择推荐,完整版请查看[核心选择](/docs-java/start/server-core-choose.md)
|
||||
此处只是作为最基础的核心选择推荐,完整版请查看[核心选择](/docs-java/start/server-core-choose.md)
|
||||
|
||||
### Paper - 追求极致稳定 _推荐度 ★★★★☆_
|
||||
|
||||
如果是第一次开服,或者追求稳定,请使用 Paper 。任何时候想更换其他核心可以随时更换如 Purpur / Leaf 等核心。
|
||||
如果是第一次开服,或者追求稳定,请使用 Paper 。任何时候想更换其他核心可以随时更换如 Purpur / Leaf 等核心。
|
||||
|
||||
### Purpur - 稳定性与性能最佳选择 _推荐度 ★★★★★_
|
||||
|
||||
如果你并不是追求更极致的性能,Purpur 你最好的选择,只需要替换掉核心就可以,Purpur 兼容全部插件!!
|
||||
如果你并不是追求更极致的性能,Purpur 你最好的选择,只需要替换掉核心就可以,Purpur 兼容全部插件!!
|
||||
|
||||
### Leaf - 极致性能 _推荐度 ★★★★☆_
|
||||
|
||||
前往 Leaf 的 GitHub Action 下载最新核心,然后替换!!,Leaf 兼容你的绝大部分插件(已知仅有一个不兼容,但在插件的分支解决)
|
||||
前往 Leaf 的 GitHub Action 下载最新核心,然后替换!!,Leaf 兼容你的绝大部分插件(已知仅有一个不兼容,但在插件的分支解决)
|
||||
|
||||
### Folia - 硬件利用率超高的高性能,但兼容性较差 _推荐度 ★★★☆☆_
|
||||
### Folia - 硬件利用率超高的高性能,但兼容性较差 _推荐度 ★★★☆☆_
|
||||
|
||||
如果你的服务器对插件的需求不大,或者你的插件已全部兼容 Folia ,那你就可以选择切换到这个核心,你的 tps 有绝对巨大的提升(甚至超过了 Leaf )
|
||||
如果你的服务器对插件的需求不大,或者你的插件已全部兼容 Folia ,那你就可以选择切换到这个核心,你的 tps 有绝对巨大的提升(甚至超过了 Leaf )
|
||||
|
||||
</details>
|
||||
|
||||
## 第四步 - 调整服务端配置
|
||||
|
||||
目前,Bilibili 上面的配置都是很老的,不推荐使用
|
||||
目前,Bilibili 上面的配置都是很老的,不推荐使用
|
||||
|
||||
文档里的 [调服务端配置](go.md) 比较新,非常推荐
|
||||
文档里的 [调服务端配置](go.md) 比较新,非常推荐
|
||||
|
||||
## 第五步 - 更换硬件
|
||||
|
||||
**不要无脑换硬件!** 首先要知道自己的硬件瓶颈在哪里。如果 CPU 负荷过高,建议先排除 CPU 异常占用,再看 CPU 总体占用情况。一般来说服务器卡顿换 CPU 是最有效的,单核性能和 MC 服务器 TPS 几乎呈线性相关,但是换 CPU 几乎就相当于要换一台机器,迁移对于新手来说并不是易事。
|
||||
**不要无脑换硬件!** 首先要知道自己的硬件瓶颈在哪里。如果 CPU 负荷过高,建议先排除 CPU 异常占用,再看 CPU 总体占用情况。一般来说服务器卡顿换 CPU 是最有效的,单核性能和 MC 服务器 TPS 几乎呈线性相关,但是换 CPU 几乎就相当于要换一台机器,迁移对于新手来说并不是易事。
|
||||
|
||||
对于单端服务器来说,超过 8 核心的部分基本很难通过提升 CPU 核心数量提升 TPS 。不要动不动就买 E5 然后卡了就加 4 核 8G 内存,更多也没用的。
|
||||
对于单端服务器来说,超过 8 核心的部分基本很难通过提升 CPU 核心数量提升 TPS 。不要动不动就买 E5 然后卡了就加 4 核 8G 内存,更多也没用的。
|
||||
|
||||
对于群组服务器来说,一般核心数量都会占用上,但是内存可能会有些捉急,对于每一个普通的生存服来说内存的推荐值为 8G - 20G 更多更少都是不推荐的。
|
||||
对于群组服务器来说,一般核心数量都会占用上,但是内存可能会有些捉急,对于每一个普通的生存服来说内存的推荐值为 8G - 20G 更多更少都是不推荐的。
|
||||
|
||||
:::warning
|
||||
|
||||
如果发现 CPU 占用和内存占用都不是很高但是服务器卡卡的,请考虑是不是服务器带宽受限导致玩家 ping 值突然升高的问题。请分清楚 TPS 低导致的卡顿,MSPT 高导致的卡顿,带宽占满导致的卡顿。
|
||||
如果发现 CPU 占用和内存占用都不是很高但是服务器卡卡的,请考虑是不是服务器带宽受限导致玩家 ping 值突然升高的问题。请分清楚 TPS 低导致的卡顿,MSPT 高导致的卡顿,带宽占满导致的卡顿。
|
||||
|
||||
:::
|
||||
|
||||
## 第六步 - 更换操作系统
|
||||
|
||||
无论在性能还是稳定性, Linux 都比 Windows 更适合用于开服,对于 Linux 根据自己的使用经验选择即可,如果没有使用经验可以先使用 Ubuntu 等主流系统。
|
||||
无论在性能还是稳定性, Linux 都比 Windows 更适合用于开服,对于 Linux 根据自己的使用经验选择即可,如果没有使用经验可以先使用 Ubuntu 等主流系统。
|
||||
|
||||
如果想要了解更多请前往进阶 [Linux 开服教程](https://yizhan.wiki/NitWikit/Sundry/Advance/Linux)
|
||||
|
||||
@ -102,10 +102,10 @@ sidebar_position: 1
|
||||
|
||||
**“马克思主义活的灵魂在于对具体问题作具体分析。” - 列宁**
|
||||
|
||||
通用优化已经差不多做好了,而每个服都有自己导致滞后的因素,可能是实体太多,可能是玩家机器多,也可能是某些插件写的太屎...
|
||||
通用优化已经差不多做好了,而每个服都有自己导致滞后的因素,可能是实体太多,可能是玩家机器多,也可能是某些插件写的太屎...
|
||||
|
||||
如此,那么应该如何知道服务器为何卡顿呢?
|
||||
如此,那么应该如何知道服务器为何卡顿呢?
|
||||
|
||||
如果你是个完完全全的新手,或者懒得分析,想请教别人分析应该怎么办呢? 请转跳到 [怎么让大佬帮我](ask-for-help.md)
|
||||
如果你是个完完全全的新手,或者懒得分析,想请教别人分析应该怎么办呢? 请转跳到 [怎么让大佬帮我](ask-for-help.md)
|
||||
|
||||
如果你不想求助别人,亦或者你想有一些进步,请参考 [性能分析](performance-analysis.md)
|
||||
如果你不想求助别人,亦或者你想有一些进步,请参考 [性能分析](performance-analysis.md)
|
||||
|
@ -7,7 +7,7 @@ sidebar_position: 6
|
||||
|
||||
## 混合端
|
||||
|
||||
由于混合端本身的问题,混合端能进行的优化很少,并且混合端**不可以装大部分优化 MOD**,但是你仍然可以进行除安装优化mod以外的其他优化操作
|
||||
由于混合端本身的问题,混合端能进行的优化很少,并且混合端**不可以装大部分优化 MOD**,但是你仍然可以进行除安装优化mod以外的其他优化操作
|
||||
|
||||
~~不使用混合端来达到最佳的优化~~
|
||||
|
||||
@ -15,11 +15,11 @@ sidebar_position: 6
|
||||
|
||||
:::warning[特别说明]
|
||||
|
||||
我们在这里列出的不建议使用的插件是一个类型的插件,而不是仅仅只是不推荐某个插件. 对于推荐的"优化插件",其实大多数也是通过限制红石/漏斗/实体数量和AI等完成的,
|
||||
我们在这里列出的不建议使用的插件是一个类型的插件,而不是仅仅只是不推荐某个插件. 对于推荐的"优化插件",其实大多数也是通过限制红石/漏斗/实体数量和AI等完成的,
|
||||
|
||||
在狭义上任何使用插件操作限制任何东西都不能称之为"*优化*"而是"*限制*",这里只是以"*优化插件*"代指一些"*限制插件*".
|
||||
在狭义上任何使用插件操作限制任何东西都不能称之为"*优化*"而是"*限制*",这里只是以"*优化插件*"代指一些"*限制插件*".
|
||||
|
||||
所以说,使用这些"优化插件",不如更换服务端核心,甚至不如优化启动参数和调优服务端配置文件
|
||||
所以说,使用这些"优化插件",不如更换服务端核心,甚至不如优化启动参数和调优服务端配置文件
|
||||
|
||||
:::
|
||||
|
||||
@ -27,91 +27,91 @@ sidebar_position: 6
|
||||
|
||||
:::info
|
||||
|
||||
有很多优化是核心自带的,使用插件只是利用核心的 API,效率上是比不上核心的。如 AI,村民,爆炸,区块卸载等...
|
||||
有很多优化是核心自带的,使用插件只是利用核心的 API,效率上是比不上核心的。如 AI,村民,爆炸,区块卸载等...
|
||||
|
||||
大佬们思考一下吧,让插件删掉核心已经决定刷出来的怪物性能好还是让核心决定不刷怪性能好?
|
||||
大佬们思考一下吧,让插件删掉核心已经决定刷出来的怪物性能好还是让核心决定不刷怪性能好?
|
||||
|
||||
:::
|
||||
|
||||
### 控制玩家跑图
|
||||
|
||||
由于大量生成区块非常消耗性能,限制玩家生成的区块数,能够起到一定的效果。
|
||||
由于大量生成区块非常消耗性能,限制玩家生成的区块数,能够起到一定的效果。
|
||||
|
||||
但我们一般可以通过 [参数配置](go.md#prevent-moving-into-unloaded-chunks) 降低区块生成速率,不太需要强行拉回玩家或减速玩家等方式干扰跑图。
|
||||
但我们一般可以通过 [参数配置](go.md#prevent-moving-into-unloaded-chunks) 降低区块生成速率,不太需要强行拉回玩家或减速玩家等方式干扰跑图。
|
||||
|
||||
因此,停止使用类似插件,如:
|
||||
因此,停止使用类似插件,如:
|
||||
|
||||
*[TooManyGen](https://modrinth.com/plugin/toomanygen) - 惩罚玩家跑图,实际上这是非常影响游戏体验的,有更好的选择。*
|
||||
*[TooManyGen](https://modrinth.com/plugin/toomanygen) - 惩罚玩家跑图,实际上这是非常影响游戏体验的,有更好的选择。*
|
||||
|
||||
### 对于 AI 有影响的插件
|
||||
|
||||
使用 Pufferfish Fork(如Purpur / Leaf等)降低远处生物的 AI 比插件利用 API 更加有效和符合游戏逻辑,
|
||||
使用 Pufferfish Fork(如Purpur / Leaf等)降低远处生物的 AI 比插件利用 API 更加有效和符合游戏逻辑,
|
||||
|
||||
因此,停止使用类似插件,如:
|
||||
因此,停止使用类似插件,如:
|
||||
|
||||
*LaggRemover (Fork) - 有时候会导致即使插件卸载,实体 AI 也被移除了,比不上 Pufferfish(使用 Purpur Fork即可)根据距离衰减的 AI.*
|
||||
*LaggRemover (Fork) - 有时候会导致即使插件卸载,实体 AI 也被移除了,比不上 Pufferfish(使用 Purpur Fork即可)根据距离衰减的 AI.*
|
||||
|
||||
### 任何对于内存 GC 进行操作的插件
|
||||
|
||||
内存 GC 本身是受 JVM 本身控制的. GC 本身是会导致顿卡的,而并不能起到"清理内存"的作用.
|
||||
内存 GC 本身是受 JVM 本身控制的. GC 本身是会导致顿卡的,而并不能起到"清理内存"的作用.
|
||||
|
||||
因此,停止使用类似插件,如:
|
||||
因此,停止使用类似插件,如:
|
||||
|
||||
*Spartan - 一款性能非常差的付费反作弊,如果你买了那么恭喜你你被骗了(大嘘),如果近期购买请立即申请退款!*
|
||||
*Spartan - 一款性能非常差的付费反作弊,如果你买了那么恭喜你你被骗了(大嘘),如果近期购买请立即申请退款!*
|
||||
|
||||
### 村民优化插件
|
||||
|
||||
村民非常吃性能,如果只需要保留公用交易性质可以使用 [Shopkeepers](https://www.spigotmc.org/resources/shopkeepers.80756/) 插件创建无 AI 的村民,
|
||||
村民非常吃性能,如果只需要保留公用交易性质可以使用 [Shopkeepers](https://www.spigotmc.org/resources/shopkeepers.80756/) 插件创建无 AI 的村民,
|
||||
|
||||
如果你想保留村民和 AI 只需要在 `purpur.yml` 中搜索 lobotomize 启用即可,
|
||||
如果你想保留村民和 AI 只需要在 `purpur.yml` 中搜索 lobotomize 启用即可,
|
||||
|
||||
另外在 `config/paper-world-defaults.yml` 中有一部分可以优化的内容和村民相关,但这可能会导致村民看起来有一点呆。
|
||||
另外在 `config/paper-world-defaults.yml` 中有一部分可以优化的内容和村民相关,但这可能会导致村民看起来有一点呆。
|
||||
|
||||
在 `调服务端配置`自己找
|
||||
|
||||
因此,停止使用类似插件,如:
|
||||
因此,停止使用类似插件,如:
|
||||
|
||||
*[Villager Optimiser](https://www.spigotmc.org/resources/villager-optimiser-1-14-2-1-16-5.68517/) - 降低村民寻路操作的插件*
|
||||
|
||||
### 地面清理插件
|
||||
|
||||
地面上的物品很少会导致性能问题,而且物品往往会自行消失,如果你的服务器掉落物特别多,请调整以下两个参数:
|
||||
地面上的物品很少会导致性能问题,而且物品往往会自行消失,如果你的服务器掉落物特别多,请调整以下两个参数:
|
||||
|
||||
[点这里查看正确方法 #alt-item-despawn-rate](go.md#alt-item-despawn-rate)
|
||||
[点这里查看正确方法 #merge-radius](go.md#merge-radius)
|
||||
|
||||
因此,停止使用类似插件,如:
|
||||
因此,停止使用类似插件,如:
|
||||
|
||||
*[ClearLagg](https://www.spigotmc.org/resources/clearlagg.68271/) - 清理物品插件*
|
||||
|
||||
### 生物清理插件
|
||||
|
||||
使用插件删除生物是笨蛋中的笨蛋才会做的事,生物如果达到服务器设定的上限则会停止生成. 而被清除后,服务器必须重新生成生物,这个过程也是非常费性能的。
|
||||
使用插件删除生物是笨蛋中的笨蛋才会做的事,生物如果达到服务器设定的上限则会停止生成. 而被清除后,服务器必须重新生成生物,这个过程也是非常费性能的。
|
||||
|
||||
如果你不需要那么多怪物,直接调整参数即可 [点这里查看正确方法](go.md#spawn-limits)
|
||||
如果你不需要那么多怪物,直接调整参数即可 [点这里查看正确方法](go.md#spawn-limits)
|
||||
|
||||
因此,停止使用类似插件,如:
|
||||
因此,停止使用类似插件,如:
|
||||
|
||||
*[Cleaner](https://www.minebbs.com/resources/cleaner-addon.4816/) - 清理生物/物品插件*
|
||||
|
||||
### 实体堆叠插件
|
||||
|
||||
除非玩家乐意养殖非常非常多生物,否则对生物进行堆叠仍然会使服务器浪费性能在刷新更多的生物上,否则请不要安装堆叠插件。
|
||||
除非玩家乐意养殖非常非常多生物,否则对生物进行堆叠仍然会使服务器浪费性能在刷新更多的生物上,否则请不要安装堆叠插件。
|
||||
|
||||
因此,停止使用类似插件,如:
|
||||
因此,停止使用类似插件,如:
|
||||
|
||||
*[StackMob](https://www.spigotmc.org/resources/stackmob-enhance-your-servers-performance-without-the-sacrifice.29999/) - 实体密集时进行堆叠的插件(若一定要使用仍推荐本插件而不是其他堆叠插件)*
|
||||
|
||||
其实叠加后的一小段时间,应该是占用下降的,但是服务器会因为实际的实体变少,重新刷新怪物,这会让占用缓慢恢复。
|
||||
其实叠加后的一小段时间,应该是占用下降的,但是服务器会因为实际的实体变少,重新刷新怪物,这会让占用缓慢恢复。
|
||||
|
||||
其次,如果堆叠插件使用的是命名的方式,这会牺牲命名这个操作,主流的是通过发包,告诉玩家这里有多少怪物,但是大量的会刷新的发包也会造成一定的带宽、cpu压力
|
||||
其次,如果堆叠插件使用的是命名的方式,这会牺牲命名这个操作,主流的是通过发包,告诉玩家这里有多少怪物,但是大量的会刷新的发包也会造成一定的带宽、cpu压力
|
||||
|
||||
最后,从心理学的角度(不是),玩家总是倾向将动物养殖到服务器能容忍的最大限度,如果你堆叠到100,他一样会养很多堆叠到100的羊,
|
||||
最后,从心理学的角度(不是),玩家总是倾向将动物养殖到服务器能容忍的最大限度,如果你堆叠到100,他一样会养很多堆叠到100的羊,
|
||||
|
||||
综上所述,不要安装堆叠插件。
|
||||
综上所述,不要安装堆叠插件。
|
||||
|
||||
:::tip
|
||||
补充一点,我可以推荐给你这个,只在服务器mspt超过阈值才堆叠动物。如果你本身有farmcontrol之类的插件控制总量,那这个插件的使用是安全、无感、且能起到一定的“优化”作用的。<br />
|
||||
补充一点,我可以推荐给你这个,只在服务器mspt超过阈值才堆叠动物。如果你本身有farmcontrol之类的插件控制总量,那这个插件的使用是安全、无感、且能起到一定的“优化”作用的。<br />
|
||||
https://github.com/quiquelhappy/StackMob-5
|
||||
:::
|
||||
|
||||
@ -123,7 +123,7 @@ Paper 酱为你在 `/config/paper-world-default.yml` 中准备了爆炸优化。
|
||||
|
||||
### 区块卸载插件
|
||||
|
||||
服务器会自己卸载插件,与其使用插件一遍遍检查区块是否需要卸载不如让服务器自行卸载,
|
||||
服务器会自己卸载插件,与其使用插件一遍遍检查区块是否需要卸载不如让服务器自行卸载,
|
||||
|
||||
如果你需要更快卸载请 [点这里查看正确方法](go.md#delay-chunk-unloads-by)
|
||||
|
||||
@ -133,62 +133,62 @@ Paper 酱为你在 `/config/paper-world-default.yml` 中准备了爆炸优化。
|
||||
|
||||
:::warning
|
||||
|
||||
大佬们,多合一插件大多数都是把几个开源的功能拼接到一起就说多合一说不定还付费了。这并不划算,且本身很容易臃肿。
|
||||
大佬们,多合一插件大多数都是把几个开源的功能拼接到一起就说多合一说不定还付费了。这并不划算,且本身很容易臃肿。
|
||||
|
||||
:::
|
||||
|
||||
#### Lagassist
|
||||
|
||||
跑路付费多合一"优化插件",不要使用。下面是吐槽(包含一定程度的恶意,问就是因为被骗过一百块)
|
||||
跑路付费多合一"优化插件",不要使用。下面是吐槽(包含一定程度的恶意,问就是因为被骗过一百块)
|
||||
|
||||
<details>
|
||||
<summary>为什么不要用这个插件</summary>
|
||||
|
||||
1. ChunkAnalyser - 简单的搜索世界的红石,漏斗,实体之类,有很多平替插件如 [Insights](https://modrinth.com/plugin/insights)/ [Entitydetection](https://www.spigotmc.org/resources/entitydetection-tile-entity-support.20588/);
|
||||
1. ChunkAnalyser - 简单的搜索世界的红石,漏斗,实体之类,有很多平替插件如 [Insights](https://modrinth.com/plugin/insights)/ [Entitydetection](https://www.spigotmc.org/resources/entitydetection-tile-entity-support.20588/);
|
||||
|
||||
2. LagMonitor,LagMap,Benchmark - 很鸡肋的性能检测(不如 [Spark](performance-analysis.md#spark) );
|
||||
2. LagMonitor,LagMap,Benchmark - 很鸡肋的性能检测(不如 [Spark](performance-analysis.md#spark) );
|
||||
|
||||
3. RedstoneCuller - 直接破坏红石机器,平替插件 [AntiRedstoneClock](https://hangar.papermc.io/OneLiteFeather/AntiRedstoneClock-Remastered?fbclid=IwAR0sVVd50oTgHd9UVJJ7C8dTyL3PiVIBaJtpT6NyMy_D2T2Ho0umzrqtaDw);
|
||||
3. RedstoneCuller - 直接破坏红石机器,平替插件 [AntiRedstoneClock](https://hangar.papermc.io/OneLiteFeather/AntiRedstoneClock-Remastered?fbclid=IwAR0sVVd50oTgHd9UVJJ7C8dTyL3PiVIBaJtpT6NyMy_D2T2Ho0umzrqtaDw);
|
||||
|
||||
4. ChunkHoppers - 有专门的区块漏斗插件如 [UpgradeableHoppers](https://www.spigotmc.org/resources/upgradeable-hoppers-%E2%AD%95-fast-hopper-plugin-link-containers-%E2%9C%85-item-transfer-suction-chunk-1-20-sup.69201/),体验远好于此插件;
|
||||
4. ChunkHoppers - 有专门的区块漏斗插件如 [UpgradeableHoppers](https://www.spigotmc.org/resources/upgradeable-hoppers-%E2%AD%95-fast-hopper-plugin-link-containers-%E2%9C%85-item-transfer-suction-chunk-1-20-sup.69201/),体验远好于此插件;
|
||||
|
||||
5. ChunkLimiter - 平替插件 [Farmcontrol](https://www.spigotmc.org/resources/farmcontrol-1-15-1-19.86923/) / [Mob-Farm-Manager](https://www.spigotmc.org/resources/mob-farm-manager-supports-1-7-10-up-to-1-20-hopper-support.15127/),甚至更多配置项;
|
||||
5. ChunkLimiter - 平替插件 [Farmcontrol](https://www.spigotmc.org/resources/farmcontrol-1-15-1-19.86923/) / [Mob-Farm-Manager](https://www.spigotmc.org/resources/mob-farm-manager-supports-1-7-10-up-to-1-20-hopper-support.15127/),甚至更多配置项;
|
||||
|
||||
6. Dynamic View Distance - 平替插件 [View-distance-tweaks](https://www.spigotmc.org/resources/view-distance-tweaks.75164/);
|
||||
|
||||
总之每个所谓优化都是槽点,插件占用的性能多于"优化"的性能,请不要继续使用了。
|
||||
总之每个所谓优化都是槽点,插件占用的性能多于"优化"的性能,请不要继续使用了。
|
||||
|
||||
</details>
|
||||
|
||||
#### CMI / ESS
|
||||
|
||||
所谓基础插件,旨在使用一个插件就可以代替数个甚至数十个插件的功能。
|
||||
所谓基础插件,旨在使用一个插件就可以代替数个甚至数十个插件的功能。
|
||||
|
||||
但是这样的插件往往功能多而不专,如 CMI 经济经常出 bug 且不支持跨服。
|
||||
但是这样的插件往往功能多而不专,如 CMI 经济经常出 bug 且不支持跨服。
|
||||
|
||||
而 ESS 使用 yml 储存大量的玩家数据,经常被发现有刷钱漏洞等高血压操作。
|
||||
而 ESS 使用 yml 储存大量的玩家数据,经常被发现有刷钱漏洞等高血压操作。
|
||||
|
||||
这些插件往往因为功能多导致有些代码没有被优化好,无法和专精某一方面的插件媲美。
|
||||
这些插件往往因为功能多导致有些代码没有被优化好,无法和专精某一方面的插件媲美。
|
||||
|
||||
### 过于古老的插件
|
||||
|
||||
除了 Vault 等前置插件以外,插件总是需要更新的,如果一个插件长期不更新,
|
||||
除了 Vault 等前置插件以外,插件总是需要更新的,如果一个插件长期不更新,
|
||||
|
||||
且并非服务器核心玩法插件,请考虑选择搜索类似功能插件。
|
||||
且并非服务器核心玩法插件,请考虑选择搜索类似功能插件。
|
||||
|
||||
### 功能过于简单的插件
|
||||
|
||||
主要是包括一些甚至不到 10kb 的插件,功能仅仅只是右键西瓜能够收获,或是禁止农田踩踏等。
|
||||
主要是包括一些甚至不到 10kb 的插件,功能仅仅只是右键西瓜能够收获,或是禁止农田踩踏等。
|
||||
|
||||
这些插件功能很可能被一些其他的插件甚至核心自带了(如 purpur 可设置农田是否可踩踏)。
|
||||
这些插件功能很可能被一些其他的插件甚至核心自带了(如 purpur 可设置农田是否可踩踏)。
|
||||
|
||||
虽然一般来说这些插件不会对性能有影响,但是的确能够降低服务器维护难度等。
|
||||
虽然一般来说这些插件不会对性能有影响,但是的确能够降低服务器维护难度等。
|
||||
|
||||
### 拥有相似功能的插件
|
||||
|
||||
顾名思义,同时安装两个基础插件如 CMI 和 ESS,两个权限插件 GroupManager 和 Luckperms ,两个经济插件,
|
||||
顾名思义,同时安装两个基础插件如 CMI 和 ESS,两个权限插件 GroupManager 和 Luckperms ,两个经济插件,
|
||||
|
||||
不但可能由于插件矛盾导致性能问题,更有可能直接出现权限失效、保护功能失效等严重问题。
|
||||
不但可能由于插件矛盾导致性能问题,更有可能直接出现权限失效、保护功能失效等严重问题。
|
||||
|
||||
## 有用的~~优化~~限制插件
|
||||
|
||||
@ -207,33 +207,33 @@ Paper 酱为你在 `/config/paper-world-default.yml` 中准备了爆炸优化。
|
||||
|
||||
### OkTreasures
|
||||
|
||||
原版 Minecraft 有一个错误,即埋藏的寻宝速度非常慢,有时会冻结你的游戏。这也发生在多人游戏中,如果有人打开埋藏的宝藏搜索,服务器有时会崩溃。并且很难发现真正的错误,从 Minecraft 1.20.1 开始,这还没有修复。
|
||||
原版 Minecraft 有一个错误,即埋藏的寻宝速度非常慢,有时会冻结你的游戏。这也发生在多人游戏中,如果有人打开埋藏的宝藏搜索,服务器有时会崩溃。并且很难发现真正的错误,从 Minecraft 1.20.1 开始,这还没有修复。
|
||||
|
||||
这个插件通过用一个自定义的、更快、更简单的搜索替换原版埋藏的寻宝来修复这些类型的崩溃:它只是在合理的距离内随机选择一个海滩并将宝藏放在那里。由于这主要是异步的,因此不会导致延迟。
|
||||
这个插件通过用一个自定义的、更快、更简单的搜索替换原版埋藏的寻宝来修复这些类型的崩溃:它只是在合理的距离内随机选择一个海滩并将宝藏放在那里。由于这主要是异步的,因此不会导致延迟。
|
||||
|
||||
详细使用和局限性,请看[官方页面](https://hangar.papermc.io/Kyle/OkTreasures)
|
||||
详细使用和局限性,请看[官方页面](https://hangar.papermc.io/Kyle/OkTreasures)
|
||||
|
||||
### Chunky Border
|
||||
|
||||
一个设置世界边界的工具,可设置不同形状,拉回方式(适配地球从东方跨越地图到西方)等,比原版更加友好。
|
||||
一个设置世界边界的工具,可设置不同形状,拉回方式(适配地球从东方跨越地图到西方)等,比原版更加友好。
|
||||
|
||||
[下载链接](https://modrinth.com/plugin/chunkyborder)
|
||||
|
||||
### EntityDetection
|
||||
|
||||
这个插件可以用来寻找哪些东西在拖慢服务器,使用此插件,你可以快速找到包含大量怪物、动物和漏斗。
|
||||
这个插件可以用来寻找哪些东西在拖慢服务器,使用此插件,你可以快速找到包含大量怪物、动物和漏斗。
|
||||
|
||||
[下载链接](https://www.spigotmc.org/resources/entitydetection-tile-entity-support.20588/)
|
||||
|
||||
### AntiRaidFarm
|
||||
|
||||
使用这个简单的插件阻止利用无限不祥之兆循环的作弊突袭农场。此插件没有命令,想要绕过冷却时间的玩家可以获得权限。
|
||||
使用这个简单的插件阻止利用无限不祥之兆循环的作弊突袭农场。此插件没有命令,想要绕过冷却时间的玩家可以获得权限。
|
||||
|
||||
[下载链接](https://hangar.papermc.io/jmp/AntiRaidFarm)
|
||||
|
||||
### Insights
|
||||
|
||||
此插件是一个高性能的用来扫描世界红石加以限制的插件,爆杀大部分限制插件
|
||||
此插件是一个高性能的用来扫描世界红石加以限制的插件,爆杀大部分限制插件
|
||||
|
||||
[下载链接](https://modrinth.com/plugin/insights)
|
||||
|
||||
|
@ -5,11 +5,11 @@ sidebar_position: 5
|
||||
|
||||
# 性能分析
|
||||
|
||||
性能分析是一切"优化"的依据。如果你不知道服务器导致卡顿的元凶,那么将毫无意义。
|
||||
性能分析是一切"优化"的依据。如果你不知道服务器导致卡顿的元凶,那么将毫无意义。
|
||||
|
||||
## Spark
|
||||
|
||||
Spark是一个Minecraft的性能分析器,支持广泛(如 Bukkit,BungeeCord,Velocity,Forge,Fabric 等)。
|
||||
Spark是一个Minecraft的性能分析器,支持广泛(如 Bukkit,BungeeCord,Velocity,Forge,Fabric 等)。
|
||||
|
||||
:::info
|
||||
|
||||
@ -40,47 +40,47 @@ Spark是一个Minecraft的性能分析器,支持广泛(如 Bukkit,BungeeCo
|
||||
|
||||
插件服和 1.13 以上的 mod 服请下载插件版本并将 Spark.jar 文件插件放到服务端的 plugins 文件夹中。
|
||||
|
||||
1.12.2 和以下混合服优先使用 mod 版本,放入 mods 文件夹。
|
||||
1.12.2 和以下混合服优先使用 mod 版本,放入 mods 文件夹。
|
||||
|
||||
对于 Purpur Fork 服务器,默认自带 Spark,无需单独下载。
|
||||
对于 Purpur Fork 服务器,默认自带 Spark,无需单独下载。
|
||||
|
||||
#### /spark profiler
|
||||
|
||||
如果分析器已经启动,你可以输入下面这些命令:
|
||||
如果分析器已经启动,你可以输入下面这些命令:
|
||||
|
||||
/spark profiler open 打开分析报告页而无需停止;
|
||||
|
||||
/spark profiler stop 停止分析并浏览分析结果;
|
||||
|
||||
/spark profiler cancel 取消分析操作,并取消上传报告。
|
||||
/spark profiler cancel 取消分析操作,并取消上传报告。
|
||||
|
||||
在其他情况下,你可以使用这些基本的操作命令:
|
||||
在其他情况下,你可以使用这些基本的操作命令:
|
||||
|
||||
/spark profiler start 在默认操作模式下开始分析;
|
||||
|
||||
/spark profiler info 检查当前分析的状态。
|
||||
|
||||
这是主要的指令,为了更多的功能,更精准的分析等可以在后面加上参数.具体请查看 [profiler 指令使用方法](https://snowcutieowo.github.io/spark/#/spark.command-usage)
|
||||
这是主要的指令,为了更多的功能,更精准的分析等可以在后面加上参数.具体请查看 [profiler 指令使用方法](https://snowcutieowo.github.io/spark/#/spark.command-usage)
|
||||
|
||||
#### /spark health
|
||||
|
||||
子命令 health 会产生一份服务器的健康报告,其中包含 TPS、CPU、内存和硬盘的使用情况。
|
||||
子命令 health 会产生一份服务器的健康报告,其中包含 TPS、CPU、内存和硬盘的使用情况。
|
||||
|
||||
#### /spark tps
|
||||
|
||||
Spark 默认会替代服务器的 TPS 输出(但可能被 CMI 等插件覆盖,请关闭CMI的/tps指令或者输入完整 `/spark tps` 获取)。
|
||||
Spark 默认会替代服务器的 TPS 输出(但可能被 CMI 等插件覆盖,请关闭CMI的/tps指令或者输入完整 `/spark tps` 获取)。
|
||||
|
||||
## Timings
|
||||
|
||||
Timings是一个 Paper 自带的性能分析器,由于其监听每一个事件,性能开销比较大,
|
||||
Timings是一个 Paper 自带的性能分析器,由于其监听每一个事件,性能开销比较大,
|
||||
|
||||
在很多服务器核心(如 Purpur 等)本身也是被移除的,**不推荐**。
|
||||
在很多服务器核心(如 Purpur 等)本身也是被移除的,**不推荐**。
|
||||
|
||||
:::warning
|
||||
|
||||
在可预见的未来Timings将会被移除,作为新手可以直接跳过。如果你使用Paper服务器,请禁用Timings!虽然它是一个很好的诊断工具,
|
||||
在可预见的未来Timings将会被移除,作为新手可以直接跳过。如果你使用Paper服务器,请禁用Timings!虽然它是一个很好的诊断工具,
|
||||
|
||||
但由于其不断不断启动和停止虚拟“秒表”,会对性能产生非常大的影响。因此无论服务器规模大小只需禁用计时即可实现 *10-30%* 的性能提升。
|
||||
但由于其不断不断启动和停止虚拟“秒表”,会对性能产生非常大的影响。因此无论服务器规模大小只需禁用计时即可实现 *10-30%* 的性能提升。
|
||||
|
||||
可以通过在 `/config/paper-global.yml` 中 `timings.enabled` 设为 `false` 禁用。
|
||||
|
||||
@ -90,18 +90,18 @@ Timings是一个 Paper 自带的性能分析器,由于其监听每一个事件
|
||||
|
||||
:::warning
|
||||
|
||||
这部分需要一些基础知识,一般 Spark 分析不出来才会尝试其他软件。*一般服主不必要学习这部分内容*。
|
||||
这部分需要一些基础知识,一般 Spark 分析不出来才会尝试其他软件。*一般服主不必要学习这部分内容*。
|
||||
|
||||
:::
|
||||
|
||||
### arthas
|
||||
|
||||
Arthas 是一款阿里巴巴开发的在线性能分析软件,可实时查看应用 JVM /内存/ GC /线程 的状态信息,甚至包括查看方法调用的出入参、异常,监测方法执行耗时等,一般用于排查某些插件的CPU占用情况和插件线程占用分析。
|
||||
Arthas 是一款阿里巴巴开发的在线性能分析软件,可实时查看应用 JVM /内存/ GC /线程 的状态信息,甚至包括查看方法调用的出入参、异常,监测方法执行耗时等,一般用于排查某些插件的CPU占用情况和插件线程占用分析。
|
||||
|
||||
[官方文档链接](https://arthas.aliyun.com/doc/)
|
||||
|
||||
### jprofiler
|
||||
|
||||
jprofiler 是一款付费的易用的性能分析软件,甚至可以对 MySQL ,内存泄漏进行分析,可视化展示。
|
||||
jprofiler 是一款付费的易用的性能分析软件,甚至可以对 MySQL ,内存泄漏进行分析,可视化展示。
|
||||
|
||||
[官方链接](https://www.ej-technologies.com/products/jprofiler/overview.html)
|
||||
|
@ -7,11 +7,11 @@ sidebar_position: 4
|
||||
|
||||
## 插件数据优化
|
||||
|
||||
对于 `/plugins` 文件夹储存是否需要进行优化这个问题,有个很简单的判断方法就是查看总占用,
|
||||
对于 `/plugins` 文件夹储存是否需要进行优化这个问题,有个很简单的判断方法就是查看总占用,
|
||||
|
||||
如果超过了 200 MB ,那么很有可能有些插件使用了 Sqlite / yml / zip 等方式储存了一些东西,
|
||||
如果超过了 200 MB ,那么很有可能有些插件使用了 Sqlite / yml / zip 等方式储存了一些东西,
|
||||
|
||||
在服务器有一定人数的情况下这并不是推荐的储存方式,在某些情况下可能对储存空间会有一定的占用。
|
||||
在服务器有一定人数的情况下这并不是推荐的储存方式,在某些情况下可能对储存空间会有一定的占用。
|
||||
|
||||
### 使用数据库
|
||||
|
||||
@ -21,23 +21,23 @@ sidebar_position: 4
|
||||
|
||||
### 使用备份插件替代整端备份
|
||||
|
||||
推荐两个备份插件(高效的备份,无需停服即可备份):
|
||||
推荐两个备份插件(高效的备份,无需停服即可备份):
|
||||
|
||||
[ebackup](https://www.spigotmc.org/resources/ebackup-simple-and-reliable-backups-for-your-server-supports-ftp-sftp.69917/) 可设置黑名单不备份某些文件,FTP 远程备份支持
|
||||
[ebackup](https://www.spigotmc.org/resources/ebackup-simple-and-reliable-backups-for-your-server-supports-ftp-sftp.69917/) 可设置黑名单不备份某些文件,FTP 远程备份支持
|
||||
|
||||
[serverbackup](https://www.spigotmc.org/resources/server-backup-ingame-dropbox-ftp-backup-1-8-1-20-multithreaded.79320/) 可支持动态备份(即只备份最近变更过的文件),占用空间更小
|
||||
[serverbackup](https://www.spigotmc.org/resources/server-backup-ingame-dropbox-ftp-backup-1-8-1-20-multithreaded.79320/) 可支持动态备份(即只备份最近变更过的文件),占用空间更小
|
||||
|
||||
## 存档存储空间优化
|
||||
|
||||
Minecraft 默认的区块格式是 ANVIL ,但是这个区块格式有很多弊端,比如存了一些无用信息,使用了强制对齐等,
|
||||
Minecraft 默认的区块格式是 ANVIL ,但是这个区块格式有很多弊端,比如存了一些无用信息,使用了强制对齐等,
|
||||
|
||||
且至今还使用着古老的 zlib 压缩格式,所以如果硬盘吃紧时候,可以尝试对其进行调整。
|
||||
且至今还使用着古老的 zlib 压缩格式,所以如果硬盘吃紧时候,可以尝试对其进行调整。
|
||||
|
||||
注意,这是很底层的东西,其实不推荐在非必要情况下进行处理
|
||||
注意,这是很底层的东西,其实不推荐在非必要情况下进行处理
|
||||
|
||||
### 删除过时区块
|
||||
|
||||
有一个插件可以做到,但是忘了名字
|
||||
有一个插件可以做到,但是忘了名字
|
||||
|
||||
TODO
|
||||
|
||||
@ -47,40 +47,40 @@ TODO
|
||||
|
||||
Linear不适合玩家基数非常大/服务器经常滞后/压缩比较大(推荐默认1-5)/ CPU 核心数目小/服务器硬盘空间足够大的服务器。
|
||||
|
||||
换句话来说,只有玩家并不多但需要较大的地图且 VPS 默认给的硬盘较小时才应该考虑此格式。
|
||||
换句话来说,只有玩家并不多但需要较大的地图且 VPS 默认给的硬盘较小时才应该考虑此格式。
|
||||
|
||||
如果强行在以上不适合使用 Linear 的服务器使用时可能会出现 **局部大规模回档** 的情况,请注意。
|
||||
如果强行在以上不适合使用 Linear 的服务器使用时可能会出现 **局部大规模回档** 的情况,请注意。
|
||||
|
||||
这应该是最后才应该考虑的方案。
|
||||
|
||||
:::
|
||||
|
||||
此格式是由著名的 Xymb 大佬开发,相比于 ANVIL ,可以节省巨大的空间
|
||||
此格式是由著名的 Xymb 大佬开发,相比于 ANVIL ,可以节省巨大的空间
|
||||
|
||||
主世界可以节省大约 50% 的空间,末地大约为 90% ,且使用现代的 zstd 压缩,可以获得更快的加载和保存速度
|
||||
主世界可以节省大约 50% 的空间,末地大约为 90% ,且使用现代的 zstd 压缩,可以获得更快的加载和保存速度
|
||||
|
||||
#### 转换区域格式
|
||||
|
||||
使用之前你需要将 ANVIL 转换成 Linear 区域格式,如果你使用的是 Leaves ,你可以在服务端内部自动转换。
|
||||
使用之前你需要将 ANVIL 转换成 Linear 区域格式,如果你使用的是 Leaves ,你可以在服务端内部自动转换。
|
||||
|
||||
[转换工具](https://github.com/xymb-endcrystalme/LinearRegionFileFormatTools) ,转换非常简单你只需要看着教程做就行(记得做备份)
|
||||
[转换工具](https://github.com/xymb-endcrystalme/LinearRegionFileFormatTools) ,转换非常简单你只需要看着教程做就行(记得做备份)
|
||||
|
||||
#### 开启区域格式
|
||||
|
||||
目前,支持线性区域格式的仅有 LinearPurpur , LinearPaper , Leaves , Leaf , Kaiiju (还有一堆Fork),
|
||||
目前,支持线性区域格式的仅有 LinearPurpur , LinearPaper , Leaves , Leaf , Kaiiju (还有一堆Fork),
|
||||
|
||||
开启教程不多说,你只需要查看 Wiki 就行。
|
||||
开启教程不多说,你只需要查看 Wiki 就行。
|
||||
|
||||
#### 不兼容的插件
|
||||
|
||||
ServerBackup 一款备份插件,会由于找不到mca文件报错。
|
||||
目前已知不兼容线性区域的格式的插件极少无比,已知的有大部分在线网页地图浏览程序,以及Residence部分不兼容(感谢z大神的优雅代码,当传送到一个未加载区块的领地时会崩溃)
|
||||
ServerBackup 一款备份插件,会由于找不到mca文件报错。
|
||||
目前已知不兼容线性区域的格式的插件极少无比,已知的有大部分在线网页地图浏览程序,以及Residence部分不兼容(感谢z大神的优雅代码,当传送到一个未加载区块的领地时会崩溃)
|
||||
|
||||
#### 测试结果
|
||||
|
||||
感谢 HaHaWTH 提供的测试结果,测试内容为使用 Chunky 加载半径 1000 格的方块并保存,测试核心为 Leaf ,实际结果可能与测试结果有出入
|
||||
感谢 HaHaWTH 提供的测试结果,测试内容为使用 Chunky 加载半径 1000 格的方块并保存,测试核心为 Leaf ,实际结果可能与测试结果有出入
|
||||
|
||||
| 世界 | ANVIL(原版格式) | Linear(压缩比为一) | Linear(压缩比为六,默认压缩比) | Linear(压缩比为22)(最大压缩比)|
|
||||
| 世界 | ANVIL(原版格式) | Linear(压缩比为一) | Linear(压缩比为六,默认压缩比) | Linear(压缩比为22)(最大压缩比)|
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 主世界 | 192MB | 142MB | 117MB | 92MB |
|
||||
| 地狱 | 118MB | 70MB | 60MB | 46MB |
|
||||
@ -90,22 +90,22 @@ ServerBackup 一款备份插件,会由于找不到mca文件报错。
|
||||
|
||||
:::note
|
||||
|
||||
不推荐压缩比开到最大,推荐值为 6
|
||||
不推荐压缩比开到最大,推荐值为 6
|
||||
|
||||
:::
|
||||
|
||||
## 其他
|
||||
|
||||
1。使用软链接 / 快捷方式共享多个服务器的 lib ,Minecraft 本体等(除非空间非常少否则不要这样,后果自负);
|
||||
1。使用软链接 / 快捷方式共享多个服务器的 lib ,Minecraft 本体等(除非空间非常少否则不要这样,后果自负);
|
||||
|
||||
2。使用清理软件;
|
||||
|
||||
3。重装系统,并最小化安装(不安装非必要软件);
|
||||
3。重装系统,并最小化安装(不安装非必要软件);
|
||||
|
||||
4。检查是否有多余的 Java(一般来说开服一个版本的 Java 即可)。
|
||||
4。检查是否有多余的 Java(一般来说开服一个版本的 Java 即可)。
|
||||
|
||||
:::warning
|
||||
|
||||
除非你知道你在删什么否则请先请教大佬能不能删除或者先备份,不要删了才发现服务器出问题。
|
||||
除非你知道你在删什么否则请先请教大佬能不能删除或者先备份,不要删了才发现服务器出问题。
|
||||
|
||||
:::
|
@ -5,17 +5,17 @@ sidebar_position: 5
|
||||
|
||||
# 自定义物品模型映射
|
||||
|
||||
Geyser提供了自定义物品映射功能,可以为CustomModelData物品注册基岩版行为,以实现自定义物品
|
||||
Geyser提供了自定义物品映射功能,可以为CustomModelData物品注册基岩版行为,以实现自定义物品
|
||||
|
||||
## Kas-tle的java2bedrock
|
||||
|
||||
java2bedrock.sh(俗称转换器)是一个自动资源包转换工具,可以将JAVA版的资源包转化成基岩版资源包的工具
|
||||
java2bedrock.sh(俗称转换器)是一个自动资源包转换工具,可以将JAVA版的资源包转化成基岩版资源包的工具
|
||||
|
||||
:::tip
|
||||
|
||||
不建议过度依赖转换器,转换出来的资源包也仅供参考学习,没有手写的效果好,不过如果你能接受也不是不能用
|
||||
不建议过度依赖转换器,转换出来的资源包也仅供参考学习,没有手写的效果好,不过如果你能接受也不是不能用
|
||||
|
||||
转换器并非是完美的存在,他依然存在许多缺陷
|
||||
转换器并非是完美的存在,他依然存在许多缺陷
|
||||
|
||||
:::
|
||||
|
||||
@ -25,7 +25,7 @@ java2bedrock.sh(俗称转换器)是一个自动资源包转换工具,可以将
|
||||
|
||||
:::tip
|
||||
|
||||
转换器需要在linux系统上运行,如果你使用WINDOWS,你可以选择wsl或者虚拟机
|
||||
转换器需要在linux系统上运行,如果你使用WINDOWS,你可以选择wsl或者虚拟机
|
||||
|
||||
:::
|
||||
|
||||
@ -35,7 +35,7 @@ java2bedrock.sh(俗称转换器)是一个自动资源包转换工具,可以将
|
||||
./converter.sh 资源包名称.zip
|
||||
```
|
||||
|
||||
如果你需要更加复杂的转换,请查看项目的Github
|
||||
如果你需要更加复杂的转换,请查看项目的Github
|
||||
|
||||
### 在线转换
|
||||
|
||||
@ -49,16 +49,16 @@ java2bedrock.sh(俗称转换器)是一个自动资源包转换工具,可以将
|
||||
|
||||
* 首先你需要新建一个Issue
|
||||
* 在类型选择**Pack Conversion**
|
||||
* 在**Java Pack Direct Download URL** 填上你的资源包下载地址(不能是网盘,要求是直链)
|
||||
* 最后勾上最下面的用户协议,点击开始就可以
|
||||
* 转换好后,有个机器人会提醒你去Github Action下载,下载就来就是转换好的基岩版资源包
|
||||
* 在**Java Pack Direct Download URL** 填上你的资源包下载地址(不能是网盘,要求是直链)
|
||||
* 最后勾上最下面的用户协议,点击开始就可以
|
||||
* 转换好后,有个机器人会提醒你去Github Action下载,下载就来就是转换好的基岩版资源包
|
||||
* 将
|
||||
|
||||
## 人工手写映射
|
||||
|
||||
:::tip
|
||||
|
||||
此教程需要你有一定的动手和理解基岩版资源包结构,你可以动脑去看[基岩版资源包模板](https://github.com/Mojang/bedrock-samples/releases)学习
|
||||
此教程需要你有一定的动手和理解基岩版资源包结构,你可以动脑去看[基岩版资源包模板](https://github.com/Mojang/bedrock-samples/releases)学习
|
||||
|
||||
此教程假设你已能熟练使用ItemsAdder插件、并且正在边看[Geyser Wiki](https://wiki.geysermc.org/geyser/custom-items/)边看这文档学着做
|
||||
|
||||
@ -66,29 +66,29 @@ java2bedrock.sh(俗称转换器)是一个自动资源包转换工具,可以将
|
||||
|
||||
#### 物品映射
|
||||
|
||||
这里我非常推荐使用[Geyser Wiki](https://wiki.geysermc.org/geyser/custom-items/)中的Json映射方式,方便编写和修改
|
||||
这里我非常推荐使用[Geyser Wiki](https://wiki.geysermc.org/geyser/custom-items/)中的Json映射方式,方便编写和修改
|
||||
|
||||
##### 注册物品行为
|
||||
|
||||
这是一个律师勋章,我想让他在基岩版上也显示
|
||||
这是一个律师勋章,我想让他在基岩版上也显示
|
||||
|
||||
![](./_image/CIMM1.jpg)
|
||||
|
||||
我们来到 `服务端/plugins/geyser/custom_mappings` 目录,创建一个json文件用于Geyser映射自定义物品
|
||||
我们来到 `服务端/plugins/geyser/custom_mappings` 目录,创建一个json文件用于Geyser映射自定义物品
|
||||
|
||||
![](./_image/CIMM2.jpg)
|
||||
|
||||
名字可以根据自己喜好起,我这里命名为 `test_item.json`。
|
||||
名字可以根据自己喜好起,我这里命名为 `test_item.json`。
|
||||
|
||||
如果你没有受虐倾向,建议起简单好记一看就知道里面是什么东西的名字
|
||||
如果你没有受虐倾向,建议起简单好记一看就知道里面是什么东西的名字
|
||||
|
||||
回到游戏,手持律师勋章,执行 `/iatag` 指令
|
||||
回到游戏,手持律师勋章,执行 `/iatag` 指令
|
||||
|
||||
![](./_image/CIMM3.jpg)
|
||||
|
||||
我们看到他的 `ID` 是 `minecraft:paper`,以及 `CustomModelData(简称CMD)` 值是 10534
|
||||
我们看到他的 `ID` 是 `minecraft:paper`,以及 `CustomModelData(简称CMD)` 值是 10534
|
||||
|
||||
然后根据我们获得的物品信息,在 `test_item.json` 写入以下信息
|
||||
然后根据我们获得的物品信息,在 `test_item.json` 写入以下信息
|
||||
|
||||
示例:
|
||||
|
||||
@ -108,21 +108,21 @@ java2bedrock.sh(俗称转换器)是一个自动资源包转换工具,可以将
|
||||
}
|
||||
```
|
||||
|
||||
json文件不允许有注释,如果你要复制过去记得删除注释
|
||||
json文件不允许有注释,如果你要复制过去记得删除注释
|
||||
|
||||
保存,然后我们的自定义物品Geyser已经注册好了,接下来是基岩版资源包方面的教程
|
||||
保存,然后我们的自定义物品Geyser已经注册好了,接下来是基岩版资源包方面的教程
|
||||
|
||||
##### 制作资源包
|
||||
|
||||
网上有很多制作资源包的教程,这里不多复述最基础的操作
|
||||
网上有很多制作资源包的教程,这里不多复述最基础的操作
|
||||
|
||||
基岩版资源包的结构你可以看这里的 [基岩文档](https://wiki.bedrock.dev/documentation/pack-structure.html)
|
||||
|
||||
我们来到 `资源包/textures` 目录下,创建个 `items` 文件夹用于存放物品纹理
|
||||
我们来到 `资源包/textures` 目录下,创建个 `items` 文件夹用于存放物品纹理
|
||||
|
||||
这里我将纹理 `LSXZ.png` 放在 `textures/items/item/` 下
|
||||
|
||||
现在在 `资源包/textures` 目录下,创建个 `item_textures.json` 文件用于指定物品的纹理
|
||||
现在在 `资源包/textures` 目录下,创建个 `item_textures.json` 文件用于指定物品的纹理
|
||||
|
||||
![](./_image/CIMM4.jpg)
|
||||
|
||||
@ -137,16 +137,16 @@ json文件不允许有注释,如果你要复制过去记得删除注释
|
||||
"ITEM_LSXZ":
|
||||
{
|
||||
"textures": [
|
||||
"textures/items/item/LSXZ" //填你纹理贴图的位置,不需要填png后缀
|
||||
"textures/items/item/LSXZ" //填你纹理贴图的位置,不需要填png后缀
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
完事后打包资源包,把你的资源包丢给Geyser
|
||||
完事后打包资源包,把你的资源包丢给Geyser
|
||||
|
||||
现在重启服务器,你的自定义物品应该能在基岩版显示了!
|
||||
现在重启服务器,你的自定义物品应该能在基岩版显示了!
|
||||
|
||||
#### 3D模型物品
|
||||
|
||||
|
@ -5,7 +5,7 @@ slug: /Geyser/Upgrade
|
||||
|
||||
# 插件
|
||||
|
||||
这里是进阶教程, 你可以通过进阶教程获得更好的基岩版兼容
|
||||
这里是进阶教程, 你可以通过进阶教程获得更好的基岩版兼容
|
||||
让基岩版玩家拥有更加接近原生基岩版服务器的体验
|
||||
|
||||
## 进阶配置
|
||||
@ -13,23 +13,23 @@ slug: /Geyser/Upgrade
|
||||
|
||||
## 资源包安装
|
||||
你可以像Java版玩家一样给基岩版玩家发送服务器资源包
|
||||
但与Java版玩家不同的是, 基岩版玩家可以接受并加载多个资源包
|
||||
但与Java版玩家不同的是, 基岩版玩家可以接受并加载多个资源包
|
||||
|
||||
:::warning
|
||||
|
||||
基岩版资源包与Java版格式完全不同, 需要手动进行转换
|
||||
基岩版资源包与Java版格式完全不同, 需要手动进行转换
|
||||
基岩版的资源包扩展名均为.mcpack(其实.zip也行)
|
||||
资源包转换在后续教程会提及
|
||||
|
||||
:::
|
||||
|
||||
此外基岩版不需要额外创建直链下载的链接, 直接通过服务器即可传输资源包
|
||||
此外基岩版不需要额外创建直链下载的链接, 直接通过服务器即可传输资源包
|
||||
|
||||
来到`服务端/plugins/geyser-spigot/packs/`目录
|
||||
|
||||
将资源包放入Packs文件夹后, 重载/Geyser reload或重启服务器即可
|
||||
|
||||
注意!重载Geyser来加载资源包可能会导致一些奇怪的问题发生,没事还是建议重启服务器来加载资源包
|
||||
注意!重载Geyser来加载资源包可能会导致一些奇怪的问题发生,没事还是建议重启服务器来加载资源包
|
||||
|
||||
## GeyserUtils
|
||||
|
||||
|
@ -5,15 +5,15 @@ sidebar_position: 2
|
||||
|
||||
# 游戏机制
|
||||
|
||||
目前, 你服务器的基岩版玩家可能会遇到一些问题
|
||||
像是卡在竹子中间,缺少一些Java版独有的粒子,物品材质之类的
|
||||
目前, 你服务器的基岩版玩家可能会遇到一些问题
|
||||
像是卡在竹子中间,缺少一些Java版独有的粒子,物品材质之类的
|
||||
我们可以通过安装额外插件来对客户端和服务端进行额外的修改来完成兼容
|
||||
|
||||
## Hurricane插件
|
||||
|
||||
此插件可以修复:
|
||||
* 卡在竹子和滴水石锥中无法移动
|
||||
* 骑乘实体时无法正确控制方向, 在需要使用钓竿的实体上影响尤为明显
|
||||
* 骑乘实体时无法正确控制方向, 在需要使用钓竿的实体上影响尤为明显
|
||||
|
||||
:::warning
|
||||
|
||||
@ -23,9 +23,9 @@ sidebar_position: 2
|
||||
|
||||
## 皮肤
|
||||
|
||||
在安装Floodgate后, Java版玩家可以看到基岩版玩家的皮肤
|
||||
但是在离线服务器, 为了让皮肤可以正确显示,一般会安装额外的皮肤插件
|
||||
这时, 基岩版玩家的皮肤显示又会变的不正常
|
||||
在安装Floodgate后, Java版玩家可以看到基岩版玩家的皮肤
|
||||
但是在离线服务器, 为了让皮肤可以正确显示,一般会安装额外的皮肤插件
|
||||
这时, 基岩版玩家的皮肤显示又会变的不正常
|
||||
我们可以通过安装GeyserSkinManager插件来解决这个问题
|
||||
|
||||
你可以在 [此处](https://github.com/Camotoy/GeyserSkinManager/releases) 下载
|
||||
@ -33,11 +33,11 @@ sidebar_position: 2
|
||||
:::warning
|
||||
|
||||
GeyserSkinManager有不同版本
|
||||
你若正在使用群组端, 请在群组端安装对应版本而不是其子服
|
||||
你若正在使用群组端, 请在群组端安装对应版本而不是其子服
|
||||
|
||||
:::
|
||||
|
||||
此外, Java版玩家可以通过安装BedrockSkinUtility模组来看见基岩版玩家的披风
|
||||
此外, Java版玩家可以通过安装BedrockSkinUtility模组来看见基岩版玩家的披风
|
||||
|
||||
你可以在 [此处](https://github.com/Camotoy/BedrockSkinUtility) 下载模组
|
||||
|
||||
@ -62,9 +62,9 @@ GeyserOptionalPack是一个可选资源包
|
||||
- 部分缺失的粒子
|
||||
- 副手动画
|
||||
- 潜影贝隐形平等性
|
||||
- 发光箭实体纹理 (没有实体描边渲染(基岩版本身就没有),只有箭矢纹理)
|
||||
- 发光箭实体纹理 (没有实体描边渲染(基岩版本身就没有),只有箭矢纹理)
|
||||
- 提供超过记分板字符限制的绕过方式
|
||||
- 隐藏在Java版中没有的UI元素,例如:
|
||||
- 隐藏在Java版中没有的UI元素,例如:
|
||||
- 制图台中的文本输入字段
|
||||
- 创造模式下的2x2工作台
|
||||
- 命令方块菜单中的时钟延迟和重命名字段
|
||||
@ -72,11 +72,11 @@ GeyserOptionalPack是一个可选资源包
|
||||
|
||||
## 箱子优化
|
||||
|
||||
BedrockChestUI是一个用于实现自定义基岩版箱子UI行数的插件 ,由于基岩版原生不支持1,2,4,5行的箱子,所以本插件基于 ProtocolLib + 基岩版资源包实现 ,此插件需要Floodgate和ProtocolLib作为前置,支持Minecraft版本 1.17.1-1.19.4
|
||||
BedrockChestUI是一个用于实现自定义基岩版箱子UI行数的插件 ,由于基岩版原生不支持1,2,4,5行的箱子,所以本插件基于 ProtocolLib + 基岩版资源包实现 ,此插件需要Floodgate和ProtocolLib作为前置,支持Minecraft版本 1.17.1-1.19.4
|
||||
|
||||
[下载](https://gitee.com/xi-bohan/BedrockChestUI/releases/tag/BedrockChestUI)
|
||||
|
||||
将```ChstomChest0.2.mcpack```安装到```packs```,```BedrockChestUI-1.0.5.jar```是插件,都需要安装
|
||||
将```ChstomChest0.2.mcpack```安装到```packs```,```BedrockChestUI-1.0.5.jar```是插件,都需要安装
|
||||
|
||||
## 更好的第三人称
|
||||
|
||||
@ -115,7 +115,7 @@ BedrockChestUI是一个用于实现自定义基岩版箱子UI行数的插件 ,
|
||||
* 资源包加载
|
||||
* 快捷菜单
|
||||
* 块重影修复
|
||||
* 玩家名单(类似于TAB,但是BE Form)
|
||||
* 玩家名单(类似于TAB,但是BE Form)
|
||||
|
||||
[项目地址](https://github.com/GeyserExtras/GeyserExtras)
|
||||
|
||||
|
@ -9,7 +9,7 @@ sidebar_position: 4
|
||||
|
||||
## ForcePlayerLink
|
||||
|
||||
强制基岩版玩家使用**JE OfflinePlayer UUID**(实现数据互通)
|
||||
强制基岩版玩家使用**JE OfflinePlayer UUID**(实现数据互通)
|
||||
|
||||
[注意事项]
|
||||
- 不要使用允许基岩版绕过的登录插件
|
||||
@ -29,6 +29,6 @@ sidebar_position: 4
|
||||
|
||||
## GeyserVoice
|
||||
|
||||
GeyserVoice 是一个 Java 服务端插件,旨在通过集成 VoiceCraft Proximity Chat 应用程序来增强 Minecraft 服务器上的多人游戏体验。该插件允许 Java 和 Bedrock 版本的玩家无缝地参与基于邻近的语音对话。
|
||||
GeyserVoice 是一个 Java 服务端插件,旨在通过集成 VoiceCraft Proximity Chat 应用程序来增强 Minecraft 服务器上的多人游戏体验。该插件允许 Java 和 Bedrock 版本的玩家无缝地参与基于邻近的语音对话。
|
||||
|
||||
[下载](https://github.com/SineVector241/VoiceCraft-MCBE_Proximity_Chat/releases/),[wiki](https://github.com/mineserv-top/GeyserVoice/wiki/)
|
||||
[下载](https://github.com/SineVector241/VoiceCraft-MCBE_Proximity_Chat/releases/),[wiki](https://github.com/mineserv-top/GeyserVoice/wiki/)
|
||||
|
@ -9,7 +9,7 @@ sidebar_position: 3
|
||||
|
||||
## floodgate-skript
|
||||
|
||||
一个Skript扩展插件,可以在Skript中使用FloodgateAPI检测基岩版玩家
|
||||
一个Skript扩展插件,可以在Skript中使用FloodgateAPI检测基岩版玩家
|
||||
|
||||
示例:
|
||||
|
||||
@ -27,16 +27,16 @@ on join:
|
||||
|
||||
## LuckBedrock
|
||||
|
||||
此插件为Luckperms权限管理插件提供了一个额外的情境判断,
|
||||
此插件为Luckperms权限管理插件提供了一个额外的情境判断,
|
||||
|
||||
使你可以设置仅基岩版玩家的权限或仅Java版玩家的权限,让你不再因为权限管理而急眼!
|
||||
使你可以设置仅基岩版玩家的权限或仅Java版玩家的权限,让你不再因为权限管理而急眼!
|
||||
|
||||
[下载](https://www.minebbs.com/threads/luck-bedrock.24169/)
|
||||
|
||||
## BedrockPlayerSupport
|
||||
|
||||
一个优化基岩版玩家体验的插件,给部分命令添加了更适合基岩版玩家的表单,例如基础插件(CMI/EssentialsX/HuskHomes/AdvancedTeleport)的 /tpa /tpahere /home 命令,原版 /msg 命令
|
||||
一个优化基岩版玩家体验的插件,给部分命令添加了更适合基岩版玩家的表单,例如基础插件(CMI/EssentialsX/HuskHomes/AdvancedTeleport)的 /tpa /tpahere /home 命令,原版 /msg 命令
|
||||
|
||||
给部分主流登录插件添加了基岩版玩家自动注册、登录功能,其他登录插件也可以在配置文件中设置强制登录命令实现自动登录
|
||||
给部分主流登录插件添加了基岩版玩家自动注册、登录功能,其他登录插件也可以在配置文件中设置强制登录命令实现自动登录
|
||||
|
||||
[下载](https://github.com/DongShaoNB/BedrockPlayerSupport/releases) | [文档](https://docs.bps.dsnb.cc/#/zh-cn/start/introduce)
|
@ -9,9 +9,9 @@ sidebar_position: 6
|
||||
|
||||
:::tip
|
||||
|
||||
注意!字体偏移是Java版独有的,基岩版没有这个功能,因此一些利用字体偏移做到的东西(如IA菜单)无法正常显示,但你可以通过万能的jsonui来实现,或者给大佬爆金币定制基岩jsonui
|
||||
注意!字体偏移是Java版独有的,基岩版没有这个功能,因此一些利用字体偏移做到的东西(如IA菜单)无法正常显示,但你可以通过万能的jsonui来实现,或者给大佬爆金币定制基岩jsonui
|
||||
|
||||
我非常建议使用这个来管理基岩版的字体资源包,否则你的字体图像管理是非常痛苦的
|
||||
我非常建议使用这个来管理基岩版的字体资源包,否则你的字体图像管理是非常痛苦的
|
||||
|
||||
:::
|
||||
|
||||
@ -19,6 +19,6 @@ sidebar_position: 6
|
||||
|
||||
- 跟[这里](https://nitwikit.yizhan.wiki/process/mobile-player/Geyser/Upgrade/Custom-item-model-map#%E5%9C%A8%E7%BA%BF%E8%BD%AC%E6%8D%A2)基本没有区别
|
||||
|
||||
- 但是在填写资源包下载地址地方的下面,要把`Font Conversion`选项设置为Ture
|
||||
- 但是在填写资源包下载地址地方的下面,要把`Font Conversion`选项设置为Ture
|
||||
|
||||
[项目地址](https://github.com/AZPixel-Team/Java2Bedrock)
|
@ -11,36 +11,36 @@ sidebar_position: 3
|
||||
|
||||
:::
|
||||
|
||||
导致这个问题的主要原因是基岩版不支持自定义的头颅,所以只能通过Geyser创建映射并分发给客户端
|
||||
导致这个问题的主要原因是基岩版不支持自定义的头颅,所以只能通过Geyser创建映射并分发给客户端
|
||||
|
||||
## 如何修复
|
||||
|
||||
要在间歇泉中设置自定义头,你必须选择如何注册你的方块。最简单的方法是使用 custom-skulls.yml
|
||||
要在间歇泉中设置自定义头,你必须选择如何注册你的方块。最简单的方法是使用 custom-skulls.yml
|
||||
|
||||
### custom-skulls.yml
|
||||
|
||||
配置文件位于 Geyser 的配置文件夹中,结构如下
|
||||
配置文件位于 Geyser 的配置文件夹中,结构如下
|
||||
|
||||
```yaml
|
||||
#--------------------------------
|
||||
# Geyser 自定义头骨配置文件
|
||||
#
|
||||
# 禁用 `add-custom-skull-blocks` 时会忽略此文件。
|
||||
# 有关主要配置值集,请参阅“config.yml”
|
||||
# 有关主要配置值集,请参阅“config.yml”
|
||||
#
|
||||
# 自定义头骨,其中包含玩家用户名、UUID 或此文件中指定的纹理
|
||||
# 自定义头骨,其中包含玩家用户名、UUID 或此文件中指定的纹理
|
||||
# 将被翻译为自定义块并显示在背包和实体上。
|
||||
#--------------------------------
|
||||
|
||||
# Java 玩家用户名
|
||||
# Geyser启动时皮肤将会更新,玩家必须重新下载
|
||||
# 如果有玩家更改了皮肤,则资源包不会自动更新。
|
||||
# Geyser启动时皮肤将会更新,玩家必须重新下载
|
||||
# 如果有玩家更改了皮肤,则资源包不会自动更新。
|
||||
player-usernames:
|
||||
- 间歇泉MC
|
||||
|
||||
# Java 玩家 UUID
|
||||
# Geyser启动时皮肤将会更新,玩家必须重新下载
|
||||
# 如果有玩家改变了皮肤,则资源包并不会自动更新。
|
||||
# Geyser启动时皮肤将会更新,玩家必须重新下载
|
||||
# 如果有玩家改变了皮肤,则资源包并不会自动更新。
|
||||
player-uuids:
|
||||
- 8b8d8e8f-2759-47c6-acb5-5827de8a72b8
|
||||
|
||||
@ -54,25 +54,25 @@ skin-hashes:
|
||||
|
||||
```
|
||||
|
||||
你只需要提取出你所需要显示的头颅,根据类别添加到配置文件中,然后**重启服务端**,就可以显示
|
||||
你只需要提取出你所需要显示的头颅,根据类别添加到配置文件中,然后**重启服务端**,就可以显示
|
||||
|
||||
### 玩家用户名
|
||||
|
||||
头颅可以通过玩家用户名在此部分注册。这些将在 Geyser 开始时更新。因此,如果玩家的用户名或皮肤发生变化,它们可能会发生变化
|
||||
头颅可以通过玩家用户名在此部分注册。这些将在 Geyser 开始时更新。因此,如果玩家的用户名或皮肤发生变化,它们可能会发生变化
|
||||
|
||||
### 玩家uuid
|
||||
|
||||
头颅可以通过玩家 UUID 在此部分注册。这些将在 Geyser 开始时更新。因此,如果皮肤发生变化,它们可能会发生变化。
|
||||
头颅可以通过玩家 UUID 在此部分注册。这些将在 Geyser 开始时更新。因此,如果皮肤发生变化,它们可能会发生变化。
|
||||
|
||||
### 玩家资料
|
||||
|
||||
头可以通过自定义玩家头部的 NBT 中的纹理字符串在此部分注册。除非手动更改该值,否则这些值不会在间歇泉启动时更新。因此,如果玩家的用户名或皮肤发生变化,它们不会改变。数据只是 base64 编码的 JSON。
|
||||
头可以通过自定义玩家头部的 NBT 中的纹理字符串在此部分注册。除非手动更改该值,否则这些值不会在间歇泉启动时更新。因此,如果玩家的用户名或皮肤发生变化,它们不会改变。数据只是 base64 编码的 JSON。
|
||||
|
||||
如果在Paper服务器上,则可以通过将项目握在手中并运行命令来获取头骨的此数据。这会将项目的 NBT 数据输出到聊天和控制台。纹理字符串位于```SkullOwner```标签下、```Properties```标签下、```textures```标签下。例如:/paper dumpitem
|
||||
如果在Paper服务器上,则可以通过将项目握在手中并运行命令来获取头骨的此数据。这会将项目的 NBT 数据输出到聊天和控制台。纹理字符串位于```SkullOwner```标签下、```Properties```标签下、```textures```标签下。例如:/paper dumpitem
|
||||
|
||||
```
|
||||
[05:58:07 INFO]: .KastleFirefox issued server command: /paper dumpitem
|
||||
[05:58:07 INFO]: minecraft:player_head{display: {Name: '{"text":"Test"}'}, SkullOwner: {Properties: {textures: [{Value: "ewogICJ0aW1lc3RhbXAiIDogMTY1NzMyMjIzOTgzMywKICAicHJvZmlsZUlkIiA6ICJjZGRiZTUyMGQwNDM0YThiYTFjYzlmYzkyZmRlMmJjZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJkYXZjaG9vIiwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2E5MDc5MGM1N2UxODFlZDEzYWRlZDE0YzQ3ZWUyZjdjOGRlMzUzM2UwMTdiYTk1N2FmN2JkZjlkZjFiZGU5NGYiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ"}]}, Id: [I; -229048314, -553040501, -1407961158, 465313087]}}
|
||||
[05:58:07 INFO]: minecraft:player_head{display: {Name: '{"text":"Test"}'}, SkullOwner: {Properties: {textures: [{Value: "ewogICJ0aW1lc3RhbXAiIDogMTY1NzMyMjIzOTgzMywKICAicHJvZmlsZUlkIiA6ICJjZGRiZTUyMGQwNDM0YThiYTFjYzlmYzkyZmRlMmJjZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJkYXZjaG9vIiwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2E5MDc5MGM1N2UxODFlZDEzYWRlZDE0YzQ3ZWUyZjdjOGRlMzUzM2UwMTdiYTk1N2FmN2JkZjlkZjFiZGU5NGYiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ"}]}, Id: [I; -229048314, -553040501, -1407961158, 465313087]}}
|
||||
```
|
||||
|
||||
### 皮肤哈希
|
||||
@ -81,7 +81,7 @@ skin-hashes:
|
||||
|
||||
## 快速提取
|
||||
|
||||
那么你可能会问,像Slimefun那么多,有什么快点的方法吗?
|
||||
那么你可能会问,像Slimefun那么多,有什么快点的方法吗?
|
||||
|
||||
当然是有的
|
||||
|
||||
|
@ -9,7 +9,7 @@ sidebar_position: 6
|
||||
|
||||
一个能让你Geyser服务器支持MEG4的奇妙插件,通过给基岩版发送个史蒂夫发送4d皮肤给基岩版玩家,支持原版Geyser
|
||||
|
||||
只需要往资源包里塞动画文件即可,可以有效防止那些进服下个资源包就跑白嫖你模型的贼,但同时限制也挺多
|
||||
只需要往资源包里塞动画文件即可,可以有效防止那些进服下个资源包就跑白嫖你模型的贼,但同时限制也挺多
|
||||
|
||||
### 前置
|
||||
|
||||
@ -19,7 +19,7 @@ sidebar_position: 6
|
||||
| GeyserModelEngine | [GitHub](https://github.com/zimzaza4/GeyserModelEngine) | 你猜 |
|
||||
| LibsDisguises(免费版即可) | [LibsDisguises](https://www.spigotmc.org/resources/libs-disguises-free.81/)| 伪装成其他生物 |
|
||||
|
||||
项目地址有简体中文,所以后续步骤我就不写了
|
||||
项目地址有简体中文,所以后续步骤我就不写了
|
||||
|
||||
[项目地址](https://github.com/zimzaza4/GeyserModelEngine)
|
||||
|
||||
@ -29,7 +29,7 @@ sidebar_position: 6
|
||||
|
||||
这个是真自定义实体! 不支持原版Geyser,你需要搭配[Geyser 自定义实体分支](https://github.com/zimzaza4/Geyser)和资源包一起使用才能正常工作
|
||||
|
||||
你可以使用`GeyserModelEnginePackGenerator`来自动生成资源包,详细教程看项目地址
|
||||
你可以使用`GeyserModelEnginePackGenerator`来自动生成资源包,详细教程看项目地址
|
||||
|
||||
:::
|
||||
|
||||
|
@ -7,17 +7,17 @@ sidebar_position: 2
|
||||
|
||||
:::danger
|
||||
|
||||
想要显示自定义物品纹理,你必须在服务端使用[粘液科技资源包](https://github.com/xMikux/Slimefun-Resourcepack/releases),后才可以正常使用
|
||||
想要显示自定义物品纹理,你必须在服务端使用[粘液科技资源包](https://github.com/xMikux/Slimefun-Resourcepack/releases),后才可以正常使用
|
||||
|
||||
:::
|
||||
|
||||
## 下载
|
||||
|
||||
第一步,下载[资源包](https://qcymc.cloud/f/QWRHo/Slimefun.mcpack),安装到 `服务端/geyser/packs` 文件夹
|
||||
第一步,下载[资源包](https://qcymc.cloud/f/QWRHo/Slimefun.mcpack),安装到 `服务端/geyser/packs` 文件夹
|
||||
|
||||
![](_image/Geyser4.png)
|
||||
|
||||
第二步,下载[Mapping](https://qcymc.cloud/f/R6DT5/RYSurvival-SlimefunMapping.jar),安装到 `服务端/geyser/extensions` 文件夹
|
||||
第二步,下载[Mapping](https://qcymc.cloud/f/R6DT5/RYSurvival-SlimefunMapping.jar),安装到 `服务端/geyser/extensions` 文件夹
|
||||
|
||||
![](Extended/_image/Geyser5.png)
|
||||
|
||||
|
@ -7,7 +7,7 @@ sidebar_position: 3
|
||||
### 红石是按照哪个版本工作的?
|
||||
|
||||
你加入的服务器是一个 **Java版** 服务器
|
||||
**红石,还有 指令、农场** 等各种机制都是按照 Java版 工作的
|
||||
**红石,还有 指令、农场** 等各种机制都是按照 Java版 工作的
|
||||
|
||||
### 为什么基岩版玩家无法在地狱上层放置方块?
|
||||
|
||||
@ -15,15 +15,15 @@ sidebar_position: 3
|
||||
|
||||
### 在删除前缀后为什么数据还是不互通?
|
||||
|
||||
Java版和基岩版的UUID不一致,请查阅进阶教程
|
||||
Java版和基岩版的UUID不一致,请查阅进阶教程
|
||||
|
||||
### 有时,世界跑的很远以后客户端会很卡.
|
||||
### 有时,世界跑的很远以后客户端会很卡.
|
||||
|
||||
这是 **基岩版** 客户端的问题。具体请 [查看这里](https://minecraft.fandom.com/zh/wiki/%E5%9F%BA%E5%B2%A9%E7%89%88%E8%B7%9D%E7%A6%BB%E7%8E%B0%E8%B1%A1)
|
||||
|
||||
### frp搭建内网穿透想显示真实IP怎么办
|
||||
|
||||
在frp中[开启proxy protocol](../../../../../advance/Linux/frp#配置proxy-protocol)后,在配置文件里将enable-proxy-protocol设置为true。后续如果不再使用内网穿透,**一定记得把这个配置改回false**
|
||||
在frp中[开启proxy protocol](../../../../../advance/Linux/frp#配置proxy-protocol)后,在配置文件里将enable-proxy-protocol设置为true。后续如果不再使用内网穿透,**一定记得把这个配置改回false**
|
||||
|
||||
### 皮肤不显示怎么办
|
||||
|
||||
@ -44,38 +44,38 @@ Java版和基岩版的UUID不一致,请查阅进阶教程
|
||||
|
||||
### 无法正常连接到服务器! (服务器在好友选项卡没有显示或者在连接服务器时出现 "无法连接到世界")
|
||||
|
||||
这个问题很复杂, 请检查以下问题是否存在:
|
||||
这个问题很复杂, 请检查以下问题是否存在:
|
||||
|
||||
* **是否使用了SRV**
|
||||
|
||||
基岩版客户端不支持 SRV 解析,请让基岩版的玩家正常通过IP和端口连接服务器
|
||||
基岩版客户端不支持 SRV 解析,请让基岩版的玩家正常通过IP和端口连接服务器
|
||||
|
||||
* **手贱开启enable-proxy-protocol**
|
||||
|
||||
如果你不使用像 TCPShield、frp 的反向代理,请保证你的 enable-proxy-protocol 选项是设置为 false 的
|
||||
如果你不使用像 TCPShield、frp 的反向代理,请保证你的 enable-proxy-protocol 选项是设置为 false 的
|
||||
|
||||
* **启动时提示 java.net.BindException: Address already in use: bind**
|
||||
|
||||
这代表 Geyser 服务器所开设的端口已被占用,请确保你关闭了所有占用该端口的软件,然后再试。如果这没有起作用,通常重启你的电脑即可解决该问题
|
||||
这代表 Geyser 服务器所开设的端口已被占用,请确保你关闭了所有占用该端口的软件,然后再试。如果这没有起作用,通常重启你的电脑即可解决该问题
|
||||
|
||||
* **你的服务商可能没有及时打开UDP端口**
|
||||
|
||||
这通常和你的主机端的端口有关。最常见的是,跟Java版的常用的 TCP 协议的端口不同,你的主机很有可能没有开放基岩版所使用的 UDP 协议的端口。一个确认此问题的方法是关闭你的服务器,然后选择其他 基岩版服务端,例如 Nukkit(你不一定非要用 Nukkit)以检查是否是该问题导致的
|
||||
这通常和你的主机端的端口有关。最常见的是,跟Java版的常用的 TCP 协议的端口不同,你的主机很有可能没有开放基岩版所使用的 UDP 协议的端口。一个确认此问题的方法是关闭你的服务器,然后选择其他 基岩版服务端,例如 Nukkit(你不一定非要用 Nukkit)以检查是否是该问题导致的
|
||||
|
||||
* **尝试重启服务器和游戏**
|
||||
|
||||
特别是在移动设备上,有时只需重新启动 Minecraft 即可解决问题
|
||||
特别是在移动设备上,有时只需重新启动 Minecraft 即可解决问题
|
||||
|
||||
* **基岩端口小于10000**
|
||||
|
||||
端口小于10000通常会导致问题, 请将其设置为高于10000的值
|
||||
端口小于10000通常会导致问题, 请将其设置为高于10000的值
|
||||
|
||||
* **切换连接线路**
|
||||
|
||||
这有可能是你的服务器被当前网络提供商过滤
|
||||
|
||||
如果还不行,我们无能为力
|
||||
如果还不行,我们无能为力
|
||||
|
||||
## 加入服务器后出现区块空白
|
||||
|
||||
你可以尝试添加启动参数```-XX:+UnlockDiagnosticVMOptions -XX:-UseAESCTRIntrinsics```,如果还不行,你可以升级**电脑配置**
|
||||
你可以尝试添加启动参数```-XX:+UnlockDiagnosticVMOptions -XX:-UseAESCTRIntrinsics```,如果还不行,你可以升级**电脑配置**
|
||||
|
@ -27,13 +27,13 @@ Fabric 和 NeoForge 版本 可以作为模组安装在这些模组端上
|
||||
Standalone 版本 可以作为一个独立的代理端启动
|
||||
|
||||
## 挑选版本
|
||||
在安装前,你需要找到合适的Geyser版本,你可以参考下图:
|
||||
在安装前,你需要找到合适的Geyser版本,你可以参考下图:
|
||||
![version](_image/VersionChoose.png)
|
||||
|
||||
|
||||
* 1、运行独立版**仍需要Java16**及以上环境,只不过你可以将其和目标服务器所处的 Java 环境隔开 此外**在任何情况下**,你都可使用独立版,甚至独立版可以和其目标不在同一服务器上
|
||||
* 2、你可以通过ViaVersion插件来适配版本,这会允许不同版本的玩家进入服务器,不过问题不大
|
||||
* 3、[Hydraulic](https://github.com/GeyserMC/Hydraulic) 可以允许你加入带客户端模组的服务器,但是项目处于**早期开发阶段**,你可以做个尝试,但是请不要在实际情况下使用
|
||||
* 1、运行独立版**仍需要Java16**及以上环境,只不过你可以将其和目标服务器所处的 Java 环境隔开 此外**在任何情况下**,你都可使用独立版,甚至独立版可以和其目标不在同一服务器上
|
||||
* 2、你可以通过ViaVersion插件来适配版本,这会允许不同版本的玩家进入服务器,不过问题不大
|
||||
* 3、[Hydraulic](https://github.com/GeyserMC/Hydraulic) 可以允许你加入带客户端模组的服务器,但是项目处于**早期开发阶段**,你可以做个尝试,但是请不要在实际情况下使用
|
||||
|
||||
## 下载
|
||||
|
||||
@ -43,25 +43,25 @@ Standalone 版本 可以作为一个独立的代理端启动
|
||||
### 其他版本
|
||||
作为插件或模组安装到对应文件夹即可
|
||||
### 独立版
|
||||
独立版作为一个单独的服务端,你可以参考 [此处](/docs-java/start/launch-server.md) 的开启方法
|
||||
独立版作为一个单独的服务端,你可以参考 [此处](/docs-java/start/launch-server.md) 的开启方法
|
||||
|
||||
## 配置
|
||||
|
||||
找到配置文件夹下的 config.yml
|
||||
|
||||
(什么,你连配置文件夹都找不到? 那你真是连笨蛋都不如,配置文件在对应版本 Geyser 名称的文件夹下,一般开启服务器后都会生成)
|
||||
(什么,你连配置文件夹都找不到? 那你真是连笨蛋都不如,配置文件在对应版本 Geyser 名称的文件夹下,一般开启服务器后都会生成)
|
||||
|
||||
:::danger
|
||||
|
||||
作为一个新手,在本教程未提及前,请不要随意更改任何配置项
|
||||
作为一个新手,在本教程未提及前,请不要随意更改任何配置项
|
||||
|
||||
:::
|
||||
|
||||
第一眼你可能会被全是英文的配置文件镇住,别急,善用翻译来理解配置文件中的注释,**在完成本教程的基础配置配置后,若需进阶,请参考 [此处](https://docs.superiormc.cn/v/geyser-wiki/user-guide/li-jie-pei-zhi) 的配置参考**
|
||||
第一眼你可能会被全是英文的配置文件镇住,别急,善用翻译来理解配置文件中的注释,**在完成本教程的基础配置配置后,若需进阶,请参考 [此处](https://docs.superiormc.cn/v/geyser-wiki/user-guide/li-jie-pei-zhi) 的配置参考**
|
||||
|
||||
接下来,回到配置,映入你眼帘的应该是 bedrock 和 remote 两个大项:
|
||||
接下来,回到配置,映入你眼帘的应该是 bedrock 和 remote 两个大项:
|
||||
|
||||
bedrock 所代表的是你所开放的端口,也是基岩版玩家看到的那个,remote 是连接的目标服务器,若不使用独立版此选项无效,请不要随意更改
|
||||
bedrock 所代表的是你所开放的端口,也是基岩版玩家看到的那个,remote 是连接的目标服务器,若不使用独立版此选项无效,请不要随意更改
|
||||
|
||||
```yaml
|
||||
bedrock:
|
||||
@ -72,7 +72,7 @@ bedrock:
|
||||
server-name: "Geyser"
|
||||
compression-level: 6
|
||||
enable-proxy-protocol: false
|
||||
# proxy-protocol-whitelisted-ips:[ "127.0.0.1","172.18.0.0/16" ]
|
||||
# proxy-protocol-whitelisted-ips:[ "127.0.0.1","172.18.0.0/16" ]
|
||||
|
||||
```
|
||||
```yaml
|
||||
@ -85,19 +85,19 @@ remote:
|
||||
forward-hostname: false
|
||||
```
|
||||
### Bedrock 项
|
||||
**`port`**:其代表你向基岩版玩家所开放的端口,在设置端口时请不要低于 10000
|
||||
**`port`**:其代表你向基岩版玩家所开放的端口,在设置端口时请不要低于 10000
|
||||
|
||||
**`motd1`** 和 **`motd2`**:其代表向基岩版玩家所显示的 MOTD,可根据你的喜好配置,仅支持最基础的颜色符号
|
||||
**`motd1`** 和 **`motd2`**:其代表向基岩版玩家所显示的 MOTD,可根据你的喜好配置,仅支持最基础的颜色符号
|
||||
|
||||
**`server-name`**:基岩版所看到的服务器名称,在暂停菜单和设置中可见
|
||||
**`server-name`**:基岩版所看到的服务器名称,在暂停菜单和设置中可见
|
||||
|
||||
### Remote项
|
||||
|
||||
**`address`**:其代表目标服务器的地址,若目标服务器和 Geyser 处于同一服务器下请不要更改
|
||||
**`address`**:其代表目标服务器的地址,若目标服务器和 Geyser 处于同一服务器下请不要更改
|
||||
|
||||
**`port`**:(重要选项)请和目标服务器(插件版必须与`server-port`一致)一致对外开放的端口一致
|
||||
**`port`**:(重要选项)请和目标服务器(插件版必须与`server-port`一致)一致对外开放的端口一致
|
||||
|
||||
**`auth-type`**:有 offline/online 和 floodgate 模式,offline 和 online 分别对应离线和正版,你目标服务器用的什么就选什么,floodgate 会在后续教程中解释
|
||||
**`auth-type`**:有 offline/online 和 floodgate 模式,offline 和 online 分别对应离线和正版,你目标服务器用的什么就选什么,floodgate 会在后续教程中解释
|
||||
|
||||
### 其他项
|
||||
再往下翻你会注意到不少其他乱七八糟的项
|
||||
@ -108,7 +108,7 @@ remote:
|
||||
passthrough-motd: true
|
||||
passthrough-player-counts: true
|
||||
|
||||
# 请注意:如果启用了冷却时间,某些用户可能会在冷却过程中看到一个黑框,
|
||||
# 请注意:如果启用了冷却时间,某些用户可能会在冷却过程中看到一个黑框,
|
||||
# 可以通过进入辅助功能选项卡下的基岩设置并将“文本背景不透明度”设置为 0 来禁用此功能
|
||||
show-cooldown: title
|
||||
|
||||
@ -120,23 +120,23 @@ above-bedrock-nether-building: false
|
||||
|
||||
**`passthrough-player-counts`**:将玩家数量和最大玩家数量发给基岩玩家
|
||||
|
||||
**`show-cooldown`**:由于基岩版没有战斗冷却,此功能会模拟一个冷却提示器,你可以设置为 title(小标题)、actionbar(物品栏上方的标题)或 false(关闭)
|
||||
**`show-cooldown`**:由于基岩版没有战斗冷却,此功能会模拟一个冷却提示器,你可以设置为 title(小标题)、actionbar(物品栏上方的标题)或 false(关闭)
|
||||
|
||||
**`show-coordinates`**:是否向玩家显示坐标
|
||||
|
||||
**`above-bedrock-nether-building`**:开启后你将被允许在下届高度 127 以上建造,缺点是整个下界中雾的颜色不再可变,将一直是红色(GeyserExtras 可以解决这个问题)
|
||||
**`above-bedrock-nether-building`**:开启后你将被允许在下届高度 127 以上建造,缺点是整个下界中雾的颜色不再可变,将一直是红色(GeyserExtras 可以解决这个问题)
|
||||
|
||||
:::warning
|
||||
|
||||
若你在使用模组端 Geyser,那接下来的教程就和你无关了(包括进阶),因为模组端 Geyser 根本不能实现这些功能
|
||||
若你在使用模组端 Geyser,那接下来的教程就和你无关了(包括进阶),因为模组端 Geyser 根本不能实现这些功能
|
||||
|
||||
:::
|
||||
|
||||
## Floodagte
|
||||
为进一步兼容,你需要安装 [floodgate](https://geysermc.org/download#floodgate)
|
||||
为进一步兼容,你需要安装 [floodgate](https://geysermc.org/download#floodgate)
|
||||
|
||||
floodgate 可作为一个插件安装到 Spigot 及其分支的核心上或 BungeeCord、Velocity 之类的代理上
|
||||
群组服/独立版 Geyser 的 Floodgate 安装需要进行一些额外步骤,请跟随教程完成
|
||||
群组服/独立版 Geyser 的 Floodgate 安装需要进行一些额外步骤,请跟随教程完成
|
||||
|
||||
Floodgate 是一个允许 **Minecraft 基岩版** 帐号加入 **Minecraft Java版** 正版服务器而无需其 **正版账号** 的混合模式插件
|
||||
|
||||
@ -146,12 +146,12 @@ Floodgate 是一个允许 **Minecraft 基岩版** 帐号加入 **Minecraft Java
|
||||
* 让 Java 版玩家看到基岩版玩家的皮肤
|
||||
* 向基岩版玩家发送 BE Form UI (基岩版独有的一种菜单格式)
|
||||
* 允许基岩版玩家与 Java 版玩家进行账号数据间的连接
|
||||
* 提供一个通用的 API,使更多插件可以兼容基岩版玩家
|
||||
* 以基岩版 XUID 作为 UUID 储存数据,使在基岩版玩家改名后不丢失数据
|
||||
* 提供一个通用的 API,使更多插件可以兼容基岩版玩家
|
||||
* 以基岩版 XUID 作为 UUID 储存数据,使在基岩版玩家改名后不丢失数据
|
||||
|
||||
所以就算**非正版服务器**,也有**必要**安装此插件来获取更强大的兼容性
|
||||
所以就算**非正版服务器**,也有**必要**安装此插件来获取更强大的兼容性
|
||||
|
||||
此外,Floodgate 有个小缺点,在安装之后你无法直接使基岩版玩家和 Java 版玩家数据互通,这将在进阶教程中给出两个可行的解决办法
|
||||
此外,Floodgate 有个小缺点,在安装之后你无法直接使基岩版玩家和 Java 版玩家数据互通,这将在进阶教程中给出两个可行的解决办法
|
||||
|
||||
### 基础配置
|
||||
:::warning
|
||||
@ -164,34 +164,34 @@ Floodgate 是一个允许 **Minecraft 基岩版** 帐号加入 **Minecraft Java
|
||||
|
||||
:::warning
|
||||
|
||||
若你在使用独立版 Geyser 或群组服,请翻到下方跟随对应教程完成安装
|
||||
若你在使用独立版 Geyser 或群组服,请翻到下方跟随对应教程完成安装
|
||||
|
||||
:::
|
||||
|
||||
安装 Floodgate 后,打开配置文件,注意到以下项
|
||||
安装 Floodgate 后,打开配置文件,注意到以下项
|
||||
|
||||
```yaml
|
||||
username-prefix: "."
|
||||
```
|
||||
|
||||
这是 Floodgate 为了区分基岩版玩家和 Java 版玩家,而在基岩版玩家名称前添加的前缀
|
||||
这是 Floodgate 为了区分基岩版玩家和 Java 版玩家,而在基岩版玩家名称前添加的前缀
|
||||
|
||||
为什么?
|
||||
|
||||
因为在安装 Floodgate 后,基岩版玩家的 UUID 将会和 Java 版玩家有很大不同,若是遇到重名,则会出现一个ID拥有两个完全不同的UUID,这可能会发生一些无法预知的错误,而使用 `.` 前缀是因为 Java 正版玩家名中不可使用 `.`
|
||||
因为在安装 Floodgate 后,基岩版玩家的 UUID 将会和 Java 版玩家有很大不同,若是遇到重名,则会出现一个ID拥有两个完全不同的UUID,这可能会发生一些无法预知的错误,而使用 `.` 前缀是因为 Java 正版玩家名中不可使用 `.`
|
||||
|
||||
**但是**
|
||||
这在离线服中,有几个问题:
|
||||
* 离线服玩家名是可以任意修改的,所以 Java 玩家一样可以使用相同前缀进入服务器
|
||||
* 部分登录插件会禁止诸如带有 `.` 玩家名的玩家进入服务器,这会导致基岩版玩家无法进入服务器
|
||||
这在离线服中,有几个问题:
|
||||
* 离线服玩家名是可以任意修改的,所以 Java 玩家一样可以使用相同前缀进入服务器
|
||||
* 部分登录插件会禁止诸如带有 `.` 玩家名的玩家进入服务器,这会导致基岩版玩家无法进入服务器
|
||||
|
||||
接下来我们来解决这些问题
|
||||
|
||||
要解决第一个问题,由于离线服务器玩家可以使用任何名称进入服务器,我们可以选择禁止所有使用基岩版玩家名前缀的 Java 玩家进入服务器
|
||||
要解决第一个问题,由于离线服务器玩家可以使用任何名称进入服务器,我们可以选择禁止所有使用基岩版玩家名前缀的 Java 玩家进入服务器
|
||||
|
||||
**此部分未完工,咕咕咕!**
|
||||
**此部分未完工,咕咕咕!**
|
||||
|
||||
在第一个问题解决后,我们可以使用任意前缀作为基岩版玩家的区分
|
||||
在第一个问题解决后,我们可以使用任意前缀作为基岩版玩家的区分
|
||||
于是将前缀修改为诸如 `BE_` 这类的合法字符即可解决第二个问题
|
||||
|
||||
```yaml
|
||||
@ -199,46 +199,46 @@ username-prefix: "BE_"
|
||||
```
|
||||
|
||||
### 独立版Geyser配置
|
||||
首先,按照基础配置在目标服务器安装 Floodgate,然后注意到 Floodgate 配置文件夹下,理应会生成一个叫 `key.pem` 的文件,将其复制到独立版 Geyser 配置文件夹下
|
||||
首先,按照基础配置在目标服务器安装 Floodgate,然后注意到 Floodgate 配置文件夹下,理应会生成一个叫 `key.pem` 的文件,将其复制到独立版 Geyser 配置文件夹下
|
||||
|
||||
然后来到 Geyser 配置文件
|
||||
|
||||
找到 Remote 项中的 **`auth-type`**,并将其改为 **`floodgate`**
|
||||
找到 Remote 项中的 **`auth-type`**,并将其改为 **`floodgate`**
|
||||
|
||||
```yaml
|
||||
remote:
|
||||
auth-type: floodgate
|
||||
```
|
||||
若 Geyser 已开启,则重启 Geyser 即可完成配置
|
||||
若 Geyser 已开启,则重启 Geyser 即可完成配置
|
||||
|
||||
### 群组服配置
|
||||
首先,在群组端安装 Floodgate,并按照基础配置完成安装
|
||||
首先,在群组端安装 Floodgate,并按照基础配置完成安装
|
||||
|
||||
:::warning
|
||||
|
||||
不要将子服中的 Floodgate 配置直接复制到群组服,会缺少某个重要项
|
||||
不要将子服中的 Floodgate 配置直接复制到群组服,会缺少某个重要项
|
||||
|
||||
:::
|
||||
|
||||
接下来来到群组服的 Floodgate 配置,找到 **`send-floodgate-data`** 这一项,将其修改为 `true`
|
||||
接下来来到群组服的 Floodgate 配置,找到 **`send-floodgate-data`** 这一项,将其修改为 `true`
|
||||
|
||||
```yaml
|
||||
send-floodgate-data: true
|
||||
```
|
||||
|
||||
这样子服就可以接收到来自群组服的基岩版玩家数据了,请注意在开启此项后,若子服不安装 Floodgate 则基岩版玩家则无法进入子服,但是此项很重要,若不开启,则在子服中 Floodgate 不起效果
|
||||
这样子服就可以接收到来自群组服的基岩版玩家数据了,请注意在开启此项后,若子服不安装 Floodgate 则基岩版玩家则无法进入子服,但是此项很重要,若不开启,则在子服中 Floodgate 不起效果
|
||||
|
||||
接下来,在子服一一安装 Floodgate 并确保和群组服的 Floodgate 配置一致,然后注意到群组端 Floodgate 配置文件夹下,理应会生成一个叫 `key.pem` 的文件,用群组服的 `key.pem` 将子服中的 `key.pem` 覆盖,确保 `key.pem` 完全相同
|
||||
接下来,在子服一一安装 Floodgate 并确保和群组服的 Floodgate 配置一致,然后注意到群组端 Floodgate 配置文件夹下,理应会生成一个叫 `key.pem` 的文件,用群组服的 `key.pem` 将子服中的 `key.pem` 覆盖,确保 `key.pem` 完全相同
|
||||
|
||||
即可完成群组端配置
|
||||
|
||||
## 笨蛋脚本
|
||||
|
||||
下载[脚本](https://github.com/lilingfengdev/NitWiki-Script/releases/download/windows-latest/geyser-egg.exe),为你自动生成 Geyser 环境,免于配置
|
||||
下载[脚本](https://github.com/lilingfengdev/NitWiki-Script/releases/download/windows-latest/geyser-egg.exe),为你自动生成 Geyser 环境,免于配置
|
||||
|
||||
即使不用配置,你仍然需要看完 wiki,**明白你在做什么**
|
||||
即使不用配置,你仍然需要看完 wiki,**明白你在做什么**
|
||||
|
||||
|
||||
## 结尾
|
||||
|
||||
恭喜你,配置完毕!!,开始和你的好友一起玩吧
|
||||
恭喜你,配置完毕!!,开始和你的好友一起玩吧
|
||||
|
@ -15,9 +15,9 @@ sidebar_position: 1
|
||||
|
||||
`MC 百科`:https://www.mcmod.cn/class/9757.html
|
||||
|
||||
`文档(英文)`:https://wiki.geysermc.org/
|
||||
`文档(英文)`:https://wiki.geysermc.org/
|
||||
|
||||
`文档(中文)`:https://docs.superiormc.cn/v/geyser-wiki
|
||||
`文档(中文)`:https://docs.superiormc.cn/v/geyser-wiki
|
||||
|
||||
:::
|
||||
|
||||
@ -25,13 +25,13 @@ Geyser 是连接 Java 版和基岩版 的一座桥梁。可以让基岩版玩家
|
||||
|
||||
:::danger
|
||||
|
||||
Geyser 并不适合 Mod 服务器,不要尝试
|
||||
Geyser 并不适合 Mod 服务器,不要尝试
|
||||
|
||||
:::
|
||||
|
||||
:::warning
|
||||
|
||||
基岩版使用 UDP 协议来传输数据, 在使用前请确保你的服务商可以使用 UDP
|
||||
基岩版使用 UDP 协议来传输数据, 在使用前请确保你的服务商可以使用 UDP
|
||||
|
||||
:::
|
||||
|
||||
|
@ -9,13 +9,13 @@ GitHub Action 下载
|
||||
|
||||
**需要 GitHub 账户才能下载。**
|
||||
|
||||
如果你想在正式发布前测试最新、最好的版本,可以从 GitHub Actions 获取副本。
|
||||
如果你想在正式发布前测试最新、最好的版本,可以从 GitHub Actions 获取副本。
|
||||
|
||||
1. 首先进入 [PojavLauncher](https://github.com/PojavLauncherTeam/PojavLauncher) 软件仓库,然后切换到 `Actions` 选项卡。
|
||||
1. 首先进入 [PojavLauncher](https://github.com/PojavLauncherTeam/PojavLauncher) 软件仓库,然后切换到 `Actions` 选项卡。
|
||||
|
||||
![](https://pojavlauncherteam.github.io/assets/img/Android-Actions-1.96a0b3c7.png)
|
||||
|
||||
2. 接下来,在工作流程选择菜单中选择 `Android CI`。
|
||||
2. 接下来,在工作流程选择菜单中选择 `Android CI`。
|
||||
|
||||
![](https://pojavlauncherteam.github.io/assets/img/Android-Actions-2.99495cb5.png)
|
||||
|
||||
@ -24,9 +24,9 @@ GitHub Action 下载
|
||||
|
||||
![](https://pojavlauncherteam.github.io/assets/img/Android-Actions-3.d484abce.png)
|
||||
|
||||
4. 在 "Artifacts"下,选择要下载的构建类型。
|
||||
4. 在 "Artifacts"下,选择要下载的构建类型。
|
||||
- 大多数人都会选择 `app-debug`。
|
||||
|
||||
![](https://pojavlauncherteam.github.io/assets/img/Android-Actions-4.07b1b65e.png)
|
||||
|
||||
下载完 Actions 版本后,就可以解压缩并像安装其他 .apk 文件一样进行安装了。
|
||||
下载完 Actions 版本后,就可以解压缩并像安装其他 .apk 文件一样进行安装了。
|
||||
|
@ -7,7 +7,7 @@ sidebar_position: 2
|
||||
|
||||
免越狱安装 PojavLauncher_iOS
|
||||
|
||||
~~(当然如果下面几个方法都不成功那恭喜你只能去越狱了)~~
|
||||
~~(当然如果下面几个方法都不成功那恭喜你只能去越狱了)~~
|
||||
|
||||
## 方法一: 使用牛蛙助手
|
||||
|
||||
@ -15,110 +15,110 @@ sidebar_position: 2
|
||||
|
||||
在电脑打开此 [链接](https://ios222.com/) 下载牛蛙助手
|
||||
|
||||
使用数据线连接手机与电脑,按照提示安装
|
||||
使用数据线连接手机与电脑,按照提示安装
|
||||
|
||||
从此 [链接](https://github.com/PojavLauncherTeam/PojavLauncher_iOS/releases) 下载 Pojav 的 ipa 安装包
|
||||
|
||||
在手机上的牛蛙助手中导入 ipa 文件
|
||||
![](_images/1.PNG)
|
||||
|
||||
点击签名进行自签(刚开始用自签会被封号,不会很严重修改密码就好了,自签只有一周的使用时间,过了时间要重新签名)
|
||||
点击签名进行自签(刚开始用自签会被封号,不会很严重修改密码就好了,自签只有一周的使用时间,过了时间要重新签名)
|
||||
![](_images/2.PNG)
|
||||
|
||||
点击进行安装
|
||||
![](_images/3.PNG)
|
||||
|
||||
### 启动 PojavLauncher
|
||||
打开牛蛙助手,点击 JIT,使用 JIT 启动 PojavLauncher
|
||||
打开牛蛙助手,点击 JIT,使用 JIT 启动 PojavLauncher
|
||||
### 补充
|
||||
安装完之后若点击程序出现未受信任的提示
|
||||
![](_images/trollstone_i.png)
|
||||
请打开设置 → 通用 → VPN 与设备管理,
|
||||
请打开设置 → 通用 → VPN 与设备管理,
|
||||
点击对应的配置描述文件信任它
|
||||
|
||||
若牛蛙提示下图,就按它说的打开牛蛙的 VPN
|
||||
若牛蛙提示下图,就按它说的打开牛蛙的 VPN
|
||||
![](_images/4.PNG)
|
||||
## 方法二: 使用 TrollStore
|
||||
|
||||
:::warning
|
||||
|
||||
由于苹果公司修复了 iOS 系统中的相关漏洞,巨魔商店不再支持 iOS16.7 和 iOS17.1 及以上系统。
|
||||
由于苹果公司修复了 iOS 系统中的相关漏洞,巨魔商店不再支持 iOS16.7 和 iOS17.1 及以上系统。
|
||||
|
||||
:::
|
||||
|
||||
点击查看 [TrollStore 的安装流程](https://ios.cfw.guide/installing-trollstore/)
|
||||
![](_images/trollstone_v.png)
|
||||
|
||||
~~我手机安装不了巨魔,接下来怎么做等待有缘人~~
|
||||
(有缘人:我 tm 来啦)
|
||||
~~我手机安装不了巨魔,接下来怎么做等待有缘人~~
|
||||
(有缘人:我 tm 来啦)
|
||||
|
||||
<details>
|
||||
<summary>各苹果机型对应的 TrollStore 安装方法</summary>
|
||||
|
||||
安装 TrollStore 的方法因设备而异,这里简单分类了 TrollStore 的辅助工具。(iOS 版本号和 iPadOS 版本号按照相同版本号计算)
|
||||
安装 TrollStore 的方法因设备而异,这里简单分类了 TrollStore 的辅助工具。(iOS 版本号和 iPadOS 版本号按照相同版本号计算)
|
||||
|
||||
如果你是:
|
||||
- iOS14-beta2~iOS14.8.1 的系统(A8~A11 处理器)
|
||||
- iOS15.5 系统(A9~A11 处理器)
|
||||
- iOS15.6 beta4~iOS15.6.1(A9~A11 处理器)
|
||||
- iOS15.7~iOS15.8.2(A9~A17,M1~M2 处理器)
|
||||
- iOS16 beta1~beta3(A9~A11 处理器)
|
||||
- iOS16 beta4~iOS16.6.1(A9 以上,M1~M2 处理器)
|
||||
- iOS17 beta1~beta4(A9~A11 处理器)
|
||||
- iOS14-beta2~iOS14.8.1 的系统(A8~A11 处理器)
|
||||
- iOS15.5 系统(A9~A11 处理器)
|
||||
- iOS15.6 beta4~iOS15.6.1(A9~A11 处理器)
|
||||
- iOS15.7~iOS15.8.2(A9~A17,M1~M2 处理器)
|
||||
- iOS16 beta1~beta3(A9~A11 处理器)
|
||||
- iOS16 beta4~iOS16.6.1(A9 以上,M1~M2 处理器)
|
||||
- iOS17 beta1~beta4(A9~A11 处理器)
|
||||
|
||||
那么 [点此查看](https://ios.cfw.guide/installing-trollstore-trollinstallerx/) TrollInstallerX 的安装方法。**(非常之复杂,怕麻烦的,没电脑的,没有苹果官方 Type C 转 Lighting 或者 C2C 的线的,但是又只能用这个方法安装 TrollStore 的劝退)**
|
||||
那么 [点此查看](https://ios.cfw.guide/installing-trollstore-trollinstallerx/) TrollInstallerX 的安装方法。**(非常之复杂,怕麻烦的,没电脑的,没有苹果官方 Type C 转 Lighting 或者 C2C 的线的,但是又只能用这个方法安装 TrollStore 的劝退)**
|
||||
|
||||
如果你是:
|
||||
- iOS14-beta2~iOS14.8.1的系统(A12 以上,M1~M2处理器)
|
||||
- iOS15~iOS15.5 beta4(A8 以上,M1~M2 处理器)
|
||||
- iOS15.5 系统(A12 以上,M1~M2 处理器)
|
||||
- iOS15.6 beta4~iOS15.6.1(A12 以上,M1~M2 处理器)
|
||||
- iOS16 beta1~beta3(A12 以上,M1~M2 处理器)
|
||||
- iOS14-beta2~iOS14.8.1的系统(A12 以上,M1~M2处理器)
|
||||
- iOS15~iOS15.5 beta4(A8 以上,M1~M2 处理器)
|
||||
- iOS15.5 系统(A12 以上,M1~M2 处理器)
|
||||
- iOS15.6 beta4~iOS15.6.1(A12 以上,M1~M2 处理器)
|
||||
- iOS16 beta1~beta3(A12 以上,M1~M2 处理器)
|
||||
|
||||
那么复制此链接到你的 Safari 浏览器地址栏
|
||||
`itms-services://?action=download-manifest&url=https://jailbreaks.app/cdn/plists/TrollHelper.plist`
|
||||
以此安装 TrollHelperOTA,然后**按顺序**点击 Register Persistence Helper 和 Install TrollStore 即可安装。**(期间可能黑屏或重启。)**
|
||||
以此安装 TrollHelperOTA,然后**按顺序**点击 Register Persistence Helper 和 Install TrollStore 即可安装。**(期间可能黑屏或重启。)**
|
||||
|
||||
如果你是:
|
||||
- iOS16.7RC(A9~A11 处理器)
|
||||
- iOS17 beta5~iOS17.0(A9~A11 处理器)
|
||||
- iOS16.7RC(A9~A11 处理器)
|
||||
- iOS17 beta5~iOS17.0(A9~A11 处理器)
|
||||
|
||||
那么你需要一个**已经越狱了**的苹果设备按照 [这个教程](https://ios.cfw.guide/installing-trollstore-trollhelper/) 使用 TrollHelper 安装 TrollStore。~~(你手机都越狱了还用 TrollStore 干嘛,直接用其他 ipa/dpkg 包管理安装 Pojav~~
|
||||
那么你需要一个**已经越狱了**的苹果设备按照 [这个教程](https://ios.cfw.guide/installing-trollstore-trollhelper/) 使用 TrollHelper 安装 TrollStore。~~(你手机都越狱了还用 TrollStore 干嘛,直接用其他 ipa/dpkg 包管理安装 Pojav~~
|
||||
|
||||
如果你是:
|
||||
- iOS15.5(A8 处理器)
|
||||
- iOS15.6 beta4~iOS15.6.1(A8 处理器)
|
||||
- iOS15.5(A8 处理器)
|
||||
- iOS15.6 beta4~iOS15.6.1(A8 处理器)
|
||||
|
||||
那么 [点此查看](https://ios.cfw.guide/installing-trollstore-trollinstallermdc/) TrollInstallerMDC 的安装方法。**(较复杂,怕麻烦的,没电脑的,没有苹果官方 Type C 转Lighting 或者 C2C 的线的,但是又只能用这个方法安装 TrollStore 的劝退)**
|
||||
那么 [点此查看](https://ios.cfw.guide/installing-trollstore-trollinstallermdc/) TrollInstallerMDC 的安装方法。**(较复杂,怕麻烦的,没电脑的,没有苹果官方 Type C 转Lighting 或者 C2C 的线的,但是又只能用这个方法安装 TrollStore 的劝退)**
|
||||
|
||||
如果你是:
|
||||
- iOS15.7.2~iOS15.8.2(A8处理器)
|
||||
- iOS15.7.2~iOS15.8.2(A8处理器)
|
||||
|
||||
那么 [点此查看](https://ios.cfw.guide/installing-trollstore-trollmisaka) TrollMisaka 的安装方法。**(也挺复杂,怕麻烦的,没电脑的,没有苹果官方 Type C 转 Lighting 或者 C2C 的线的,但是又只能用这个方法安装 TrollStore 的劝退)**
|
||||
那么 [点此查看](https://ios.cfw.guide/installing-trollstore-trollmisaka) TrollMisaka 的安装方法。**(也挺复杂,怕麻烦的,没电脑的,没有苹果官方 Type C 转 Lighting 或者 C2C 的线的,但是又只能用这个方法安装 TrollStore 的劝退)**
|
||||
|
||||
</details>
|
||||
|
||||
总之,当你~~终于~~历经千辛万苦安装完 TrollStore 之后,你的内心可能痛苦,可能舒畅;但不管怎么样,最痛苦的过程结束了,后面的 Pojav 安装将会异常轻松。
|
||||
总之,当你~~终于~~历经千辛万苦安装完 TrollStore 之后,你的内心可能痛苦,可能舒畅;但不管怎么样,最痛苦的过程结束了,后面的 Pojav 安装将会异常轻松。
|
||||
![](_images/troll-icon.jpg)
|
||||
|
||||
现在你应该能看见这个图标了。
|
||||
|
||||
现在,你需要从 [此链接](https://github.com/PojavLauncherTeam/PojavLauncher_iOS/actions) 下载 PojavLauncher 的 ipa 安装包。
|
||||
现在,你需要从 [此链接](https://github.com/PojavLauncherTeam/PojavLauncher_iOS/actions) 下载 PojavLauncher 的 ipa 安装包。
|
||||
|
||||
下载的时候有**两个注意事项**:
|
||||
1.你需要一个 GitHub 账号,不然你没法在 Actions 里面下载东西。
|
||||
2.你使用的是 TrollStore 方案,那么就下载 `net.kdt.pojavlauncher-ios-trollstore.tipa`,~~别告诉我你用的是 TVOS~~。
|
||||
1.你需要一个 GitHub 账号,不然你没法在 Actions 里面下载东西。
|
||||
2.你使用的是 TrollStore 方案,那么就下载 `net.kdt.pojavlauncher-ios-trollstore.tipa`,~~别告诉我你用的是 TVOS~~。
|
||||
|
||||
下载完 Pojav 安装包后,我们来到 TrollStore 里面。
|
||||
下载完 Pojav 安装包后,我们来到 TrollStore 里面。
|
||||
![](_images/troll-idid.PNG)
|
||||
咱们要打开 ldid,以确保能正常安装没有签名的安装包。
|
||||
咱们要打开 ldid,以确保能正常安装没有签名的安装包。
|
||||
|
||||
然后回到主界面,点击右上角加号,选择你刚刚下载的 tipa 文件,点击,然后就会安装,安装完之后差不多是这样的。
|
||||
然后回到主界面,点击右上角加号,选择你刚刚下载的 tipa 文件,点击,然后就会安装,安装完之后差不多是这样的。
|
||||
![](_images/troll-ui.PNG)
|
||||
|
||||
~~(你不用管 DolphiniOS 干什么的,这是用来玩老游戏的模拟器)~~
|
||||
~~(你不用管 DolphiniOS 干什么的,这是用来玩老游戏的模拟器)~~
|
||||
|
||||
然后点击 PojavLauncher,选择 Open with JIT,打开 Pojav 后就能正常使用了。
|
||||
然后点击 PojavLauncher,选择 Open with JIT,打开 Pojav 后就能正常使用了。
|
||||
|
||||
## 方法三:使用 AltStore
|
||||
|
||||
|
@ -17,7 +17,7 @@ sidebar_position: 3
|
||||
|
||||
:::warning
|
||||
|
||||
为了你的手机设备能流畅运行Java版我的世界,请不要在手机上随意安装 Sodium(或 Embeddium),Iris(或 Oculus),或其他优化类模组,非常容易掉帧,出错
|
||||
为了你的手机设备能流畅运行Java版我的世界,请不要在手机上随意安装 Sodium(或 Embeddium),Iris(或 Oculus),或其他优化类模组,非常容易掉帧,出错
|
||||
|
||||
:::
|
||||
|
||||
|
@ -6,4 +6,4 @@ sidebar_position: 5
|
||||
|
||||
这里是通常被其他插件设定为前置的插件并且大众总是将其划为 **前置插件** 一类的插件
|
||||
|
||||
理论上,任何插件都可以被作为另一个插件的前置
|
||||
理论上,任何插件都可以被作为另一个插件的前置
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user