refactor: chat & command tabComplete
Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
parent
9be9c400ad
commit
e9a4f2f351
@ -3,6 +3,15 @@ import { injectable } from '@ccms/container'
|
|||||||
export namespace chat {
|
export namespace chat {
|
||||||
@injectable()
|
@injectable()
|
||||||
export abstract class Chat {
|
export abstract class Chat {
|
||||||
|
/**
|
||||||
|
* sendJsonChat
|
||||||
|
* @param sender reciver
|
||||||
|
* @param json json
|
||||||
|
* @param type chat Type 0: chat 1: system 2: actionBar
|
||||||
|
*/
|
||||||
|
sendJson(sender: any, json: string | object, type = 0) {
|
||||||
|
throw new Error("Method not implemented.")
|
||||||
|
}
|
||||||
sendMessage(sender: any, message: string) {
|
sendMessage(sender: any, message: string) {
|
||||||
throw new Error("Method not implemented.")
|
throw new Error("Method not implemented.")
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,9 @@ export namespace command {
|
|||||||
this.onTabComplete(plugin, cmd, exec.tab)
|
this.onTabComplete(plugin, cmd, exec.tab)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public tabComplete(sender: any, input: string, index?: number): string[] {
|
||||||
|
throw new Error("Method not implemented.")
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 取消命令注册
|
* 取消命令注册
|
||||||
* @param plugin 插件
|
* @param plugin 插件
|
||||||
|
@ -4,6 +4,8 @@ import { injectable, inject } from '@ccms/container'
|
|||||||
import { NativePluginManager } from './native_plugin'
|
import { NativePluginManager } from './native_plugin'
|
||||||
import { constants } from '../../constants'
|
import { constants } from '../../constants'
|
||||||
|
|
||||||
|
export { NativePluginManager } from './native_plugin'
|
||||||
|
|
||||||
export namespace server {
|
export namespace server {
|
||||||
/**
|
/**
|
||||||
* Runtime ServerType
|
* Runtime ServerType
|
||||||
@ -13,10 +15,6 @@ export namespace server {
|
|||||||
* Runtime Console
|
* Runtime Console
|
||||||
*/
|
*/
|
||||||
export const Console = Symbol("Console")
|
export const Console = Symbol("Console")
|
||||||
/**
|
|
||||||
* MiaoScript Server
|
|
||||||
*/
|
|
||||||
export const Server = Symbol("Server")
|
|
||||||
/**
|
/**
|
||||||
* Runtime Server Instance
|
* Runtime Server Instance
|
||||||
*/
|
*/
|
||||||
@ -24,21 +22,19 @@ export namespace server {
|
|||||||
/**
|
/**
|
||||||
* MiaoScript Server
|
* MiaoScript Server
|
||||||
*/
|
*/
|
||||||
export interface Server {
|
export abstract class Server {
|
||||||
getVersion(): string
|
abstract getVersion(): string
|
||||||
getPlayer(name: string): any
|
abstract getPlayer(name: string): any
|
||||||
getOnlinePlayers(): any[]
|
abstract getOnlinePlayers(): any[]
|
||||||
getConsoleSender(): any
|
abstract getConsoleSender(): any
|
||||||
getService(service: string): any
|
abstract getService(service: string): any
|
||||||
dispatchCommand(sender: string | any, command: string): boolean
|
abstract dispatchCommand(sender: string | any, command: string): boolean
|
||||||
dispatchConsoleCommand(command: string): boolean
|
abstract dispatchConsoleCommand(command: string): boolean
|
||||||
getPluginsFolder(): string
|
abstract getPluginsFolder(): string
|
||||||
getNativePluginManager(): NativePluginManager
|
abstract getNativePluginManager(): NativePluginManager
|
||||||
getDedicatedServer?(): any
|
abstract getDedicatedServer?(): any
|
||||||
getNettyPipeline(): any
|
abstract getNettyPipeline(): any
|
||||||
getRootLogger(): any
|
abstract getRootLogger(): any
|
||||||
sendJson(sender: string | any, json: object | string): void
|
|
||||||
tabComplete?(sender: string | any, input: string, index?: number): string[]
|
|
||||||
}
|
}
|
||||||
@injectable()
|
@injectable()
|
||||||
export class ServerChecker {
|
export class ServerChecker {
|
||||||
@ -102,12 +98,6 @@ export namespace server {
|
|||||||
getRootLogger() {
|
getRootLogger() {
|
||||||
throw new Error("Method not implemented.")
|
throw new Error("Method not implemented.")
|
||||||
}
|
}
|
||||||
sendJson(sender: any, json: string | object): void {
|
|
||||||
throw new Error("Method not implemented.")
|
|
||||||
}
|
|
||||||
tabComplete?(sender: any, input: string, index?: number): string[] {
|
|
||||||
throw new Error("Method not implemented.")
|
|
||||||
}
|
|
||||||
protected reflect() {
|
protected reflect() {
|
||||||
try {
|
try {
|
||||||
let consoleServer = this.getDedicatedServer()
|
let consoleServer = this.getDedicatedServer()
|
||||||
|
@ -4,11 +4,14 @@ import bukkitChat from './enhance/chat'
|
|||||||
|
|
||||||
@provideSingleton(chat.Chat)
|
@provideSingleton(chat.Chat)
|
||||||
export class BukkitChat extends chat.Chat {
|
export class BukkitChat extends chat.Chat {
|
||||||
|
sendJson(sender: any, json: string | object, type = 0) {
|
||||||
|
bukkitChat.send(sender, typeof json === "string" ? json : JSON.stringify(json), type)
|
||||||
|
}
|
||||||
sendMessage(sender: any, message: string) {
|
sendMessage(sender: any, message: string) {
|
||||||
bukkitChat.send(sender, JSON.stringify({ text: message }), 0)
|
this.sendJson(sender, { text: message }, 0)
|
||||||
}
|
}
|
||||||
sendActionBar(sender: any, message: string) {
|
sendActionBar(sender: any, message: string) {
|
||||||
bukkitChat.send(sender, JSON.stringify({ text: message }), 2)
|
this.sendJson(sender, { text: message }, 2)
|
||||||
}
|
}
|
||||||
sendTitle(sender: any, title: string, subtitle: string = '', fadeIn: number = 20, time: number = 100, fadeOut: number = 20) {
|
sendTitle(sender: any, title: string, subtitle: string = '', fadeIn: number = 20, time: number = 100, fadeOut: number = 20) {
|
||||||
sender.sendTitle(title, subtitle, fadeIn, time, fadeOut)
|
sender.sendTitle(title, subtitle, fadeIn, time, fadeOut)
|
||||||
|
@ -4,44 +4,47 @@ import { command, plugin } from '@ccms/api'
|
|||||||
import * as reflect from '@ccms/common/dist/reflect'
|
import * as reflect from '@ccms/common/dist/reflect'
|
||||||
import { provideSingleton, postConstruct, inject } from '@ccms/container'
|
import { provideSingleton, postConstruct, inject } from '@ccms/container'
|
||||||
|
|
||||||
let Bukkit = org.bukkit.Bukkit;
|
let Bukkit = org.bukkit.Bukkit
|
||||||
let TabCompleter = Java.type('org.bukkit.command.TabCompleter');
|
let TabCompleter = Java.type('org.bukkit.command.TabCompleter')
|
||||||
let PluginCommand = Java.type('org.bukkit.command.PluginCommand');
|
let PluginCommand = Java.type('org.bukkit.command.PluginCommand')
|
||||||
let CommandExecutor = Java.type('org.bukkit.command.CommandExecutor');
|
let CommandExecutor = Java.type('org.bukkit.command.CommandExecutor')
|
||||||
|
|
||||||
@provideSingleton(command.Command)
|
@provideSingleton(command.Command)
|
||||||
export class BukkitCommand extends command.Command {
|
export class BukkitCommand extends command.Command {
|
||||||
@inject(plugin.PluginInstance)
|
@inject(plugin.PluginInstance)
|
||||||
private pluginInstance: any
|
private pluginInstance: any
|
||||||
private commandMap: any;
|
private commandMap: any
|
||||||
|
|
||||||
@postConstruct()
|
@postConstruct()
|
||||||
init() {
|
init() {
|
||||||
this.commandMap = reflect.on(Bukkit.getPluginManager()).get('commandMap').get();
|
this.commandMap = reflect.on(Bukkit.getPluginManager()).get('commandMap').get()
|
||||||
}
|
}
|
||||||
create(plugin: any, command: string) {
|
create(plugin: any, command: string) {
|
||||||
var cmd = this.commandMap.getCommand(command)
|
var cmd = this.commandMap.getCommand(command)
|
||||||
if (cmd && cmd instanceof PluginCommand) { return cmd };
|
if (cmd && cmd instanceof PluginCommand) { return cmd };
|
||||||
cmd = reflect.on(PluginCommand).create(command, this.pluginInstance).get();
|
cmd = reflect.on(PluginCommand).create(command, this.pluginInstance).get()
|
||||||
this.commandMap.register(plugin.description.name, cmd);
|
this.commandMap.register(plugin.description.name, cmd)
|
||||||
return cmd;
|
return cmd
|
||||||
}
|
}
|
||||||
remove(plugin: any, command: string) {
|
remove(plugin: any, command: string) {
|
||||||
var cmd = this.commandMap.getCommand(command)
|
var cmd = this.commandMap.getCommand(command)
|
||||||
if (cmd && cmd instanceof PluginCommand) {
|
if (cmd && cmd instanceof PluginCommand) {
|
||||||
cmd.unregister(this.commandMap);
|
cmd.unregister(this.commandMap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
tabComplete(sender: any, input: string, index?: number): string[] {
|
||||||
|
return Java.from(this.commandMap.tabComplete(sender, input))
|
||||||
|
}
|
||||||
onCommand(plugin: any, command: any, executor: Function) {
|
onCommand(plugin: any, command: any, executor: Function) {
|
||||||
// 必须指定需要实现的接口类型 否则MOD服会报错
|
// 必须指定需要实现的接口类型 否则MOD服会报错
|
||||||
command.setExecutor(new CommandExecutor({
|
command.setExecutor(new CommandExecutor({
|
||||||
onCommand: super.setExecutor(plugin, command, executor)
|
onCommand: super.setExecutor(plugin, command, executor)
|
||||||
}));
|
}))
|
||||||
}
|
}
|
||||||
onTabComplete(plugin: any, command: any, tabCompleter: Function) {
|
onTabComplete(plugin: any, command: any, tabCompleter: Function) {
|
||||||
// 必须指定需要实现的接口类型 否则MOD服会报错
|
// 必须指定需要实现的接口类型 否则MOD服会报错
|
||||||
command.setTabCompleter(new TabCompleter({
|
command.setTabCompleter(new TabCompleter({
|
||||||
onTabComplete: super.setTabCompleter(plugin, command, tabCompleter)
|
onTabComplete: super.setTabCompleter(plugin, command, tabCompleter)
|
||||||
}));
|
}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,16 +54,4 @@ export class BukkitServer extends server.ReflectServer {
|
|||||||
getRootLogger() {
|
getRootLogger() {
|
||||||
return this.rootLogger
|
return this.rootLogger
|
||||||
}
|
}
|
||||||
sendJson(sender: string | any, json: object | string): void {
|
|
||||||
if (typeof sender === "string") {
|
|
||||||
sender = this.getPlayer(sender)
|
|
||||||
}
|
|
||||||
let result = chat.json(sender, typeof json == "string" ? json : JSON.stringify(json))
|
|
||||||
if (result !== false) {
|
|
||||||
this.dispatchConsoleCommand(result)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tabComplete?(sender: any, input: string, index?: number): string[] {
|
|
||||||
throw new Error("Method not implemented.")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -3,29 +3,29 @@ import { provideSingleton, inject, postConstruct } from '@ccms/container'
|
|||||||
|
|
||||||
import * as reflect from '@ccms/common/dist/reflect'
|
import * as reflect from '@ccms/common/dist/reflect'
|
||||||
|
|
||||||
let Bungee: net.md_5.bungee.api.ProxyServer = base.getInstance().getProxy();
|
let Bungee: net.md_5.bungee.api.ProxyServer = base.getInstance().getProxy()
|
||||||
|
|
||||||
@provideSingleton(server.Server)
|
@provideSingleton(server.Server)
|
||||||
export class BungeeServer implements server.Server {
|
export class BungeeServer implements server.Server {
|
||||||
private pluginsFolder: string;
|
private pluginsFolder: string
|
||||||
private pipeline: any;
|
private pipeline: any
|
||||||
private rootLogger: any;
|
private rootLogger: any
|
||||||
|
|
||||||
@inject(task.TaskManager)
|
@inject(task.TaskManager)
|
||||||
private task: task.TaskManager
|
private task: task.TaskManager
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.pluginsFolder = Bungee.getPluginsFolder().getCanonicalPath();
|
this.pluginsFolder = Bungee.getPluginsFolder().getCanonicalPath()
|
||||||
}
|
}
|
||||||
|
|
||||||
@postConstruct()
|
@postConstruct()
|
||||||
initialize() {
|
initialize() {
|
||||||
let count = 0;
|
let count = 0
|
||||||
let wait = this.task.create(() => {
|
let wait = this.task.create(() => {
|
||||||
try {
|
try {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
this.pipeline = reflect.on(base.getInstance().getProxy()).get('listeners').get().toArray()[0].pipeline()
|
this.pipeline = reflect.on(base.getInstance().getProxy()).get('listeners').get().toArray()[0].pipeline()
|
||||||
wait.cancel();
|
wait.cancel()
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
count++
|
count++
|
||||||
if (count > 50) {
|
if (count > 50) {
|
||||||
@ -44,7 +44,7 @@ export class BungeeServer implements server.Server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getPlayer(name: string) {
|
getPlayer(name: string) {
|
||||||
return Bungee.getPlayer(name);
|
return Bungee.getPlayer(name)
|
||||||
}
|
}
|
||||||
getVersion(): string {
|
getVersion(): string {
|
||||||
return Bungee.getVersion()
|
return Bungee.getVersion()
|
||||||
@ -56,7 +56,7 @@ export class BungeeServer implements server.Server {
|
|||||||
return Bungee.getConsole()
|
return Bungee.getConsole()
|
||||||
}
|
}
|
||||||
getService(service: string) {
|
getService(service: string) {
|
||||||
throw new Error("Method not implemented.");
|
throw new Error("Method not implemented.")
|
||||||
}
|
}
|
||||||
dispatchCommand(sender: string | any, command: string): boolean {
|
dispatchCommand(sender: string | any, command: string): boolean {
|
||||||
if (typeof sender === 'string') {
|
if (typeof sender === 'string') {
|
||||||
@ -68,18 +68,15 @@ export class BungeeServer implements server.Server {
|
|||||||
return Bungee.getPluginManager().dispatchCommand(Bungee.getConsole(), command)
|
return Bungee.getPluginManager().dispatchCommand(Bungee.getConsole(), command)
|
||||||
}
|
}
|
||||||
getPluginsFolder(): string {
|
getPluginsFolder(): string {
|
||||||
return this.pluginsFolder;
|
return this.pluginsFolder
|
||||||
}
|
}
|
||||||
getNativePluginManager() {
|
getNativePluginManager() {
|
||||||
return Bungee.getPluginManager() as any
|
return Bungee.getPluginManager() as any
|
||||||
}
|
}
|
||||||
getNettyPipeline() {
|
getNettyPipeline() {
|
||||||
return this.pipeline;
|
return this.pipeline
|
||||||
}
|
}
|
||||||
getRootLogger() {
|
getRootLogger() {
|
||||||
return this.rootLogger;
|
return this.rootLogger
|
||||||
}
|
|
||||||
sendJson(sender: string | any, json: string): void {
|
|
||||||
throw new Error("Method not implemented.");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
22
packages/sponge/src/chat.ts
Normal file
22
packages/sponge/src/chat.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import { chat } from '@ccms/api'
|
||||||
|
import { provideSingleton } from '@ccms/container'
|
||||||
|
|
||||||
|
const Sponge = org.spongepowered.api.Sponge
|
||||||
|
const ChatTypes = org.spongepowered.api.text.chat.ChatTypes
|
||||||
|
const TextSerializers = org.spongepowered.api.text.serializer.TextSerializers
|
||||||
|
|
||||||
|
@provideSingleton(chat.Chat)
|
||||||
|
export class SpongeChat extends chat.Chat {
|
||||||
|
sendJson(sender: any, json: string | object) {
|
||||||
|
sender.sendMessage(TextSerializers.JSON.deserialize(typeof json === "string" ? json : JSON.stringify(json)))
|
||||||
|
}
|
||||||
|
sendMessage(sender: any, message: string) {
|
||||||
|
sender.sendMessage(TextSerializers.FORMATTING_CODE.deserialize(message))
|
||||||
|
}
|
||||||
|
sendActionBar(sender: any, message: string) {
|
||||||
|
sender.sendMessage(ChatTypes.ACTION_BAR, TextSerializers.FORMATTING_CODE.deserialize(message))
|
||||||
|
}
|
||||||
|
sendTitle(sender: any, title: string, subtitle: string = '', fadeIn: number = 20, time: number = 100, fadeOut: number = 20) {
|
||||||
|
sender.sendTitle(title, subtitle, fadeIn, time, fadeOut)
|
||||||
|
}
|
||||||
|
}
|
@ -13,6 +13,9 @@ export class SpringCommand extends command.Command {
|
|||||||
protected create(plugin: any, command: string) {
|
protected create(plugin: any, command: string) {
|
||||||
return this.commandMap.register(plugin, command)
|
return this.commandMap.register(plugin, command)
|
||||||
}
|
}
|
||||||
|
public tabComplete(sender: any, input: string, index?: number): string[] {
|
||||||
|
return this.commandMap.tabComplate(sender, input, index)
|
||||||
|
}
|
||||||
protected remove(plugin: any, command: string) {
|
protected remove(plugin: any, command: string) {
|
||||||
this.commandMap.unregister(plugin, command)
|
this.commandMap.unregister(plugin, command)
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { server } from '@ccms/api'
|
import { server } from '@ccms/api'
|
||||||
import { provideSingleton, inject } from '@ccms/container'
|
import { provideSingleton, inject } from '@ccms/container'
|
||||||
import { NativePluginManager } from '@ccms/api/dist/interfaces/server/native_plugin'
|
import { NativePluginManager } from '@ccms/api'
|
||||||
import { CommandMap } from './internal/command'
|
import { CommandMap } from './internal/command'
|
||||||
|
|
||||||
@provideSingleton(server.Server)
|
@provideSingleton(server.Server)
|
||||||
@ -8,8 +8,6 @@ export class SpringServer implements server.Server {
|
|||||||
@inject(CommandMap)
|
@inject(CommandMap)
|
||||||
private commandMap: CommandMap
|
private commandMap: CommandMap
|
||||||
|
|
||||||
constructor() {
|
|
||||||
}
|
|
||||||
getVersion(): string {
|
getVersion(): string {
|
||||||
return "SpringFramework"
|
return "SpringFramework"
|
||||||
}
|
}
|
||||||
@ -47,10 +45,4 @@ export class SpringServer implements server.Server {
|
|||||||
getRootLogger() {
|
getRootLogger() {
|
||||||
return Packages.org.slf4j.LoggerFactory.getLogger("root") || global.logger
|
return Packages.org.slf4j.LoggerFactory.getLogger("root") || global.logger
|
||||||
}
|
}
|
||||||
sendJson(sender: any, json: string | object): void {
|
|
||||||
throw new Error("Method not implemented.")
|
|
||||||
}
|
|
||||||
tabComplete(sender: any, input: string, index?: number) {
|
|
||||||
return this.commandMap.tabComplate(sender, input, index)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user