diff options
author | Kevin <92656833+kevinthegreat1@users.noreply.github.com> | 2023-09-10 15:52:12 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-10 15:52:12 -0400 |
commit | 5069151f7431b9bf6b4710e8aa4ce03a1821f312 (patch) | |
tree | 87a344054eaf05047adc668594c572cb0478a425 /src/main/java/me | |
parent | 447a435916a1f868ce233c9e32d91ed4a8919021 (diff) | |
parent | c0754cb68d9db3cc863f7c39559eca0b8d57b141 (diff) | |
download | Skyblocker-5069151f7431b9bf6b4710e8aa4ce03a1821f312.tar.gz Skyblocker-5069151f7431b9bf6b4710e8aa4ce03a1821f312.tar.bz2 Skyblocker-5069151f7431b9bf6b4710e8aa4ce03a1821f312.zip |
Merge pull request #283 from Julienraptor01/Skin-wrong-base64-fix
Add base64 fixer
Diffstat (limited to 'src/main/java/me')
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java | 49 |
1 files changed, 49 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..3416e282 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java @@ -0,0 +1,49 @@ +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 me.xmrvizzy.skyblocker.utils.Utils; +import org.slf4j.Logger; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +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) +public class YggdrasilServicesKeyInfoMixin { + @Shadow + @Final + private static Logger LOGGER; + @Unique + private static final Map<String, String> REPLACEMENT_HASHMAP = Map.of(); + @Unique + private static final List<Integer> ERROR_HASH_ARRAYLIST = new ArrayList<>(); + + @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+/=]", "")); + } 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)); + } + } + throw e; + } + } +}
\ No newline at end of file |