Package com.sk89q.commandbook.kits

Source Code of com.sk89q.commandbook.kits.KitsComponent$Commands

/*
* CommandBook
* Copyright (C) 2011 sk89q <http://www.sk89q.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package com.sk89q.commandbook.kits;

import com.google.common.collect.Lists;
import com.sk89q.commandbook.CommandBook;
import com.sk89q.commandbook.util.ChatUtil;
import com.sk89q.commandbook.util.InputUtil;
import com.sk89q.commandbook.util.entity.player.PlayerUtil;
import com.sk89q.minecraft.util.commands.Command;
import com.sk89q.minecraft.util.commands.CommandContext;
import com.sk89q.minecraft.util.commands.CommandException;
import com.zachsthings.libcomponents.ComponentInformation;
import com.zachsthings.libcomponents.bukkit.BukkitComponent;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import java.io.File;
import java.util.Map;
import java.util.Map.Entry;

@ComponentInformation(friendlyName = "Kits", desc = "Distributes kits to players on command (with cooldowns)")
public class KitsComponent extends BukkitComponent implements Listener {
    private KitManager kits;

    @Override
    public void enable() {
        CommandBook.inst().createDefaultConfiguration("kits.txt");

        // Setup kits
        kits = new FlatFileKitsManager(new File(CommandBook.inst().getDataFolder(), "kits.txt"));
        kits.load();

        CommandBook.server().getScheduler().scheduleAsyncRepeatingTask(
                CommandBook.inst(), new GarbageCollector(this),
                GarbageCollector.CHECK_FREQUENCY, GarbageCollector.CHECK_FREQUENCY);
        registerCommands(Commands.class);
        CommandBook.registerEvents(this);
    }

    @Override
    public void reload() {
        super.reload();
        kits.load();
    }

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
        Player player = event.getPlayer();

        if (!player.hasPlayedBefore()) {
            for (Entry<String, Kit> map : kits.getKits().entrySet()) {
                if (CommandBook.inst().hasPermission(player, "commandbook.kits.onfirstlogin." + map.getKey())) {
                    map.getValue().distribute(player);
                }
            }
        }
    }

    /**
     * Return the kit manager.
     *
     * @return the kit manager currently active
     */
    public KitManager getKitManager() {
        return kits;
    }

    public class Commands {

        @Command(aliases = {"kit"}, usage = "<id> [target]", desc = "Get a kit", flags = "", min = 0, max = 2)
        public void kit(CommandContext args, CommandSender sender) throws CommandException {
            // List kits
            if (args.argsLength() == 0) {
                CommandBook.inst().checkPermission(sender, "commandbook.kit.list");

                Map<String, Kit> kits = getKitManager().getKits();

                if (kits.size() == 0) {
                    throw new CommandException("No kits are configured.");
                }

                StringBuilder str = new StringBuilder();
                int count = 0;

                for (String id : kits.keySet()) {
                    if (!CommandBook.inst().hasPermission(sender,
                            "commandbook.kit.kits." + id.replace(".", ""))) {
                        continue;
                    }

                    if (str.length() != 0) {
                        str.append(", ");
                    }

                    str.append(id);
                    count++;
                }

                if (count == 0) {
                    throw new CommandException("You have access to no kits.");
                }

                sender.sendMessage(ChatColor.YELLOW + "Kits (" + count + "): "
                        + ChatColor.WHITE + str.toString());
                sender.sendMessage(ChatColor.YELLOW + "Use /kit kitname to get a kit.");

            // Give a kit
            } else {
                Iterable<Player> targets;
                String id = args.getString(0).toLowerCase();
                boolean included = false;

                if (args.argsLength() == 2) {
                    targets = InputUtil.PlayerParser.matchPlayers(sender, args.getString(1));
                } else {
                    targets = Lists.newArrayList(PlayerUtil.checkPlayer(sender));
                }

                for (Player player : targets) {
                    if (player != sender) {
                        // Check permissions!
                        CommandBook.inst().checkPermission(sender, "commandbook.kit.other");
                    }
                }

                Kit kit = getKitManager().getKit(id);

                if (kit == null) {
                    throw new CommandException("No kit by that name exists.");
                }

                CommandBook.inst().checkPermission(sender, "commandbook.kit.kits." + id.replace(".", ""));

                for (Player player : targets) {
                    boolean success = kit.distribute(player);

                    // Tell the user
                    if (player.equals(sender)) {
                        if (success) {
                            player.sendMessage(ChatColor.YELLOW + "Kit '" + id + "' given!");
                        } else {
                            player.sendMessage(ChatColor.RED + "You have to wait before you can get this kit again.");
                        }

                        included = true;
                    } else {
                        if (success) {
                            player.sendMessage(ChatColor.YELLOW + "You've been given " +
                                    "the '" + id + "' kit by "
                                    + ChatUtil.toColoredName(sender, ChatColor.YELLOW) + ".");
                        } else {
                            player.sendMessage(ChatColor.RED + "A kit could not be given to you because it has been too soon.");
                        }

                    }
                }

                // The player didn't receive any items, then we need to send the
                // user a message so s/he know that something is indeed working
                if (!included) {
                    sender.sendMessage(ChatColor.YELLOW + "Kits given.");
                }
            }
        }
    }
}
TOP

Related Classes of com.sk89q.commandbook.kits.KitsComponent$Commands

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.