@Override
    public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
        String[] possiblities;
        String part;

        switch (args.length) {
            case 2:
                BoundingBoxPreviewType[] types = BoundingBoxPreviewType.values();
                possiblities = new String[types.length];
                part = args[1];

                for (int i = 0; i < possiblities.length; i++) {
                    possiblities[i] = types[i].toString();
                }

                break;
            case 3:
                Material[] mats = Material.values();
                possiblities = new String[mats.length];
                part = args[2];

                for (int i = 0; i < possiblities.length; i++) {
                    possiblities[i] = mats[i].toString().toLowerCase();
                }

                break;
            case 4:
                possiblities = new String[] { "false", "true" };
                part = args[3];
                break;
            case 5:
                possiblities = getWorldNames();
                part = args[4];
                break;
            case 1:
                if (sender instanceof Player) {
                    possiblities = getZoneNames(((Player) sender).getWorld().getName());
                    part = args[0];
                    break;
                }
            default:
                return new ArrayList<String>(0);
        }

        return checkPartialArgument(part, possiblities);
    }