Finish up protected packages. Maps now respect protected packages in

method invocations and signatures.
New argument -p, --ignored-packages to specify protected

It seems to produce properly obfed jars as you would expect:

before

    public static bbe a(JsonNode par0JsonNode)
    {
        bbe mcoserver = new bbe();
        try
        {
        mcoserver.a = Long.parseLong(par0JsonNode.c(new Object[] { "id" }));
        mcoserver.b = par0JsonNode.b(new Object[] { "name" });
        mcoserver.c = par0JsonNode.b(new Object[] { "motd" });
        mcoserver.d = par0JsonNode.b(new Object[] { "state" });
        mcoserver.e = par0JsonNode.b(new Object[] { "owner" });

        if (par0JsonNode.d(new Object[] { "invited" }))
        {
            mcoserver.f = a(par0JsonNode.e(new Object[] { "invited" }));
        }
        else
        {
            mcoserver.f = new ArrayList();
        }

        mcoserver.i = Integer.parseInt(par0JsonNode.c(new Object[] { "daysLeft" }));
        mcoserver.g = par0JsonNode.b(new Object[] { "ip" });
        mcoserver.h = par0JsonNode.a(new Object[] { "expired" }).booleanValue();
        }
        catch (IllegalArgumentException illegalargumentexception)
        {
        }

        return mcoserver;
    }

after:

    public static bbe a(JsonNode par0JsonNode)
    {
        bbe mcoserver = new bbe();
        try
        {
            mcoserver.a = Long.parseLong(par0JsonNode.getNumberValue(new Object[] { "id" }));
            mcoserver.b = par0JsonNode.getStringValue(new Object[] { "name" });
            mcoserver.c = par0JsonNode.getStringValue(new Object[] { "motd" });
            mcoserver.d = par0JsonNode.getStringValue(new Object[] { "state" });
            mcoserver.e = par0JsonNode.getStringValue(new Object[] { "owner" });
        
            if (par0JsonNode.isArrayNode(new Object[] { "invited" }))
            {
                mcoserver.f = a(par0JsonNode.getArrayNode(new Object[] { "invited" }));
            }
            else
            {
                mcoserver.f = new ArrayList();
            }
        
            mcoserver.i = Integer.parseInt(par0JsonNode.getNumberValue(new Object[] { "daysLeft" }));
            mcoserver.g = par0JsonNode.getStringValue(new Object[] { "ip" });
            mcoserver.h = par0JsonNode.getBooleanValue(new Object[] { "expired" }).booleanValue();
        }
        catch (IllegalArgumentException illegalargumentexception)
        {
        }
        
        return mcoserver;
    }