同步官网文档8m_25d

This commit is contained in:
kwiilh
2025-08-25 18:36:29 +08:00
parent 4dc0ecf18d
commit 9e8855eeb4
5089 changed files with 8798 additions and 4799 deletions

View File

@@ -0,0 +1,46 @@
---
front:
hard: 入门
time: 5分钟
selection: true
---
# 插件的概念
插件的本质其实和中国版Addon非常相似。
但是又和Addon略有不同。
例如下方就是一个插件的目录结构可以自行和Addon进行对比。该结构在后面的章节会详细介绍本处仅作了解。
```
tutorialApolloMod
behavior_packs
tutorialBehavior
developer_mods
tutorialDev
tutorialScripts
resource_packs
tutorialResource
worlds
level
world_behavior_packs.json
world_resource_packs.json
```
插件会将developer_mods中的代码在服务器上运行将behavior_packs中的内容发送到客户端去并于服务器进行双向通信。
这样做可以防止代码遭到逆向工程爆破,从而保护了服务端插件的代码。
并且插件也可以相互调用,互相依赖,将服务器玩法进行模块化拆分。
## 为什么采用插件
这么做的目的是——**效率**。
将服务器需要用到的一个个小功能做成一个个插件。例如将领地保护功能、权限管理功能、箱子锁功能······纷纷做成一个个的小插件。这些功能虽然不能为服务器带来核心玩法,但是却是一个我的世界网络服的基石。编写插件,就可以让这些基础功能在每一个服务器上都能够安装,管理,减少重复开发。
同时一个个的小插件,正对应着模块化设计的理念。
哪个模块出现问题,需要改进,就可以轻松定位,轻松修复。大大提升了开发效率。

View File

@@ -0,0 +1,15 @@
# 必备知识
如果掌握了下方任意一种开发技能那么掌握Apollo插件开发将会事半功倍。
## Java服插件开发基础
Java服插件开发即使用Java或Kotlin等jvm语言使用Spigot等类似服务端进行玩法开发。
虽然中国版Apollo插件的开发是使用Python进行开发但是相信在掌握了jvm语言的前提下会更容易上手并且更容易理解Apollo插件的开发逻辑。
## 中国版Mod开发
如果已经掌握中国版Mod开发那么学习Apollo插件的开发将会更加轻松。因为Apollo插件的开发就是在ModSDK的基础上新增了一系列服务器类型的概念和专用的接口并且提供了高性能的数据库后端供数据存取。关于Apollo框架的结构将会在后面的章节讲到。
对于已经会编写中国版Mod的开发者来说学习Apollo插件编写需要将更多的精力放在了解服务器插件的工作流程上。

View File

@@ -0,0 +1,42 @@
# 网络服的概念
## 简介
网络服,即运行在远程服务器上的一个游戏服务器,通过网络供玩家连接。
每个网络游戏都需要一个专用的服务器来进行游戏内部数据的计算,并将运算结果发送给客户端,呈现给玩家。
下面介绍的是一些经典的网络服软件,供读者了解。
### Minecraft Server
Mojang官方编写的我的世界Java版服务器软件。
### Spigot
一个使用Java编写的我的世界Java版服务器软件。
### Bedrock Server
Mojang官方编写的我的世界基岩版服务器软件。
### Nukkit
一个由国人使用Java编写的我的世界基岩版服务器软件。
## 网络服和Mod的区别
### 架构差异
我的世界的联机功能和单人游戏功能其实都是在房主的终端下新建了一个内部服务器再使用客户端部分进行游戏画面的渲染。Mod的服务器运算部分就是运行在房主的终端上的。
而网络服软件,专门将游戏的服务器运算部分,从客户端中分离出来,并将其运行在一个相对于玩家终端来说更加高性能的服务器上,来实现更高的玩家承载量和稳定性。
换而言之在网络服上游玩的玩家的数据全部会交给专业服务器进行处理。而Mod联机的情况下所有玩家的数据都会在房主的设备上进行处理如果设备的算力不够就会非常影响游戏体验。
### 数据存储
在Mod联机的情况下产生的数据大多都会存储到地图文件中并由读取地图时一并加载到游戏中。
而在网络服中可以使用高性能的数据库例如MySQL,MongoDB,Redis来存储数据并快速筛选出需要的数据进行缓存。数据库软件各有各的优势开发者可以根据需要自行决定数据的存储位置。

View File

@@ -0,0 +1,90 @@
# 数据库的概念
在服务器插件的开发中,大多数数据都会被存储到数据库。
## 简介
数据库在很多服务器软件的开发中它起到了非常重要的数据存储和筛选的作用在Apollo插件的开发中也不例外。
Apollo目前支持3种数据库MySQL、Redis和MongoDB它们各有各的特点下面将进行依次介绍。
### MySQL
MySQL是一种关系型数据库它的数据存储格式和我们常用的excel非常相似。
每个MySQL的数据表中都有提前设定好的列用来代表这一列的数据的类型和名称。各个列的数据组合叫做行。位于同一行的数据可以一同被选择。
为了更好的理解下面举一个Excel和MySQL对比的例子。
![](./images/mysql-1.png)
如上图所示这个是一个Excel表格其中需要记录4种数据分别是**玩家UID玩家名上次登录时间注册时间**。这些就是这个数据表的列。
我们需要将每一个玩家都记录到这个表中,那么一个玩家的所有数据就占一行。
表现在MySQL数据表中就如下图所示。
<img src="./images/mysql-2.png" style="zoom:150%;" />
在实际应用中我们就可以通过uid查找到玩家的注册时间第一次登陆时间上次登录时间和玩家名。
### Redis
Redis是一款既可以基于内存也可以持久化的Key-Value型数据库。
此数据库在Apollo插件开发中主要用来存储一些经常需要改变的值。
操作过程非常像Python中的dict此处不再举例说明。
例如玩家的在线统计——一个玩家进入服务器时,就需要操作数据库,修改总在线+1。同理退出时需要操作数据库修改总在线-1。
### MongoDB
MongoDB是一款介于关系数据库和非关系数据库之间的数据库。
它可以轻松地将Python中常用的dict或json对象存储到数据库中并很方便地对其中某个参数进行筛选和查询。
还是以上方的玩家信息为例假如一个玩家的json对象是```{"uid":1,"name":"玩家1","reg_date":123,"last_login":123}```
那么将其插入到数据库中,即可通过```{"uid":1}```这样的条件来查询到玩家的整条json信息。
开发者可以根据自己的习惯和实际用途,来选择使用不同的数据库。
## 前端工具
这里将以Navicat为例给大家演示如何使用连接到服务器的MySQL数据库。其他数据库连接同理。
Navicat官网链接: https://www.navicat.com.cn/
### 视频教程
<iframe src="https://cc.163.com/act/m/daily/iframeplayer/?id=6181002648e2749089200cbe" height="600" width="800" allow="fullscreen" />
### 准备内容
- 支持MySQL的Navicat数据库管理软件
- 用于机器连接的RSA密钥
- 确保当前IP在服务器白名单内
### 操作步骤
1. 首先打开Navicat软件点击左上角的连接按钮选择MySQL。
![](./images/navicat-1.png)
2. 在“常规”标签页下,输入连接名(任意,用于区分连接),用户名 *minecraft*,密码 *minecraft* (以上均为默认密码)。
![](./images/navicat-2.png)
3. 在“SSH”标签页下勾选使用SSH隧道填写主机端口*32200*,用户名*fuzhu*,验证方法*公钥*选择私钥路径。通行短语输入你创建RSA密钥时输入的密码。勾选保存通行短语并保存。
![](./images/navicat-3.png)
4. 随后可在左边区域看到你新建的连接,双击即可进行连接。
![](./images/navicat-4.png)

View File

@@ -0,0 +1,111 @@
# 小小云连接
在阅读此教程前首先需要安装XShell和XFtp。
XShell和XFtp均有免费的个人版可在官网下载链接: https://www.netsarang.com/zh/free-for-home-school/
## 小小云
小小云是一台云服务器在这台云服务器上预装了Debian操作系统和Apollo的运行环境。
Debian操作系统和常见的Windows操作系统不同。Debian是一种Linux系统这种系统是为了服务器设计的具有较高的稳定性并且一般不安装图形操作界面需要用户自行输入命令行命令来操作该系统。
下面将讲解如何申请和使用小小云。
## 创建密钥
### 视频教程
<iframe src="https://cc.163.com/act/m/daily/iframeplayer/?id=6180ffe7b8a81f8fa07ed443" height="600" width="800" allow="fullscreen" />
### 文字教程
在申请服务器前你需要首先准备用于连接服务器的RSA密钥并为其设置密码操作步骤如下。
1. 打开XShell找到菜单栏。依次点击**工具->新建用户密钥生成向导**
<img src="./images/rsa-1.png" style="zoom:150%;" />
2. 密钥类型选择RSA长度默认2048位
![](./images/rsa-2.png)
3. 输入一个方便区分的密钥名称,并为密钥设置密码,此密码需要牢记,丢失后只能重新创建密钥,**无法找回**
![](./images/rsa-3.png)
4. 点击完成,密钥创建完成。
5. 选中刚刚创建的私钥点击导出并在对话框中输入密码。将私钥文件存储好方便后面Studio的配置。
<img src="./images/rsa-6.png" style="zoom:200%;" />
6. 接下来的步骤,是导出公钥并上传到开发者平台。选中刚刚创建的密钥,点击属性。
<img src="./images/rsa-4.png" style="zoom:200%;" />
7. 切换到公钥选型卡,点击保存为文件,并上传到开发者平台即可。
<img src="./images/rsa-5.png" style="zoom:200%;" />
## 获取白名单网站
在访问开发机前,需要先获取白名单。
打开浏览器,输入 http://temp-white-list.mc.netease.com:9999/?machine=开发机IP地址
例如如果你的开发机IP是42.186.1.1,就在浏览器中访问网址 http://temp-white-list.mc.netease.com:9999/?machine=42.186.1.1
访问后效果如下,稍候即可连接服务器。
![](./images/white-1.png)
## 私钥使用
### 视频教程
<iframe src="https://cc.163.com/act/m/daily/iframeplayer/?id=6180ffa948e2749089200cba" height="600" width="800" allow="fullscreen" />
### SSH
SSH连接是Linux服务器远程连接并进行管理的主要途径之一。下面将介绍使用XShell的基本使用方法来连接到小小云。
1. 在XShell中点击左上角的新建按钮。
<img src="./images/ssh-1.png" style="zoom:150%;" />
2. 在弹出的界面中输入开发机地址,端口。名称仅用作区分,可任意输入。
<img src="./images/ssh-2.png" style="zoom:150%;" />
3. 在左侧的树形菜单中,找到**连接->用户身份验证**。填写用户名,方法中取消勾选**Password**,勾选并选中**Public Key**。
<img src="./images/ssh-3.png" style="zoom:150%;" />
4. 点击设置,选择之前创建的用户密钥,并输入密码。
<img src="./images/ssh-4.png" style="zoom:150%;" />
5. 点击确定双击左侧列表中刚刚创建的连接即可通过SSH登录到服务器。如果是第一次登陆需要接受主机密钥点击接受并保存即可。
<img src="./images/ssh-5.png" style="zoom:150%;" />
上方仅为XShell的操作XFtp同理。不同的是XShell访问的是服务器命令行控制台XFtp访问的是服务器文件目录。
下图为XFtp连接后的示意。
![](./images/ssh-6.png)
### Studio
下面将介绍如何在Studio中配置私钥。
1. 登录Studio在**新建**中,选择**基岩版网络服**。创建一个任意类型的服务器,本教程使用空白网络服作为示例。
2. 选择之前在XShell中导出的私钥文件填写密码。
<img src="./images/studio-1.png" style="zoom:200%;" />
3. 翻到底部的**服务器设置**在机器列表的文本框中填写开发机IP地址。如果配置正确且有白名单**完成**按钮就会亮起,点击完成即配置完成。
<img src="./images/studio-2.png" style="zoom:200%;" />

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB