MiaoScript/src/main/resources/dev-plugins/bukkit/Lottery.js

231 lines
6.9 KiB
JavaScript

'use strict';
/**
* Hello Wrold 测试插件
*/
/*global Java, base, module, exports, require*/
var event = require('api/event');
var command = require('api/command');
var bukkit = require('api/server');
var item = require('api/item');
var Arrays = Java.type('java.util.Arrays');
var ItemStackArray = Java.type('org.bukkit.inventory.ItemStack[]');
var PANE = 'STAINED_GLASS_PANE'
var description = {
name: 'Lottery',
version: '1.0',
author: 'MiaoWoo',
commands: {
'lottery': {
description: 'Lottery主命令'
}
},
config: {
title: '§m§s§a幸运抽奖',
control: {
panel: PANE + ':13',
ok: PANE + ':14',
no: PANE + ':15',
},
list: [
{
box: {
id: PANE,
damage: 1,
name: '§a箱子',
lore: [
'这是箱子的Lore'
]
},
key: {
id: PANE,
damage: 2,
name: '§b钥匙',
lore: [
'这是钥匙的Lore'
]
},
result: [
{
percent: 10,
command: 'money give %player% 100',
item: {
id: PANE,
damage: 3,
name: '§c奖品1',
lore: [
'这是奖品1的Lore'
]
}
},
{
percent: 20,
command: 'money give %player% 200',
item: {
id: PANE,
damage: 4,
name: '§c奖品2',
lore: [
'这是奖品2的Lore'
]
}
}
]
}
]
}
};
var panel;
var config;
var items;
function load() {
config = this.config;
panel = newItemFromString(config.control.panel || PANE + ':13')
items = new ItemStackArray(54);
item.setName(panel, '');
var ok = newItemFromString(config.control.ok || PANE + ':14')
item.setName(ok, '§a确定抽奖');
var no = newItemFromString(config.control.no || PANE + ':15')
item.setName(no, '§c取消抽奖');
Arrays.fill(items, 0, 10, panel);
Arrays.fill(items, 11, 16, panel);
Arrays.fill(items, 17, 29, panel);
items[29] = no;
Arrays.fill(items, 30, 33, panel);
items[33] = ok;
Arrays.fill(items, 34, 40, panel);
Arrays.fill(items, 41, 54, panel);
}
function isTargetItem(item, config) {
return item.typeId === config.id &&
item.itemMeta &&
item.itemMeta.displayName === config.name &&
item.itemMeta.lore && Java.from(item.itemMeta.lore).toJson() === config.lore.toJson()
}
function newItem(name, sub) {
return item.create(name, 1, sub || 0);
}
function newItemFromString(str) {
var arr = str.split(':');
if (arr.length === 2) {
return newItem(arr[0], arr[1]);
} else {
return newItem(arr[0]);
}
}
function newItemFromConfig(config) {
var i = newItem(config.id, config.damage);
if (config.name) item.setName(i, config.name);
if (config.lore) item.setLore(i, config.lore);
return i;
}
function enable() {
// noinspection JSUnusedLocalSymbols
command.on(this, 'l', {
cmd: function(sender, command, args) {
sender.inventory.addItem(newItemFromConfig(config.list[0].box))
sender.inventory.addItem(newItemFromConfig(config.list[0].key))
if (!sender.openInventory) {
console.sender(sender, "§4当前用户无法使用该命令!");
}
var inv = MServer.createInventory(null, 54, config.title);
inv.setContents(items);
sender.openInventory(inv);
return true;
}
});
event.on(this, 'InventoryClick', function click(event) {
var inv = event.inventory;
if (inv && inv.title !== config.title) return;
var player = event.whoClicked;
var slot = event.rawSlot;
if (slot > 53 || slot < 0) {
return;
}
event.cancelled = true;
switch (slot) {
case 10:
case 16:
case 40:
event.cancelled = false;
break;
case 29:
// TODO 关闭界面
player.closeInventory();
break;
case 33:
var temp = inv.getItem(40);
if (temp && temp.typeId !== 0) {
console.sender(player, '§c请先取走奖品!');
return;
}
var litem;
var box = inv.getItem(10);
if (!box) {
console.sender(player, '§c请先放入抽奖物品和钥匙!');
return;
}
var key = inv.getItem(16);
if (box && box.typeId !== 0 && key && key.typeId !== 0) {
for (var i = 0; i < config.list.length; i++) {
var r = config.list[i];
if (isTargetItem(box, r.box)) {
litem = r;
break;
}
}
}
// TODO 抽奖
if (!litem) {
console.sender(player, '§c请先放入抽奖物品和钥匙!');
return;
}
if (!isTargetItem(key, litem.key)) {
console.sender(player, '§c抽奖物品和钥匙不匹配!');
return;
}
var resultList = [];
litem.result.forEach(function(t) {
for (var i = 0; i < t.percent; i++) {
resultList.push(t);
}
});
var ri = random(resultList.length);
var result = resultList[ri];
box.amount = box.amount - 1;
key.amount = key.amount - 1;
inv.setItem(10, box);
inv.setItem(16, key);
inv.setItem(40, newItemFromConfig(result.item));
bukkit.console(result.command.replace('%player%', player.name));
break;
default:
event.cancelled = true;
}
});
}
function random(max, min) {
min = min === undefined ? 0 : min;
return Math.floor(Math.random() * (max - min) + min);
};
function disable() {
}
module.exports = {
description: description,
load: load,
enable: enable,
disable: disable
};