## 基本插件框架 ### HelloWorld 示例插件 先来一个 `HelloWorld.ts` 插件示范! ```ts /// 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)