Package com.sk89q.commandbook

Source Code of com.sk89q.commandbook.WorldComponent$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.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.World;
import org.bukkit.command.CommandSender;

@ComponentInformation(friendlyName = "World Tools", desc = "Various world-related commands.")
public class WorldComponent extends BukkitComponent {
    @Override
    public void enable() {
        registerCommands(Commands.class);
    }

    public class Commands {
        @Command(aliases = {"weather"},
                usage = "<'stormy'|'sunny'> [duration] [world]", desc = "Change the world weather",
                flags = "s", min = 1, max = 3)
        @CommandPermissions({"commandbook.weather"})
        public void weather(CommandContext args, CommandSender sender) throws CommandException {

            World world;
            String weatherStr = args.getString(0);
            int duration = -1;

            if (args.argsLength() == 1) {
                world = PlayerUtil.checkPlayer(sender).getWorld();
            } else if (args.argsLength() == 2) {
                world = PlayerUtil.checkPlayer(sender).getWorld();
                duration = args.getInteger(1);
            } else { // A world was specified!
                world = InputUtil.LocationParser.matchWorld(sender, args.getString(2));
                duration = args.getInteger(1);
            }

            boolean broadcastChanges = CommandBook.inst().broadcastChanges;

            if (broadcastChanges && args.hasFlag('s')) {
                CommandBook.inst().checkPermission(sender, "commandbook.weather.silent");
                broadcastChanges = false;
            }

            if (weatherStr.equalsIgnoreCase("stormy")
                    || weatherStr.equalsIgnoreCase("rainy")
                    || weatherStr.equalsIgnoreCase("snowy")
                    || weatherStr.equalsIgnoreCase("rain")
                    || weatherStr.equalsIgnoreCase("snow")
                    || weatherStr.equalsIgnoreCase("storm")
                    || weatherStr.equalsIgnoreCase("on")) {

                world.setStorm(true);

                if (duration > 0) {
                    world.setWeatherDuration(duration * 20);
                }

                if (broadcastChanges) {
                    CommandBook.server().broadcastMessage(ChatColor.YELLOW
                            + ChatUtil.toColoredName(sender, ChatColor.YELLOW) + " has started on a storm on '"
                            + world.getName() + "'.");
                } else {
                    // Tell console, since console won't get the broadcast message.
                    sender.sendMessage(ChatColor.YELLOW + "Stormy weather enabled.");
                }

            } else if (weatherStr.equalsIgnoreCase("clear")
                    || weatherStr.equalsIgnoreCase("sunny")
                    || weatherStr.equalsIgnoreCase("sun")
                    || weatherStr.equalsIgnoreCase("snowy")
                    || weatherStr.equalsIgnoreCase("rain")
                    || weatherStr.equalsIgnoreCase("snow")
                    || weatherStr.equalsIgnoreCase("off")) {

                world.setStorm(false);

                if (duration > 0) {
                    world.setWeatherDuration(duration * 20);
                }

                if (broadcastChanges) {
                    CommandBook.server().broadcastMessage(ChatColor.YELLOW
                            + ChatUtil.toColoredName(sender, ChatColor.YELLOW) + " has stopped a storm on '"
                            + world.getName() + "'.");
                } else {
                    // Tell console, since console won't get the broadcast message.
                    sender.sendMessage(ChatColor.YELLOW + "Stormy weather disabled.");
                }

            } else {
                throw new CommandException("Unknown weather state! Acceptable states: sunny or stormy");
            }
        }

        @Command(aliases = {"thunder"},
                usage = "<'on'|'off'> [duration] [world]", desc = "Change the thunder state",
                flags = "s", min = 1, max = 3)
        @CommandPermissions({"commandbook.weather.thunder"})
        public void thunder(CommandContext args, CommandSender sender) throws CommandException {

            World world;
            String weatherStr = args.getString(0);
            int duration = -1;

            if (args.argsLength() == 1) {
                world = PlayerUtil.checkPlayer(sender).getWorld();
            } else if (args.argsLength() == 2) {
                world = PlayerUtil.checkPlayer(sender).getWorld();
                duration = args.getInteger(1);
            } else { // A world was specified!
                world = InputUtil.LocationParser.matchWorld(sender, args.getString(2));
                duration = args.getInteger(1);
            }

            boolean broadcastChanges = CommandBook.inst().broadcastChanges;

            if (broadcastChanges && args.hasFlag('s')) {
                CommandBook.inst().checkPermission(sender, "commandbook.weather.thunder.silent");
                broadcastChanges = false;
            }

            if (weatherStr.equalsIgnoreCase("on")) {
                world.setThundering(true);

                if (duration > 0) {
                    world.setThunderDuration(duration * 20);
                }

                if (broadcastChanges) {
                    CommandBook.server().broadcastMessage(ChatColor.YELLOW
                            + ChatUtil.toColoredName(sender, ChatColor.YELLOW) + " has started a thunder storm on '"
                            + world.getName() + "'.");
                } else {
                    sender.sendMessage(ChatColor.YELLOW + "Thunder enabled.");
                }
            } else if (weatherStr.equalsIgnoreCase("off")) {
                world.setThundering(false);

                if (duration > 0) {
                    world.setThunderDuration(duration * 20);
                }

                if (broadcastChanges) {
                    CommandBook.server().broadcastMessage(ChatColor.YELLOW
                            + ChatUtil.toColoredName(sender, ChatColor.YELLOW) + " has stopped a thunder storm on '"
                            + world.getName() + "'.");
                } else {
                    sender.sendMessage(ChatColor.YELLOW + "Thunder disabled.");
                }
            } else {
                throw new CommandException("Unknown thunder state! Acceptable states: on or off");
            }
        }
    }
}
TOP

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