feat: 调整通用对象封装
This commit is contained in:
		@@ -9,6 +9,5 @@ exports = module.exports = {
 | 
				
			|||||||
    permission: impl('permission'),
 | 
					    permission: impl('permission'),
 | 
				
			||||||
    server: impl('server'),
 | 
					    server: impl('server'),
 | 
				
			||||||
    task: impl('task'),
 | 
					    task: impl('task'),
 | 
				
			||||||
    item: impl('item'),
 | 
					    item: impl('item')
 | 
				
			||||||
    player: impl('player')
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -1,2 +0,0 @@
 | 
				
			|||||||
/*global Java, base, module, exports, require*/
 | 
					 | 
				
			||||||
module.exports = require('./msp.js').player;
 | 
					 | 
				
			||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*global Java, base, module, exports, require*/
 | 
					/*global Java, base, module, exports, require*/
 | 
				
			||||||
var player = require('./player');
 | 
					var player = requireInternal('wrapper/player');
 | 
				
			||||||
module.exports = {
 | 
					module.exports = {
 | 
				
			||||||
    player: player.$
 | 
					    player: player.$
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,12 +1,17 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Bukkit 玩家方法代理类
 | 
				
			||||||
 | 
					 * Created by 蒋天蓓 on 2018/1/5 0009.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
/*global Java, base, module, exports, require*/
 | 
					/*global Java, base, module, exports, require*/
 | 
				
			||||||
 | 
					var ref = require('reflect');
 | 
				
			||||||
var Player = {
 | 
					var Player = {
 | 
				
			||||||
    createNew: function (inner) {
 | 
					    createNew: function createNew(inner) {
 | 
				
			||||||
        var player = {};
 | 
					        var player = {};
 | 
				
			||||||
        player.handler = inner;
 | 
					        player.handler = inner;
 | 
				
			||||||
        player.sendMessage = function (msg) {
 | 
					        player.sendMessage = function (msg) {
 | 
				
			||||||
            this.handler.sendMessage(msg);
 | 
					            this.handler.sendMessage(msg);
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        return player;
 | 
					        return Object.assign(ref.mapToObject(inner), player);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,14 +0,0 @@
 | 
				
			|||||||
/*global Java, base, module, exports, require*/
 | 
					 | 
				
			||||||
var Player = {
 | 
					 | 
				
			||||||
    createNew: function (inner) {
 | 
					 | 
				
			||||||
        var player = {};
 | 
					 | 
				
			||||||
        var Text = Java.type('org.spongepowered.api.text.Text');
 | 
					 | 
				
			||||||
        player.handler = inner;
 | 
					 | 
				
			||||||
        player.sendMessage = function (msg) {
 | 
					 | 
				
			||||||
            this.handler.sendMessage(Text.of(msg));
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        return player;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
exports.$ = Player.createNew;
 | 
					 | 
				
			||||||
							
								
								
									
										19
									
								
								src/main/resources/internal/sponge/wrapper/player.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/main/resources/internal/sponge/wrapper/player.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Sponge 玩家方法代理类
 | 
				
			||||||
 | 
					 * Created by 蒋天蓓 on 2018/1/5 0009.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					/*global Java, base, module, exports, require*/
 | 
				
			||||||
 | 
					var ref = require('reflect');
 | 
				
			||||||
 | 
					var Text = Java.type('org.spongepowered.api.text.Text');
 | 
				
			||||||
 | 
					var Player = {
 | 
				
			||||||
 | 
					    createNew: function createNew(inner) {
 | 
				
			||||||
 | 
					        var player = {};
 | 
				
			||||||
 | 
					        player.handler = inner;
 | 
				
			||||||
 | 
					        player.sendMessage = function (msg) {
 | 
				
			||||||
 | 
					            this.handler.sendMessage(Text.of(msg));
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        return Object.assign(ref.mapToObject(inner), player);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exports.$ = Player.createNew;
 | 
				
			||||||
@@ -33,26 +33,10 @@ function Reflect(obj) {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.method = function (name, clazzs) {
 | 
					 | 
				
			||||||
        try {
 | 
					 | 
				
			||||||
            return this.class.getMethod(name, clazzs);
 | 
					 | 
				
			||||||
        } catch (ex) {
 | 
					 | 
				
			||||||
            return this.class.getDeclaredMethod(name, clazzs);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    this.cacheMethod = function (name, clazzs) {
 | 
					 | 
				
			||||||
        var mkey = this.class.name + '.' + name + ':' + clazzs.join(':');
 | 
					 | 
				
			||||||
        if (!methodCache[mkey]) {
 | 
					 | 
				
			||||||
            methodCache[mkey] = this.method(name, clazzs);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return methodCache[mkey];
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    this.call = function () {
 | 
					    this.call = function () {
 | 
				
			||||||
        var name = arguments[0];
 | 
					        var name = arguments[0];
 | 
				
			||||||
        var params = Array.prototype.slice.call(arguments, 1);
 | 
					        var params = Array.prototype.slice.call(arguments, 1);
 | 
				
			||||||
        var method = this.cacheMethod(name, types(params));
 | 
					        var method = declaredMethod(this.class, name, types(params));
 | 
				
			||||||
        return on(method.invoke(this.get(), params));
 | 
					        return on(method.invoke(this.get(), params));
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -61,11 +45,7 @@ function Reflect(obj) {
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.set = function (name, value) {
 | 
					    this.set = function (name, value) {
 | 
				
			||||||
        try {
 | 
					        accessible(declaredField(this.class, name)).set(this.obj, value);
 | 
				
			||||||
            this.class.getField(name).set(this.obj, value);
 | 
					 | 
				
			||||||
        } catch (ex) {
 | 
					 | 
				
			||||||
            accessible(this.class.getDeclaredField(name)).set(this.obj, value);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return this;
 | 
					        return this;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -132,9 +112,74 @@ function declaredField(clazz, name) {
 | 
				
			|||||||
    return field;
 | 
					    return field;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function declaredMethod(clazz, name, clazzs) {
 | 
				
			||||||
 | 
					    var mkey = clazz.name + '.' + name + ':' + (clazzs || []).join(':');
 | 
				
			||||||
 | 
					    if (!methodCache[mkey]) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            methodCache[mkey] = clazz.getMethod(name, clazzs);
 | 
				
			||||||
 | 
					        } catch (ex) {
 | 
				
			||||||
 | 
					            methodCache[mkey] = clazz.getDeclaredMethod(name, clazzs);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return methodCache[mkey];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function declaredMethod(clazz, name, clazzs) {
 | 
				
			||||||
 | 
					    var mkey = clazz.name + '.' + name + ':' + (clazzs || []).join(':');
 | 
				
			||||||
 | 
					    if (!methodCache[mkey]) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            methodCache[mkey] = clazz.getMethod(name, clazzs);
 | 
				
			||||||
 | 
					        } catch (ex) {
 | 
				
			||||||
 | 
					            methodCache[mkey] = clazz.getDeclaredMethod(name, clazzs);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return methodCache[mkey];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function declaredMethods(clazz) {
 | 
				
			||||||
 | 
					    return clazz.declaredMethods;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var classMethodsCache = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function mapToObject(javaObj) {
 | 
				
			||||||
 | 
					    if (!javaObj || !javaObj.class) { throw new TypeError('参数 %s 不是一个Java对象!'.format(javaObj)) }
 | 
				
			||||||
 | 
					    var target = {};
 | 
				
			||||||
 | 
					    getJavaObjectMethods(javaObj).forEach(function proxyMethod(t){ mapMethod(target, javaObj, t) })
 | 
				
			||||||
 | 
					    return target;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function getJavaObjectMethods(javaObj) {
 | 
				
			||||||
 | 
					    var className = javaObj.class.name
 | 
				
			||||||
 | 
					    if (!classMethodsCache[className]) {
 | 
				
			||||||
 | 
					        var names = [];
 | 
				
			||||||
 | 
					        var methods = javaObj.class.methods;
 | 
				
			||||||
 | 
					        for (var i in methods){
 | 
				
			||||||
 | 
					            names.push(methods[i].name);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        classMethodsCache[className] = names;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return classMethodsCache[className];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function mapMethod (target, source, name) {
 | 
				
			||||||
 | 
					    target[name] = function __SimpleDynamicMethod__() {
 | 
				
			||||||
 | 
					        if (arguments.length > 0) {
 | 
				
			||||||
 | 
					            return source[name](Array.prototype.slice.call(arguments));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            return source[name]();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function on(obj) {
 | 
					function on(obj) {
 | 
				
			||||||
 | 
					    if (!obj || !obj.class) { throw new TypeError('参数 %s 不是一个Java对象!'.format(obj)) }
 | 
				
			||||||
    return new Reflect(obj);
 | 
					    return new Reflect(obj);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exports.on = on;
 | 
					exports = module.exports = {
 | 
				
			||||||
exports.accessible = accessible;
 | 
					    on: on,
 | 
				
			||||||
 | 
					    accessible: accessible,
 | 
				
			||||||
 | 
					    declaredMethods: declaredMethods,
 | 
				
			||||||
 | 
					    mapToObject: mapToObject
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user