Merge remote-tracking branch 'origin/1.16' into 1.18

This commit is contained in:
embeddedt 2023-07-09 13:31:01 -04:00
commit 2d12c6e282
No known key found for this signature in database
GPG Key ID: A69433EC199B5613
2 changed files with 25 additions and 1 deletions

View File

@ -8,12 +8,15 @@ 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;
import net.minecraft.server.packs.PackResources;
import net.minecraft.server.packs.PackType;
import net.minecraft.server.packs.resources.FallbackResourceManager;
import net.minecraft.server.packs.resources.MultiPackResourceManager;
import net.minecraft.server.packs.resources.Resource;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.world.level.block.Block;
@ -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(MultiPackResourceManager manager, List<PackResources> resourcePackList) {
ReferenceSet<PackResources> knownPacks = new ReferenceOpenHashSet<>(resourcePackList);
Map<String, FallbackResourceManager> namespacedMap = manager.namespacedManagers;
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 MultiPackResourceManager) {
checkFallbacks((MultiPackResourceManager)manager, allPackResources);
}
Collections.reverse(allPackResources);
ObjectOpenHashSet<ResourceLocation> allAvailableModels = new ObjectOpenHashSet<>(), allAvailableStates = new ObjectOpenHashSet<>();
/* try to fix CME in some runtime packs by forcing generation */

View File

@ -29,4 +29,5 @@ accessible class net/minecraft/world/level/chunk/PalettedContainer$Data
accessible field net/minecraft/server/MinecraftServer resources Lnet/minecraft/server/MinecraftServer$ReloadableResources;
accessible class net/minecraft/server/MinecraftServer$ReloadableResources
accessible method net/minecraft/client/gui/screens/Screen addRenderableWidget (Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener;
accessible field net/minecraft/client/KeyMapping ALL Ljava/util/Map;
accessible field net/minecraft/client/KeyMapping ALL Ljava/util/Map;
accessible field net/minecraft/server/packs/resources/MultiPackResourceManager namespacedManagers Ljava/util/Map;