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}