From 62d9cb4ecc075cb2de945b2aa2c5767f4fa66cf4 Mon Sep 17 00:00:00 2001
From: Aaron <51387595+AzureAaron@users.noreply.github.com>
Date: Sat, 16 Sep 2023 12:34:29 -0400
Subject: Optimize Base64 Replacer (#311)

---
 .../mixin/YggdrasilServicesKeyInfoMixin.java       | 35 ++++++++++++----------
 1 file changed, 20 insertions(+), 15 deletions(-)

(limited to 'src/main/java/me/xmrvizzy')

diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java
index 3416e282..d9668100 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java
@@ -3,6 +3,9 @@ package me.xmrvizzy.skyblocker.mixin;
 import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
 import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
 import com.mojang.authlib.yggdrasil.YggdrasilServicesKeyInfo;
+
+import it.unimi.dsi.fastutil.ints.IntArrayList;
+import it.unimi.dsi.fastutil.ints.IntList;
 import me.xmrvizzy.skyblocker.utils.Utils;
 import org.slf4j.Logger;
 import org.spongepowered.asm.mixin.Final;
@@ -11,9 +14,7 @@ import org.spongepowered.asm.mixin.Shadow;
 import org.spongepowered.asm.mixin.Unique;
 import org.spongepowered.asm.mixin.injection.At;
 
-import java.util.ArrayList;
 import java.util.Base64;
-import java.util.List;
 import java.util.Map;
 
 @Mixin(value = YggdrasilServicesKeyInfo.class, remap = false)
@@ -22,25 +23,29 @@ public class YggdrasilServicesKeyInfoMixin {
     @Final
     private static Logger LOGGER;
     @Unique
-    private static final Map<String, String> REPLACEMENT_HASHMAP = Map.of();
+    private static final Map<String, String> REPLACEMENT_MAP = Map.of();
     @Unique
-    private static final List<Integer> ERROR_HASH_ARRAYLIST = new ArrayList<>();
+    private static final IntList ERRONEUS_SIGNATURE_HASHES = new IntArrayList();
 
     @WrapOperation(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, Operation<byte[]> decode) {
         try {
-            return decode.call(decoder, signature.replaceAll("[^A-Za-z0-9+/=]", ""));
+            return decode.call(decoder, signature);
         } catch (IllegalArgumentException e) {
-            if (Utils.isOnSkyblock()) {
-                if (REPLACEMENT_HASHMAP.containsKey(signature)) {
-                    return decode.call(decoder, REPLACEMENT_HASHMAP.get(signature));
-                }
-                int signatureHashCode = signature.hashCode();
-                if (!ERROR_HASH_ARRAYLIST.contains(signatureHashCode)) {
-                    ERROR_HASH_ARRAYLIST.add(signatureHashCode);
-                    LOGGER.warn("[Skyblocker Base64 Fixer] Failed to decode base64 string No.{}: {}", ERROR_HASH_ARRAYLIST.size() - 1, signature);
-                } else {
-                    LOGGER.warn("[Skyblocker Base64 Fixer] Failed to decode the base64 string No.{} again", ERROR_HASH_ARRAYLIST.indexOf(signatureHashCode));
+            try {
+                return decode.call(decoder, signature.replaceAll("[^A-Za-z0-9+/=]", ""));
+            } catch (IllegalArgumentException e2) {
+                if (Utils.isOnSkyblock()) {
+                    if (REPLACEMENT_MAP.containsKey(signature)) {
+                        return decode.call(decoder, REPLACEMENT_MAP.get(signature));
+                    }
+                    int signatureHashCode = signature.hashCode();
+                    if (!ERRONEUS_SIGNATURE_HASHES.contains(signatureHashCode)) {
+                    	ERRONEUS_SIGNATURE_HASHES.add(signatureHashCode);
+                        LOGGER.warn("[Skyblocker Base64 Fixer] Failed to decode base64 string No.{}: {}", ERRONEUS_SIGNATURE_HASHES.size() - 1, signature);
+                    } else {
+                        LOGGER.warn("[Skyblocker Base64 Fixer] Failed to decode the base64 string No.{} again", ERRONEUS_SIGNATURE_HASHES.indexOf(signatureHashCode));
+                    }
                 }
             }
             throw e;
-- 
cgit