diff options
author | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2023-09-16 12:34:29 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-16 12:34:29 -0400 |
commit | 62d9cb4ecc075cb2de945b2aa2c5767f4fa66cf4 (patch) | |
tree | 0052aa9de7741b0e3b4e62f19e809ccaf22c0afa | |
parent | 080c342d5c4b91299679cdd77aeb998d4aa40d3c (diff) | |
download | Skyblocker-62d9cb4ecc075cb2de945b2aa2c5767f4fa66cf4.tar.gz Skyblocker-62d9cb4ecc075cb2de945b2aa2c5767f4fa66cf4.tar.bz2 Skyblocker-62d9cb4ecc075cb2de945b2aa2c5767f4fa66cf4.zip |
Optimize Base64 Replacer (#311)
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java | 35 |
1 files changed, 20 insertions, 15 deletions
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; |