From 3edf26b1f53c92c0cd3acc287a3cc23b4be61a12 Mon Sep 17 00:00:00 2001 From: Sollace Date: Sat, 12 Oct 2019 12:09:34 +0200 Subject: [PATCH] Clear the villager base textures when reloading --- .../villager/AbstractVillagerRenderer.java | 6 +++--- .../render/entities/villager/PonyTextures.java | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/minelittlepony/client/render/entities/villager/AbstractVillagerRenderer.java b/src/main/java/com/minelittlepony/client/render/entities/villager/AbstractVillagerRenderer.java index 984ea3ec..2f1723dc 100644 --- a/src/main/java/com/minelittlepony/client/render/entities/villager/AbstractVillagerRenderer.java +++ b/src/main/java/com/minelittlepony/client/render/entities/villager/AbstractVillagerRenderer.java @@ -19,7 +19,7 @@ abstract class AbstractVillagerRenderer< T extends MobEntity & VillagerDataContainer, M extends ClientPonyModel & IUnicorn & ModelWithHat> extends RenderPonyMob.Caster { - private final ITextureSupplier professions; + private final ITextureSupplier baseTextures; private final String entityType; @@ -27,7 +27,7 @@ abstract class AbstractVillagerRenderer< super(manager, model); entityType = type; - professions = new PonyTextures<>(formatter); + baseTextures = new PonyTextures<>(formatter); addFeature(new ClothingLayer<>(this, entityType)); } @@ -63,6 +63,6 @@ abstract class AbstractVillagerRenderer< @Override public Identifier findTexture(T villager) { - return professions.supplyTexture(villager); + return baseTextures.supplyTexture(villager); } } diff --git a/src/main/java/com/minelittlepony/client/render/entities/villager/PonyTextures.java b/src/main/java/com/minelittlepony/client/render/entities/villager/PonyTextures.java index c8dde2ed..572e5c76 100644 --- a/src/main/java/com/minelittlepony/client/render/entities/villager/PonyTextures.java +++ b/src/main/java/com/minelittlepony/client/render/entities/villager/PonyTextures.java @@ -2,6 +2,9 @@ package com.minelittlepony.client.render.entities.villager; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.LivingEntity; +import net.minecraft.resource.ReloadableResourceManager; +import net.minecraft.resource.ResourceManager; +import net.minecraft.resource.SynchronousResourceReloadListener; import net.minecraft.util.Identifier; import net.minecraft.village.VillagerData; import net.minecraft.village.VillagerDataContainer; @@ -18,7 +21,7 @@ import java.util.Optional; /** * Cached pool of villager textures. */ -public class PonyTextures implements ITextureSupplier { +public class PonyTextures implements ITextureSupplier, SynchronousResourceReloadListener { private final ITextureSupplier formatter; @@ -29,6 +32,8 @@ public class PonyTextures implem private final Identifier egg; private final Identifier egg2; + private final ReloadableResourceManager resourceManager; + /** * Creates a new profession cache * @@ -37,10 +42,18 @@ public class PonyTextures implem * @param fallback The default if any generated textures fail to load. This is stored in place of failing textures. */ public PonyTextures(ITextureSupplier formatter) { + this.resourceManager = (ReloadableResourceManager)MinecraftClient.getInstance().getResourceManager(); this.formatter = formatter; this.fallback = formatter.supplyTexture("villager_pony"); this.egg = formatter.supplyTexture("silly_pony"); this.egg2 = formatter.supplyTexture("tiny_silly_pony"); + + resourceManager.registerListener(this); + } + + @Override + public void apply(ResourceManager manager) { + cache.clear(); } @Override @@ -82,7 +95,7 @@ public class PonyTextures implem } protected Optional verifyTexture(Identifier texture) { - if (!MinecraftClient.getInstance().getResourceManager().containsResource(texture)) { + if (!resourceManager.containsResource(texture)) { MineLittlePony.logger.warn("Villager texture `" + texture + "` was not found."); return Optional.empty(); }