Craftsman 4 v1.20.43版本的 MD5 值为:44824ed1b4bf939cc4a771f5f317f768

以下内容为反编译后的 GooglePlayStore.java 源代码,内容仅作参考


package com.mojang.minecraftpe.store.googleplay;

import android.content.Intent;
import android.net.Uri;
import android.provider.Settings;
import android.util.Log;
import com.googleplay.licensing.AESObfuscator;
import com.googleplay.licensing.LicenseChecker;
import com.googleplay.licensing.LicenseCheckerCallback;
import com.googleplay.licensing.ServerManagedPolicy;
import com.mojang.minecraftpe.ActivityListener;
import com.mojang.minecraftpe.MainActivity;
import com.mojang.minecraftpe.store.ExtraLicenseResponseData;
import com.mojang.minecraftpe.store.Store;
import com.mojang.minecraftpe.store.StoreListener;
public class GooglePlayStore implements Store, ActivityListener {
    private static final byte[] SALT = {75, 1, -16, -127, 42, 49, 19, -102, -88, 56, 121, 99, 23, -24, -18, -111, -11, 33, -62, 87};
    private static boolean mReceivedLicenseResponse = false;
    private static boolean mVerifiedLicense = true;
    MainActivity mActivity;
    GooglePlayBillingImpl mBillingImpl;
    private LicenseChecker mChecker;
    private LicenseCheckerCallback mLicenseCheckerCallback;
    StoreListener mListener;
    private ServerManagedPolicy mPolicy;
    int mPurchaseRequestCode;

    @Override
    public String getProductSkuPrefix() {
        return "";
    }

    @Override
    public String getRealmsSkuPrefix() {
        return "";
    }

    @Override
    public String getStoreId() {
        return "android.googleplay";
    }

    @Override
    public void onStop() {
    }

    private synchronized boolean hasReceivedLicenseResponse() {
        return mReceivedLicenseResponse;
    }

    public synchronized void updateLicenseStatus(boolean received, boolean verified) {
        mVerifiedLicense = verified;
        mReceivedLicenseResponse = received;
    }

    private class MinecraftLicenseCheckerCallback implements LicenseCheckerCallback {
        private MinecraftLicenseCheckerCallback() {
        }

        @Override
        public void allow(int policyReason) {
            String str;
            if (policyReason == 291) {
                str = new String("RETRY");
            } else if (policyReason == 256) {
                str = new String("LICENSED");
            } else {
                str = new String("UNKNOWN REASON");
            }
            GooglePlayStore.this.updateLicenseStatus(true, true);
            Log.i("MinecraftLicenseCheckerCallback", String.format("allowed reason: %s", str));
        }

        @Override
        public void dontAllow(int policyReason) {
            String str;
            if (policyReason == 561) {
                str = new String("NOT LICENSED");
            } else if (policyReason == 291) {
                str = new String("RETRY");
            } else {
                str = new String("UNKNOWN REASON");
            }
            GooglePlayStore.this.updateLicenseStatus(true, false);
            Log.i("MinecraftLicenseCheckerCallback", String.format("denied reason: %s", str));
        }

        @Override
        public void applicationError(int errorCode) {
            GooglePlayStore.this.updateLicenseStatus(true, false);
            Log.i("MinecraftLicenseCheckerCallback", String.format("error: %d", Integer.valueOf(errorCode)));
        }
    }

    public GooglePlayStore(MainActivity activity, String licenseKey, StoreListener listener) {
        this.mListener = listener;
        this.mActivity = activity;
        activity.addListener(this);
        this.mBillingImpl = new GooglePlayBillingImpl(this.mActivity, this.mListener, licenseKey);
        this.mPurchaseRequestCode = MainActivity.RESULT_GOOGLEPLAY_PURCHASE;
        this.mPolicy = new ServerManagedPolicy(activity, new AESObfuscator(SALT, this.mActivity.getPackageName(), Settings.Secure.getString(this.mActivity.getContentResolver(), "android_id")));
        this.mLicenseCheckerCallback = new MinecraftLicenseCheckerCallback();
        LicenseChecker licenseChecker = new LicenseChecker(activity, this.mPolicy, licenseKey);
        this.mChecker = licenseChecker;
        licenseChecker.checkAccess(this.mLicenseCheckerCallback);
        if (this.mActivity.isEduMode()) {
            mReceivedLicenseResponse = true;
            mVerifiedLicense = true;
        }
    }

    @Override
    public boolean hasVerifiedLicense() {
        return mVerifiedLicense;
    }

    @Override
    public boolean receivedLicenseResponse() {
        return hasReceivedLicenseResponse();
    }

    @Override
    public ExtraLicenseResponseData getExtraLicenseData() {
        long[] extraLicenseData = this.mPolicy.getExtraLicenseData();
        return new ExtraLicenseResponseData(extraLicenseData[0], extraLicenseData[1], extraLicenseData[2]);
    }

    @Override
    public void queryProducts(final String[] productIds) {
        this.mActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                GooglePlayStore.this.mBillingImpl.queryProducts(productIds);
            }
        });
    }

    @Override
    public void purchase(final String productId, final boolean isSubscription, final String payload) {
        this.mActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (isSubscription) {
                    GooglePlayStore.this.mBillingImpl.launchSubscriptionPurchaseFlow(GooglePlayStore.this.mActivity, productId, payload);
                } else {
                    GooglePlayStore.this.mBillingImpl.launchInAppPurchaseFlow(GooglePlayStore.this.mActivity, productId, payload);
                }
            }
        });
    }

    @Override
    public void purchaseGame() {
        this.mActivity.startActivity(new Intent("android.intent.action.VIEW", Uri.parse("https://market.android.com/details?id=" + this.mActivity.getPackageName())));
    }

    @Override
    public void acknowledgePurchase(final String receipt, final String productType) {
        this.mActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                GooglePlayStore.this.mBillingImpl.consumeOrAckPurchase(receipt);
            }
        });
    }

    @Override
    public void queryPurchases() {
        this.mActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                GooglePlayStore.this.mBillingImpl.queryPurchases();
            }
        });
    }

    @Override
    public void onResume() {
        queryPurchases();
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.v("GooglePlayStore", "onActivityResult hit");
    }

    @Override
    public void onDestroy() {
        this.mActivity.removeListener(this);
    }

    @Override
    public void destructor() {
        onDestroy();
    }
}