feat: 新增案例插件

This commit is contained in:
coding 2017-10-23 07:19:26 +00:00
parent 86d3e74d47
commit 805f26c78e
2 changed files with 215 additions and 0 deletions

View File

@ -0,0 +1,67 @@
'use strict';
/**
* Hello Wrold 测试插件
*/
/*global Java, base, module, exports, require*/
var event = require('modules/event');
var command = require('modules/command');
var papi = require('./ext/papi');
var join;
var description = {
name: 'HelloWorld',
version: '1.0',
//commands: {
// 'hello': {
// description: 'HelloWorld主命令'
// }
//}
};
function load() {
console.log('载入 Hello Wrold 测试插件!');
}
function enable() {
command.on(this, 'hello', {
cmd: function (sender, command, args) {
console.log(command, Array.prototype.join.call(args, ' '));
return true;
},
tab: function (sender, command, args) {
switch (args.length) {
case 1:
return "arg1";
case 2:
return "arg2";
case 3:
return "arg3";
default:
return 'default';
}
}
});
console.log('启用 Hello Wrold 测试插件!');
join = event.on(this, 'playerloginevent', function join(event) {
// noinspection JSUnresolvedVariable
console.debug('玩家', event.player.name, "触发事件", event.name);
setTimeout(function () {
// noinspection JSUnresolvedVariable
event.player.sendMessage(papi.$(event.player, "§a欢迎来到 §bMiaoScript §a的世界! 当前在线: %server_online%"));
}, 10);
});
}
function disable() {
console.log('卸载 Hello Wrold 测试插件!');
// 可以不用关闭事件 程序将自动处理
// event.off(join);
}
module.exports = {
description: description,
load: load,
enable: enable,
disable: disable
};

View File

@ -0,0 +1,148 @@
'use strict';
/**
* MiaoTag
* 可兼容任何记分板
*/
/*global Java, base, module, exports, require*/
var fs = require('core/fs');
var event = require('modules/event');
var bukkit = require('modules/bukkit');
var command = require('modules/command');
var papi = require('plugins/ext/papi');
var fakeTag;
var description = {
name: 'MiaoTag',
version: '1.0.1',
author: '喵♂呜',
config: {
update: 20,
format: '§4§l❤'
},
commands: {
'mtag': {
description: 'MiaoTag主命令',
usage: '',
permission: 'MiaoTag.admin',
}
},
permissions: {
'MiaoTag.default': {
default: true,
description: '默认权限 赋予玩家'
},
'MiaoTag.admin': {
default: false,
description: '管理权限'
}
}
};
var config;
function load() {
config = self.getConfig();
fakeTag = new FakeTag(config.format);
}
function enable() {
command.on(self, 'mtag', {
cmd: function cmd (sender, command, args){
var subcommand = args[0];
switch (subcommand) {
case 'reload':
self.reloadConfig();
break;
case 'test':
// var IllegalStateException = Java.type("java.lang.IllegalStateException");
// throw new IllegalStateException('TEST');
throw new TypeError('TEST');
}
},
tab: function tab (sender, command, args){
return ['reload'];
}
})
bukkit.players(function (p) fakeTag.set(p));
event.on(self, 'PlayerJoin', function (event) fakeTag.set(event.player));
event.on(self, 'EntityDamage', function (event) {
var player = event.entity;
if(player instanceof org.bukkit.entity.Player){
setTimeout(function () {
fakeTag.update(player);
}, 1);
}
}, false);
//event.on(this, 'playerquitevent', function quit(event) removeTask(event.player));
}
function disable() {
fakeTag.disable();
}
function FakeTag(name) {
// NMS CLASS
var Scoreboard = bukkit.nmsCls('Scoreboard');
var ScoreboardScore = bukkit.nmsCls('ScoreboardScore');
var ScoreboardBaseCriteria = bukkit.nmsCls('ScoreboardBaseCriteria');
var PacketPlayOutScoreboardScore = bukkit.nmsCls('PacketPlayOutScoreboardScore');
var PacketPlayOutScoreboardObjective = bukkit.nmsCls('PacketPlayOutScoreboardObjective');
var PacketPlayOutScoreboardDisplayObjective = bukkit.nmsCls('PacketPlayOutScoreboardDisplayObjective');
var scoreboardManager = bukkit.$.scoreboardManager;
var mainScoreboard = scoreboardManager.mainScoreboard.handle;
try {
// 注册tag对象
mainScoreboard.registerObjective(name, new ScoreboardBaseCriteria(name));
} catch (ex){
// ignore 忽略创建错误 eg: java.lang.IllegalArgumentException: An objective with the name 'xxxxx' already exists!
}
var objective = mainScoreboard.getObjective(name);
// 缓存虚拟的tag包
var cache = {
objective: new PacketPlayOutScoreboardObjective(objective, 0),
display: new PacketPlayOutScoreboardDisplayObjective(2, objective)
};
function sendPacket(player, p) {
player.handle.playerConnection.sendPacket(p);
}
this.set = function (player) {
sendPacket(player, cache.objective);
sendPacket(player, cache.display);
this.update(player);
}
this.update = function (player){
var score = mainScoreboard.getPlayerScoreForObjective(player.name, objective);
score.setScore(player.getHealth());
var scorePack = new PacketPlayOutScoreboardScore(score);
//把其他玩家缓存的包发给这个玩家
bukkit.players(function (t) {
sendPacket(t, scorePack);
if (t.name != player.name) {
var outher = mainScoreboard.getPlayerScoreForObjective(t.name, objective);
outher.setScore(t.getHealth());
sendPacket(player, new PacketPlayOutScoreboardScore(outher));
}
});
}
this.disable = function (){
// 注销tag对象
mainScoreboard.unregisterObjective(objective);
}
}
module.exports = {
description: description,
load: load,
enable: enable,
disable: disable
};