diff options
author | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2024-01-10 17:24:53 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-10 17:24:53 -0500 |
commit | de96684315a10bd224069c253bbefa408659dc3c (patch) | |
tree | fd52f7b7e6c97709441a64b786ef612f11b9b36a /src/main/java/de/hysky/skyblocker/mixin | |
parent | ffab9576c0f7534195f276b677bd5bdeac5e8a3a (diff) | |
download | Skyblocker-de96684315a10bd224069c253bbefa408659dc3c.tar.gz Skyblocker-de96684315a10bd224069c253bbefa408659dc3c.tar.bz2 Skyblocker-de96684315a10bd224069c253bbefa408659dc3c.zip |
Fix Skin Transparency applying to player skins (#477)
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/mixin')
-rw-r--r-- | src/main/java/de/hysky/skyblocker/mixin/PlayerSkinTextureMixin.java | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixin/PlayerSkinTextureMixin.java b/src/main/java/de/hysky/skyblocker/mixin/PlayerSkinTextureMixin.java index ea771c1e..1065bab0 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/PlayerSkinTextureMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/PlayerSkinTextureMixin.java @@ -1,19 +1,39 @@ package de.hysky.skyblocker.mixin; +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 org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.llamalad7.mixinextras.injector.WrapWithCondition; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.skyblock.item.PlayerHeadHashCache; import de.hysky.skyblocker.utils.Utils; import dev.cbyrne.betterinject.annotations.Inject; +import net.minecraft.client.texture.NativeImage; import net.minecraft.client.texture.PlayerSkinTexture; @Mixin(PlayerSkinTexture.class) public class PlayerSkinTextureMixin { + @Shadow + @Final + private String url; + + @Unique + private boolean isSkyblockSkinTexture; + + @Inject(method = "remapTexture", at = @At("HEAD")) + private void skyblocker$determineSkinSource() { + if (Utils.isOnSkyblock()) { + int skinHash = PlayerHeadHashCache.getSkinHash(this.url).hashCode(); + this.isSkyblockSkinTexture = PlayerHeadHashCache.contains(skinHash); + } + } - @Inject(method = "stripAlpha", at = @At("HEAD"), cancellable = true) - private static void skyblocker$dontStripAlphaValues(CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.dontStripSkinAlphaValues) ci.cancel(); + @WrapWithCondition(method = "remapTexture", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/texture/PlayerSkinTexture;stripAlpha(Lnet/minecraft/client/texture/NativeImage;IIII)V")) + private boolean skyblocker$dontStripAlphaValues(NativeImage image, int x1, int y1, int x2, int y2) { + return !(SkyblockerConfigManager.get().general.dontStripSkinAlphaValues && this.isSkyblockSkinTexture); } } |