From 189692a0903e22e2b0d29080a0fe5898d63abf4b Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 2 Jun 2023 04:22:00 -0400 Subject: [PATCH] getNPCTexture for ClientCache --- .../java/noppes/npcs/client/ClientCacheHandler.java | 10 ++++++++++ .../java/noppes/npcs/client/renderer/ImageData.java | 11 +++++++++++ .../npcs/client/renderer/RenderNPCInterface.java | 12 +++--------- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/main/java/noppes/npcs/client/ClientCacheHandler.java b/src/main/java/noppes/npcs/client/ClientCacheHandler.java index 51a0af9d8..7fe47db27 100644 --- a/src/main/java/noppes/npcs/client/ClientCacheHandler.java +++ b/src/main/java/noppes/npcs/client/ClientCacheHandler.java @@ -1,5 +1,6 @@ package noppes.npcs.client; +import net.minecraft.util.ResourceLocation; import noppes.npcs.client.renderer.ImageData; import noppes.npcs.util.CacheHashMap; @@ -14,4 +15,13 @@ public class ClientCacheHandler { return imageDataCache.get(directory).getObject(); } } + + public static ImageData getNPCTexture(String directory, boolean x64, ResourceLocation resource) { + synchronized (imageDataCache) { + if (!imageDataCache.containsKey(resource.getResourcePath())) { + imageDataCache.put(resource.getResourcePath(), new CacheHashMap.CachedObject<>(new ImageData(directory, x64, resource))); + } + return imageDataCache.get(resource.getResourcePath()).getObject(); + } + } } diff --git a/src/main/java/noppes/npcs/client/renderer/ImageData.java b/src/main/java/noppes/npcs/client/renderer/ImageData.java index 620279aad..b83c06cbb 100644 --- a/src/main/java/noppes/npcs/client/renderer/ImageData.java +++ b/src/main/java/noppes/npcs/client/renderer/ImageData.java @@ -1,8 +1,10 @@ package noppes.npcs.client.renderer; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.ITextureObject; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.SkinManager; import net.minecraft.util.ResourceLocation; import noppes.npcs.client.ImageDownloadAlt; import noppes.npcs.client.renderer.ImageBufferDownloadAlt; @@ -35,6 +37,15 @@ public class ImageData { } } + // For NPC Skins Only + public ImageData(String directory, boolean x64, ResourceLocation resource) { + this.location = resource; + this.isUrl = true; + TextureManager texturemanager = Minecraft.getMinecraft().getTextureManager(); + this.imageDownloadAlt = new ImageDownloadAlt(null, directory, SkinManager.field_152793_a, new ImageBufferDownloadAlt(x64)); + texturemanager.loadTexture(this.location, this.imageDownloadAlt); + } + public boolean imageLoaded() { if (!this.gotWidthHeight) { try { diff --git a/src/main/java/noppes/npcs/client/renderer/RenderNPCInterface.java b/src/main/java/noppes/npcs/client/renderer/RenderNPCInterface.java index cb6a66e94..469e54dce 100644 --- a/src/main/java/noppes/npcs/client/renderer/RenderNPCInterface.java +++ b/src/main/java/noppes/npcs/client/renderer/RenderNPCInterface.java @@ -20,6 +20,7 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.boss.BossStatus; import net.minecraft.util.ResourceLocation; import noppes.npcs.api.ISkinOverlay; +import noppes.npcs.client.ClientCacheHandler; import noppes.npcs.client.ImageDownloadAlt; import noppes.npcs.client.model.ModelMPM; import noppes.npcs.constants.EnumAnimation; @@ -343,10 +344,10 @@ public class RenderNPCInterface extends RenderLiving{ } if (npc.display.skinType == 2) { npc.textureLocation = new ResourceLocation("skins/" + sb.toString()); - loadSkin(null, npc.textureLocation, npc.display.url, false); + ClientCacheHandler.getNPCTexture(npc.display.url, false, npc.textureLocation); } else { npc.textureLocation = new ResourceLocation("skins64/" + sb.toString()); - loadSkin(null, npc.textureLocation, npc.display.url, true); + ClientCacheHandler.getNPCTexture(npc.display.url, true, npc.textureLocation); } LastTextureTick = 0; } catch(Exception ignored){} @@ -401,11 +402,4 @@ public class RenderNPCInterface extends RenderLiving{ } } - // 64x64 Skin is True - private void loadSkin(File file, ResourceLocation resource, String par1Str, boolean version){ - TextureManager texturemanager = Minecraft.getMinecraft().getTextureManager(); - ITextureObject object = new ImageDownloadAlt(file, par1Str, SkinManager.field_152793_a, new ImageBufferDownloadAlt(version)); - texturemanager.loadTexture(resource, object); - } - }