001package fr.aumgn.dac2.commands;
002
003import java.util.ArrayList;
004import java.util.List;
005
006import org.bukkit.command.CommandSender;
007
008import fr.aumgn.bukkitutils.command.Command;
009import fr.aumgn.bukkitutils.command.NestedCommands;
010import fr.aumgn.bukkitutils.command.args.CommandArgs;
011import fr.aumgn.dac2.DAC;
012import fr.aumgn.dac2.arena.Arena;
013import fr.aumgn.dac2.arena.regions.PoolFilling;
014import fr.aumgn.dac2.config.Color;
015import fr.aumgn.dac2.shape.column.ColumnPattern;
016import fr.aumgn.dac2.shape.column.RandomPattern;
017
018@NestedCommands(value = { "dac2", "fill" }, defaultTo = "reset")
019public class FillCommands extends DACCommands {
020
021    public FillCommands(DAC dac) {
022        super(dac);
023    }
024
025    @Command(name = "reset", min = 1, max = -1)
026    public void reset(CommandSender sender, CommandArgs args) {
027        fillCommand(sender, args, new PoolFilling.Reset());
028        sender.sendMessage(msg("fill.reset.success"));
029    }
030
031    @Command(name ="fully", min = 1, max = -1)
032    public void fully(CommandSender sender, CommandArgs args) {
033        fillCommand(sender, args, new PoolFilling.Fully());
034        sender.sendMessage(msg("fill.fully.success"));
035    }
036
037    @Command(name = "dac", min = 1, max = -1)
038    public void dac(CommandSender sender, CommandArgs args) {
039        fillCommand(sender, args, new PoolFilling.DeACoudre());
040        sender.sendMessage(msg("fill.dac.success"));
041    }
042
043    @Command(name = "randomly", min = 1, max = -1, argsFlags = "p")
044    public void randomly(CommandSender sender, CommandArgs args) {
045        double ratio = ((double) args.getInteger('p').valueOr(50)) / 100;
046        fillCommand(sender, args, new PoolFilling.Randomly(ratio));
047        sender.sendMessage(msg("fill.randomly.success"));
048    }
049
050    @Command(name = "allbutone", min = 1, max = -1)
051    public void allButOne(CommandSender sender, CommandArgs args) {
052        fillCommand(sender, args, new PoolFilling.AllButOne());
053        sender.sendMessage(msg("fill.allbutone.success"));
054    }
055
056    private void fillCommand(CommandSender sender, CommandArgs args,
057            PoolFilling strategy) {
058        Arena arena = args.get(0, Arena).value();
059        List<Color> colors;
060        if (args.length() == 1) {
061            colors = dac.getColors().asList();
062        } else {
063            colors = new ArrayList<Color>();
064            for (int i = 1; i < args.length(); i++) {
065                colors.add(args.get(i, Color).value());
066            }
067        }
068
069        ColumnPattern pattern = RandomPattern.fromColors(colors);
070        strategy.fill(arena.getWorld(), arena.safeGetPool(dac), pattern);
071    }
072}