aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2023-09-16 12:34:29 -0400
committerGitHub <noreply@github.com>2023-09-16 12:34:29 -0400
commit62d9cb4ecc075cb2de945b2aa2c5767f4fa66cf4 (patch)
tree0052aa9de7741b0e3b4e62f19e809ccaf22c0afa
parent080c342d5c4b91299679cdd77aeb998d4aa40d3c (diff)
downloadSkyblocker-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.java35
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;