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();
}
}