diff --git a/gradle.properties b/gradle.properties index d98a7d3c..ebeff326 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs=-Xmx2G # Mod properties mod_id=modernfix -version=5.27.0-build.1 +version=5.27.5-build.1 # Minecraft/Fabric minecraft_version=26.1.2 diff --git a/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinClientItemInfoLoader.java b/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinClientItemInfoLoader.java deleted file mode 100644 index 1c441184..00000000 --- a/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinClientItemInfoLoader.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.dynamic_resources; - -import com.llamalad7.mixinextras.sugar.Local; -import com.mojang.serialization.JsonOps; -import net.minecraft.client.renderer.item.ClientItem; -import net.minecraft.client.resources.model.ClientItemInfoLoader; -import net.minecraft.core.RegistryAccess; -import net.minecraft.resources.FileToIdConverter; -import net.minecraft.resources.Identifier; -import net.minecraft.server.packs.resources.Resource; -import net.minecraft.util.PlaceholderLookupProvider; -import net.minecraft.util.StrictJsonParser; -import org.embeddedt.modernfix.ModernFix; -import org.embeddedt.modernfix.annotation.ClientOnlyMixin; -import org.embeddedt.modernfix.dynresources.DynamicModelSystem; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; - -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CompletionStage; -import java.util.function.Function; - -@Mixin(ClientItemInfoLoader.class) -@ClientOnlyMixin -public abstract class MixinClientItemInfoLoader { - @Unique - private static final FileToIdConverter MFIX$ITEM_LISTER = FileToIdConverter.json("items"); - - @Unique - private static volatile boolean MFIX$DYNAMIC_CLIENT_ITEMS_ENABLED = true; - - @Unique - private static volatile boolean MFIX$DYNAMIC_CLIENT_ITEMS_FAILURE_LOGGED = false; - - @Unique - private static ClientItem mfix$loadSingleClientItemInfo(Identifier resourceFileId, Resource resource, RegistryAccess.Frozen staticRegistries) { - Identifier itemId = MFIX$ITEM_LISTER.fileToId(resourceFileId); - try (var reader = resource.openAsReader()) { - PlaceholderLookupProvider placeholderLookupProvider = new PlaceholderLookupProvider(staticRegistries); - var context = placeholderLookupProvider.createSerializationContext(JsonOps.INSTANCE); - return ClientItem.CODEC.parse(context, StrictJsonParser.parse(reader)) - .ifError(error -> ModernFix.LOGGER.error("Couldn't parse item model '{}' from pack '{}': {}", itemId, resource.sourcePackId(), error.message())) - .result() - .map(clientItem -> placeholderLookupProvider.hasRegisteredPlaceholders() ? clientItem.withRegistrySwapper(placeholderLookupProvider.createSwapper()) : clientItem) - .orElse(null); - } catch (Exception e) { - ModernFix.LOGGER.error("Failed to open item model {} from pack '{}'", resourceFileId, resource.sourcePackId(), e); - return null; - } - } - - /** - * @author embeddedt - * @reason Load client item infos dynamically instead of all at once. - */ - @ModifyArg(method = "scheduleLoad", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/CompletableFuture;thenCompose(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;")) - private static Function, ? extends CompletionStage> skipAOTClientItemLoad( - Function, ? extends CompletionStage> original, - @Local(ordinal = 0) RegistryAccess.Frozen staticRegistries) { - if (!MFIX$DYNAMIC_CLIENT_ITEMS_ENABLED) { - return original; - } - return resourceMap -> CompletableFuture.completedFuture(DynamicModelSystem.createDynamicClientInfos(resourceMap, (resourceFileId, resource) -> { - if (!MFIX$DYNAMIC_CLIENT_ITEMS_ENABLED) { - return null; - } - try { - return mfix$loadSingleClientItemInfo(resourceFileId, resource, staticRegistries); - } catch (RuntimeException e) { - MFIX$DYNAMIC_CLIENT_ITEMS_ENABLED = false; - if (!MFIX$DYNAMIC_CLIENT_ITEMS_FAILURE_LOGGED) { - MFIX$DYNAMIC_CLIENT_ITEMS_FAILURE_LOGGED = true; - ModernFix.LOGGER.warn("Disabling dynamic client item info loading due to runtime failure", e); - } - return null; - } - })); - } -} \ No newline at end of file diff --git a/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java b/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java index 9138469d..bbb9ae2e 100644 --- a/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java +++ b/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java @@ -13,7 +13,6 @@ import it.unimi.dsi.fastutil.objects.ReferenceSets; import net.fabricmc.fabric.impl.client.model.loading.UnbakedModelDeserializerRegistry; import net.minecraft.client.color.block.BlockColors; -import net.minecraft.client.renderer.item.ClientItem; import net.minecraft.client.renderer.block.dispatch.BlockStateModel; import net.minecraft.client.resources.model.cuboid.ItemModelGenerator; import net.minecraft.client.resources.model.BlockStateModelLoader; @@ -33,7 +32,6 @@ import org.embeddedt.modernfix.common.mixin.perf.dynamic_resources.BlockStateDefinitionsAccessor; import org.embeddedt.modernfix.common.mixin.perf.dynamic_resources.IdMapperAccessor; import org.embeddedt.modernfix.common.mixin.perf.dynamic_resources.ModelDiscoveryAccessor; -import org.jetbrains.annotations.Nullable; import java.io.Reader; import java.util.AbstractSet; @@ -48,7 +46,6 @@ public class DynamicModelSystem { private static final FileToIdConverter MODEL_LISTER = FileToIdConverter.json("models"); private static final FileToIdConverter BLOCKSTATE_LISTER = FileToIdConverter.json("blockstates"); - private static final FileToIdConverter ITEM_LISTER = FileToIdConverter.json("items"); public static final boolean DEBUG_DYNAMIC_MODEL_LOADING = Boolean.getBoolean("modernfix.debugDynamicModelLoading"); @@ -107,35 +104,6 @@ public BlockStateModelLoader.LoadedModels load(Identifier key) throws Exception })); } - public interface SingleClientItemEntryLoader { - @Nullable ClientItem loadEntry(Identifier resourceFileId, Resource resource); - } - - public static ClientItemInfoLoader.LoadedClientInfos createDynamicClientInfos(Map resourceMap, SingleClientItemEntryLoader entryLoader) { - Set itemIdSet = resourceMap.keySet().stream().map(ITEM_LISTER::fileToId).collect(Collectors.toUnmodifiableSet()); - return new ClientItemInfoLoader.LoadedClientInfos(Maps.asMap(itemIdSet, key -> { - if (key == null) { - return null; - } - - Identifier fileId = ITEM_LISTER.idToFile(key); - Resource resource = resourceMap.get(fileId); - if (resource == null) { - return null; - } - - try { - if (DEBUG_DYNAMIC_MODEL_LOADING) { - ModernFix.LOGGER.info("Loading client item info {}", key); - } - return entryLoader.loadEntry(fileId, resource); - } catch (RuntimeException e) { - ModernFix.LOGGER.warn("Failed to build dynamic client item info for {}", key, e); - return null; - } - })); - } - public record DynamicResolver(Map inputModels, BlockStateModelLoader.LoadedModels loadedModels, ClientItemInfoLoader.LoadedClientInfos loadedClientInfos) { diff --git a/src/main/resources/modernfix-common.mixins.json b/src/main/resources/modernfix-common.mixins.json index d321531a..4c49d779 100644 --- a/src/main/resources/modernfix-common.mixins.json +++ b/src/main/resources/modernfix-common.mixins.json @@ -101,7 +101,6 @@ "perf.dynamic_resources.IdMapperAccessor", "perf.dynamic_resources.MixinBlockState", "perf.dynamic_resources.MixinBlockStateModelLoader", - "perf.dynamic_resources.MixinClientItemInfoLoader", "perf.dynamic_resources.MixinModelBakery", "perf.dynamic_resources.MixinModelManager", "perf.dynamic_resources.ModelDiscoveryAccessor",