@@ -1,7 +1,7 @@
 | 
			
		||||
import { channel, plugin } from '@ccms/api'
 | 
			
		||||
import { inject, provideSingleton } from '@ccms/container'
 | 
			
		||||
 | 
			
		||||
const Bukkit = org.bukkit.Bukkit
 | 
			
		||||
const Bukkit: typeof org.bukkit.Bukkit = Java.type('org.bukkit.Bukkit')
 | 
			
		||||
const PluginMessageListener = Java.type("org.bukkit.plugin.messaging.PluginMessageListener")
 | 
			
		||||
const Messenger = Bukkit.getMessenger()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,12 @@
 | 
			
		||||
import { chat } from '@ccms/api'
 | 
			
		||||
import { provideSingleton } from '@ccms/container'
 | 
			
		||||
import bukkitChat from './enhance/chat'
 | 
			
		||||
import bukkitChat from './internal/chat'
 | 
			
		||||
 | 
			
		||||
@provideSingleton(chat.Chat)
 | 
			
		||||
export class BukkitChat extends chat.Chat {
 | 
			
		||||
    get handle(): any {
 | 
			
		||||
        return bukkitChat
 | 
			
		||||
    }
 | 
			
		||||
    sendJson(sender: any, json: string | object, type = 0) {
 | 
			
		||||
        bukkitChat.send(sender, typeof json === "string" ? json : JSON.stringify(json), type)
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,35 +1,38 @@
 | 
			
		||||
import '@ccms/nashorn'
 | 
			
		||||
 | 
			
		||||
import { command, plugin } from '@ccms/api'
 | 
			
		||||
import * as reflect from '@ccms/common/dist/reflect'
 | 
			
		||||
import { provideSingleton, postConstruct, inject } from '@ccms/container'
 | 
			
		||||
import * as reflect from '@ccms/common/dist/reflect'
 | 
			
		||||
 | 
			
		||||
let Bukkit = org.bukkit.Bukkit
 | 
			
		||||
let TabCompleter = Java.type('org.bukkit.command.TabCompleter')
 | 
			
		||||
let PluginCommand = Java.type('org.bukkit.command.PluginCommand')
 | 
			
		||||
let CommandExecutor = Java.type('org.bukkit.command.CommandExecutor')
 | 
			
		||||
const Bukkit: typeof org.bukkit.Bukkit = Java.type('org.bukkit.Bukkit')
 | 
			
		||||
const TabCompleter = Java.type('org.bukkit.command.TabCompleter')
 | 
			
		||||
const PluginCommand = Java.type('org.bukkit.command.PluginCommand')
 | 
			
		||||
const CommandExecutor = Java.type('org.bukkit.command.CommandExecutor')
 | 
			
		||||
 | 
			
		||||
@provideSingleton(command.Command)
 | 
			
		||||
export class BukkitCommand extends command.Command {
 | 
			
		||||
    @inject(plugin.PluginInstance)
 | 
			
		||||
    private pluginInstance: any
 | 
			
		||||
    private commandMap: any
 | 
			
		||||
    private knownCommands: any
 | 
			
		||||
 | 
			
		||||
    @postConstruct()
 | 
			
		||||
    init() {
 | 
			
		||||
        this.commandMap = reflect.on(Bukkit.getPluginManager()).get('commandMap').get()
 | 
			
		||||
        this.knownCommands = reflect.on(this.commandMap).get('knownCommands').get()
 | 
			
		||||
    }
 | 
			
		||||
    create(plugin: any, command: string) {
 | 
			
		||||
        var cmd = this.commandMap.getCommand(command)
 | 
			
		||||
        if (cmd && cmd instanceof PluginCommand) { return cmd };
 | 
			
		||||
        if (cmd instanceof PluginCommand) { return cmd };
 | 
			
		||||
        cmd = reflect.on(PluginCommand).create(command, this.pluginInstance).get()
 | 
			
		||||
        this.commandMap.register(plugin.description.name, cmd)
 | 
			
		||||
        return cmd
 | 
			
		||||
    }
 | 
			
		||||
    remove(plugin: any, command: string) {
 | 
			
		||||
        var cmd = this.commandMap.getCommand(command)
 | 
			
		||||
        if (cmd && cmd instanceof PluginCommand) {
 | 
			
		||||
        if (cmd instanceof PluginCommand) {
 | 
			
		||||
            cmd.unregister(this.commandMap)
 | 
			
		||||
            this.knownCommands.remove(command)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    tabComplete(sender: any, input: string, index?: number): string[] {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +1,20 @@
 | 
			
		||||
import { MiaoScriptConsole } from '@ccms/api'
 | 
			
		||||
 | 
			
		||||
let Bukkit = org.bukkit.Bukkit;
 | 
			
		||||
const Bukkit: typeof org.bukkit.Bukkit = Java.type('org.bukkit.Bukkit')
 | 
			
		||||
 | 
			
		||||
export class BukkitConsole extends MiaoScriptConsole {
 | 
			
		||||
    sender(sender, ...args) {
 | 
			
		||||
        if (!(sender instanceof Java.type('org.bukkit.command.CommandSender'))) {
 | 
			
		||||
            this.error(`First parameter ${sender} not instanceof org.bukkit.command.CommandSender can't send message!`)
 | 
			
		||||
            return;
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
        if (Object.prototype.toString.call(args[0]) === "[object Array]") {
 | 
			
		||||
            args[0].forEach(line => sender.sendMessage(this.prefix + line))
 | 
			
		||||
        } else {
 | 
			
		||||
            sender.sendMessage(this.prefix + args.join(' '));
 | 
			
		||||
            sender.sendMessage(this.prefix + args.join(' '))
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    console(...args: string[]): void {
 | 
			
		||||
        this.sender(Bukkit.getConsoleSender(), args.join(' '));
 | 
			
		||||
        this.sender(Bukkit.getConsoleSender(), args.join(' '))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,13 @@
 | 
			
		||||
import { event, plugin } from '@ccms/api'
 | 
			
		||||
import { inject, provideSingleton } from '@ccms/container';
 | 
			
		||||
import { inject, provideSingleton } from '@ccms/container'
 | 
			
		||||
import * as reflect from '@ccms/common/dist/reflect'
 | 
			
		||||
 | 
			
		||||
const Bukkit = Java.type("org.bukkit.Bukkit");
 | 
			
		||||
const Event = Java.type("org.bukkit.event.Event");
 | 
			
		||||
const Modifier = Java.type("java.lang.reflect.Modifier");
 | 
			
		||||
const Listener = Java.type("org.bukkit.event.Listener");
 | 
			
		||||
const EventPriority = Java.type("org.bukkit.event.EventPriority");
 | 
			
		||||
const EventExecutor = Java.type("org.bukkit.plugin.EventExecutor");
 | 
			
		||||
const Bukkit = Java.type("org.bukkit.Bukkit")
 | 
			
		||||
const Event = Java.type("org.bukkit.event.Event")
 | 
			
		||||
const Modifier = Java.type("java.lang.reflect.Modifier")
 | 
			
		||||
const Listener = Java.type("org.bukkit.event.Listener")
 | 
			
		||||
const EventPriority = Java.type("org.bukkit.event.EventPriority")
 | 
			
		||||
const EventExecutor = Java.type("org.bukkit.plugin.EventExecutor")
 | 
			
		||||
 | 
			
		||||
@provideSingleton(event.Event)
 | 
			
		||||
export class BukkitEvent extends event.Event {
 | 
			
		||||
@@ -15,7 +15,7 @@ export class BukkitEvent extends event.Event {
 | 
			
		||||
    private pluginInstance: any
 | 
			
		||||
 | 
			
		||||
    constructor() {
 | 
			
		||||
        super('org/bukkit/event');
 | 
			
		||||
        super('org/bukkit/event')
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getJarFile(resource: string) {
 | 
			
		||||
@@ -27,10 +27,10 @@ export class BukkitEvent extends event.Event {
 | 
			
		||||
            // 访问符为Public
 | 
			
		||||
            Modifier.isPublic(clazz.getModifiers()) &&
 | 
			
		||||
            // 不是抽象类
 | 
			
		||||
            !Modifier.isAbstract(clazz.getModifiers());
 | 
			
		||||
            !Modifier.isAbstract(clazz.getModifiers())
 | 
			
		||||
    }
 | 
			
		||||
    register(eventCls: any, exec: Function, priority: event.EventPriority, ignoreCancel: boolean) {
 | 
			
		||||
        let listener = new Listener({});
 | 
			
		||||
        let listener = new Listener({})
 | 
			
		||||
        Bukkit.pluginManager.registerEvent(
 | 
			
		||||
            eventCls,
 | 
			
		||||
            listener,
 | 
			
		||||
@@ -39,10 +39,10 @@ export class BukkitEvent extends event.Event {
 | 
			
		||||
                execute: exec
 | 
			
		||||
            }),
 | 
			
		||||
            this.pluginInstance,
 | 
			
		||||
            ignoreCancel);
 | 
			
		||||
        return listener;
 | 
			
		||||
            ignoreCancel)
 | 
			
		||||
        return listener
 | 
			
		||||
    }
 | 
			
		||||
    unregister(event: any, listener: any): void {
 | 
			
		||||
        reflect.on(event).call('getHandlerList').get().unregister(listener);
 | 
			
		||||
        reflect.on(event).call('getHandlerList').get().unregister(listener)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -29,17 +29,16 @@ abstract class BukkitChatInvoke {
 | 
			
		||||
            this.ChatSerializer = Java.type(nmsChatSerializerClass.getName())
 | 
			
		||||
            let packetTypeClass = this.getPacketPlayOutChatClass()
 | 
			
		||||
            this.PacketPlayOutChat = Java.type(packetTypeClass.getName())
 | 
			
		||||
            let packetTypeConstructor: { parameterTypes: any[] }
 | 
			
		||||
            let constructors = packetTypeClass.constructors
 | 
			
		||||
            Java.from(constructors).forEach(function (c) {
 | 
			
		||||
                if (c.parameterTypes.length === 2 || c.parameterTypes.length === 3) {
 | 
			
		||||
                    packetTypeConstructor = c
 | 
			
		||||
            for (const constructor of Java.from(constructors)) {
 | 
			
		||||
                let parameterTypes = constructor.parameterTypes
 | 
			
		||||
                if (parameterTypes.length === 2 || parameterTypes.length === 3) {
 | 
			
		||||
                    let nmsChatMessageTypeClass = parameterTypes[1]
 | 
			
		||||
                    if (nmsChatMessageTypeClass.isEnum()) {
 | 
			
		||||
                        this.chatMessageTypes = nmsChatMessageTypeClass.getEnumConstants()
 | 
			
		||||
                        break
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
            let parameterTypes = packetTypeConstructor.parameterTypes
 | 
			
		||||
            let nmsChatMessageTypeClass = parameterTypes[1]
 | 
			
		||||
            if (nmsChatMessageTypeClass.isEnum()) {
 | 
			
		||||
                this.chatMessageTypes = nmsChatMessageTypeClass.getEnumConstants()
 | 
			
		||||
            }
 | 
			
		||||
            let playerConnectionField = this.getPlayerConnectionField()
 | 
			
		||||
            this.playerConnectionFieldName = playerConnectionField.getName()
 | 
			
		||||
@@ -151,8 +150,9 @@ class BukkitChatInvoke_1_17_1 extends BukkitChatInvoke_1_16_5 {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
try {
 | 
			
		||||
    //@ts-ignore
 | 
			
		||||
    let nmsVersion = org.bukkit.Bukkit.server.class.name.split('.')[3]
 | 
			
		||||
    let Bukkit: typeof org.bukkit.Bukkit = Java.type('org.bukkit.Bukkit')
 | 
			
		||||
    // @ts-ignore
 | 
			
		||||
    let nmsVersion = Bukkit.getServer().class.name.split('.')[3]
 | 
			
		||||
    let nmsSubVersion = nmsVersion.split("_")[1]
 | 
			
		||||
    if (nmsSubVersion >= 8) {
 | 
			
		||||
        bukkitChatInvoke = new BukkitChatInvoke_1_8(nmsVersion)
 | 
			
		||||
@@ -168,6 +168,7 @@ try {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
let chat = {
 | 
			
		||||
    invoke: bukkitChatInvoke,
 | 
			
		||||
    json: bukkitChatInvoke.json.bind(bukkitChatInvoke),
 | 
			
		||||
    send: bukkitChatInvoke.send.bind(bukkitChatInvoke)
 | 
			
		||||
}
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import { provideSingleton } from '@ccms/container'
 | 
			
		||||
import { particle, plugin } from '@ccms/api'
 | 
			
		||||
import { particle } from '@ccms/api'
 | 
			
		||||
 | 
			
		||||
@provideSingleton(particle.ParticleManager)
 | 
			
		||||
export class BukkitParticleManager extends particle.ParticleManager {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,22 @@ export class BukkitNativePluginManager extends server.NativePluginManager {
 | 
			
		||||
    get(name: string): server.NativePlugin {
 | 
			
		||||
        return this.convert(this.bukkitPluginManager.getPlugin(name))
 | 
			
		||||
    }
 | 
			
		||||
    enable(name: string): server.NativePlugin {
 | 
			
		||||
        let origin = this.bukkitPluginManager.getPlugin(name)
 | 
			
		||||
        if (!origin) { throw new Error(`Native Plugin ${name} not found.`) }
 | 
			
		||||
        if (!origin.isEnabled()) {
 | 
			
		||||
            this.bukkitPluginManager.enablePlugin(origin)
 | 
			
		||||
        }
 | 
			
		||||
        return this.convert(origin)
 | 
			
		||||
    }
 | 
			
		||||
    disable(name: string): server.NativePlugin {
 | 
			
		||||
        let origin = this.bukkitPluginManager.getPlugin(name)
 | 
			
		||||
        if (!origin) { throw new Error(`Native Plugin ${name} not found.`) }
 | 
			
		||||
        if (origin.isEnabled()) {
 | 
			
		||||
            this.bukkitPluginManager.disablePlugin(origin)
 | 
			
		||||
        }
 | 
			
		||||
        return this.convert(origin)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private convert(plugin: org.bukkit.plugin.Plugin): server.NativePlugin {
 | 
			
		||||
        if (!plugin) return plugin as any
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,9 @@
 | 
			
		||||
import { server, constants } from '@ccms/api'
 | 
			
		||||
import { server } from '@ccms/api'
 | 
			
		||||
import { provideSingleton } from '@ccms/container'
 | 
			
		||||
 | 
			
		||||
import * as reflect from '@ccms/common/dist/reflect'
 | 
			
		||||
import chat from './enhance/chat'
 | 
			
		||||
 | 
			
		||||
let Bukkit: typeof org.bukkit.Bukkit = org.bukkit.Bukkit
 | 
			
		||||
const Bukkit: typeof org.bukkit.Bukkit = Java.type('org.bukkit.Bukkit')
 | 
			
		||||
 | 
			
		||||
@provideSingleton(server.Server)
 | 
			
		||||
export class BukkitServer extends server.ReflectServer {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import { task, plugin } from '@ccms/api'
 | 
			
		||||
import { inject, provideSingleton } from '@ccms/container'
 | 
			
		||||
import { provideSingleton } from '@ccms/container'
 | 
			
		||||
 | 
			
		||||
const Bukkit = Java.type('org.bukkit.Bukkit')
 | 
			
		||||
const BukkitRunnable = Java.type('org.bukkit.scheduler.BukkitRunnable')
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user