001package fr.aumgn.dac2.commands.arg;
002
003import org.bukkit.command.CommandSender;
004import org.bukkit.entity.Player;
005
006import fr.aumgn.bukkitutils.command.arg.impl.AsbtractSenderArg;
007import fr.aumgn.bukkitutils.command.exception.CommandError;
008import fr.aumgn.bukkitutils.command.exception.CommandUsageError;
009
010import fr.aumgn.dac2.DAC;
011import fr.aumgn.dac2.arena.Arena;
012
013public class ArenaArg extends AsbtractSenderArg<Arena> {
014
015    public static class NoSuchArena extends CommandError {
016        private static final long serialVersionUID = -4832133406864970323L;
017
018        public NoSuchArena(DAC dac, String name) {
019            super(dac.getCmdMessages().get("arena.arg.notfound", name));
020        }
021    }
022
023    public static class NotInArena extends CommandError {
024
025        private static final long serialVersionUID = 6112644121244362679L;
026
027        public NotInArena(DAC dac) {
028            super(dac.getCmdMessages().get("arena.arg.notinarena"));
029        }
030    }
031
032    private final DAC dac;
033
034    public ArenaArg(DAC dac, String string) {
035        super(string);
036        this.dac = dac;
037    }
038
039    @Override
040    public Arena value() {
041        if (!dac.getArenas().has(string)) {
042            throw new NoSuchArena(dac, string);
043        }
044
045        return dac.getArenas().get(string);
046    }
047
048    @Override
049    protected Arena defaultFor(CommandSender sender) {
050        if (!(sender instanceof Player)) {
051            throw new CommandUsageError(dac.getCmdMessages()
052                    .get("arena.arg.needed"));
053        }
054
055        Arena arena = dac.getArenas().get((Player) sender);
056        if (arena == null) {
057            throw new NotInArena(dac);
058        }
059
060        return arena;
061    }
062
063    @Override
064    protected String missingPermOtherMessage(String permission) {
065        return dac.getCmdMessages().get("arena.arg.otherpermissionmissing");
066    }
067}