feat: 新增案例插件
This commit is contained in:
parent
86d3e74d47
commit
805f26c78e
67
src/main/resources/plugins/HelloWorld.js
Normal file
67
src/main/resources/plugins/HelloWorld.js
Normal 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
|
||||
};
|
148
src/main/resources/plugins/MiaoTag.js
Normal file
148
src/main/resources/plugins/MiaoTag.js
Normal 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
|
||||
};
|
Loading…
Reference in New Issue
Block a user