feat: 调整通用对象封装
This commit is contained in:
parent
74946d23fd
commit
e0a293823c
@ -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
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user