001package fr.aumgn.bukkitutils.command.arg.bukkit;
002
003import org.bukkit.Material;
004
005import fr.aumgn.bukkitutils.command.CommandsMessages;
006import fr.aumgn.bukkitutils.command.arg.impl.AbstractCommandArg;
007import fr.aumgn.bukkitutils.command.exception.CommandError;
008import fr.aumgn.bukkitutils.util.Util;
009
010public class MaterialArg extends AbstractCommandArg<Material> {
011
012    public static class NoSuchMaterial extends CommandError {
013        private static final long serialVersionUID = 6849291638184124428L;
014
015        public NoSuchMaterial(CommandsMessages messages, String name) {
016            super(messages.noSuchMaterial(name));
017        }
018    }
019
020    static Material getMaterial(CommandsMessages messages, String pattern) {
021        Material material = Util.matchMaterial(pattern);
022        if (material == null) {
023            throw new MaterialArg.NoSuchMaterial(messages, pattern);
024        }
025
026        return material;
027    }
028
029    private final CommandsMessages messages;
030
031    public MaterialArg(CommandsMessages messages, String string) {
032        super(string);
033        this.messages = messages;
034    }
035
036    @Override
037    public Material value() {
038        return getMaterial(messages, string);
039    }
040}