/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.royaldev.royalcommands.rcommands; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.royaldev.royalcommands.Config; import org.royaldev.royalcommands.MessageColor; import org.royaldev.royalcommands.RUtils; import org.royaldev.royalcommands.RoyalCommands; import org.royaldev.royalcommands.rcommands.kits.Kit; import org.royaldev.royalcommands.shaded.com.sk89q.util.config.ConfigurationNode; import org.royaldev.royalcommands.shaded.com.sk89q.util.config.FancyConfiguration; import org.royaldev.royalcommands.wrappers.player.MemoryRPlayer; import org.royaldev.royalcommands.wrappers.player.RPlayer; import java.util.ArrayList; import java.util.List; import java.util.Map; @ReflectCommand public class CmdKit extends TabCommand { public CmdKit(final RoyalCommands instance, final String name) { super(instance, name, true, new Short[]{CompletionType.LIST.getShort()}); } @Override public List<String> customList(CommandSender cs, Command cmd, String label, String[] args, String arg) { final List<String> kits = new ArrayList<>(); final FileConfiguration c = this.plugin.getConfig(); if (!c.isSet("kits") || !c.isSet("kits.list")) return kits; for (final String kit : c.getConfigurationSection("kits.list").getKeys(false)) { if (Config.kitPerms && !this.ah.isAuthorized(cs, "rcmds.kit." + kit)) continue; kits.add(kit); } return kits; } @Override public boolean runCommand(final CommandSender cs, final Command cmd, final String label, final String[] eargs, final CommandArguments ca) { if (eargs.length < 1) { cs.sendMessage(cmd.getDescription()); return false; } if (!(cs instanceof Player)) { cs.sendMessage(MessageColor.NEGATIVE + "This command is only available to players!"); return true; } final Player p = (Player) cs; final RPlayer rp = MemoryRPlayer.getRPlayer(p); final String kitName = eargs[0]; final FancyConfiguration config = this.plugin.getFancyConfig(); final ConfigurationNode kitNode = config.getNode("kits.list." + kitName); if (kitNode == null) { cs.sendMessage(MessageColor.NEGATIVE + "No such kit!"); return true; } final Kit kit = new Kit(kitName, kitNode); if (Config.kitPerms && !this.ah.isAuthorized(cs, "rcmds.kit." + kit.getName())) { RUtils.dispNoPerms(cs, new String[]{"rcmds.kit." + kit.getName()}); return true; } if (!kit.hasCooldownPassedFor(rp)) { if (kit.getCooldown() == -1L) { cs.sendMessage(MessageColor.NEGATIVE + "This kit can only be used once."); } else { cs.sendMessage(MessageColor.NEGATIVE + "The cooldown for this kit has not ended. You still have to wait" + MessageColor.NEUTRAL + RUtils.formatDateDiff(kit.getCooldownFor(rp)) + MessageColor.NEGATIVE + "."); } return true; } final List<ItemStack> items = kit.getItems(); final Map<Integer, ItemStack> leftOver = p.getInventory().addItem(items.toArray(new ItemStack[items.size()])); for (final ItemStack is : leftOver.values()) { p.getWorld().dropItemNaturally(p.getLocation(), is); } kit.setLastUsed(rp, System.currentTimeMillis()); cs.sendMessage(MessageColor.POSITIVE + "You have been given kit " + MessageColor.NEUTRAL + kit.getName() + MessageColor.POSITIVE + "."); return true; } }