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 it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
|
||||
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.resources.model.*;
|
||||
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.Resource;
|
||||
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.state.BlockState;
|
||||
import net.minecraft.world.level.block.state.StateDefinition;
|
||||
|
|
@ -83,6 +86,23 @@ public class ModelBakeryHelpers {
|
|||
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,
|
||||
Set<Material> materialSet, Set<ResourceLocation> blockStateFiles,
|
||||
Set<ResourceLocation> modelFiles, UnbakedModel missingModel,
|
||||
|
|
@ -95,6 +115,9 @@ public class ModelBakeryHelpers {
|
|||
* scanning most packs a lot.
|
||||
*/
|
||||
List<PackResources> allPackResources = new ArrayList<>(manager.listPacks().collect(Collectors.toList()));
|
||||
if(manager instanceof SimpleReloadableResourceManager) {
|
||||
checkFallbacks((SimpleReloadableResourceManager)manager, allPackResources);
|
||||
}
|
||||
Collections.reverse(allPackResources);
|
||||
ObjectOpenHashSet<ResourceLocation> allAvailableModels = new ObjectOpenHashSet<>(), allAvailableStates = new ObjectOpenHashSet<>();
|
||||
/* 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/server/MinecraftServer resources Lnet/minecraft/server/ServerResources;
|
||||
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