8
packages/docs/2-develop/1-index.md
Normal file
8
packages/docs/2-develop/1-index.md
Normal file
@ -0,0 +1,8 @@
|
||||
## 开发者部分
|
||||
|
||||
本教程默认开发者已掌握下列技能
|
||||
|
||||
- `Git` 代码版本控制工具
|
||||
- `Java` 各种服务端开发语言
|
||||
- `TypeScript` 类型化 `JavaScript`
|
||||
- 熟悉需要开发的服务端的对应的 API
|
26
packages/docs/2-develop/1.1-check-env.md
Normal file
26
packages/docs/2-develop/1.1-check-env.md
Normal file
@ -0,0 +1,26 @@
|
||||
## 前提条件
|
||||
|
||||
本教程默认开发者已掌握下列技能
|
||||
|
||||
- `Git` 代码版本控制工具
|
||||
- `Java` 各种服务端开发语言
|
||||
- `TypeScript` 类型化 `JavaScript`
|
||||
- 熟悉需要开发的服务端的对应的 API
|
||||
|
||||
## 开发 IDE
|
||||
|
||||
- VSCode
|
||||
- Coding WebIDE
|
||||
|
||||
## 开发环境准备
|
||||
|
||||
- 安装 `NodeJS` 和 `Yarn`
|
||||
- 拉取代码
|
||||
- `git clone https://github.com/circlecloud/ms.git`
|
||||
- 进入目录 `ms`
|
||||
- 安装依赖包
|
||||
- `yarn`
|
||||
- 建立内部依赖链接
|
||||
- `yarn bs`
|
||||
- 编译一次生成对应的类库
|
||||
- `yarn build`
|
36
packages/docs/2-develop/1.2-project-structure.md
Normal file
36
packages/docs/2-develop/1.2-project-structure.md
Normal file
@ -0,0 +1,36 @@
|
||||
### 项目结构
|
||||
|
||||
```txt
|
||||
└─packages
|
||||
├─api 全平台兼容的接口
|
||||
├─core 核心代码 用于引导加载
|
||||
├─common 公共类库代码 例如 http reflect 模块
|
||||
├─client NodeJS 的 Minecraft 客户端 用于调试插件
|
||||
├─container IOC容器 用于注入具体实现
|
||||
├─docs Gitbook 文档源代码
|
||||
├─ployfill Nashorn 的一些自定义增强
|
||||
├─nashorn Nashorn 的类型定义
|
||||
├─bungee BungeeCord API内部实现
|
||||
├─bukkit Bukkit API内部实现
|
||||
├─sponge Sponge API内部实现
|
||||
├─nukkit Nukkit API内部实现
|
||||
├─plugin 插件管理器
|
||||
├─websocket Netty的WebSocket注入
|
||||
├─type Java的类型定义
|
||||
| ├─bungee BungeeCord 类型定义
|
||||
| ├─bukkit Bukkit 类型定义
|
||||
| ├─sponge Sponge 类型定义
|
||||
| └─nukkit Nukkit 类型定义
|
||||
└─plugins 这里当然是插件啦
|
||||
├─bungee 只兼容 BungeeCord 的插件
|
||||
├─bukkit 只兼容 Bukkit 的插件
|
||||
├─sponge 只兼容 Sponge 的插件
|
||||
└─nukkit 只兼容 Nukkit 的插件
|
||||
```
|
||||
|
||||
代码仓库
|
||||
|
||||
- Github: https://github.com/circlecloud/ms
|
||||
- Coding: https://502647092.coding.net/p/ms/d/ms/git
|
||||
- YUMC: https://git.yumc.pw/circlecloud/ms
|
||||
|
129
packages/docs/2-develop/1.3-example.md
Normal file
129
packages/docs/2-develop/1.3-example.md
Normal file
@ -0,0 +1,129 @@
|
||||
## 基本插件框架
|
||||
|
||||
### HelloWorld 示例插件
|
||||
|
||||
先来一个 `HelloWorld.ts` 插件示范!
|
||||
|
||||
```ts
|
||||
/// <reference types="@ms/types" />
|
||||
|
||||
import { server } from '@ms/api';
|
||||
import { inject } from '@ms/container';
|
||||
import { plugin, interfaces, cmd, listener, tab } from '@ms/plugin'
|
||||
|
||||
@plugin({ name: 'HelloWorld', version: '1.0.0', author: 'MiaoWoo', source: __filename })
|
||||
export class HelloWorld extends interfaces.Plugin {
|
||||
@inject(server.Server)
|
||||
private Server: server.Server
|
||||
@config()
|
||||
private config = {
|
||||
version: 1.0.0
|
||||
}
|
||||
|
||||
load() {
|
||||
this.logger.log('Plugin load from MiaoScript Plugin System...');
|
||||
}
|
||||
enable() {
|
||||
this.logger.log('Plugin enable from MiaoScript Plugin System...');
|
||||
}
|
||||
disable() {
|
||||
this.logger.log('Plugin disable from MiaoScript Plugin System...');
|
||||
}
|
||||
|
||||
bukkitload() {
|
||||
this.logger.log('Load When ServerType is Bukkit!')
|
||||
}
|
||||
bukkitenable() {
|
||||
this.logger.log('Enable When ServerType is Bukkit!')
|
||||
}
|
||||
bukkitdisable() {
|
||||
this.logger.log('Disable When ServerType is Bukkit!')
|
||||
}
|
||||
|
||||
spongeload() {
|
||||
this.logger.log('Load When ServerType is Sponge!')
|
||||
}
|
||||
spongeenable() {
|
||||
this.logger.log('Enable When ServerType is Sponge!')
|
||||
}
|
||||
spongedisable() {
|
||||
this.logger.log('Disable When ServerType is Sponge!')
|
||||
}
|
||||
|
||||
bungeeload() {
|
||||
this.logger.log('Load When ServerType is BungeeCord!')
|
||||
}
|
||||
bungeeenable() {
|
||||
this.logger.log('Enable When ServerType is BungeeCord!')
|
||||
}
|
||||
bungeedisable() {
|
||||
this.logger.log('Disable When ServerType is BungeeCord!')
|
||||
}
|
||||
|
||||
nukkitload() {
|
||||
this.logger.log('Load When ServerType is Nukkit!')
|
||||
}
|
||||
nukkitenable() {
|
||||
this.logger.log('Enable When ServerType is Nukkit!')
|
||||
}
|
||||
nukkitdisable() {
|
||||
this.logger.log('Disable When ServerType is Nukkit!')
|
||||
}
|
||||
|
||||
@cmd()
|
||||
hello(sender: any, command: string, args: string[]) {
|
||||
this.logger.log(sender, command, args);
|
||||
sender.sendMessage(JSON.stringify({ command, ...args }))
|
||||
}
|
||||
|
||||
@tab()
|
||||
tabhello(_sender: any, _command: string, _args: string[]) {
|
||||
return ['world']
|
||||
}
|
||||
|
||||
// bukkit nukkit 大部分API神似 可以直接用
|
||||
@listener({ servers: ['bukkit', 'nukkit'] })
|
||||
PlayerJoin(event: org.bukkit.event.player.PlayerJoinEvent) {
|
||||
let plyaer = event.getPlayer();
|
||||
this.logger.console(`§cBukkit §aPlayerJoinEvent: §b${plyaer.getName()}`)
|
||||
setTimeout(() => this.sendWelcome(plyaer), 10);
|
||||
}
|
||||
|
||||
@listener({ servers: ['sponge'] })
|
||||
ClientConnectionEvent$Join(event: org.spongepowered.api.event.network.ClientConnectionEvent.Join) {
|
||||
this.logger.console(`§cSponge §aClientConnectionEvent.Join: §b${event.getTargetEntity().getName()}`)
|
||||
setTimeout(() => this.sendWelcome(event.getTargetEntity()), 10);
|
||||
}
|
||||
|
||||
private sendWelcome(player: any) {
|
||||
this.logger.sender(player, `§a欢迎来到 §bMiaoScript §a的世界!`)
|
||||
this.logger.sender(player, `§6当前版本: §c${this.Server.getVersion()}`)
|
||||
}
|
||||
|
||||
@listener({ servers: ['bungee'] })
|
||||
ServerConnected(e: any) {
|
||||
let event = e as net.md_5.bungee.api.event.ServerConnectedEvent
|
||||
this.logger.console(`§cBungeeCord §aServerConnectedEvent: §b${event.getPlayer().getDisplayName()}`)
|
||||
setTimeout(() => this.logger.sender(event.getPlayer(), `§a欢迎来到 §bMiaoScript §a的世界 §6来自 §cBungeeCord §6的问候!`), 10);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- 进入 `ms` 目录
|
||||
- 执行编译 `yarn build:plugins`
|
||||
- 从 `packages/plugins/dist` 中复制 `HelloWorld.js` 和 `HelloWorld.js.map`(可选 用于显示插件原有行数) 文件 到对应的插件目录
|
||||
- Bungee: plugins/MiaoScript/plugins/
|
||||
- Bukkit: plugins/MiaoScript/plugins/
|
||||
- Sponge: config/miaoscript/plugins/
|
||||
- Nukkit: plugins/MiaoScript/plugins/
|
||||
- 重载 `MiaoScript`
|
||||
- 打开客户端进入游戏 预览一下效果
|
||||
- 从 Spigot 服务端进入
|
||||

|
||||

|
||||
- 从 Sponge 服务端进入
|
||||

|
||||

|
||||
- 从 Nukkit 服务端进入
|
||||

|
||||

|
26
packages/docs/2-develop/2.1-plugin-lifecycle.md
Normal file
26
packages/docs/2-develop/2.1-plugin-lifecycle.md
Normal file
@ -0,0 +1,26 @@
|
||||
## 插件生命周期
|
||||
|
||||
MiaoScript 的生命周期遵循了 Bukkit 的生命周期
|
||||
|
||||

|
||||
|
||||
### load 加载阶段
|
||||
|
||||
此阶段通常用于初始化基础配置 数据库链接等
|
||||
某些对外提供功能的插件 需要在此阶段初始化完成
|
||||
|
||||
### enable 启动阶段
|
||||
|
||||
此阶段通常用于注册命令 注册事件等
|
||||
由于命令和事件 MiaoScript 已经托管了 所以开发者可以直接用注解实现
|
||||
|
||||
### disable 关闭阶段
|
||||
|
||||
此阶段通常用于注销命令 注销事件等
|
||||
由于命令和事件 MiaoScript 已经托管了 所以开发者可以直接用注解实现
|
||||
|
||||
### 扩展的生命周期
|
||||
|
||||
MiaoScript 针对不同的服务端 提供了扩展的周期
|
||||
以服务端类型开头阶段名结束 例如 `bukkitload` `spongeenbale` `bungeedisable`
|
||||
扩展的生命周期只会在特定的服务器执行
|
3
packages/docs/2-develop/2.2-plugin-decorators.md
Normal file
3
packages/docs/2-develop/2.2-plugin-decorators.md
Normal file
@ -0,0 +1,3 @@
|
||||
## @plugin 注解
|
||||
|
||||
TODO
|
3
packages/docs/2-develop/2.3-cmd-tab-decorators.md
Normal file
3
packages/docs/2-develop/2.3-cmd-tab-decorators.md
Normal file
@ -0,0 +1,3 @@
|
||||
## @cmd/@tab 注解
|
||||
|
||||
TODO
|
3
packages/docs/2-develop/2.4-listener-decorators.md
Normal file
3
packages/docs/2-develop/2.4-listener-decorators.md
Normal file
@ -0,0 +1,3 @@
|
||||
## @listener 注解
|
||||
|
||||
TODO
|
3
packages/docs/2-develop/2.5-config-decorators.md
Normal file
3
packages/docs/2-develop/2.5-config-decorators.md
Normal file
@ -0,0 +1,3 @@
|
||||
## @config 注解
|
||||
|
||||
TODO
|
27
packages/docs/2-develop/lifecycle.plantuml
Normal file
27
packages/docs/2-develop/lifecycle.plantuml
Normal file
@ -0,0 +1,27 @@
|
||||
@startuml MiaoScript 生命周期
|
||||
|
||||
start
|
||||
|
||||
:扫描 plugins 路径;
|
||||
:循环加载插件脚本;
|
||||
:扫描 @plugin 注解;
|
||||
:构建插件实例;
|
||||
:判断 servers 参数 获得可加载的插件;
|
||||
:扫描 @config 注解 注入配置或保存默认配置;
|
||||
:执行 Load 阶段;
|
||||
:执行 扩展 Load 阶段;
|
||||
:扫描 @cmd/@tab 注解 注册命令/补全;
|
||||
:扫描 @listener 注解 注册事件监听;
|
||||
:执行 Enable 阶段;
|
||||
:执行 扩展 Enable 阶段;
|
||||
:进入运行阶段;
|
||||
:进入关闭阶段;
|
||||
:保存 配置到配置文件;
|
||||
:注销 插件命令;
|
||||
:注销 事件监听;
|
||||
:执行 Disable 阶段;
|
||||
:执行 扩展 Disable 阶段;
|
||||
|
||||
end
|
||||
|
||||
@endum
|
Reference in New Issue
Block a user