Scan fallback resource managers as well as main resource manager
For buggy mods such as https://github.com/FoundationGames/EnhancedBlockEntities/issues/162
This commit is contained in:
parent
bb0c4fdf54
commit
d987c1227b
|
|
@ -8,6 +8,8 @@ import com.google.gson.*;
|
||||||
import com.mojang.datafixers.util.Pair;
|
import com.mojang.datafixers.util.Pair;
|
||||||
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
|
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
|
||||||
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
|
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
|
||||||
|
import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
|
||||||
|
import it.unimi.dsi.fastutil.objects.ReferenceSet;
|
||||||
import net.minecraft.client.renderer.block.model.BlockModel;
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
import net.minecraft.client.resources.model.*;
|
import net.minecraft.client.resources.model.*;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
|
@ -16,6 +18,7 @@ import net.minecraft.server.packs.PackType;
|
||||||
import net.minecraft.server.packs.resources.FallbackResourceManager;
|
import net.minecraft.server.packs.resources.FallbackResourceManager;
|
||||||
import net.minecraft.server.packs.resources.Resource;
|
import net.minecraft.server.packs.resources.Resource;
|
||||||
import net.minecraft.server.packs.resources.ResourceManager;
|
import net.minecraft.server.packs.resources.ResourceManager;
|
||||||
|
import net.minecraft.server.packs.resources.SimpleReloadableResourceManager;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.block.state.StateDefinition;
|
import net.minecraft.world.level.block.state.StateDefinition;
|
||||||
|
|
@ -83,6 +86,23 @@ public class ModelBakeryHelpers {
|
||||||
ModernFix.LOGGER.error("Error reading {} {}: {}", type, location, e);
|
ModernFix.LOGGER.error("Error reading {} {}: {}", type, location, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Some mods (cough, EBE) inject their custom resource pack into the namespaced resource managers, but not into the
|
||||||
|
* main list contained inside the parent resource manager, so we need to scan each of the namespaced managers as
|
||||||
|
* well.
|
||||||
|
*/
|
||||||
|
private static void checkFallbacks(SimpleReloadableResourceManager manager, List<PackResources> resourcePackList) {
|
||||||
|
ReferenceSet<PackResources> knownPacks = new ReferenceOpenHashSet<>(resourcePackList);
|
||||||
|
Map<String, FallbackResourceManager> namespacedMap = manager.namespacedPacks;
|
||||||
|
namespacedMap.values().stream().flatMap(FallbackResourceManager::listPacks).forEach(pack -> {
|
||||||
|
if(knownPacks.add(pack)) {
|
||||||
|
/* the pack was not previously known, add to our list */
|
||||||
|
ModernFix.LOGGER.debug("Injecting unlisted pack '{}': {}", pack.getName(), pack.getClass().getName());
|
||||||
|
resourcePackList.add(pack);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public static void gatherModelMaterials(ResourceManager manager, Predicate<PackResources> isTrustedPack,
|
public static void gatherModelMaterials(ResourceManager manager, Predicate<PackResources> isTrustedPack,
|
||||||
Set<Material> materialSet, Set<ResourceLocation> blockStateFiles,
|
Set<Material> materialSet, Set<ResourceLocation> blockStateFiles,
|
||||||
Set<ResourceLocation> modelFiles, UnbakedModel missingModel,
|
Set<ResourceLocation> modelFiles, UnbakedModel missingModel,
|
||||||
|
|
@ -95,6 +115,9 @@ public class ModelBakeryHelpers {
|
||||||
* scanning most packs a lot.
|
* scanning most packs a lot.
|
||||||
*/
|
*/
|
||||||
List<PackResources> allPackResources = new ArrayList<>(manager.listPacks().collect(Collectors.toList()));
|
List<PackResources> allPackResources = new ArrayList<>(manager.listPacks().collect(Collectors.toList()));
|
||||||
|
if(manager instanceof SimpleReloadableResourceManager) {
|
||||||
|
checkFallbacks((SimpleReloadableResourceManager)manager, allPackResources);
|
||||||
|
}
|
||||||
Collections.reverse(allPackResources);
|
Collections.reverse(allPackResources);
|
||||||
ObjectOpenHashSet<ResourceLocation> allAvailableModels = new ObjectOpenHashSet<>(), allAvailableStates = new ObjectOpenHashSet<>();
|
ObjectOpenHashSet<ResourceLocation> allAvailableModels = new ObjectOpenHashSet<>(), allAvailableStates = new ObjectOpenHashSet<>();
|
||||||
/* try to fix CME in some runtime packs by forcing generation */
|
/* try to fix CME in some runtime packs by forcing generation */
|
||||||
|
|
|
||||||
|
|
@ -28,4 +28,5 @@ accessible method net/minecraft/client/renderer/texture/TextureAtlasSprite <init
|
||||||
accessible field net/minecraft/client/renderer/block/model/BlockModel GSON Lcom/google/gson/Gson;
|
accessible field net/minecraft/client/renderer/block/model/BlockModel GSON Lcom/google/gson/Gson;
|
||||||
accessible field net/minecraft/server/MinecraftServer resources Lnet/minecraft/server/ServerResources;
|
accessible field net/minecraft/server/MinecraftServer resources Lnet/minecraft/server/ServerResources;
|
||||||
accessible field net/minecraft/client/renderer/RenderStateShard name Ljava/lang/String;
|
accessible field net/minecraft/client/renderer/RenderStateShard name Ljava/lang/String;
|
||||||
accessible method net/minecraft/client/gui/screens/Screen addButton (Lnet/minecraft/client/gui/components/AbstractWidget;)Lnet/minecraft/client/gui/components/AbstractWidget;
|
accessible method net/minecraft/client/gui/screens/Screen addButton (Lnet/minecraft/client/gui/components/AbstractWidget;)Lnet/minecraft/client/gui/components/AbstractWidget;
|
||||||
|
accessible field net/minecraft/server/packs/resources/SimpleReloadableResourceManager namespacedPacks Ljava/util/Map;
|
||||||
Loading…
Reference in New Issue
Block a user