From c6f805cfe297e37cda614452f3f7eb356374f344 Mon Sep 17 00:00:00 2001 From: Phoenix-Starlight Date: Thu, 19 Oct 2023 19:55:56 -0700 Subject: [PATCH] (Neo)forge impl, fabric cleanup --- .../MinecraftProfileTextureMixin.java | 1 - .../YggdrasilGsonDeserializerMixin.java | 3 +- .../SkinManagerMixin.java | 44 +++++++++++++++++++ 3 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/cache_profile_texture_url/SkinManagerMixin.java diff --git a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/cache_profile_texture_url/MinecraftProfileTextureMixin.java b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/cache_profile_texture_url/MinecraftProfileTextureMixin.java index dc275b11..e144d788 100644 --- a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/cache_profile_texture_url/MinecraftProfileTextureMixin.java +++ b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/cache_profile_texture_url/MinecraftProfileTextureMixin.java @@ -1,7 +1,6 @@ package org.embeddedt.modernfix.fabric.mixin.perf.cache_profile_texture_url; import com.mojang.authlib.minecraft.MinecraftProfileTexture; - import org.apache.commons.io.FilenameUtils; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.duck.ICachedProfileTexture; diff --git a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/cache_profile_texture_url/YggdrasilGsonDeserializerMixin.java b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/cache_profile_texture_url/YggdrasilGsonDeserializerMixin.java index f74f85b0..c5ce1abf 100644 --- a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/cache_profile_texture_url/YggdrasilGsonDeserializerMixin.java +++ b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/perf/cache_profile_texture_url/YggdrasilGsonDeserializerMixin.java @@ -2,7 +2,6 @@ package org.embeddedt.modernfix.fabric.mixin.perf.cache_profile_texture_url; import com.mojang.authlib.minecraft.MinecraftProfileTexture; import com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService; - import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; @@ -25,7 +24,7 @@ public abstract class YggdrasilGsonDeserializerMixin { target = "Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;getUrl()Ljava/lang/String;" ) ) - private String setCachedURL(MinecraftProfileTexture texture, Operation original) { + private String setCachedHash(MinecraftProfileTexture texture, Operation original) { // Because we don't have it set from deserialization String url = original.call(texture); ((ICachedProfileTexture)texture).setCachedHash(url); diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/cache_profile_texture_url/SkinManagerMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/cache_profile_texture_url/SkinManagerMixin.java new file mode 100644 index 00000000..5157a512 --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/cache_profile_texture_url/SkinManagerMixin.java @@ -0,0 +1,44 @@ +package org.embeddedt.modernfix.forge.mixin.perf.cache_profile_texture_url; + +import com.google.common.cache.CacheBuilder; +import com.mojang.authlib.minecraft.MinecraftProfileTexture; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.client.resources.SkinManager; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import java.util.concurrent.TimeUnit; +import java.util.Map; + +@Mixin(value=SkinManager.class) +@ClientOnlyMixin +public abstract class SkinManagerMixin { + /** + * @author Fury_Phoenix + * @reason No lib mixins on (neo)forge, yet + * **/ + @Unique + private final Map hashCache = CacheBuilder.newBuilder() + .expireAfterAccess(60, TimeUnit.SECONDS) + .concurrencyLevel(1) + // Excessive use of type hinting due to it assuming Object as the broadest correct type + .build() + .asMap(); + + @WrapOperation + ( + method = "registerTexture", + at = @At( + value = "INVOKE", + target = "Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;getHash()Ljava/lang/String;", + remap = false + ) + + ) + private String stashCachedHash(SkinManager manager, Operation original, MinecraftProfileTexture texture) { + return hashCache.computeIfAbsent(texture, k -> original.call()); + } +}