130 lines
4.3 KiB
Markdown
130 lines
4.3 KiB
Markdown
|
## 基本插件框架
|
||
|
|
||
|
### 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 服务端进入
|
||
|
![image.png](https://i.loli.net/2019/09/22/2BZuwF65WV1xGnv.png)
|
||
|
![image.png](https://i.loli.net/2019/09/22/m2CftwbalnXsxvg.png)
|
||
|
- 从 Sponge 服务端进入
|
||
|
![image.png](https://i.loli.net/2019/09/22/QD1jrShtJpPXyVl.png)
|
||
|
![image.png](https://i.loli.net/2019/09/22/GzLFVC3sjAJ4obm.png)
|
||
|
- 从 Nukkit 服务端进入
|
||
|
![image.png](https://i.loli.net/2020/03/03/Xvr7SZJ5YdICgko.png)
|
||
|
![image.png](https://i.loli.net/2020/03/03/Q28AW9b7pIVL1j6.png)
|