同步官网文档8m_25d
46
mconline/30-网络服插件教程/1-准备知识/0-插件的概念.md
Normal 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中的内容发送到客户端去,并于服务器进行双向通信。
|
||||
|
||||
这样做可以防止代码遭到逆向工程爆破,从而保护了服务端插件的代码。
|
||||
|
||||
并且插件也可以相互调用,互相依赖,将服务器玩法进行模块化拆分。
|
||||
|
||||
## 为什么采用插件
|
||||
|
||||
这么做的目的是——**效率**。
|
||||
|
||||
将服务器需要用到的一个个小功能做成一个个插件。例如将领地保护功能、权限管理功能、箱子锁功能······纷纷做成一个个的小插件。这些功能虽然不能为服务器带来核心玩法,但是却是一个我的世界网络服的基石。编写插件,就可以让这些基础功能在每一个服务器上都能够安装,管理,减少重复开发。
|
||||
|
||||
同时一个个的小插件,正对应着模块化设计的理念。
|
||||
|
||||
哪个模块出现问题,需要改进,就可以轻松定位,轻松修复。大大提升了开发效率。
|
||||
|
||||
15
mconline/30-网络服插件教程/1-准备知识/1-必备知识.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# 必备知识
|
||||
如果掌握了下方任意一种开发技能,那么掌握Apollo插件开发将会事半功倍。
|
||||
|
||||
## Java服插件开发基础
|
||||
|
||||
Java服插件开发,即使用Java或Kotlin等jvm语言,使用Spigot等类似服务端,进行玩法开发。
|
||||
|
||||
虽然中国版Apollo插件的开发是使用Python进行开发,但是相信在掌握了jvm语言的前提下,会更容易上手,并且更容易理解Apollo插件的开发逻辑。
|
||||
|
||||
## 中国版Mod开发
|
||||
|
||||
如果已经掌握中国版Mod开发,那么学习Apollo插件的开发,将会更加轻松。因为Apollo插件的开发就是在ModSDK的基础上,新增了一系列服务器类型的概念,和专用的接口,并且提供了高性能的数据库后端,供数据存取。关于Apollo框架的结构,将会在后面的章节讲到。
|
||||
|
||||
对于已经会编写中国版Mod的开发者来说,学习Apollo插件编写,需要将更多的精力放在了解服务器插件的工作流程上。
|
||||
|
||||
42
mconline/30-网络服插件教程/1-准备知识/2-网络服的概念.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# 网络服的概念
|
||||
|
||||
## 简介
|
||||
|
||||
网络服,即运行在远程服务器上的一个游戏服务器,通过网络供玩家连接。
|
||||
|
||||
每个网络游戏都需要一个专用的服务器来进行游戏内部数据的计算,并将运算结果发送给客户端,呈现给玩家。
|
||||
|
||||
下面介绍的是一些经典的网络服软件,供读者了解。
|
||||
|
||||
### Minecraft Server
|
||||
|
||||
Mojang官方编写的我的世界Java版服务器软件。
|
||||
|
||||
### Spigot
|
||||
|
||||
一个使用Java编写的我的世界Java版服务器软件。
|
||||
|
||||
### Bedrock Server
|
||||
|
||||
Mojang官方编写的我的世界基岩版服务器软件。
|
||||
|
||||
### Nukkit
|
||||
|
||||
一个由国人使用Java编写的我的世界基岩版服务器软件。
|
||||
|
||||
## 网络服和Mod的区别
|
||||
|
||||
### 架构差异
|
||||
|
||||
我的世界的联机功能和单人游戏功能,其实都是在房主的终端下新建了一个内部服务器,再使用客户端部分进行游戏画面的渲染。Mod的服务器运算部分,就是运行在房主的终端上的。
|
||||
|
||||
而网络服软件,专门将游戏的服务器运算部分,从客户端中分离出来,并将其运行在一个相对于玩家终端来说更加高性能的服务器上,来实现更高的玩家承载量和稳定性。
|
||||
|
||||
换而言之,在网络服上游玩的玩家的数据,全部会交给专业服务器进行处理。而Mod联机的情况下,所有玩家的数据,都会在房主的设备上进行处理,如果设备的算力不够,就会非常影响游戏体验。
|
||||
|
||||
### 数据存储
|
||||
|
||||
在Mod联机的情况下,产生的数据大多都会存储到地图文件中,并由读取地图时一并加载到游戏中。
|
||||
|
||||
而在网络服中,可以使用高性能的数据库(例如MySQL,MongoDB,Redis)来存储数据,并快速筛选出需要的数据进行缓存。数据库软件各有各的优势,开发者可以根据需要自行决定数据的存储位置。
|
||||
|
||||
90
mconline/30-网络服插件教程/1-准备知识/3-数据库的概念.md
Normal file
@@ -0,0 +1,90 @@
|
||||
# 数据库的概念
|
||||
|
||||
在服务器插件的开发中,大多数数据都会被存储到数据库。
|
||||
|
||||
## 简介
|
||||
|
||||
数据库在很多服务器软件的开发中,它起到了非常重要的数据存储和筛选的作用,在Apollo插件的开发中也不例外。
|
||||
|
||||
Apollo目前支持3种数据库,MySQL、Redis和MongoDB它们各有各的特点,下面将进行依次介绍。
|
||||
|
||||
### MySQL
|
||||
|
||||
MySQL是一种关系型数据库,它的数据存储格式和我们常用的excel非常相似。
|
||||
|
||||
每个MySQL的数据表中,都有提前设定好的列,用来代表这一列的数据的类型和名称。各个列的数据组合,叫做行。位于同一行的数据可以一同被选择。
|
||||
|
||||
为了更好的理解,下面举一个Excel和MySQL对比的例子。
|
||||
|
||||

|
||||
|
||||
如上图所示,这个是一个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。
|
||||
|
||||

|
||||
|
||||
2. 在“常规”标签页下,输入连接名(任意,用于区分连接),用户名 *minecraft*,密码 *minecraft* (以上均为默认密码)。
|
||||
|
||||

|
||||
|
||||
3. 在“SSH”标签页下,勾选使用SSH隧道,填写主机,端口*32200*,用户名*fuzhu*,验证方法*公钥*,选择私钥路径。通行短语输入你创建RSA密钥时输入的密码。勾选保存通行短语并保存。
|
||||
|
||||

|
||||
|
||||
4. 随后可在左边区域看到你新建的连接,双击即可进行连接。
|
||||
|
||||

|
||||
|
||||
111
mconline/30-网络服插件教程/1-准备知识/4-小小云链接.md
Normal 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位
|
||||
|
||||

|
||||
|
||||
3. 输入一个方便区分的密钥名称,并为密钥设置密码,此密码需要牢记,丢失后只能重新创建密钥,**无法找回**!
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||
访问后效果如下,稍候即可连接服务器。
|
||||
|
||||

|
||||
|
||||
## 私钥使用
|
||||
|
||||
### 视频教程
|
||||
|
||||
<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连接后的示意。
|
||||
|
||||

|
||||
|
||||
### 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%;" />
|
||||
|
||||
BIN
mconline/30-网络服插件教程/1-准备知识/images/mysql-1.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/mysql-2.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/navicat-1.png
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/navicat-2.png
Normal file
|
After Width: | Height: | Size: 221 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/navicat-3.png
Normal file
|
After Width: | Height: | Size: 283 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/navicat-4.png
Normal file
|
After Width: | Height: | Size: 143 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/rsa-1.png
Normal file
|
After Width: | Height: | Size: 81 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/rsa-2.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/rsa-3.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/rsa-4.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/rsa-5.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/rsa-6.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/ssh-1.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/ssh-2.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/ssh-3.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/ssh-4.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/ssh-5.png
Normal file
|
After Width: | Height: | Size: 99 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/ssh-6.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/studio-1.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/studio-2.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
mconline/30-网络服插件教程/1-准备知识/images/white-1.png
Normal file
|
After Width: | Height: | Size: 113 KiB |