From 5851b1b46f2cce40d410086bfff69e530bd03e48 Mon Sep 17 00:00:00 2001 From: Matthew Messinger Date: Tue, 4 Sep 2018 19:00:35 -0400 Subject: [PATCH] Don't clear the skins when reloading the textures. All that really needs to be done is reparse. --- .../voxelmodpack/hdskins/HDSkinManager.java | 18 +++++++++--------- .../hdskins/mixin/MixinNetworkPlayerInfo.java | 4 ---- .../java/com/minelittlepony/PonyConfig.java | 2 +- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java b/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java index 2515bc7e..2940c05c 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java @@ -26,7 +26,6 @@ import com.voxelmodpack.hdskins.skins.ServerType; import com.voxelmodpack.hdskins.skins.SkinServer; import com.voxelmodpack.hdskins.skins.ValhallaSkinServer; import com.voxelmodpack.hdskins.util.CallableFutures; -import com.voxelmodpack.hdskins.util.Flow; import com.voxelmodpack.hdskins.util.PlayerUtil; import com.voxelmodpack.hdskins.util.ProfileTextureUtil; import net.minecraft.client.Minecraft; @@ -39,7 +38,6 @@ import net.minecraft.client.resources.IResourceManager; import net.minecraft.client.resources.IResourceManagerReloadListener; import net.minecraft.client.resources.SkinManager; import net.minecraft.util.ResourceLocation; - import org.apache.commons.io.FileUtils; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; @@ -65,7 +63,6 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.stream.Stream; - import javax.annotation.Nullable; public final class HDSkinManager implements IResourceManagerReloadListener { @@ -243,8 +240,8 @@ public final class HDSkinManager implements IResourceManagerReloadListener { FileUtils.deleteQuietly(new File(LiteLoader.getAssetsDirectory(), "hd")); skins.invalidateAll(); - reloadSkins(); - + parseSkins(); + clearListeners.removeIf(this::onSkinCacheCleared); } private boolean onSkinCacheCleared(ISkinCacheClearListener callback) { @@ -275,7 +272,7 @@ public final class HDSkinManager implements IResourceManagerReloadListener { } } - public void reloadSkins() { + public void parseSkins() { Minecraft mc = Minecraft.getMinecraft(); Streams.concat(getNPCs(mc), getPlayers(mc)) @@ -288,11 +285,10 @@ public final class HDSkinManager implements IResourceManagerReloadListener { // and clear skins .forEach(INetworkPlayerInfo::reloadTextures); - clearListeners.removeIf(this::onSkinCacheCleared); } private Stream getNPCs(Minecraft mc) { - return Flow.from(mc.world) + return nullableStream(mc.world) .flatMap(w -> w.playerEntities.stream()) .filter(AbstractClientPlayer.class::isInstance) .map(AbstractClientPlayer.class::cast) @@ -300,10 +296,14 @@ public final class HDSkinManager implements IResourceManagerReloadListener { } private Stream getPlayers(Minecraft mc) { - return Flow.from(mc.getConnection()) + return nullableStream(mc.getConnection()) .flatMap(a -> a.getPlayerInfoMap().stream()); } + private static Stream nullableStream(@Nullable T t) { + return t == null ? Stream.empty() : Stream.of(t); + } + public void parseSkin(GameProfile profile, Type type, ResourceLocation resource, MinecraftProfileTexture texture) { CallableFutures.scheduleTask(() -> { diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinNetworkPlayerInfo.java b/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinNetworkPlayerInfo.java index 69221eea..7d366b4c 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinNetworkPlayerInfo.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinNetworkPlayerInfo.java @@ -84,10 +84,6 @@ public abstract class MixinNetworkPlayerInfo implements INetworkPlayerInfo { @Override public void reloadTextures() { synchronized (this) { - this.playerTextures.clear(); - this.customProfiles.clear(); - this.customTextures.clear(); - this.skinType = null; this.playerTexturesLoaded = false; if (this.gameProfile.getId().equals(Minecraft.getMinecraft().getSession().getProfile().getId())) { // local client skin doesn't have a signature. diff --git a/src/main/java/com/minelittlepony/PonyConfig.java b/src/main/java/com/minelittlepony/PonyConfig.java index 89e257c1..bff4f978 100644 --- a/src/main/java/com/minelittlepony/PonyConfig.java +++ b/src/main/java/com/minelittlepony/PonyConfig.java @@ -68,7 +68,7 @@ public class PonyConfig extends SensibleConfig implements Exposable { // only trigger reloads when the value actually changes if (ponylevel != this.ponylevel) { this.ponylevel = ponylevel; - HDSkinManager.INSTANCE.reloadSkins(); + HDSkinManager.INSTANCE.parseSkins(); } }