Package com.sk89q.commandbook

Source Code of com.sk89q.commandbook.PlayerComponent$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;

import com.google.common.collect.Lists;
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.sk89q.minecraft.util.commands.CommandPermissions;
import com.zachsthings.libcomponents.ComponentInformation;
import com.zachsthings.libcomponents.bukkit.BukkitComponent;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

@ComponentInformation(friendlyName = "Player Commands", desc = "Various player-related commands.")
public class PlayerComponent extends BukkitComponent {
    @Override
    public void enable() {
        registerCommands(Commands.class);
    }

    public class Commands {
        @Command(aliases = {"gamemode", "gm"},
                usage = "[player] [gamemode]", desc = "Change a player's gamemode",
                flags = "c", min = 0, max = 2)
        public void gamemode(CommandContext args, CommandSender sender) throws CommandException {

            Player player;
            GameMode mode = null;
            boolean change = false;

            if (args.argsLength() == 0) { // check self
                // check current player
                player = PlayerUtil.checkPlayer(sender);
                mode = player.getGameMode();
            } else {
                if (args.hasFlag('c')) { //check other player
                    player = InputUtil.PlayerParser.matchSinglePlayer(sender, args.getString(0));
                    mode = player.getGameMode();
                } else {
                    change = true;

                    // we're going to assume that the first arg of one is mode, but the first of two is player
                    // if they want to check another player, they should use -c instead, since we can't guess
                    // reliably whether (with a single arg) they meant a player or a mode
                    String modeString;
                    if (args.argsLength() == 1) { // self mode
                        modeString = args.getString(0);
                        player = PlayerUtil.checkPlayer(sender);
                    } else { // 2 - first is player, second mode
                        // HERP DERP VANILLA COMMAND BLOCKS
                        try {
                            modeString = String.valueOf(args.getInteger(0));
                            player = InputUtil.PlayerParser.matchSinglePlayer(sender, args.getString(1));
                        } catch (NumberFormatException e) {
                            // NOPE NOT VANILLA COMMAND BLOCKS
                            player = InputUtil.PlayerParser.matchSinglePlayer(sender, args.getString(0));
                            modeString = args.getString(1);
                        }
                    }

                    CommandBook.inst().checkPermission(sender, "commandbook.gamemode."
                            + (change ? "change" : "check")
                            + (player != sender ? ".other" : ""));

                    try {
                        mode = GameMode.valueOf(modeString.toUpperCase());
                    } catch (IllegalArgumentException e) {
                        try {
                            mode = GameMode.getByValue(Integer.parseInt(modeString));
                        } catch (NumberFormatException ignored) {}
                    }
                    if (mode == null) {
                        throw new CommandException("Unrecognized gamemode: " + modeString + ".");
                    }
                }
            }

            if (player == null || mode == null) {
                throw new CommandException("Something went wrong, please try again.");
            }

            String message;
            if (change) {
                if (player.getGameMode() == mode) {
                    message = " already had gamemode " + mode.toString();
                    change = false;
                } else {
                    message = " changed to gamemode " + mode.toString();
                }
            } else {
                message = " currently has gamemode " + mode.toString();
            }
            if (change) {
                player.setGameMode(mode);
            }
            sender.sendMessage(ChatColor.YELLOW + "Player " + (CommandBook.inst().useDisplayNames ? player.getDisplayName() : player.getName())
                    + ChatColor.YELLOW + message + ".");
        }

        @Command(aliases = {"heal"},
            usage = "[player]", desc = "Heal a player",
            flags = "s", min = 0, max = 1)
        @CommandPermissions({"commandbook.heal", "commandbook.heal.other"})
        public void heal(CommandContext args,CommandSender sender) throws CommandException {

            Iterable<Player> targets = null;
            boolean included = false;

            // Detect arguments based on the number of arguments provided
            if (args.argsLength() == 0) {
                targets = Lists.newArrayList(PlayerUtil.checkPlayer(sender));

            } else if (args.argsLength() == 1) {
                targets = InputUtil.PlayerParser.matchPlayers(sender, args.getString(0));

            }

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

            for (Player player : targets) {
                player.setHealth(player.getMaxHealth());
                player.setFoodLevel(20);
                player.setSaturation(20F);
                player.setExhaustion(0);

                // Tell the user
                if (player.equals(sender)) {
                    player.sendMessage(ChatColor.YELLOW + "Healed!");

                    // Keep track of this
                    included = true;
                } else if (!args.hasFlag('s')) {
                    player.sendMessage(ChatColor.YELLOW + "Healed by "
                            + ChatUtil.toColoredName(sender, ChatColor.YELLOW) + ".");
                }
            }

            // 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.toString() + "Players healed.");
            }
        }

        @Command(aliases = {"extinguish"},
                usage = "[player]", desc = "Put out a fire on a player",
                flags = "s", min = 0, max = 1)
        @CommandPermissions({"commandbook.extinguish", "commandbook.extinguish.other"})
        public void extinguish(CommandContext args,CommandSender sender) throws CommandException {

            Iterable<Player> targets;
            boolean included = false;

            // Detect arguments based on the number of arguments provided
            if (args.argsLength() > 0) {
                targets = InputUtil.PlayerParser.matchPlayers(sender, args.getString(0));
            } else {
                targets = Lists.newArrayList(PlayerUtil.checkPlayer(sender));
            }

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

            for (Player player : targets) {

                if (player.getFireTicks() < 1) {
                    player.sendMessage(ChatColor.RED +
                            ChatUtil.toColoredName(player, ChatColor.RED)
                            + " was not on fire!");
                    continue;
                }

                player.setFireTicks(0);

                // Tell the user
                if (player.equals(sender)) {
                    player.sendMessage(ChatColor.YELLOW + "Fire extinguished!");

                    // Keep track of this
                    included = true;
                } else if (!args.hasFlag('s')) {
                    player.sendMessage(ChatColor.YELLOW + "Fire extinguished by "
                            + ChatUtil.toColoredName(sender, ChatColor.YELLOW) + ".");
                }
            }

            // 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.toString() + "Fires extinguished.");
            }
        }

        @Command(aliases = {"slay"},
            usage = "[player]", desc = "Slay a player",
            flags = "s", min = 0, max = 1)
        @CommandPermissions({"commandbook.slay"})

        public void slay(CommandContext args, CommandSender sender) throws CommandException {

            Iterable<Player> targets = null;
            boolean included = false;

            // Detect arguments based on the number of arguments provided
            if (args.argsLength() == 0) {
                targets = Lists.newArrayList(PlayerUtil.checkPlayer(sender));
            } else if (args.argsLength() == 1) {
                targets = InputUtil.PlayerParser.matchPlayers(sender, args.getString(0));
            }

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

            for (Player player : targets) {
                player.setHealth(0);

                // Tell the user
                if (player.equals(sender)) {
                    player.sendMessage(ChatColor.YELLOW + "Slain!");

                    // Keep track of this
                    included = true;
                } else if (!args.hasFlag('s')) {
                    player.sendMessage(ChatColor.YELLOW + "Slain by "
                            + ChatUtil.toColoredName(sender, ChatColor.YELLOW) + ".");

                }
            }

            // 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.toString() + "Players slain.");
            }
        }
        @Command(aliases = {"locate"}, usage = "[player]", desc = "Locate a player", max = 1)
        @CommandPermissions({"commandbook.locate"})
        public void locate(CommandContext args, CommandSender sender) throws CommandException {

            Player player = PlayerUtil.checkPlayer(sender);

            if (args.argsLength() == 0) {
                player.setCompassTarget(player.getWorld().getSpawnLocation());

                sender.sendMessage(ChatColor.YELLOW.toString() + "Compass reset to spawn.");
            } else {
                Player target = InputUtil.PlayerParser.matchSinglePlayer(sender, args.getString(0));
                player.setCompassTarget(target.getLocation());

                sender.sendMessage(ChatColor.YELLOW.toString() + "Compass repointed.");
            }
        }
    }
}
TOP

Related Classes of com.sk89q.commandbook.PlayerComponent$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.