001package fr.aumgn.dac2.commands; 002 003import org.bukkit.Location; 004import org.bukkit.command.CommandSender; 005import org.bukkit.entity.Player; 006 007import fr.aumgn.bukkitutils.command.Command; 008import fr.aumgn.bukkitutils.command.NestedCommands; 009import fr.aumgn.bukkitutils.command.args.CommandArgs; 010import fr.aumgn.bukkitutils.geom.Vector; 011import fr.aumgn.dac2.DAC; 012import fr.aumgn.dac2.arena.Arena; 013import fr.aumgn.dac2.arena.Diving; 014import fr.aumgn.dac2.arena.regions.Pool; 015import fr.aumgn.dac2.arena.regions.StartRegion; 016import fr.aumgn.dac2.arena.regions.SurroundingRegion; 017import fr.aumgn.dac2.exceptions.PoolShapeNotFlat; 018import fr.aumgn.dac2.shape.FlatShape; 019import fr.aumgn.dac2.shape.Shape; 020import fr.aumgn.dac2.shape.ShapeFactory; 021 022@NestedCommands({"dac2", "set"}) 023public class SetCommands extends DACCommands { 024 025 private static final int DEFAULT_RADIUS = 5; 026 private static final int DEFAULT_HEIGHT = 3; 027 028 public SetCommands(DAC dac) { 029 super(dac); 030 } 031 032 @Command(name = "diving", min = 1, max = 1, argsFlags = "p") 033 public void diving(CommandSender sender, CommandArgs args) { 034 Arena arena = args.get(0, Arena).value(); 035 Player player = args.getPlayer('p').valueOr(sender); 036 037 arena.setDiving(new Diving(player.getLocation())); 038 dac.getArenas().saveArena(dac, arena); 039 sender.sendMessage(msg("set.diving.success")); 040 } 041 042 @Command(name = "pool", min = 1, max = 3, argsFlags = "sp") 043 public void pool(CommandSender sender, CommandArgs args) { 044 Arena arena = args.get(0, Arena).value(); 045 int radius = args.getInteger(1).valueOr(DEFAULT_RADIUS); 046 int height = args.getInteger(2).valueOr(DEFAULT_HEIGHT); 047 Player player = args.getPlayer('p').valueOr(sender); 048 ShapeFactory factory = args.get('s', ShapeFactory.class) 049 .valueOr(ShapeFactory.Arbitrary); 050 051 Shape shape = factory.create(dac, player.getWorld(), 052 centerFrom(player), radius, height); 053 if (!(shape instanceof FlatShape)) { 054 throw new PoolShapeNotFlat(dac, shape); 055 } 056 057 arena.setPool(new Pool((FlatShape) shape)); 058 dac.getArenas().saveArena(dac, arena); 059 sender.sendMessage(msg("set.pool.success")); 060 } 061 062 @Command(name = "start", min = 1, max = 3, argsFlags = "sp") 063 public void start(CommandSender sender, CommandArgs args) { 064 Arena arena = args.get(0, Arena).value(); 065 int radius = args.getInteger(1).valueOr(DEFAULT_RADIUS); 066 int height = args.getInteger(2).valueOr(DEFAULT_HEIGHT); 067 Player player = args.getPlayer('p').valueOr(sender); 068 ShapeFactory factory = args.get('s', ShapeFactory.class) 069 .valueOr(ShapeFactory.Cuboid); 070 071 Shape shape = factory.create(dac, player.getWorld(), 072 centerFrom(player), radius, height); 073 arena.setStartRegion(new StartRegion(shape)); 074 dac.getArenas().saveArena(dac, arena); 075 sender.sendMessage(msg("set.diving.success")); 076 } 077 078 @Command(name = "surrounding", min = 1, max = 3, argsFlags = "sp") 079 public void surrounding(CommandSender sender, CommandArgs args) { 080 Arena arena = args.get(0, Arena).value(); 081 Player player = args.getPlayer('p').valueOr(sender); 082 int radius = args.getInteger(1).valueOr(DEFAULT_RADIUS); 083 int height = args.getInteger(2).valueOr(DEFAULT_HEIGHT); 084 ShapeFactory factory = args.get('s', ShapeFactory.class) 085 .valueOr(ShapeFactory.Cuboid); 086 087 Shape shape = factory.create(dac, player.getWorld(), 088 centerFrom(player), radius, height); 089 arena.setSurroundingRegion(new SurroundingRegion(shape)); 090 dac.getArenas().saveArena(dac, arena); 091 sender.sendMessage(msg("set.diving.success")); 092 } 093 094 private Vector centerFrom(Player player) { 095 Location loc = player.getLocation(); 096 return new Vector(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); 097 } 098}