aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorJulienraptor01 <julienraptor01@gmail.com>2023-09-08 14:37:47 +0200
committerJulienraptor01 <julienraptor01@gmail.com>2023-09-08 14:37:47 +0200
commitd28f37b4e4fe4185e8ac3a4bfa235b0361ebbe32 (patch)
tree022c43289901a40abd031fcc79e79234f82589e5 /src/main/java
parent9c7bf54123f366ad90bfafe81e973b731fd6b5b3 (diff)
downloadSkyblocker-d28f37b4e4fe4185e8ac3a4bfa235b0361ebbe32.tar.gz
Skyblocker-d28f37b4e4fe4185e8ac3a4bfa235b0361ebbe32.tar.bz2
Skyblocker-d28f37b4e4fe4185e8ac3a4bfa235b0361ebbe32.zip
create the base64 fixer
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java
new file mode 100644
index 00000000..b283be24
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java
@@ -0,0 +1,46 @@
+package me.xmrvizzy.skyblocker.mixin;
+
+import com.mojang.authlib.yggdrasil.YggdrasilServicesKeyInfo;
+import me.xmrvizzy.skyblocker.utils.Utils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Unique;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Redirect;
+
+import java.util.*;
+
+@Mixin(value = YggdrasilServicesKeyInfo.class, remap = false)
+public class YggdrasilServicesKeyInfoMixin {
+ @Unique
+ private static final Logger LOGGER = LoggerFactory.getLogger(YggdrasilServicesKeyInfo.class);
+ @Unique
+ private static final Map<String, String> REPLACEMENT_HASHMAP = new HashMap<>();
+ @Unique
+ private static final List<Integer> ERROR_HASH_ARRAYLIST = new ArrayList<>();
+
+ @Redirect(method = "validateProperty", at = @At(value = "INVOKE", target = "Ljava/util/Base64$Decoder;decode(Ljava/lang/String;)[B", remap = false), remap = false)
+ private byte[] skyblocker$replaceKnownWrongBase64(Base64.Decoder decoder, String signature) {
+ try {
+ return decoder.decode(signature);
+ } catch (IllegalArgumentException e) {
+ if (Utils.isOnSkyblock()) {
+ if (REPLACEMENT_HASHMAP.containsKey(signature)) {
+ return decoder.decode(REPLACEMENT_HASHMAP.get(signature));
+ }
+ int signatureHashCode = signature.hashCode();
+ if (!ERROR_HASH_ARRAYLIST.contains(signatureHashCode)) {
+ ERROR_HASH_ARRAYLIST.add(signatureHashCode);
+ LOGGER.warn("Failed to decode this base64 string: {}", signature);
+ }
+ LOGGER.warn("Failed to decode the base64 string No.{} again", ERROR_HASH_ARRAYLIST.indexOf(signatureHashCode));
+ }
+ throw e;
+ }
+ }
+
+ static {
+ REPLACEMENT_HASHMAP.put("\"ZnIHWclaHKIRt9H2puWSCaUb2OrI2YPUkdV5f0w/fAdlpllmgCGjYegWX2ThhjrcRbVwc8oravYaVo641X/33ZOmg1W9luZg2rV9Zc16dgTXkDQlJSi8bpEKK2iUMEU5oa/fb3WG3wCYM4EUbataiiizQdMKl0pG81uRDS45QSdWvowbNMvUA+tL97h7nnrNgNU01NQJntJuzXg6JD6vC5bnDyDn5nXF0/KI69xpzSDupWxs6mmd03xbU18T9XX8mlgDgg549zRIaQM2OEihCHecu42e+yjFs5TiXOhpupm3FArJ87XrfzD17fupE0cr9PehXZzJxtLtzthgjqwb5nB3QmD8UFsqhFQBU0TxswGqBQxX1CeCwYvQGOXx3jE73/79Eq6BrGmwqwYs+SOk/qcIdpfdcK2y6q4KSDiJlBbYMCryYFPEUcKmTdOE2OkGniekvzO7AriApibZvt5R/jbS2dmMmUaNKIQFSINScyBH6JV5vMmneEUbhgNBangagVoGIsVAlRNBCKrQ/mTMaIgY+jE/HU8gQnvJAKOtnYrTXLyPvhXaJ4ix+pDGFkycjj7phi1FrLVHTpEewXhx5AvuNY23m+Y9lHp2/687PDoSsryD4e1rJkFs4psmZxCDHRq4x1nmHR3ZvZeRAQgX8LytPbl+PD8N7rJ6lhNRwY4=", "ZnIHWclaHKIRt9H2puWSCaUb2OrI2YPUkdV5f0w/fAdlpllmgCGjYegWX2ThhjrcRbVwc8oravYaVo641X/33ZOmg1W9luZg2rV9Zc16dgTXkDQlJSi8bpEKK2iUMEU5oa/fb3WG3wCYM4EUbataiiizQdMKl0pG81uRDS45QSdWvowbNMvUA+tL97h7nnrNgNU01NQJntJuzXg6JD6vC5bnDyDn5nXF0/KI69xpzSDupWxs6mmd03xbU18T9XX8mlgDgg549zRIaQM2OEihCHecu42e+yjFs5TiXOhpupm3FArJ87XrfzD17fupE0cr9PehXZzJxtLtzthgjqwb5nB3QmD8UFsqhFQBU0TxswGqBQxX1CeCwYvQGOXx3jE73/79Eq6BrGmwqwYs+SOk/qcIdpfdcK2y6q4KSDiJlBbYMCryYFPEUcKmTdOE2OkGniekvzO7AriApibZvt5R/jbS2dmMmUaNKIQFSINScyBH6JV5vMmneEUbhgNBangagVoGIsVAlRNBCKrQ/mTMaIgY+jE/HU8gQnvJAKOtnYrTXLyPvhXaJ4ix+pDGFkycjj7phi1FrLVHTpEewXhx5AvuNY23m+Y9lHp2/687PDoSsryD4e1rJkFs4psmZxCDHRq4x1nmHR3ZvZeRAQgX8LytPbl+PD8N7rJ6lhNRwY4=");
+ }
+} \ No newline at end of file