ms/packages/docs/2-develop/1.3-example.md

4.3 KiB

基本插件框架

HelloWorld 示例插件

先来一个 HelloWorld.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.jsHelloWorld.js.map(可选 用于显示插件原有行数) 文件 到对应的插件目录
    • Bungee: plugins/MiaoScript/plugins/
    • Bukkit: plugins/MiaoScript/plugins/
    • Sponge: config/miaoscript/plugins/
    • Nukkit: plugins/MiaoScript/plugins/
  • 重载 MiaoScript
  • 打开客户端进入游戏 预览一下效果
  • 从 Spigot 服务端进入 image.png image.png
  • 从 Sponge 服务端进入 image.png image.png
  • 从 Nukkit 服务端进入 image.png image.png