feat: 新增MiaoBoard插件
This commit is contained in:
parent
5ea78a60e5
commit
8e2e2bca82
198
src/main/resources/plugins/MiaoBoard.js
Normal file
198
src/main/resources/plugins/MiaoBoard.js
Normal file
@ -0,0 +1,198 @@
|
||||
'use strict';
|
||||
/**
|
||||
* MiaoBoard 喵式聊天插件
|
||||
*/
|
||||
/*global Java, base, module, exports, require*/
|
||||
var task = require('api/task');
|
||||
var event = require('api/event');
|
||||
var server = require('api/server');
|
||||
var command = require('api/command');
|
||||
|
||||
var papi = require('papi');
|
||||
|
||||
var Scoreboard = Java.type('org.spongepowered.api.scoreboard.Scoreboard');
|
||||
var Objective = Java.type('org.spongepowered.api.scoreboard.objective.Objective');
|
||||
var Criteria = Java.type('org.spongepowered.api.scoreboard.critieria.Criteria');
|
||||
var Text = Java.type('org.spongepowered.api.text.Text');
|
||||
var DisplaySlots = Java.type('org.spongepowered.api.scoreboard.displayslot.DisplaySlots');
|
||||
|
||||
var Player;
|
||||
|
||||
var boards = [];
|
||||
|
||||
var description = {
|
||||
name: 'MiaoBoard',
|
||||
version: '1.0',
|
||||
author: '喵呜',
|
||||
commands: {
|
||||
'mboard': {
|
||||
description: '喵式记分板主命令'
|
||||
}
|
||||
},
|
||||
permissions: {
|
||||
'mb.default': {
|
||||
default: true,
|
||||
description: '默认权限 赋予玩家'
|
||||
},
|
||||
'mb.admin': {
|
||||
default: false,
|
||||
description: '管理权限'
|
||||
}
|
||||
},
|
||||
config: {
|
||||
"Version": 2,
|
||||
"UpdateTime": 10,
|
||||
"DisableWorld": [
|
||||
"WorldName"
|
||||
],
|
||||
"Boards": {
|
||||
"default": {
|
||||
"index": 50,
|
||||
"time": {
|
||||
"start": "2016-01-01 00:00:00",
|
||||
"end": "2020-01-01 00:00:00"
|
||||
},
|
||||
"title": "玩家信息",
|
||||
"permission": "mb.default",
|
||||
"lines": [
|
||||
"&6名 称: &a%player_displayname%",
|
||||
"&6世 界: &b%player_world%",
|
||||
"&6位 置: &3%player_x%,%player_y%,%player_z%",
|
||||
"&6等 级: &e%player_level%",
|
||||
"&6血 量: &c%player_health%",
|
||||
"&6饥 饿: &d%player_food_level%",
|
||||
"&6模 式: &4%player_gamemode%"
|
||||
]
|
||||
},
|
||||
"admin": {
|
||||
"index": 49,
|
||||
"title": "服务器信息",
|
||||
"permission": "mb.reload",
|
||||
"lines": [
|
||||
"&6名 称: &aMiaoBoard",
|
||||
"&6版 本: &b" + this.version,
|
||||
"&6作 者: &cMiaoWoo",
|
||||
"&6人 数: &c%server_online%/%server_max%",
|
||||
"&6内 存: &a%server_ram_used%/%server_ram_total%/%server_ram_max%"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var update_task;
|
||||
var board_formats;
|
||||
|
||||
function load() {
|
||||
board_formats = self.config.Boards;
|
||||
}
|
||||
|
||||
function enable() {
|
||||
registerCommand();
|
||||
registerEvent();
|
||||
registerTask();
|
||||
server.players(function (player) {
|
||||
boards[player.name] = new MiaoBoard(player);
|
||||
})
|
||||
}
|
||||
|
||||
function registerCommand() {
|
||||
command.on(self, 'mboard', {
|
||||
cmd: mainCommand
|
||||
});
|
||||
}
|
||||
|
||||
function mainCommand(sender, command, args) {
|
||||
boards[sender.name].update('MiaoBoard', ['第一行', '第二行', '第三行']);
|
||||
}
|
||||
|
||||
function registerEvent() {
|
||||
switch (DetectServerType) {
|
||||
case ServerType.Bukkit:
|
||||
event.on(self, 'PlayerLoginEvent', handlerPlayerJoin);
|
||||
break;
|
||||
case ServerType.Sponge:
|
||||
Player = org.spongepowered.api.entity.living.player.Player;
|
||||
event.on(self, 'ClientConnectionEvent.Join', handlerPlayerJoin);
|
||||
event.on(self, 'ClientConnectionEvent.Disconnect', handlerPlayerQuit);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function handlerPlayerJoin(event) {
|
||||
var player = event.player || event.targetEntity;
|
||||
boards[player.name] = new MiaoBoard(player);
|
||||
}
|
||||
|
||||
function handlerPlayerQuit(event) {
|
||||
var player = event.player || event.targetEntity;
|
||||
delete boards[player.name];
|
||||
}
|
||||
|
||||
function registerTask() {
|
||||
update_task = task.timerAsync(updateBoard, self.config.UpdateTime);
|
||||
}
|
||||
|
||||
function updateBoard() {
|
||||
for (var i in boards) {
|
||||
var player = server.player(i);
|
||||
if (player.isOnline()) {
|
||||
var format = getBoardFormat(player);
|
||||
if (format) {
|
||||
boards[i].update(format.title, papi.replace(player, format.lines));
|
||||
} else {
|
||||
boards[i].clear();
|
||||
}
|
||||
} else {
|
||||
delete boards[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getBoardFormat(player) {
|
||||
for (var i in board_formats) {
|
||||
var format = board_formats[i];
|
||||
if (player.hasPermission(format.permission)) {
|
||||
return format;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function disable() {
|
||||
update_task.cancel();
|
||||
}
|
||||
|
||||
function MiaoBoard(player) {
|
||||
var uuid = player.uniqueId;
|
||||
var scoreboard = Scoreboard.builder().build();
|
||||
var sidebar = Objective.builder().criterion(Criteria.DUMMY).displayName(Text.EMPTY).name("Sidebar").build();
|
||||
var origin = [];
|
||||
|
||||
scoreboard.addObjective(sidebar);
|
||||
player.setScoreboard(scoreboard);
|
||||
|
||||
this.update = function (title, lines) {
|
||||
sidebar.scores.values().forEach(function removeScore(score) {
|
||||
sidebar.removeScore(score)
|
||||
})
|
||||
var max = lines.length;
|
||||
var i = 0;
|
||||
sidebar.setDisplayName(Text.of(title));
|
||||
lines.forEach(function addScore(line) {
|
||||
sidebar.getOrCreateScore(Text.of(line)).setScore(max - i++);
|
||||
})
|
||||
scoreboard.updateDisplaySlot(sidebar, DisplaySlots.SIDEBAR);
|
||||
}
|
||||
|
||||
this.clear = function () {
|
||||
player.setScoreboard(Scoreboard.builder().build());
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
description: description,
|
||||
load: load,
|
||||
enable: enable,
|
||||
disable: disable
|
||||
};
|
Loading…
Reference in New Issue
Block a user