feat: 调整Event载入提示 完善Bukkit的聊天发送
This commit is contained in:
		@@ -12,6 +12,8 @@ function EventHandlerDefault() {
 | 
			
		||||
    this.listenerMap = [];
 | 
			
		||||
    this.baseEventDir = '';
 | 
			
		||||
 | 
			
		||||
    var self = this;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 扫描包 org.bukkit.event 下的所有事件
 | 
			
		||||
     * 映射简写名称 org.bukkit.event.player.PlayerLoginEvent => playerloginevent
 | 
			
		||||
@@ -40,8 +42,8 @@ function EventHandlerDefault() {
 | 
			
		||||
                            // 继承于 org.bukkit.event.Event 访问符为Public
 | 
			
		||||
                            if (this.isVaildEvent(clz)) {
 | 
			
		||||
                                // noinspection JSUnresolvedVariable
 | 
			
		||||
                                var simpleName = this.class2Name(clz);
 | 
			
		||||
                                console.debug("Mapping Event [%s] => %s".format(clz.name, simpleName));
 | 
			
		||||
                                var simpleName = this.class2Name(clz).toLowerCase();
 | 
			
		||||
                                console.debug("Mapping Event [%s] => %s".format(clz.canonicalName, simpleName));
 | 
			
		||||
                                this.mapEvent[simpleName] = clz;
 | 
			
		||||
                                count++;
 | 
			
		||||
                            }
 | 
			
		||||
@@ -56,11 +58,11 @@ function EventHandlerDefault() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.class2Name = function class2Name(clazz) {
 | 
			
		||||
        return clazz.simpleName.toLowerCase();
 | 
			
		||||
        return clazz.simpleName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.name2Class = function name2Class(name, event) {
 | 
			
		||||
        var eventCls = this.mapEvent[event] || this.mapEvent[event.toLowerCase()] || this.mapEvent[event + 'Event'] || this.mapEvent[event.toLowerCase() + 'event'];
 | 
			
		||||
        var eventCls = this.mapEvent[event.toLowerCase()] || this.mapEvent[event.toLowerCase() + 'event'];
 | 
			
		||||
        if (!eventCls) {
 | 
			
		||||
            try {
 | 
			
		||||
                eventCls = base.getClass(eventCls);
 | 
			
		||||
@@ -128,7 +130,7 @@ function EventHandlerDefault() {
 | 
			
		||||
        if (!listenerMap[name]) listenerMap[name] = [];
 | 
			
		||||
        var offExec = function () {
 | 
			
		||||
            this.unregister(eventCls, listener);
 | 
			
		||||
            console.debug('插件 %s 注销事件 %s'.format(name, eventCls.name.substring(eventCls.name.lastIndexOf(".") + 1)));
 | 
			
		||||
            console.debug('插件 %s 注销事件 %s'.format(name, this.class2Name(eventCls)));
 | 
			
		||||
        }.bind(this);
 | 
			
		||||
        var off = {
 | 
			
		||||
            event: eventCls,
 | 
			
		||||
@@ -137,7 +139,7 @@ function EventHandlerDefault() {
 | 
			
		||||
        };
 | 
			
		||||
        listenerMap[name].push(off);
 | 
			
		||||
        // noinspection JSUnresolvedVariable
 | 
			
		||||
        console.debug('插件 %s 注册事件 %s => %s'.format(name, eventCls.name.substring(eventCls.name.lastIndexOf(".") + 1), exec.name === '' ? '匿名方法' : exec.name));
 | 
			
		||||
        console.debug('插件 %s 注册事件 %s => %s'.format(name, this.class2Name(eventCls), exec.name === '' ? '匿名方法' : exec.name));
 | 
			
		||||
        return off;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -147,9 +149,9 @@ console.info('%s 事件映射完毕 共计 %s 个事件!'.format(DetectServerTyp
 | 
			
		||||
module.exports = {
 | 
			
		||||
    on: EventHandler.listen.bind(EventHandler),
 | 
			
		||||
    disable: function (jsp) {
 | 
			
		||||
        var jspl = EventHandler.listenerMap[jsp.description.name];
 | 
			
		||||
        if (jspl) {
 | 
			
		||||
            jspl.forEach(function (t) t.off.call(EventHandler));
 | 
			
		||||
        var eventCache = EventHandler.listenerMap[jsp.description.name];
 | 
			
		||||
        if (eventCache) {
 | 
			
		||||
            eventCache.forEach(function (t) t.off.call(EventHandler));
 | 
			
		||||
            delete EventHandler.listenerMap[jsp.description.name];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,52 @@
 | 
			
		||||
/*global Java, base, module, exports, require*/
 | 
			
		||||
function json(sender, json) {
 | 
			
		||||
var bukkit = require('api/server');
 | 
			
		||||
 | 
			
		||||
var nmsChatSerializerClass;
 | 
			
		||||
var nmsIChatBaseComponentClass;
 | 
			
		||||
var packetTypeClass;
 | 
			
		||||
var nmsChatMessageTypeClass;
 | 
			
		||||
 | 
			
		||||
var chatMessageTypes;
 | 
			
		||||
 | 
			
		||||
var String = Java.type('java.lang.String');
 | 
			
		||||
 | 
			
		||||
function init () {
 | 
			
		||||
    nmsChatSerializerClass = bukkit.nmsCls(bukkit.nmsVersion.split("_")[1] > 7 ? "IChatBaseComponent$ChatSerializer" : "ChatSerializer");
 | 
			
		||||
    nmsIChatBaseComponentClass = bukkit.nmsCls('IChatBaseComponent');
 | 
			
		||||
    packetTypeClass = bukkit.nmsCls("PacketPlayOutChat");
 | 
			
		||||
    var packetTypeConstructor;
 | 
			
		||||
    Java.from(packetTypeClass.class.constructors).forEach(function (c) {
 | 
			
		||||
        if (c.parameterTypes.length == 2) { packetTypeConstructor = c };
 | 
			
		||||
    })
 | 
			
		||||
    nmsChatMessageTypeClass = packetTypeConstructor.parameterTypes[1];
 | 
			
		||||
    if (nmsChatMessageTypeClass.isEnum()) {
 | 
			
		||||
        chatMessageTypes = nmsChatMessageTypeClass.getEnumConstants();
 | 
			
		||||
    } else {
 | 
			
		||||
        switch (nmsChatMessageTypeClass.name) {
 | 
			
		||||
            case "int":
 | 
			
		||||
                nmsChatMessageTypeClass = java.lang.Integer;
 | 
			
		||||
            case "byte":
 | 
			
		||||
                nmsChatMessageTypeClass = java.lang.Byte;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function json(sender, json) {
 | 
			
		||||
    send(sender, json, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function send(sender, json, type) {
 | 
			
		||||
    var serialized = nmsChatSerializerClass.a(json)
 | 
			
		||||
    var typeObj = chatMessageTypes == null ? nmsChatMessageTypeClass.valueOf(String.valueOf(type)) : chatMessageTypes[type];
 | 
			
		||||
    sendPacket(sender, new packetTypeClass(serialized, typeObj))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sendPacket(player, p) {
 | 
			
		||||
    player.handle.playerConnection.sendPacket(p);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
init();
 | 
			
		||||
 | 
			
		||||
exports = module.exports = {
 | 
			
		||||
    json: json
 | 
			
		||||
};
 | 
			
		||||
@@ -19,6 +19,12 @@ exports.nmsVersion = Bukkit.server.class.name.split('.')[3];
 | 
			
		||||
exports.nmsCls = function (name) {
 | 
			
		||||
    return Java.type(['net.minecraft.server', exports.nmsVersion, name].join('.'));
 | 
			
		||||
};
 | 
			
		||||
/**
 | 
			
		||||
 * 获取OBC类
 | 
			
		||||
 */
 | 
			
		||||
exports.obcCls = function (name) {
 | 
			
		||||
    return Java.type(['org.bukkit.craftbukkit', exports.nmsVersion, name].join('.'));
 | 
			
		||||
};
 | 
			
		||||
/**
 | 
			
		||||
 * 获取玩家
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ function isVaildEvent(clz) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function class2Name(clazz) {
 | 
			
		||||
    return clazz.name.substring(clazz.name.lastIndexOf(".") + 1).replace(/\$/g, '.').toLowerCase();
 | 
			
		||||
    return clazz.canonicalName.substring(clazz.name.lastIndexOf(".") + 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function register(eventCls, exec, priority, ignoreCancel) {
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ exports.plugin = {
 | 
			
		||||
     * @returns {*}
 | 
			
		||||
     */
 | 
			
		||||
    get: function (name) {
 | 
			
		||||
        return PluginManager.getPlugin(name);
 | 
			
		||||
        return PluginManager.getPlugin(name).orElse(undefined);
 | 
			
		||||
    },
 | 
			
		||||
    /**
 | 
			
		||||
     * 载入插件 并且返回结果
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user