public void performCommandItems(ItemStack item, final Player player, final Event event) {
if (event != null && !EventUtil.passesFilter(event))
return;
LocalPlayer lplayer = CraftBookPlugin.inst().wrapPlayer(player);
for(CommandItemDefinition def : definitions) {
current: {
if(ItemUtil.areItemsIdentical(def.stack, item)) {
final CommandItemDefinition comdef = def;
if(!comdef.clickType.doesPassType(event)) break current;
if(!comdef.requireSneaking.doesPass(lplayer.isSneaking())) break current;
if(!lplayer.hasPermission("craftbook.mech.commanditems") || comdef.permNode != null && !comdef.permNode.isEmpty() && !lplayer.hasPermission(comdef.permNode)) {
if(CraftBookPlugin.inst().getConfiguration().showPermissionMessages)
lplayer.printError("mech.use-permission");
break current;
}
if(cooldownPeriods.containsKey(new Tuple2<String, String>(lplayer.getName(), comdef.name))) {
if(def.clickType != ClickType.PASSIVE && !def.cooldownMessage.isEmpty())
lplayer.printError(lplayer.translate(def.cooldownMessage).replace("%time%", String.valueOf(cooldownPeriods.get(new Tuple2<String, String>(lplayer.getName(), comdef.name)))));
break current;
}
for(ItemStack stack : def.consumables) {
boolean found = false;
int amount = 0;
for(ItemStack tStack : player.getInventory().getContents()) {
if(ItemUtil.areItemsIdentical(stack, tStack)) {
amount += tStack.getAmount();
if(amount >=stack.getAmount()) {
found = true;
break;
}
}
}
if(!found && !def.missingConsumableMessage.isEmpty()) {
lplayer.printError(lplayer.translate(def.missingConsumableMessage).replace("%item%", stack.getAmount() + " " + stack.getType().name()));
break current;
}
}
for(ItemStack stack : def.consumables) {
boolean found = false;
int amount = stack.getAmount();
for(int i = 0; i < player.getInventory().getContents().length; i++) {
ItemStack tStack = player.getInventory().getContents()[i];
if(ItemUtil.areItemsIdentical(stack, tStack)) {
ItemStack toRemove = tStack.clone();
if(toRemove.getAmount() > amount) {
toRemove.setAmount(toRemove.getAmount() - amount);
player.getInventory().setItem(i, toRemove);
amount = 0;
} else {
amount -= toRemove.getAmount();
player.getInventory().setItem(i, null);
}
if(amount <= 0) {
found = true;
break;
}
}
}
if(!found) {
lplayer.printError("mech.command-items.out-of-sync");
break current;
}
}
if(def.consumeSelf) {
if(player.getItemInHand().getAmount() > 1)
player.getItemInHand().setAmount(player.getItemInHand().getAmount() - 1);
else
player.setItemInHand(null);
}
player.updateInventory();
for(CommandItemAction action : comdef.actions)
if(action.stage == ActionRunStage.BEFORE)
if(!action.runAction(comdef, event, player))
break current;
for(String command : comdef.commands)
doCommand(command, event, comdef, player);
for(CommandItemAction action : comdef.actions)
if(action.stage == ActionRunStage.AFTER)
action.runAction(comdef, event, player);
if(comdef.cooldown > 0 && !lplayer.hasPermission("craftbook.mech.commanditems.bypasscooldown"))
cooldownPeriods.put(new Tuple2<String, String>(lplayer.getName(), comdef.name), comdef.cooldown);
if(comdef.delayedCommands.length > 0)
Bukkit.getScheduler().runTaskLater(CraftBookPlugin.inst(), new Runnable() {
@Override