001package fr.aumgn.dac2.commands; 002 003import org.bukkit.command.CommandSender; 004import org.bukkit.entity.Player; 005 006import fr.aumgn.bukkitutils.command.Command; 007import fr.aumgn.bukkitutils.command.NestedCommands; 008import fr.aumgn.bukkitutils.command.args.CommandArgs; 009import fr.aumgn.bukkitutils.command.exception.CommandError; 010import fr.aumgn.dac2.DAC; 011import fr.aumgn.dac2.arena.Arena; 012import fr.aumgn.dac2.config.Color; 013import fr.aumgn.dac2.game.Game; 014import fr.aumgn.dac2.game.GameFactory; 015import fr.aumgn.dac2.game.start.GameQuickStart; 016import fr.aumgn.dac2.stage.Stage; 017import fr.aumgn.dac2.stage.join.JoinStage; 018 019@NestedCommands("dac2") 020public class StageCommands extends DACCommands { 021 022 public StageCommands(DAC dac) { 023 super(dac); 024 } 025 026 @Command(name = "initialize", 027 min = 0, max = 1, flags = "j", argsFlags = "j") 028 public void init(CommandSender sender, CommandArgs args) { 029 Arena arena = args.get(0, Arena) 030 .valueWithPermOr("dac.stages.init.arena", sender); 031 032 JoinStage joinStage = new JoinStage(dac, arena); 033 dac.getStages().start(joinStage); 034 035 if (sender instanceof Player) { 036 if (args.hasFlag('j')) { 037 joinStage.addPlayer((Player) sender, (Color) null); 038 } else if (args.hasArgFlag('j')) { 039 Color color = args.get('j', Color).value(); 040 joinStage.addPlayer((Player) sender, color); 041 } 042 } else { 043 sender.sendMessage(msg("init.success", arena.getName())); 044 } 045 } 046 047 @Command(name = "stop", min = 0, max = 1, argsFlags = "a") 048 public void stop(CommandSender sender, CommandArgs args) { 049 Stage stage = args.get(0, Stage) 050 .valueWithPermOr("dac2.stage.stop.others", sender); 051 052 dac.getStages().forceStop(stage); 053 sender.sendMessage(msg("stop.success", stage.getArena().getName())); 054 } 055 056 @Command(name = "start", min = 0, max = 1, argsFlags = "a") 057 public void start(CommandSender sender, CommandArgs args) { 058 Stage stage = args.get('a', Stage) 059 .valueWithPermOr("dac2.stage.start.others", sender); 060 String gameMode = args.get(0, "classic"); 061 062 if (stage == null) { 063 throw new CommandError(msg("start.notajoinstage")); 064 } else if (!(stage instanceof JoinStage)) { 065 throw new CommandError(msg("start.alreadystarted")); 066 } 067 068 JoinStage joinStage = (JoinStage) stage; 069 GameFactory factory = GameFactory.getByAlias(dac, gameMode); 070 if (joinStage.size() < factory.getMinimumPlayers()) { 071 throw new CommandError(msg("start.notenoughplayers")); 072 } 073 Game game = factory.createGame(dac, joinStage); 074 dac.getStages().switchTo(game); 075 } 076 077 @Command(name = "quickstart", min = 0, max = 1, argsFlags = "a") 078 public void quickstart(CommandSender sender, CommandArgs args) { 079 Arena arena = args.get('a', Arena) 080 .valueWithPermOr("dac.stages.quickstart.arena", sender); 081 082 String gameMode = args.get(0, "classic"); 083 GameQuickStart quickStart = new GameQuickStart(dac, arena); 084 GameFactory factory = GameFactory.getByAlias(dac, gameMode); 085 if (quickStart.size() < factory.getMinimumPlayers()) { 086 throw new CommandError(msg("quickstart.notenoughplayers")); 087 } 088 Game game = factory.createGame(dac, quickStart); 089 dac.getStages().start(game); 090 } 091 092 @Command(name = "kick", min = 1, max = 1) 093 public void kick(CommandSender sender, CommandArgs args) { 094 Player player = args.getPlayer(0).value(); 095 Stage stage = dac.getStages().get(player); 096 if (stage == null) { 097 throw new CommandError(msg("quit.notingame")); 098 } 099 100 stage.onQuit(player); 101 sender.sendMessage(msg("kick.success", player.getDisplayName(), 102 stage.getArena().getName())); 103 } 104}