001package fr.aumgn.dac2.commands.worldedit;
002
003import org.bukkit.entity.Player;
004
005import com.sk89q.worldedit.IncompleteRegionException;
006import com.sk89q.worldedit.LocalWorld;
007import com.sk89q.worldedit.bukkit.BukkitUtil;
008import com.sk89q.worldedit.bukkit.WorldEditPlugin;
009import com.sk89q.worldedit.regions.FlatRegion;
010import com.sk89q.worldedit.regions.Region;
011import com.sk89q.worldedit.regions.RegionSelector;
012
013import fr.aumgn.bukkitutils.command.Command;
014import fr.aumgn.bukkitutils.command.NestedCommands;
015import fr.aumgn.bukkitutils.command.args.CommandArgs;
016import fr.aumgn.dac2.DAC;
017import fr.aumgn.dac2.arena.Arena;
018import fr.aumgn.dac2.arena.regions.Pool;
019import fr.aumgn.dac2.arena.regions.StartRegion;
020import fr.aumgn.dac2.arena.regions.SurroundingRegion;
021import fr.aumgn.dac2.exceptions.PoolShapeNotFlat;
022import fr.aumgn.dac2.exceptions.WERegionIncomplete;
023import fr.aumgn.dac2.shape.FlatShape;
024import fr.aumgn.dac2.shape.Shape;
025import fr.aumgn.dac2.shape.worldedit.WEShapeUtils;
026
027@NestedCommands({"dac2", "setwe"})
028public class SetWECommands extends WorldEditCommands {
029
030    public SetWECommands(DAC dac) {
031        super(dac);
032    }
033
034    @Command(name = "pool", min = 1, max = 1)
035    public void pool(Player sender, CommandArgs args) {
036        Arena arena = args.get(0, Arena).value();
037        Region region = getRegion(sender);
038        if (!(region instanceof FlatRegion)) {
039            throw new PoolShapeNotFlat(dac, region);
040        }
041
042        FlatShape shape = (FlatShape) WEShapeUtils.getShape(dac, region);
043        Pool pool = new Pool(shape);
044        arena.setPool(pool);
045        dac.getArenas().saveArena(dac, arena);
046        sender.sendMessage(msg("setwe.pool.success"));
047    }
048
049    @Command(name = "start", min = 1, max = 1)
050    public void start(Player sender, CommandArgs args) {
051        Arena arena = args.get(0, Arena).value();
052        Region region = getRegion(sender);
053
054        Shape shape = WEShapeUtils.getShape(dac, region);
055        StartRegion start = new StartRegion(shape);
056        arena.setStartRegion(start);
057        dac.getArenas().saveArena(dac, arena);
058        sender.sendMessage(msg("setwe.start.success"));
059    }
060
061    @Command(name = "surrounding", min = 1, max = 1)
062    public void surrounding(Player sender, CommandArgs args) {
063        Arena arena = args.get(0, Arena).value();
064        Region region = getRegion(sender);
065
066        Shape shape = WEShapeUtils.getShape(dac, region);
067        SurroundingRegion surrounding = new SurroundingRegion(shape);
068        arena.setSurroundingRegion(surrounding);
069        dac.getArenas().saveArena(dac, arena);
070        sender.sendMessage(msg("setwe.surrounding.success"));
071    }
072
073    private Region getRegion(Player player) {
074        WorldEditPlugin worldEdit = getWorldEdit();
075        LocalWorld world = BukkitUtil.getLocalWorld(player.getWorld());
076        RegionSelector selector = worldEdit.getSession(player)
077                .getRegionSelector(world);
078        try {
079            return selector.getRegion();
080        } catch (IncompleteRegionException exc) {
081            throw new WERegionIncomplete(dac);
082        }
083    }
084}